pyfilesystem jinja2 loader 实现prompt-poet 提示词模板管理
效果实际与fsspec jinaj2 laoder类似,就是一个集成测试
pyfilesystem loader 实现
- pyfs_loader.py
import fs
import jinja2
from jinja2.loaders import BaseLoader
class PyFilesystemLoader(BaseLoader):
def __init__(self, fs_url,**kwargs):
self.fs = fs.open_fs(fs_url)
self.search_path = kwargs.get("search_path", None)
def get_source(self, environment, template):
path = template
if self.search_path:
path = self.search_path + "/" + template
print("path with search_path",path)
if not self.fs.exists(path):
raise jinja2.TemplateNotFound(template)
with self.fs.open(path, 'r') as f:
source = f.read()
return source, path, lambda: self.fs.getinfo(path).modified
def list_templates(self):
return [f.path for f in self.fs.walk.files(self.search_path if self.search_path else "/")]
- 业务使用
目前没发布pip 仓库可以通过直接git 模式安装
pip install git+https://github.com/rongfengliang/jinja2_pyfilesystem_loader
因为目前prompt-poet 暂时不支持自定义loader ,临时解决方法就是自己修改template_registry.py 中的_load_template 方法
关于loader 部分修改如下
from pyfs_loader import PyFilesystemLoader
loader = PyFilesystemLoader("osfs://",search_path=template_dir)
env = j2.Environment(loader=loader)
目录结构
集成prompt-poet
from prompt_poet import Prompt
def mydemo():
return "demo"
template_data = {
"character_name": "Character Assistant",
"username": "dalong",
"mydemo": mydemo
}
prompt = Prompt(
template_path="prompt/demo/app.yaml.j2",
template_data=template_data
)
print(prompt.messages)
效果
说明
实现上比较简单,就是利用了pyfilesystem的能力,可以实现比较灵活的处理,目前来说简单场景直接使用官方的本地基本就够用 了,其他模式的loader 可以实现灵活的存储以及集成使用,期待官方支持自定义loader
参考资料
https://github.com/PyFilesystem/pyfilesystem2
https://docs.pyfilesystem.org/en/latest/concepts.html
https://github.com/character-ai/prompt-poet
https://github.com/rongfengliang/jinja2_pyfilesystem_loader
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2023-10-18 通过npm overrides 解决cube.js oracle driver 依赖oracle 版本问题
2023-10-18 keydb 6.3.3 modjs docker 镜像
2023-10-18 cube.js oracle 新版本npm 包支持
2023-10-18 pino 一个很不错的node log 框架
2022-10-18 guava servicemanager 集成guice 使用
2022-10-18 how-dbt-fails
2022-10-18 几个类似dbt 的工具