大模型的六种设计模式
目录
- 1. 链式思考模式 (Chain-of-Thought, CoT)
- 2. ReAct模式 (Reasoning and Acting)
- 3. 自洽性模式 (Self-Consistency)
- 4. 代理模式 (Agent)
- 5. 检索增强生成 (RAG - Retrieval Augmented Generation)
- 6. 提示工程模式 (Prompt Engineering Patterns)
- 总结
1. 链式思考模式 (Chain-of-Thought, CoT)
概念
通过引导大模型一步步展示其推理过程,而不是直接给出结论,从而提高复杂任务的准确性。
流程图
示例
prompt = """
问题: 如果一个水果摊有8个苹果,卖出了3个,又进货5个,现在有多少个苹果?
让我们一步步思考:
1. 初始数量: 8个苹果
2. 卖出数量: 3个苹果
3. 卖出后剩余: 8-3=5个苹果
4. 进货数量: 5个苹果
5. 最终数量: 5+5=10个苹果
所以现在有10个苹果。
"""
2. ReAct模式 (Reasoning and Acting)
概念
结合推理(Reasoning)和行动(Acting),让模型先思考再执行,适合需要与外部环境交互的任务。
流程图
示例
prompt = """
任务: 查找2023年全球GDP排名前三的国家
思考: 我需要查询最新的全球GDP数据
行动: 搜索"2023年全球GDP排名"
观察: 根据搜索结果,2023年GDP排名前三的是美国、中国和日本
思考: 这些数据来源可靠吗?需要交叉验证
行动: 检查国际货币基金组织(IMF)发布的数据
观察: IMF数据确认2023年GDP排名前三的是美国、中国和日本
最终答案: 2023年全球GDP排名前三的国家是美国、中国和日本。
"""
3. 自洽性模式 (Self-Consistency)
概念
通过多次运行同一问题,采用多数表决或一致性检查来提高答案可靠性,减少随机性导致的错误。
流程图
示例
def self_consistency_solve(problem, n_samples=5):
answers = []
for i in range(n_samples):
response = llm.generate(f"问题: {problem}\n\n让我们一步步思考:")
answers.append(extract_final_answer(response))
# 统计答案频率
from collections import Counter
answer_counts = Counter(answers)
# 返回出现最多的答案
return answer_counts.most_common(1)[0][0]
4. 代理模式 (Agent)
概念
赋予模型自主决策和行动的能力,通过设定目标、规划步骤并使用工具来完成复杂任务。
流程图
示例
# 基于LangChain的代理实现
from langchain.agents import initialize_agent, Tool
from langchain.llms import OpenAI
# 定义工具
tools = [
Tool(
name="搜索",
func=search_tool,
description="用于搜索互联网信息"
),
Tool(
name="计算器",
func=calculator_tool,
description="用于执行数学计算"
)
]
# 初始化代理
agent = initialize_agent(
tools,
llm=OpenAI(temperature=0),
agent="zero-shot-react-description",
verbose=True
)
# 运行代理
agent.run("计算中国和美国GDP之和,并除以2")
5. 检索增强生成 (RAG - Retrieval Augmented Generation)
概念
将外部知识库和检索系统与生成模型结合,增强模型回答的事实准确性和时效性。
流程图
示例
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
from langchain.document_loaders import TextLoader
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
# 1. 加载文档并创建向量数据库
loader = TextLoader("data.txt")
documents = loader.load()
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(documents, embeddings)
# 2. 创建检索增强生成链
qa_chain = RetrievalQA.from_chain_type(
llm=OpenAI(temperature=0),
chain_type="stuff",
retriever=vectorstore.as_retriever()
)
# 3. 查询RAG模型
response = qa_chain.run("公司的退款政策是什么?")
6. 提示工程模式 (Prompt Engineering Patterns)
概念
通过精心设计提示模板,引导模型生成符合特定格式和要求的输出。
流程图
示例
# 基于角色的提示模板
role_prompt = """
你是一位经验丰富的医学专家。请用专业但通俗易懂的语言回答以下健康问题。
回答需要包含以下部分:
1. 简短的医学解释
2. 可能的原因
3. 建议的行动步骤
4. 何时需要咨询医生
问题: {question}
"""
# 使用少样本学习的提示模板
few_shot_prompt = """
问题: 怎样学习编程?
回答: 学习编程可以从选择一门入门语言如Python开始,参加在线课程,动手实践小项目,加入社区讨论。重要的是持续学习和解决实际问题。
问题: 什么是机器学习?
回答: 机器学习是人工智能的一个分支,通过算法让计算机从数据中学习模式和做出预测,无需明确编程。常见应用包括推荐系统、图像识别和自然语言处理。
问题: {your_question}
回答:
"""
总结
这六种大模型设计模式各有特点和适用场景:
设计模式 | 核心优势 | 典型应用场景 |
---|---|---|
链式思考 | 提高推理准确性 | 数学问题、逻辑推理 |
ReAct | 结合思考与行动 | 需要查询外部工具的任务 |
自洽性 | 提高答案可靠性 | 需要高准确度的关键决策 |
代理模式 | 自主决策与执行 | 复杂多步骤任务自动化 |
RAG | 增强知识与时效性 | 需要专业或最新知识的问答 |
提示工程 | 控制输出质量和格式 | 结构化内容生成、专业场景 |
这些设计模式可以单独使用,也可以组合使用以解决更复杂的问题。选择合适的模式取决于具体任务需求、资源限制和期望的结果质量。随着大模型技术的不断发展,这些设计模式也将持续演进和完善。