rag系列文章目录
前言
大模型时代llm正在改变我们的生活,它可以帮助人类写作,写代码,翻译等等,但是llm的知识在训练时被冻结,无法直接使用api接入外部数据,这就需要llm agent。下面简要介绍两种agent,分别是ReACT agent和Function Call agent。
一、简介
ReAct Agent结合了推理(Reasoning)和行动(Acting),使智能体能够在执行任务时进行动态推理和决策。这种方法通过提示模板引导模型进行推理和行动,具有较高的通用性和灵活性。
ReACT 过程是迭代的。agent不断循环推理和行动,在从维基百科等外部环境收集更多信息的同时,不断完善其计划。根据新信息,agent可能会决定调整其策略或探索不同的途径以达到预期结果。agent可以选择使用不同的工具或根据环境反馈修改其方法。通过与外部世界互动,agent可以不断更新其知识库,在后续迭代中改进其推理和决策。
Function Call Agent获取问题后,首先调用LLM ,LLM 会分析请求并根据其训练数据、提供的提示和任何可用的上下文确定要调用的最相关函数。 LLM 实际上并不执行函数本身,它只是输出一个包含函数名称和参数(必要的输入参数)的 JSON 对象。然后,agent获取此 JSON 输出,执行函数,并将结果发送回 LLM生成响应。
二、示例说明
以下通过简单案例说明两种agent的执行过程
1、FC agent过程
# 用户请求:查询上海天气
→ 模型识别需要调用天气API
→ 生成结构化参数:{"location": "上海", "unit": "celsius"}
→ 执行get_weather(location="上海")
→ 返回结果:"上海当前气温25℃"
2、React agent过程
# 用户请求:爱因斯坦的出生地是否在德国境内?
→ 推理:需要先确认爱因斯坦的出生地
→ 行动:调用维基百科API搜索"爱因斯坦出生地"
→ 观察:返回结果"乌尔姆,德国"
→ 推理:验证乌尔姆是否属于德国
→ 行动:调用地理数据库查询"乌尔姆 国家归属"
→ 观察:返回"属于德国巴登-符腾堡州"
→ 生成最终答案:"是的,爱因斯坦出生于德国乌尔姆"
三、对比
区别 | React agent | FC agent |
---|---|---|
核心理念 | 将推理和行动结合成一个连续的循环。LLM“思考”问题,决定要采取的步骤,让代理根据其推理采取行动,然后观察结果以完善其理解。 | 具有函数调用功能的 LLM 根据用户的请求建议函数和参数,应用程序处理实际执行并将结果返回给 LLM 以集成到其响应中。 |
Prompt 技巧 | 非常依赖React prompt技巧,需要引导llm进行迭代推理和行动 | 除了定义函数及其参数外,不需要特定的prompt技术 |
决策 | llm根据推理结果和相关进行,自行决定采取的行动 | llm只是分析要做的功能和参数,由应用程序决策 |
侧重点 | 强调推理和规划过程,使 LLM 行动更加透明和可解释 | 侧重于使 LLM 能够以结构化方式与外部工具和 API 进行交互 |
擅长 | 擅长处理需要多步推理、复杂规划和理解上下文的任务。可以处理更多未预先定义操作的开放式任务。 | 擅长将 LLM 与外部系统集成并通过定义明确的函数执行特定任务 |
缺点 | 由于涉及推理步骤,计算成本可能很高。需要付出更多努力来定义prompt和操作 | 不太适合操作未预先定义的开放式任务。在处理复杂的推理过程时灵活性可能较低 |
场景案例 | 基于 LLM 的聊天机器人可以通过在网络上搜索信息、总结结果并提供简洁的答案来回答多跳问题 | 基于 LLM 的助手可以通过调用旅行 API、提供航班详细信息,然后生成确认消息来预订航班 |
总结
ReACT agent和FC agent之间的选择取决于手头的具体任务。如果任务涉及复杂的推理和不易定义为函数的操作,ReACT agent可能是更好的选择。如果任务涉及调用特定 API 或执行明确定义的操作,函数调用代理可能更合适。