Agent指令编排
当然,我很高兴帮你详细理解这篇博客《Agent的“编排之战”|我开源了!》。这篇文章主要讨论了当前大模型(如GPT-4)在企业级“编排型”Agent领域的应用与发展,特别是在微软和Salesforce之间的竞争背景下,作者老于介绍了他开源的评估体系“4-One Bench”。以下是对博客内容的详细解析:
1. 背景介绍
问题示例
博客一开始提出了一个具体的问题:
“原告是安利股份的案件审理法院是哪家法院?”
这个问题涉及多个数据源和处理步骤,如何将其转化为大模型可以执行的指令序列(Routine)是关键。作者通过一系列数据操作步骤展示了如何处理这个问题:
- 公司简称:从“安利股份”获取上市公司的基本信息。
- 公司名称:从基本信息中提取公司名称,进而获取法律文书信息。
- 过滤信息:筛选出原告等于公司名称的法律文书。
- 法院代字:从法律文书中提取法院代字,并获取对应的法院地址代字信息。
- 法院名称:最终获取法院的名称。
这些步骤展示了一个复杂问题如何被拆解为多个可执行的指令序列,以便大模型能够理解并处理。
2. “4-One Bench”评估体系
引入“4-One Bench”
为了评估大模型在生成这些指令序列(Routine Gen)方面的能力,作者开发并开源了“4-One Bench”。这是一个基于他在《第三届琶洲算法大赛-GLM法律行业大模型挑战赛道》中取得全国第11名的经验,构建的一套评估体系。
体系特点
“4-One Bench”具备以下几个核心特点:
- Generator-Verifier模式:采用生成器和验证器的架构,确保生成的指令序列的准确性和有效性。
- One-Query:模拟日常商业实践中的“一句话任务”场景,涉及单项或多项企业资源的编排。
- One-Knowledge Graph:基于任务,使用描述数据资产关系的知识图谱指导大模型自动编排企业数据资产。用户也可以根据自身需求定制知识图谱内容。
- One-Shot:重点考察大模型一次性成功生成Routine的概率,反映其在实际商业环境中的响应速度和准确率。
- One-Syntax:使用自定义的文法将任务结构化为指令,指令可映射为函数以调用企业数据资产。
3. 微软与Salesforce的“编排型”Agent竞争
竞争态势
微软和Salesforce正在激烈竞争“编排型”Agent的市场:
- 微软:发布了10个Agent,直接挑战Salesforce的Agentforce战略。
- Salesforce:Salesforce的CEO公开表示微软的Agent“Just doesn’t work”(根本不行)。
尽管两家公司在公开场合互相批评,但在商业化方向上,两者的目标是一致的,都瞄准了“编排型”Agent。
编排型Agent的目标
编排型Agent旨在为企业提供一种类似于云计算中的IaaS(基础设施即服务)和PaaS(平台即服务)的编排体系。其终极目标是根据任务需求,自动编排和执行企业的数据资产(包括系统、API、结构化和非结构化数据、人力资源等),以达成业务目标。
实际案例
微软在AI Tour上展示了一个麦肯锡EM Agent的案例,该Agent基于预设的Routine,能够解析客户的邮件为销售机会,并调度CRM(客户关系管理)和HR(人力资源)系统,以安排合适的合伙人跟进销售机会。
4. 编排型Agent的“胜负手”——Routine Gen
关键因素
编排型Agent的核心竞争力在于Routine Generation(Routine Gen),即根据任务需求准确生成指令序列的能力。
当前挑战
目前,微软和Salesforce的Routine Gen主要依赖手工编制的Routine。这种方式在现阶段是可行的,但随着企业规模扩大,Agent数量达到百万甚至数亿时,手工维护Routine将成为巨大的挑战。因此,依赖大模型自动化生成Routine成为必然趋势。
大模型的潜力
虽然OpenAI的GPT-4等大模型已经展现出一定的自动化Routine Gen能力,但在商业领域的严谨性要求下,编排型Agent的全面胜利尚未到来。业界需要一个持续评估大模型Routine Gen能力的体系,这正是“4-One Bench”所填补的空白。
5. “4-One Bench”详细介绍
系统架构
“4-One Bench”采用Generator-Verifier模式,具备以下特色:
- One-Query:模拟企业日常的一句话任务,涉及单项或多项企业资源的编排。
- One-Knowledge Graph:使用描述API和商业实体关系的知识图谱,指导大模型自动编排数据资产。用户可以根据自身需求定制知识图谱内容。
- One-Shot:评估大模型一次性成功生成Routine的概率,确保其在实际应用中的效率和准确性。
- One-Syntax:自定义文法将任务结构化为指令,这些指令可以映射为函数,用于调用企业的数据资产。
评估结果
作者使用来自《GLM法律行业大模型挑战赛》的51道问题,评估了四家厂商(OpenAI、智谱、阿里云和字节)的八个大模型,形成了评估基线。主要发现包括:
- **表现最佳的模型(如gpt-4o)在One-Shot准确率上达到70%,通过结合Verifier和ReAct架构,Routine Gen准确率有望超过90%。
- **准确率超过60%的模型对知识图谱理解较好,适合用于Routine Gen;低于50%的模型则不建议使用。
- **国产主力模型(如glm-4-plus)的能力接近gpt-4o,具有与微软和Salesforce竞争的潜力。
- **各模型的错误类型相似,存在通过优化提示词工程进一步提升准确率的空间。
开源与应用
“4-One Bench”的代码已在GitHub上开源,地址为:laoyu84/4onebench。此外,作者还感谢《GLM法律行业大模型挑战赛》的项目组,并提供了相关开源项目链接(MetaGLM/LawGLM)。
6. 结论与展望
作者老于通过这篇博客表达了以下几点重要观点:
- 编排型Agent的重要性:在企业级应用中,编排型Agent能够有效整合和调度多种数据资产,实现复杂业务流程的自动化。
- Routine Gen的关键地位:Routine Generation是编排型Agent的核心竞争力,决定了其在实际应用中的表现和可扩展性。
- 自动化Routine Gen的必要性:随着企业规模的扩大,手工编制Routine不可持续,依赖大模型的自动化生成成为必然选择。
- “4-One Bench”的贡献:作为一个轻量级的评估体系,“4-One Bench”为业界提供了一个标准化工具,帮助评估和提升大模型在Routine Gen方面的能力,促进编排型Agent的落地和发展。
总结
这篇博客全面探讨了编排型Agent在企业中的应用前景,特别是在微软和Salesforce的竞争背景下,Routine Generation的关键作用。作者通过介绍他开源的“4-One Bench”评估体系,为业界提供了一个评估和提升大模型能力的工具,推动了编排型Agent的商业化落地。对于从事AI Agent开发和企业数据编排的专业人士,这篇博客提供了有价值的见解和实用的工具。
代码
在 app/controller
路径下,共有以下六个 Python 文件。下面是每个文件的可能作用说明:
-
api_router_controller.py
该文件可能负责定义 API 路由(route)和控制器(controller)函数,将 URL 路径映射到特定的业务逻辑。它可能包含了各类 API 端点的定义,并将客户端请求分发给相应的处理函数。 -
eval_controller.py
这个文件可能与“评估”功能有关,负责实现评估或测试某些模块或模型的功能。它可能会包含对数据、模型或应用输出的测试与验证逻辑,确保系统的输出符合预期。 -
few_shots_controller.py
与少样本学习(few-shot learning)相关。该文件可能包含少样本学习的控制逻辑,用于处理少量样本或数据的输入,并进行推理或预测。这类技术在深度学习中用于利用极少样本训练模型。 -
plan_generator.py
这个文件可能负责生成“计划”或方案。它可能包含用于生成特定任务执行步骤或决策计划的逻辑,根据输入信息生成适合的操作或决策方案。 -
plan_verifier.py
与“计划验证”相关的控制器文件。它可能用于验证由plan_generator.py
生成的计划是否符合预期,确保计划逻辑和步骤的正确性,可能涉及某种形式的规则或标准验证。 -
schema_controller.py
该文件可能负责管理或验证数据的结构(schema)。它可能包含定义数据结构或数据库模式的逻辑,用于确保输入的数据格式、字段和数据类型等符合预设的标准。
若您希望深入了解其中某个文件的具体内容,可以让我进一步分析其中的代码结构和函数逻辑。
2. 比赛内容与挑战
法律问题类型
- 简单问题:涉及单表和少量字段的查询。
- 示例:“广东鹏鼎律师事务所的电话邮箱地址分别是什么?”
- 复杂问题:涉及跨多表查询、逻辑判断、统计等操作。
- 示例:“(2020)吉0184民初5156号的被告是否为上市公司,如果是的话,他的股票代码和上市日期分别是?如果不是的话,统一社会信用代码是?该公司是否被限制高消费?如果是被限制高消费的涉案金额总额为?请保留一位小数点。”
比赛特点
- 实战性强:问题设置非常接近实际业务场景,考验Agent在复杂环境下的表现。
- 挑战性高:需要在有限时间内处理大量问题,对Agent的性能和准确率要求极高。
3. 八点心得
作者在比赛中总结了八个重要的经验和体会,这些心得对构建高效的Agent具有重要指导意义。
第一点:API编排 vs 代码/SQL生成
-
核心观点:相比生成代码或SQL,企业客户更关注Agent的API编排能力。
-
原因:
- 企业环境:在具备API资产的情况下,企业内部和企业之间的交互更多地通过API完成,而非直接编写代码或SQL。
- 比赛考量:本次比赛重点考察Agent编排API来回答自然语言问题的能力,这反映了大模型厂商对企业实际需求的理解。
-
示例:
- 在处理复杂法律问题时,Agent需要调用多个API,如裁判文书信息、上市公司信息、企业工商注册信息、企业限高消费信息等。
-
图示:
-
图1展示了Agent如何编排API来回答复杂的问题。
-
第二点:对Agent的要求是“又快又准”
-
核心观点:Agent需要在保证准确率的前提下,提高响应速度。
-
比赛要求:
- 时间限制:盲盒测试要求Agent在1小时内回答200道问题。
- 准确率:需要尽可能提高问题回答的正确率。
-
现实意义:
- 企业场景:在实际业务中,大多数信息检索需求相对简单,但对响应速度和准确率有着近乎苛刻的要求。
第三点:Plan ↑ Reflection↓
-
核心观点:为了满足速度和准确率的要求,Agent应该在**计划阶段(Plan)一次性完成任务,而减少依赖反思阶段(Reflection)**的次数。
-
具体措施:
- 排除多代理架构(Multi-Agent):避免使用多个代理进行反复修正,以节省时间。
- 专注Plan准确性:确保在Plan阶段生成的计划是正确的,从而保证后续执行(Action)的正确性。
-
架构设计:
- Orchestration(编排):
- 基于知识图谱,将自然语言问题编排为大模型友好的“指令序列”。
- Question Rewrite(问题改写):
- 修正问题中的缺陷,利用知识图谱发现隐藏的实体关系。
- Orchestration(编排):
-
效果:
- 在所有正确回答的问题中,Agent的首轮正确率超过了90%。
-
图示:
-
图2展示了Agent的系统架构,包括Orchestration和Question Rewrite两个关键环节。
-
第四点:自然语言 -> API,NO!自然语言 -> 指令 -> API,YES!
-
核心观点:直接从自然语言生成API调用不可靠,应该先将自然语言转化为指令,再映射为API调用。
-
原因:
- 自然语言的复杂性:多样性和复杂度降低了大模型Function Calling的精度。
- 指令的优势:
- 指令命名可以富含语义,帮助大模型进行问题分解。
- 简洁的指令减少了Token的消耗,降低了大模型产生幻觉的几率。
- 指令和API的一一对应关系确保了“Plan正确,则Action正确”。
-
流程:
- 自然语言问题:用户输入。
- 指令序列:大模型将自然语言问题转化为指令序列。
- API调用:指令序列映射为API调用,获取所需数据。
-
示例:
-
图3展示了从自然语言问题到指令,再到API调用的流程。
-
第五点:自然语言问题是一个指令序列
-
核心观点:自然语言问题可以被拆解为一系列有序的指令,即指令序列。
-
指令表示:
- 用函数表示为:
F(X) -> Y
,其中F
是指令,X
是输入,Y
是输出。
- 用函数表示为:
-
指令类型:
- 查询指令:从数据库或API获取数据。
- 逻辑判断指令:对数据进行条件判断。
- 计算指令:进行统计或计算操作。
- 输出指令:生成最终的回答。
-
示例:
-
图4展示了不同类型的指令,以及指令之间通过内存进行数据传递。
-
-
重要性:
- 通过构建多样的指令类型,Agent可以应对更加复杂的问题。
第六点:大模型善于指令编排,前提是约束以知识图谱和Few-Shots
-
核心观点:大模型在指令编排方面表现出色,但需要知识图谱和Few-Shot学习的支持。
-
知识图谱的作用:
- 约束生成路径:提供实体和关系的结构信息,指导大模型选择正确的指令。
- 发现隐藏关系:帮助大模型理解问题中的隐含信息。
-
Few-Shot学习:
- 提供生成样式:通过示例指导大模型的输出格式和内容。
- 动态加载:根据问题类型,动态选择合适的Few-Shot示例,节省Token并提高准确率。
-
效果:
- 通过知识图谱和Few-Shot的结合,大模型能够准确地将复杂问题编排为指令序列。
-
示例:
-
图5展示了基于知识图谱和Few-Shot的复杂指令编排过程。
-
第七点:必要的问题改写
-
核心观点:有时需要对用户的自然语言问题进行改写,以填补信息缺失或纠正错误。
-
原因:
- 信息缺失:问题可能缺少回答所需的关键信息。
- 错误信息:问题中可能存在语义或事实错误。
-
解决方法:
- 问题改写(Question Rewrite):
- 使用大模型对问题进行改写,补充缺失信息或修正错误。
- 同样利用知识图谱和Few-Shot示例指导改写过程。
- 问题改写(Question Rewrite):
-
效果:
- 改写后的问题更有利于生成准确的指令序列,提高Agent的回答正确率。
-
示例:
-
图7展示了大模型如何修正问题中的公司和字段名称重复错误。
-
第八点:/提升Few-Shots的遵从性
-
核心观点:使用特殊标记
<SOS>
(Start of Sequence)和<EOS>
(End of Sequence)来包裹Few-Shot示例,能够提升大模型对输出格式的遵从性。 -
挑战:
- 格式不遵从:大模型可能会在输出中使用错误的符号或格式。
- 内容不遵从:可能会增加无关的解释或啰嗦的内容。
-
解决方法:
- 使用/:
- 在Few-Shot示例的开头和结尾添加
<SOS>
和<EOS>
标记,明确示例的范围。 - 可能因为大模型在训练时使用了这些标记,能够更好地识别并遵从输出要求。
- 在Few-Shot示例的开头和结尾添加
- 使用/:
-
效果:
- 在99.99%的情况下,大模型能够严格按照要求生成指令序列。
-
示例:
-
图8展示了使用
<SOS>/<EOS>
标记的Few-Shot示例,以及提升后的生成效果。
-
4. 总结与展望
比赛结果
- 正确率:在最后的盲盒测试中,老于的Agent取得了60%的正确率。
- 数据积累:通过比赛,积累了大量高质量的自然语言问题到指令序列的训练数据。
未来发展
- 模型微调:利用积累的数据,对大模型进行微调,进一步提升指令序列生成能力。
- 模式验证:
- 可行性:实践证明,在涉及十几个API或表单的“窄域”问题上,普通程序员也可以在数周内构建出实用的Agent来应对复杂业务问题。
- 商业价值:这种模式在成本和业务贴近度上具有优势,可能挑战现有的软件交付和收费模式。
5. 关键启示
- API编排的重要性:在企业环境中,API编排能力是Agent成功的关键。
- Plan阶段的准确性:提高计划阶段的准确性,可以显著提升Agent的效率和准确率。
- 指令序列的价值:将自然语言问题转化为指令序列,可以有效地指导API调用,提高回答的正确性。
- 知识图谱与Few-Shot学习的结合:利用知识图谱约束生成路径,结合Few-Shot示例,可以显著提升大模型的指令编排能力。
- 问题改写的必要性:对用户问题进行必要的改写,可以补充信息、纠正错误,提高Agent的回答质量。
- 遵从性的提升:使用特殊标记
<SOS>/<EOS>
可以提高大模型对输出格式和内容的遵从性。