Skip to content

5. 通过针对性学习提升模型性能

5.1 In-context learning, e.g. ReAct

In-context learning(上下文学习)是一种让模型通过示例学习如何执行任务的方法,而不需要修改模型的权重。ReAct 就是一种典型的 in-context learning 方法。

5.1.1 ReAct 的工作原理

ReAct 通过以下步骤工作:

  1. 思考(Reasoning):模型分析任务,制定计划
  2. 行动(Acting):模型执行计划,使用工具
  3. 观察(Observing):模型获取工具执行结果
  4. 思考(Reasoning):模型基于结果调整计划

5.1.2 示例

python
# ReAct 示例提示
prompt = """
你是一个助手,能够使用工具来完成任务。

任务:查询北京今天的天气,然后计算 25 + 36 的结果。

工具:
1. Search: 用于搜索信息,参数为查询内容
2. Calculator: 用于计算数学表达式,参数为表达式

示例:
问题:查询上海今天的天气,然后计算 12 + 34 的结果。
思考:我需要先查询上海今天的天气,然后计算 12 + 34 的结果。
行动:Search("上海今天天气")
观察:上海今天晴,温度 25 度。
思考:现在我需要计算 12 + 34 的结果。
行动:Calculator("12 + 34")
观察:46
思考:任务完成,我需要总结结果。
答案:上海今天晴,温度 25 度。12 + 34 = 46。

现在开始处理当前任务:
"""

5.1.3 优势

  • 不需要微调:不需要修改模型权重
  • 快速适应:通过示例快速适应新任务
  • 灵活性:可以处理各种类型的任务
  • 可解释性:展示思考过程,提高可解释性

5.2 Retrieval-based in-context learning, e.g. RAG

Retrieval-based in-context learning(基于检索的上下文学习)是一种结合了检索和生成的方法,最典型的例子是 RAG(Retrieval-Augmented Generation)。

5.2.1 RAG 的工作原理

  1. 检索:从外部知识库检索与查询相关的信息
  2. 增强:将检索到的信息与原始查询一起作为上下文
  3. 生成:基于增强的上下文生成回答

5.2.2 示例

python
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

# 创建向量存储
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_texts(
    ["北京是中国的首都", "上海是中国的经济中心", "广州是中国的南大门"],
    embeddings
)

# 创建检索器
retriever = vectorstore.as_retriever()

# 创建 RAG 链
qa_chain = RetrievalQA.from_chain_type(
    llm=OpenAI(),
    chain_type="stuff",
    retriever=retriever
)

# 使用 RAG
result = qa_chain.run("中国的首都是哪里?")
print(result)

5.2.3 优势

  • 知识更新:可以通过更新知识库来更新模型的知识
  • 减少幻觉:基于检索到的信息生成,减少幻觉
  • 提高准确性:提供最新和准确的信息
  • 扩展知识:突破模型训练数据的限制

5.3 Fine-tuning based learning

Fine-tuning based learning(基于微调的学习)是一种通过修改模型权重来提高性能的方法。

5.3.1 监督微调

监督微调是使用标注数据来微调预训练模型,使其适应特定任务。

步骤

  1. 收集标注数据
  2. 准备微调数据集
  3. 执行微调
  4. 评估微调效果

优势

  • 提高特定任务的性能
  • 减少对提示工程的依赖
  • 提高模型的一致性和可靠性

5.3.2 基于人类反馈的强化学习(RLHF)

RLHF 是一种通过人类反馈来优化模型行为的方法。

步骤

  1. 收集人类反馈数据
  2. 训练奖励模型
  3. 使用强化学习优化模型

优势

  • 提高模型的安全性
  • 使模型输出更符合人类偏好
  • 减少有害输出

5.4 再次与"厨师做饭"做类比

为了更好地理解这些学习方法,我们可以再次使用厨师做饭的类比:

  • In-context learning:厨师通过观察食谱学习新菜

    • 不需要重新学习基本技能,只需要按照食谱操作
    • 快速适应新的菜肴
  • Retrieval-based learning:厨师查阅食谱书获取信息

    • 可以获取最新的烹饪方法
    • 不需要记住所有食谱
  • Fine-tuning:厨师通过反复练习掌握新技能

    • 技能会成为本能
    • 执行速度更快
    • 质量更稳定

5.5 学习方法的选择

学习方法适用场景优势劣势
In-context learning快速适应新任务不需要修改模型对示例质量要求高
Retrieval-based learning需要最新知识知识可以更新检索质量影响结果
Fine-tuning特定任务优化性能高,一致性好需要标注数据,成本高

5.6 最佳实践

5.6.1 组合使用多种学习方法

  • In-context + Retrieval:通过示例引导模型使用检索工具
  • Retrieval + Fine-tuning:先检索增强,再微调优化
  • In-context + Fine-tuning:使用示例进行微调,提高模型的任务适应能力

5.6.2 数据准备

  • 多样性:确保训练数据的多样性
  • 质量:确保数据的质量和准确性
  • 代表性:确保数据代表实际使用场景

5.6.3 评估和改进

  • 定量评估:使用指标评估性能
  • 定性评估:人工评估输出质量
  • 持续改进:基于反馈不断改进

5.7 小结

  • In-context learning 通过示例快速适应新任务
  • Retrieval-based learning 通过外部知识提高准确性
  • Fine-tuning 通过修改模型权重优化特定任务性能
  • 不同学习方法适用于不同场景,应根据具体需求选择
  • 组合使用多种学习方法可以获得更好的效果

现在你已经了解了如何通过针对性学习提升模型性能,接下来让我们探讨如何基于 LangChain 快速创建 Agent。