想了解企业级 AI 应用如何保证生成内容的一致性和质量?这份对 Dify 项目
core/llm_generator/prompts.py的深度解读绝对值得收藏!
🔍 核心亮点:
- 11 种精心设计的 LLM 提示模板(对话标题生成、代码生成、问题预测等)
- 参数化模板设计,支持动态内容注入
- 明确的指令约束,确保 AI 输出的可靠性
- 多语言支持,自动适配用户输入
- 分层架构,包含基础模板和元模板
💼 应用场景全覆盖:
- 智能对话系统(标题生成、后续问题预测)
- 代码自动化(Python/JavaScript 代码生成)
- 内容生成(问答对、文档摘要)
- 工作流自动化(规则配置、参数提取)
- 数据管理(JSON Schema 生成、结构化输出)
📚 技术价值: 这份文档不仅分析了模板的功能和设计要点,还提供了代码优化建议(模板组织、加载机制、验证机制),是 AI 工程师和开发者学习提示工程的绝佳参考!
core/llm_generator/prompts.py 文件解读
1. 文件概述
core/llm_generator/prompts.py是一个集中管理LLM(大语言模型)提示模板的Python文件。该文件定义了一系列精心设计的提示字符串常量,用于指导LLM完成各种特定任务,如生成对话标题、代码生成、问题预测、问答对生成等。
主要功能:
- 提供标准化的LLM提示模板
- 支持参数化模板替换
- 定义明确的任务指令和输出格式
- 确保LLM生成结果的一致性和可靠性
2. 核心提示模板分析
2.1 对话标题生成 (CONVERSATION_TITLE_PROMPT)
功能:根据用户输入自动生成简洁的对话标题。
设计要点:
- 自动检测输入语言(支持多语言)
- 要求将标题分解为"意图"和"主题"两部分
- 输出JSON格式,包含语言类型、推理过程和最终标题
- 对问题类型的输入可添加表情符号
应用场景:对话系统中自动为聊天会话生成可读性强的标题。
2.2 Python代码生成器 (PYTHON_CODE_GENERATOR_PROMPT_TEMPLATE)
功能:根据指令生成符合特定规范的Python代码。
设计要点:
- 参数化模板:
{{INSTRUCTION}}(任务指令)、{{CODE_LANGUAGE}}(代码语言) - 强制要求定义名为
main的函数 - 函数必须返回字典格式,至少包含一个键值对
- 严格限制可使用的Python库列表
- 提供代码示例和输出格式要求
应用场景:自动代码生成、API集成、数据处理脚本生成等。
2.3 JavaScript代码生成器 (JAVASCRIPT_CODE_GENERATOR_PROMPT_TEMPLATE)
功能:根据指令生成符合特定规范的JavaScript代码。
设计要点:
- 与Python代码生成器类似的参数化结构
- 要求使用JSDoc注释进行类型标注
- 返回对象必须使用
{result: ...}格式 - 提供详细的代码示例
应用场景:前端脚本生成、Node.js应用开发、浏览器扩展开发等。
2.4 后续问题预测 (SUGGESTED_QUESTIONS_AFTER_ANSWER_INSTRUCTION_PROMPT)
功能:根据助手的最新回复,预测用户最可能提出的三个后续问题。
设计要点:
- 问题长度限制(20个字符以内)
- 输出语言与助手回复保持一致
- 必须返回JSON数组格式
应用场景:智能客服系统、对话机器人,提升用户交互体验。
2.5 问答对生成 (GENERATOR_QA_PROMPT)
功能:从长文本中提取关键信息,生成问答对。
设计要点:
- 四步思考流程:理解内容→提取关键信息→组合信息→生成问答
- 问题要求清晰详细,答案要求完整准确
- 支持多语言,由
{language}参数控制 - 特定的输出格式要求
应用场景:知识库构建、文档摘要、教育内容生成等。
2.6 工作流规则配置提示生成 (WORKFLOW_RULE_CONFIG_PROMPT_GENERATE_TEMPLATE)
功能:根据任务描述生成高质量的提示模板。
设计要点:
- 参数化:
{{TASK_DESCRIPTION}} - 生成的提示模板必须包含清晰的指令(
<instruction>标签) - 要求提供三个输入输出示例
- 输出格式为XML,必须以
<instruction>开始
应用场景:工作流自动化、规则引擎配置、智能助手定制等。
2.7 规则配置提示生成 (RULE_CONFIG_PROMPT_GENERATE_TEMPLATE)
功能:为特定任务生成结构化的提示模板。
设计要点:
- 参数化:
{{TASK_DESCRIPTION}} - 要求使用
{{VARIABLE}}格式定义变量 - 生成的模板必须包含指令、示例和其他相关部分
- 输出格式为XML
应用场景:聊天机器人配置、自动化流程设计、规则系统开发等。
2.8 规则配置参数提取 (RULE_CONFIG_PARAMETER_GENERATE_TEMPLATE)
功能:从文本中提取由双大括号包围的变量名。
设计要点:
- 四步提取流程:理解输入→提取参数→结构化→验证格式
- 变量名必须符合特定命名规范(数字、字母、下划线)
- 输出为JSON数组格式
- 无有效变量时返回空数组
应用场景:模板解析、参数验证、配置管理等。
2.9 规则配置开场白生成 (RULE_CONFIG_STATEMENT_GENERATE_TEMPLATE)
功能:根据任务描述生成聊天机器人的开场白。
设计要点:
- 参数化:
{{TASK_DESCRIPTION}}、{{INPUT_TEXT}} - 三步生成流程:识别目的→推断语气→创建开场白
- 开场白必须友好、清晰地说明机器人功能
- 支持多语言,与用户输入保持一致
应用场景:聊天机器人初始化、客户服务系统、智能助手欢迎语等。
2.10 JSON Schema生成 (SYSTEM_STRUCTURED_OUTPUT_GENERATE)
功能:将用户描述转换为标准的JSON Schema定义。
设计要点:
- 八步生成流程:分析需求→识别属性→确定类型→设置必填项→生成完整Schema→添加约束→格式化输出
- 提供四个详细示例,涵盖不同复杂度的Schema
- 输出必须是纯JSON,不包含任何额外内容
应用场景:API设计、数据验证、表单生成、配置管理等。
2.11 结构化输出提示 (STRUCTURED_OUTPUT_PROMPT)
功能:指导LLM根据提供的JSON Schema生成符合格式要求的输出。
设计要点:
- 参数化:
{{schema}}(JSON Schema定义) - 严格的输出约束:必须是JSON格式,布尔值和数字必须使用字符串和数字类型
- 提供示例说明输入输出格式
应用场景:数据结构化、API响应生成、表单数据处理等。
3. 技术设计特点
3.1 参数化模板设计
文件中大量使用了参数化模板设计,通过{{VARIABLE_NAME}}或{variable}的格式定义可替换参数。这种设计具有以下优势:
- 提高模板的复用性
- 支持动态内容注入
- 便于维护和更新
- 增强模板的灵活性
3.2 明确的指令与约束
每个提示模板都包含了明确的任务指令和约束条件:
- 详细的步骤指导
- 严格的输出格式要求
- 明确的内容限制
- 语言和风格要求
这种设计确保了LLM生成结果的一致性和可靠性,减少了错误和不一致的输出。
3.3 多语言支持
多个模板(如对话标题生成、问答对生成、开场白生成)都支持多语言处理,能够根据用户输入自动调整输出语言。
3.4 分层设计
模板设计采用了分层结构:
- 基础模板:直接用于指导LLM完成特定任务
- 元模板:用于生成其他提示模板的模板(如WORKFLOW_RULE_CONFIG_PROMPT_GENERATE_TEMPLATE)
这种分层设计提高了系统的可扩展性和维护性。
4. 应用场景与价值
该文件定义的提示模板广泛应用于以下场景:
- 智能对话系统:对话标题生成、后续问题预测、开场白生成
- 代码自动化:Python/JavaScript代码生成
- 内容生成:问答对生成、文档摘要
- 工作流自动化:规则配置提示生成、参数提取
- 数据管理:JSON Schema生成、结构化输出
这些模板为系统提供了标准化的LLM交互接口,确保了AI生成内容的质量和一致性,同时提高了开发效率和系统可维护性。
5. 代码优化建议
5.1 模板组织优化
问题:当前所有模板都集中在一个文件中,随着模板数量增加,可能会导致文件过大,难以维护。
建议:
python
# 将模板按功能分类到不同的子模块中
# core/llm_generator/prompts/
# ├── __init__.py
# ├── code_generation.py # 代码生成相关模板
# ├── conversation.py # 对话相关模板
# ├── structured_data.py # 结构化数据相关模板
# └── workflow.py # 工作流相关模板
5.2 模板加载机制
问题:当前模板是硬编码的字符串常量,不支持外部配置和动态加载。
建议:
python
import os
import json
from typing import Dict, Any
class PromptLoader:
def __init__(self, base_dir: str = None):
self.base_dir = base_dir or os.path.dirname(__file__)
self.templates: Dict[str, str] = {}
def load_template(self, template_name: str) -> str:
if template_name in self.templates:
return self.templates[template_name]
# 支持从文件加载模板
template_path = os.path.join(self.base_dir, f"{template_name}.prompt")
if os.path.exists(template_path):
with open(template_path, "r", encoding="utf-8") as f:
template = f.read()
self.templates[template_name] = template
return template
# 支持从JSON配置文件加载
config_path = os.path.join(self.base_dir, "templates.json")
if os.path.exists(config_path):
with open(config_path, "r", encoding="utf-8") as f:
config = json.load(f)
if template_name in config:
template = config[template_name]
self.templates[template_name] = template
return template
raise ValueError(f"Template '{template_name}' not found")
5.3 模板验证机制
问题:当前没有模板验证机制,无法确保模板的正确性和完整性。
建议:
python
from typing import List, Set
import re
def validate_template(template: str, required_params: List[str] = None) -> bool:
"""验证模板的有效性"""
# 检查参数格式
param_pattern = r"\{\{(\w+)\}\}|\{(\w+)\}"
found_params = set()
for match in re.finditer(param_pattern, template):
param = match.group(1) or match.group(2)
if param:
found_params.add(param)
# 检查必填参数
if required_params:
missing_params = set(required_params) - found_params
if missing_params:
raise ValueError(f"Missing required parameters: {missing_params}")
return True
6. 总结
core/llm_generator/prompts.py是一个精心设计的LLM提示模板库,为系统提供了标准化、可复用的AI交互接口。该文件定义了11种不同功能的提示模板,涵盖了对话系统、代码生成、内容生成、工作流自动化和数据管理等多个应用领域。
文件采用了参数化模板设计、明确的指令约束、多语言支持和分层结构等技术特点,确保了LLM生成结果的一致性和可靠性。这些模板不仅提高了开发效率,也为系统的可扩展性和维护性提供了有力支持。
通过适当的优化(如模板组织、加载机制和验证机制),可以进一步提升该文件的功能和性能,更好地满足复杂AI系统的需求。