4.1 提示词(Prompt)工程

目录

一、RAG系统的基本架构与Prompt位置

二、RAG特有的Prompt三要素模板

[1. 标准三元结构](#1. 标准三元结构)

[2. 完整模板示例](#2. 完整模板示例)

三、进阶Prompt模板设计

[1. 多轮对话RAG模板](#1. 多轮对话RAG模板)

[2. 引用增强模板](#2. 引用增强模板)

四、CoT(思维链)在RAG中的应用

[1. 基础CoT结构](#1. 基础CoT结构)

[2. RAG-CoT整合模板](#2. RAG-CoT整合模板)

[3. CoT用于提升检索精度](#3. CoT用于提升检索精度)

五、实用技巧与最佳实践

[1. 上下文优化技巧](#1. 上下文优化技巧)

[2. Prompt模板变量设计](#2. Prompt模板变量设计)

[3. 性能优化提示词](#3. 性能优化提示词)

六、完整示例:医疗问答RAG系统

七、评估与迭代

[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': "角色...任务...上下文...约束...问题..."
}

关键要点总结

  1. RAG Prompt核心:明确分离指令、上下文、问题

  2. CoT价值:提升推理透明度、减少幻觉、改善检索

  3. 设计原则

    • 明确角色和约束

    • 结构化组织信息

    • 引导模型验证来源

    • 处理不确定性

  4. 进阶技巧

    • 动态Prompt构建

    • 多轮对话上下文管理

    • 引用机制设计

    • 领域特定优化

有效的RAG Prompt工程需要结合具体应用场景不断调优,平衡信息完整性、回答质量和系统效率。

相关推荐
jimmyleeee2 小时前
大模型安全之二:Prompt注入
安全·prompt
Yeats_Liao2 天前
微调决策树:何时使用Prompt Engineering,何时选择Fine-tuning?
前端·人工智能·深度学习·算法·决策树·机器学习·prompt
香芋Yu3 天前
【大模型教程——第四部分:大模型应用开发】第1章:提示工程与上下文学习 (Prompt Engineering & ICL)
学习·prompt
cheungxiongwei.com3 天前
使用 C++23 实现 Prompt DSL 的 Header-Only 解析器:从语法设计到工程落地
prompt·c++23
shangjian0073 天前
AI-大语言模型LLM-模型微调3-Prompt Tuning
人工智能·语言模型·prompt
Bruk.Liu4 天前
AI中的Agent、Prompt、MCP与Function Calling:从简单对话到智能执行
人工智能·prompt·mcp
猫头虎5 天前
中国开源大模型霸榜全球:全球开源大模型排行榜前十五名,全部由中国模型占据
langchain·开源·prompt·aigc·ai编程·agi·ai-native
坠金5 天前
prompt
prompt
花间相见6 天前
【LangChain】—— Prompt、Model、Chain与多模型执行链
前端·langchain·prompt