
AI Agent工作流的5种基础模式及其通用实现:评估器-优化器模式
仍然采用配置的方式来完成,这里注意根据任务的不同,你可能需要调整提示词,以实现更加针对性的反思。
反思(Reflection)是一种广泛应用于LLM应用中的提示与工作流模式,特别在Agent应用中,反思可以极大的提高输出质量与任务成功率。本文将探讨Anthropic的《Build effective agents》文中关于Workflows的最后一种基础反思模式:Evaluator-Optimizer(评估器-优化器)模式。
除了基础反思模式外,还有一些扩展的反思模式。比如可以借助外部知识的强化反思模式、结合了自我评估与树搜索的任务优化模式(LATS,Language Agent Tree Search),我们将用专门的文章来介绍这些增强的反思模式。
01
基础反思模式(Evaluator-Optimizer)
反思是这样一种工作模式:一个“增强LLM”调用负责生成响应,另一个则负责评估与反馈,两者之间经过多次迭代,最后输出更高质量的响应结果。
显然,这种模式也可以拓展到多Agent系统(Multi-Agent System)中。当我们的输入任务有比较明确的期望、要求与评估标准,都可以借助这种方式来不断的评估与完善任务结果。典型的场景比如:
-
长文翻译:从语言风格、专业名词、前后一致性等方面自我审查
-
代码编写:从正确性、复杂度、效率、编码风格等方面审查代码
-
文案/报告创作:从格式、完备性、目录、风格等方面审查结果
这种模式在实际应用中仍然有改进空间,否则你可能会发现,多次的简单反思并不会带来更多的改进。一些可能的改进方式比如:
-
评估时以不同的角色,从不同的角度对响应进行评价
-
借助于外部数据或知识来对已有响应做评估与增强
02
PydanticAI实现基础反思模式
实现基础反思模式的过程如下(基于PydanticAI):
- 定义生成器与评估器的输出类型
...
# 生成器响应模型
class GeneratorResponse(BaseModel):
thoughts: str = Field(..., description='你对任务的理解和反馈,或者你计划如何改进。')
response: str = Field(..., description='生成的解决方案。')
# 评估器响应模型
class EvaluatorResponse(BaseModel):
thoughts: str = Field(..., description='你对提交内容的仔细和详细的审查和评估。')
evaluation: str = Field(..., description='通过, 需要改进, 或失败')
feedback: str = Field(..., description='需要改进的地方和原因。')
2. 定义生成器与评估器的提示与模型
仍然采用配置的方式来完成,这里注意根据任务的不同,你可能需要调整提示词,以实现更加针对性的反思。
...
# 定义生成器和评估器的步骤
steps = {
"generator": {
"prompt": """你的目标是根据用户输入完成任务。如果你之前生成的内容收到了反馈,请根据这些反馈改进你的解决方案。""",
"model": model,
"result_type": GeneratorResponse
},
"evaluator": {
"prompt": """
请对以下代码实现进行评估,重点关注以下方面:
1. **代码正确性**:是否完全按照规范无误地实现了要求的功能?
2. **时间复杂度**:实现是否满足规定的时间复杂度要求?
3. **效率**:实现是否是针对需求最有效、最优化的方案?
4. **风格与最佳实践**:代码是否遵循标准的 Python 风格和最佳实践?
5. **可读性**:代码是否易于阅读和理解?
6. **文档化**:代码是否有清晰的文档说明,包括为所有函数和类撰写的 docstrings,以及必要的内嵌注释
注意:你应该仅评估代码,而不是尝试解决任务。
请仔细且严格地评估代码,确保不会错过任何改进的机会。
如果所有评估标准都完全满足且没有进一步改进建议,请输出“PASS”。否则,请输出“NEEDS_IMPROVEMENT”或“FAIL”,以便编码者能够学习和改进。
""",
"model": model,
"result_type": EvaluatorResponse
}
}
3. 实现生成器与评估器的LLM调用
这个过程本身没有复杂性,这里借助PydanticAI的Agent组件实现,实际上也可以借助LLM API直接实现。
# 生成解决方案的函数 async def generate(task: str, context: str = "") -> tuple[str, str]: """根据反馈生成和改进解决方案。""" config = steps["generator"] system_prompt = config["prompt"] if context: system_prompt += f"\n\n{context}" generator_agent = Agent(config["model"],system_prompt=system_prompt, result_type=config["result_type"])` `response = await generator_agent.run(f'任务:\n{task}') thoughts = response.data.thoughts result = response.data.response return thoughts, result
评估器:
async def evaluate(content: str, task: str) -> tuple[str, str]:
"""评估解决方案是否符合要求。"""
config = steps["evaluator"] evaluator_agent = Agent(config["model"], system_prompt=f'{config["prompt"]}\n\n任务:\n{task} ',result_type=config["result_type"])
response = await evaluator_agent.run(content)
evaluation = response.data.evaluation
feedback = response.data.feedback
return evaluation, feedback
4. 主循环
借助生成器与评估器之间的配合与迭代,最终获得输出结果。在实际应用中,最好要设置最大迭代次数(max_iterations)作为终止条件,而不能完全的依赖于LLM评估器对结果的判断,否则有可能陷入死循环。
...
thoughts, result = await generate(task)
while iteration < max_iterations:
evaluation, feedback = await evaluate(result, task)
memory.append({"thoughts": thoughts, "result": result, "evaluation":evaluation,"feedback": feedback})
print(f"\nIteration {iteration + 1}:\nThoughts: {thoughts}\nResult: {result}\nEvaluation: {evaluation}\nFeedback: {feedback}")
if evaluation == "PASS":
return result,memory
context = "\n".join([
"之前的尝试:",
*[f"- 结果: {m['result']}\n 反馈: {m['feedback']}" for m in memory]
])
thoughts, result = await generate(task, context)
iteration += 1
以上就是基础反思模式的核心实现。如果使用输入任务进行测试,就可以看到类似如下的输出,体现了其中的评估与优化改进过程:
03
小结
在Anthropic的这篇《Build effective agents》文章中,比较清晰的帮我们区分了Agent系统的两种类型:Workflows与Agents,并介绍了Workflows中常见的5种基础模式:顺序、并行、路由、编排-工作、反思-优化模式。
在我们的系列文章中,对这些基础模式借助更轻量级的PydanticAI做了通用实现。在理解了这些模式的基础上,借助于类似于LangGraph/LlamaIndex Workflows这样的框架,就可以方便的组合与拓展出复杂性更高的AI工作流。相对于更“黑盒”的Agents,Workflows牺牲了一定的灵活性,但是大大提高了可控性,这对于目前在LLM的长任务推理能力尚不足的情况下,实现企业级的Agent系统是至关重要的。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
更多推荐
所有评论(0)