目录
[1. 标准三元结构](#1. 标准三元结构)
[2. 完整模板示例](#2. 完整模板示例)
[1. 多轮对话RAG模板](#1. 多轮对话RAG模板)
[2. 引用增强模板](#2. 引用增强模板)
[1. 基础CoT结构](#1. 基础CoT结构)
[2. RAG-CoT整合模板](#2. RAG-CoT整合模板)
[3. CoT用于提升检索精度](#3. CoT用于提升检索精度)
[1. 上下文优化技巧](#1. 上下文优化技巧)
[2. Prompt模板变量设计](#2. Prompt模板变量设计)
[3. 性能优化提示词](#3. 性能优化提示词)
[1. Prompt评估指标](#1. Prompt评估指标)
[2. A/B测试模板](#2. A/B测试模板)
一、RAG系统的基本架构与Prompt位置
bash
用户问题 → 检索模块 → 相关文档片段 → Prompt工程 → LLM → 答案
在RAG中,Prompt是连接检索结果和生成模型的关键桥梁。
二、RAG特有的Prompt三要素模板
1. 标准三元结构
bash
<指令>
<上下文>
<问题>
详细解析:
A. 指令(Instruction)
-
定义模型角色和任务边界
-
设定回答风格和格式要求
-
处理未知情况的策略
python
# 示例指令
instruction = """
你是一个专业的助理,基于以下提供的上下文回答问题。
要求:
1. 仅使用提供的上下文信息
2. 如果上下文不包含相关信息,请明确说明"根据提供的资料无法回答"
3. 保持回答专业、简洁
4. 引用上下文中的具体信息支持你的回答
"""
B. 上下文(Context)
-
检索得到的相关文档片段
-
需要合理组织和格式化
python
# 上下文组织示例
context = """
【文档1】标题:机器学习基础
内容:监督学习需要标注数据,无监督学习发现数据内在结构...
【文档2】标题:深度学习进展
内容:Transformer架构在NLP领域取得突破性进展...
"""
C. 问题(Question)
-
用户原始查询
-
可附加特定要求(如分点、举例等)
bash
question = "请解释监督学习和无监督学习的主要区别,并各举一个例子。"
2. 完整模板示例
python
def build_rag_prompt(contexts, question):
prompt = f"""你是一个AI助手,基于给定的上下文回答问题。
# 上下文:
{format_contexts(contexts)}
# 回答问题:
{question}
# 回答要求:
1. 基于上下文,不要引入外部知识
2. 如果上下文信息不足,请说明
3. 引用相关上下文编号(如【文档1】)
4. 保持回答结构清晰
"""
return prompt
三、进阶Prompt模板设计
1. 多轮对话RAG模板
python
def build_conversational_prompt(context, question, history):
return f"""
会话历史:
{format_history(history)}
相关参考信息:
{context}
当前问题:{question}
请结合会话历史和参考信息回答问题。
如果参考信息与会话历史冲突,以参考信息为准。
"""
2. 引用增强模板
python
prompt = """
请基于以下文档回答问题,并在回答中明确引用来源。
文档内容:
{documents}
问题:{query}
格式要求:
1. 每个事实点后标注来源,如[doc1]
2. 区分不同文档的信息
3. 如果信息来自多个文档,合并说明
"""
四、CoT(思维链)在RAG中的应用
1. 基础CoT结构
bash
问题 → 思考步骤 → 检索验证 → 最终答案
2. RAG-CoT整合模板
python
rag_cot_prompt = """
请按步骤回答以下问题:
步骤1:理解问题
- 重新表述问题:{rephrased_question}
- 识别关键信息:{key_elements}
步骤2:检索相关信息
[相关上下文已提供]
{context}
步骤3:分析验证
- 上下文是否包含足够信息?{sufficiency_check}
- 信息之间是否有矛盾?{consistency_check}
步骤4:组织答案
基于以上分析,我的回答是:
{final_answer}
步骤5:引用检查
- 每个观点对应的来源:[source_mapping]
"""
# 或者更简洁的版本
cot_prompt = """
让我们一步步思考:
首先,理解问题:{question}
其次,查看提供的上下文:
{context}
然后,分析上下文的相关性:
1. 哪些部分直接回答问题?
2. 哪些是背景信息?
3. 是否有信息缺口?
最后,综合得出结论:
"""
3. CoT用于提升检索精度
python
def retrieval_with_cot(query):
# CoT引导的检索策略
analysis_prompt = f"""
分析问题:{query}
需要哪些类型的信息?
1. 核心概念定义
2. 具体示例
3. 对比分析
4. 应用场景
根据这些需求,生成更精确的搜索关键词。
"""
# 基于分析结果进行检索
return refined_search_keywords
五、实用技巧与最佳实践
1. 上下文优化技巧
python
# 上下文筛选策略
def filter_context(contexts, question):
# 1. 相关性评分
# 2. 去重处理
# 3. 信息完整性检查
# 4. 长度控制(避免token超限)
return optimized_contexts
2. Prompt模板变量设计
python
template_variables = {
'role': "领域专家",
'task': "信息提取与分析",
'format': "Markdown格式,带要点",
'constraints': [
"只使用提供的信息",
"标注不确定性",
"避免猜测"
],
'fallback': "如果信息不足,询问具体方面"
}
3. 性能优化提示词
python
performance_prompt = """
在回答前,请考虑:
1. 效率:用最简洁的方式表达
2. 准确性:每个陈述都要有上下文支持
3. 实用性:提供可操作的见解
4. 可验证性:便于用户查证来源
"""
六、完整示例:医疗问答RAG系统
python
class MedicalRAGPrompt:
def __init__(self):
self.template = """
# 角色:医疗信息顾问
# 任务:基于医学文献回答问题
# 重要声明:
- 这不是医疗建议
- 请咨询专业医生
- 信息来源:{sources}
# 相关医学文献:
{documents}
# 患者问题:
{query}
# 思考过程(内部):
1. 问题分类:{problem_type}
2. 紧急程度:{urgency_level}
3. 信息充分性:{sufficiency}
# 回答结构:
## 摘要
## 相关研究发现
## 局限性说明
## 建议下一步
"""
def build(self, context, query):
# 添加CoT元素
cot_section = """
推理步骤:
1. 识别问题中的关键医学术语
2. 匹配文献中的相关研究
3. 评估证据等级
4. 形成谨慎的结论
"""
return self.template + cot_section
七、评估与迭代
1. Prompt评估指标
-
相关性评分
-
引用准确性
-
信息完整性
-
幻觉率
2. A/B测试模板
python
test_templates = {
'simple': "基于{context}回答:{question}",
'cot': "让我们一步步分析...{context}...问题:{question}",
'structured': "角色...任务...上下文...约束...问题..."
}
关键要点总结
-
RAG Prompt核心:明确分离指令、上下文、问题
-
CoT价值:提升推理透明度、减少幻觉、改善检索
-
设计原则:
-
明确角色和约束
-
结构化组织信息
-
引导模型验证来源
-
处理不确定性
-
-
进阶技巧:
-
动态Prompt构建
-
多轮对话上下文管理
-
引用机制设计
-
领域特定优化
-
有效的RAG Prompt工程需要结合具体应用场景不断调优,平衡信息完整性、回答质量和系统效率。