Prompt工程化:从单次提示到可维护的Prompt管理系统
从"调prompt"到"工程化prompt" 大多数开发者的Prompt工作流起初是这样的:在Playground里反复调试,找到效果好的版本后复制粘贴到代码里。这种方式在原型阶段够用,但一旦进入生产环境,就会暴露一系列问题: prompt散落在代码各处,修改困难 无法追踪历史变更 无法对比不同版本的效果 无法在不同模型间迁移 Prompt工程化就是解决这些问题的系统性方法论。 Prompt模板引擎 模板分离原则 将prompt从代码中剥离,使用模板引擎管理。核心思路与后端的view模板一致: from jinja2 import Environment, FileSystemLoader import yaml import json class PromptTemplate: def __init__(self, template_dir: str): self.env = Environment( loader=FileSystemLoader(template_dir), trim_blocks=True, lstrip_blocks=True ) self.env.filters['to_json_schema'] = lambda x: json.dumps(x, ensure_ascii=False) def render(self, template_name: str, **kwargs) -> str: template = self.env.get_template(template_name) return template.render(**kwargs) # 模板文件: templates/summarizer.jinja2 # 你是一个专业摘要生成器。 # 输入文档:{{ document }} # 要求:生成{{ max_words }}字以内的摘要 # 输出格式:{{ output_format | to_json_schema }} 分层模板架构 templates/ ├── system/ # 系统级prompt │ ├── base_assistant.jinja2 │ └── safety_rules.jinja2 ├── tasks/ # 任务级prompt │ ├── summarizer.jinja2 │ ├── extractor.jinja2 │ └── classifier.jinja2 └── components/ # 可复用片段 ├── few_shot.jinja2 ├── output_format.jinja2 └── context_block.jinja2 通过include实现模块化组合: ...