|
ython)|使用大模型构建AI应用|技术经理" data-from="0" data-is_biz_ban="0"> 从文明诞生之日起,人类就踏上了不懈的发现和创新之旅,掌握了不断扩大的工具来增强我们的能力并提高生产效率。随着我们的发展,我们的工具也在不断发展,从简单的石器过渡到复杂的机器等等。今天,我们站在新时代的最前沿,享受着人工智能快速发展的好处,特别是大型语言模型的最新进展。
以 LLM 作为其核心控制器构建 Agent 是一个很酷的概念。基于这一概念衍生出了非常多的优秀项目,如:AutoGPT,GPT-Engineer和BabyAGI。LLM 的潜力不仅仅是生成文本,故事,论文和程序,它甚至可以成为一个强大的问题解决者。
Agent 概述
在 LLM 驱动的自主代理系统中,LLM 充当代理的大脑,并辅以几个关键组件:
- 子目标和分解(Subgoal and decomposition):Agent 将大型任务分解为较小的、可管理的子目标,从而能够高效处理复杂任务。
- 反思和完善(Reflection and refinement):Agent 可以对过去的行为进行自我批评和自我反思,从错误中吸取教训,并为未来的步骤进行提炼,从而提高最终结果的质量。
- 短期记忆(Short-term memory):我认为所有的上下文学习都是利用模型的短期记忆来学习的。
- 长期记忆(Long-term memory):这为 Agent 提供了长时间保留和调用(无限)信息的能力,通常是通过利用外部载体存储和快速检索。
- Agent 学习调用外部 API 以获取模型权重中缺少的额外信息(通常在预训练后很难更改),包括当前信息、代码执行能力、对专有信息源的访问等

LLM 如何使用外部工具的详细介绍请参考:?? OpenAI 内部工程师揭秘:如何通过 API 将大模型集成到自己的应用程序中
“任务规划”(Task Planning)和“使用工具”(Tool Usage)是人类智能的基本表现,对于解决复杂问题至关重要。复杂问题通常涉及许多子任务和步骤,需要耗费大量的时间和精力才能完成。此外,不同的问题需要使用不同的工具和技能来解决,使问题的解决变得更加困难。
任务规划
先前的工作是使用 LLMs 进行决策,例如 ReAct ,根据动作和观察的历史迭代生成要在环境中执行的下一个动作。然而,随着任务变得更加复杂,LLMs 由于其有限的组合能力和无法在长时间动作中处理干扰因素而陷入困境。
为了缓解这种情况,模块化方法结合了一个单独的规划器模块,该模块利用 LLM 创建高级计划然后规划器将更简单的子任务委托给执行器 LLM 模块,从而减少执行器所需的动作轨迹的组合复杂性和长度。我们将这一类别广泛地称为计划和执行方法。

在不进行微调的情况下,LLM 进行上下文学习,将用户问题拆解成多步执行计划。具体来说,我们假设对于每个问题领域,一个人类专家可以提供一个领域描述(也就是说,动作的先决条件和效果),这个描述将对该领域中出现的所有问题实例起到一定的作用。
使用工具
在实际工作中,大量的工具给到模型后,模型根据用户问题自己选择并调用工具的时候,也会出现混淆的情况。为了解决这一问题。我们可以按场景把工具进行划分。
 如上图:当收到用户问题时,先进行场景分类(如:财务、运动、音乐等),每个分类后面针对不同的细分领域又有不同的工具来完成任务。这样避免了从海量的工具中进行选择,减少出错的概率。
系统演进
单一 DataAgent
通过实验测试,在进行任务规划的时候,同时把子任务要调用的工具一起规划,生成的子任务更有效,因为这样生成的子任务能保证有工具能解决子任务的问题。现状是工具有很多,不可能一次性把所有的工具告诉模型,所以通过设置 DataAgent 来解决这个问题。
 对复杂问题进行拆分。
缺点:
- 基于用户问题匹配候选集,容易混淆,top N 中可能没有真正能解决问题的工具
- ReAct 选择工具错误、混淆、工具选择之后,对应的参数解析大概率也会出错
多个 DataAgent
优化方案
 根据实际场景按类型,分成多个 Data Agent ,每个 DataAgent 中包含少量的工具,不再需要“基于用户问题匹配工具”的过程。
如:基础指标类的 Agent、同比增长率类的 Agent、股票估值类的Agent、股票行业类的 Agent、财务估值类的 Agent、债券类 Agent 等等
缺点:
Function Calling
模型真正的 Function Calling,像 OpenAI 模型针对 Tool 调用微调过的模型,针对 Tool 的选择和 JSON 参数微调过的模型,更智能的选择工具和参数解析。

小结
不论使用上面哪个结构,自我反思都是一个重要的方面,它允许自主代理通过完善过去的行动决策和纠正以前的错误来迭代改进。它在不可避免地会出现试错的现实任务中发挥着至关重要的作用。当出现错误的时候,重新思考并调用工具,尽可能的回答用户问题。
推荐阅读
- OpenAI 内部工程师揭秘:如何通过 API 将大模型集成到自己的应用程序中
- 数据助手:基于 LLMs 全自动工作流处理数据并可视化结果
- OpenAI Function Calling 与 LangChain Agent 工作原理及区别
参考资料:
LLM Powered Autonomous Agents | Lil'Log (https://lilianweng.github.io/posts/2023-06-23-agent/)
AnyTool: Self-Reflective, Hierarchical Agents for Large-Scale API Calls (https://arxiv.org/pdf/2402.04253.pdf)
LLM+P: Empowering Large Language Models with Optimal Planning Proficiency (https://arxiv.org/pdf/2304.11477.pdf)
|