《代理》学习心得
这是一篇菜鸟的学习笔记~
Q:为什么要使用代理?
A:思维链的推理不能让大模型主动更新自己的知识,容易“胡说八道”,代理则给模型提供了一个调用工具的接口,可以让模型自主判断、自行调用工具以及自行决定下一步的行动。
Q:代理与链的差异?
A:在链中,一系列操作被硬编码;在代理中,语言模型被用作推理引擎来确定要采取哪些操作以及按什么顺序执行这些操作。
首先了解以下三个概念
- 大模型:逻辑驱动的核心,负责产出预测结果并处理输入信息
- 外部工具:数据清洗工具、搜索引擎、应用程序等
- 代理:控制交互,负责调用合适的外部辅助工具,并全面监管整个交互过程的执行与流转
代理组件
-
代理(Agent):决策者,依据内置的语言模型和接收到的提示来确定下一步的行动方针。这个提示可能涵盖代理的个性设定(即为其设定特定角色和反应模式)、任务背景信息(为代理提供更丰富的任务情境理解)以及优化推理能力的策略(例如ReAct框架)。在LangChain生态系统中,存在着多种类型的代理以满足不同需求。
-
工具(Tools):代理在执行任务时调用的功能性函数。在配置工具时,需确保两点:一是代理能够访问到恰当的工具资源,二是工具的功能描述清晰明了,便于代理理解和运用。若工具选择不当或描述模糊,将直接影响代理的任务执行能力。LangChain不仅提供了丰富的工具选项,还允许用户自定义工具以适应特定需求。
-
工具包(Toolkits):为实现特定目标而精心组合的一系列相关工具的集合。以LangChain的Office365工具包为例,它集成了连接Outlook、检索邮件列表、发送邮件等多种实用工具。此外,LangChain还提供了众多其他工具包,以满足多样化的应用需求。
-
代理执行器(AgentExecutor):作为代理的运行平台,负责调用并执行代理所选的操作。执行器还需应对多种复杂情形,包括处理无效工具选择、工具执行错误、无法解析为工具调用的代理输出等,同时负责在代理决策和工具调用过程中进行观察和日志记录,以确保任务执行的透明度和可追溯性。
ReAct框架
行动——>观察——>思考——>行动
具体来说,这一过程就是引导模型构建一条问题的解决路径。从观察问题含义,继而深入思考,最终采取实际行动,即“推理——行动”(Reasoning-Acting)框架。通过这个框架,可以提高模型对于复杂问题的灵活性和适应性。
在Reasoning阶段,模型不仅要敏锐地捕捉当前环境和状态的信息,还要能够基于这些信息编织出一条逻辑严密的推理路径。这一能力让模型能够主动地诱导、追踪乃至动态调整其行动计划,即便面对突如其来的异常情况,也能游刃有余地应对。
而Acting阶段,则是将模型的思考成果转化为实际行动的关键。这包括指导模型如何与外部资源(比如知识库或实际环境)进行高效交互,以收集更多信息,或是直接给出答案。
通过Agent实现ReAct框架
- 利用LangChain中的ZERO_SHOT_REACT_DESCRIPTION代理类型,结合ReAct框架,让大型语言模型(LLM)进行逻辑推理和行动。
- 设置OpenAI和SerpAPI的API密钥
- 导入库
- 加载模型
- 选择工具
tools = load_tools(["serpapi", "llm-math"], llm=llm)
其中,serpapi是调用Google搜索引擎的工具,llm-math是通过LLM进行数学计算的工具
- 初始化代理之后就可以测试问题了!
AgentExecutor的运行机制
第一轮:搜索
给出提示
0: StringPromptValue(text='Answer the following questions as best you can. You have access to the following
tools:\n\n
Search: A search engine. Useful for when you need to answer questions about current events. Input should be a search query.\n
Calculator: Useful for when you need to answer questions about math.\n\n
Use the following format:\n\nQuestion: the input question you must answer\n
Thought: you should always think about what to do\n
Action: the action to take, should be one of [Search, Calculator]\n
Action Input: the input to the action\n
Observation: the result of the action\n... (this Thought/Action/Action Input/Observation can repeat N times)\n
Thought: I now know the final answer\n
Final Answer: the final answer to the original input question\n\
nBegin!\n\n
Question: 目前市场上玫瑰花的平均价格是多少?如果我在此基础上加价15%卖出,应该如何定价?\n
Thought:
通过“思考——行动——观察行动结果——再思考——再行动——再观察”一步步地解决问题。一旦遇到根据现有知识无法解决的问题,便选择工具中的搜索工具。
第二轮:计算
根据前述查询到资料,调用数学工具计算答案
第三轮:完成
输出答案
结构化工具
-
文件管理综合工具集:全面涵盖各类文件系统操作,包括但不限于写入文件、搜索文件内容、移动文件位置、复制文件、列出目录内容以及执行查找任务。
-
Web浏览辅助工具集:集成了官方的PlayWright浏览器自动化工具包,使代理能够轻松访问网页、模拟点击操作、提交在线表单以及查询并提取网页数据。
使用STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION作为代理
-
Playwright
- 开源自动化框架,主要用于模拟用户操作网页,实现自动化网页交互和测试。
- 支持多种浏览器,如 Chrome、Firefox、Safari 等。
- 通过简单脚本操作网页,例如导航、获取内容等。
-
LangChain中的代理类型合
-
Self-Ask with Search 代理:
- 解决多跳问题的有效代理,结合自问自答与搜索工具,逐步解决复杂问题。
-
Plan and Execute 代理:
- 将任务分解为计划与执行两部分,分别由两个独立模型完成,适用于复杂任务场景。
-
学习总结与心得
-
LangChain 提供了一个将复杂任务模块化的框架。通过组合多种工具和模型,能够快速实现从网页信息获取到数学计算的全流程自动化。
-
多跳问题的处理可以借助Self-Ask with Search。通过逐步分解问题,依赖中间答案最终得出结论。这种方法对解决信息交叉依赖的任务尤其有帮助。