代理 Agent
Agent 最初出现在强化学习任务中,智能体拥有状态空间和动作空间,每执行一个 action都需要通过状态空间和激励来决定下一个 action。而大模型代理使用类似的思想,利用大模型的自然语言分析能力根据当前对话梳理达到目标需要执行的策略,然后一边执行操作一边根据反馈分析下一个操作,最后达到目标,生成总结输出。Agent 是目前认为最能够将大模型实际落地的应用方向,总的来说 Agent 其实就是提示词工程,通过更好的提示词来激发模型的能力。核心思想是使用语言模型(LLM)作为推理的大脑,以制定解决问题的计划、借助工具实施动作。以开源项目 langchain 为例,一个 agents 框架由几个关键组件如下:
Agent:制定计划和思考下一步需要采取的行动。
Tools:解决问题的工具。一个toolkit通常包含3-5个工具。
AgentExecutor:AgentExecutor是agent的运行时环境。这是实际调用agent并执行其选择的动作的部分。
工具+执行器
我们为了从搜索引擎获取我们想要的信息需要下面几个步骤:
打开浏览器 => 输入搜索问题 => 浏览搜索结果 => 思考内容的真实性准确性 => 继续搜索分析 => 完成信息总结。那么使用 LLM + Agent 就很好做这个任务,只需要将需要搜索的内容(目标)以及浏览器(工具)交给 LLM ,利用其自然语言理解能力就能获取最终结果。
复杂任务 ReAct 范式
大模型与 Agent 的结合目前比较有效的是 ReAct 范式(Reson+Act)由谷歌 2022年10月的论文《ReAct: Synergizing Reasoning and Acting in Language Models》提出。ReAct = Reasoning(协同推理) + Acting(行动),简单来说就是每个执行步骤都思考一番并优化下一步执行直到目标结果。
可以参考 LangChain 中封装的 AgentTypes,对不同类型的 Agent 有不同的提示模板。Types | ️ LangChain ReAct 是其中之一:
* OpenAI functions => prompt = hub.pull("hwchase17/openai-functions-agent") 工具调用允许模型检测何时应调用一个或多个工具,并使用应传递给这些工具的输入进行响应。
* OpenAI tools => prompt = hub.pull("hwchase17/openai-tools-agent") 可以检测何时应调用一个或多个 函数,并响应应传递给函数的输入。
* XML Agent => prompt = hub.pull("hwchase17/xml-agent-convo")
* JSON Chat Agent => prompt = hub.pull("hwchase17/react-chat-json") 该代理使用 JSON 来格式化其输出,旨在支持聊天模型。
* Structured chat => prompt = hub.pull("hwchase17/structured-chat-agent") 结构化聊天代理能够使用多输入工具。
* ReAct => prompt = hub.pull("hwchase17/react") ReAct模式的代理,对工具的重复应用直到获取结果
* Self-ask with search => prompt = hub.pull("hwchase17/self-ask-with-search") 搜索代理进行自我询问。
以 React 为例:
------------------------ Answer the following questions as best you can. You have access to the following tools: {tools} Use the following format: Question: the input question you must answer Thought: you should always think about what to do Action: the action to take, should be one of [{tool_names}] Action Input: the input to the action Observation: the result of the action ... (this Thought/Action/Action Input/Observation can repeat N times) Thought: I now know the final answer Final Answer: the final answer to the original input question Begin! Question: {input} Thought:{agent_scratchpad} ------------------------
现有的技术路线
利用大模型+各种小模型的思想。使用 LLM 作为控制器来管理 AI 模型,它首先应用LLM来理解用户请求并将其分解成小任务,然后将这些任务分配给不同的功能模型来完成,最后再次使用LLM将结果汇总为最终输出。以此和传统的各种任务结合起来。按照业务场景 Agent 分类:
语音助手型AI Agent:这种类型的大模型AI Agent可以通过语音指令与用户进行沟通和互动。它们能够理解自然语言、识别语音指令,并能够执行各种任务,比如回答问题、提供信息、安排会议等。语音助手型AI Agent可以大大提高用.户体验,简化用户操作,提高工作效率。
聊天机器人型AI Agent:聊天机器人型AI Agent是- -种能够通过文本消息与用户进行对话的大模型AI Agent。它们通常被用于客户服务、在线支持、销售等领域,能够回答用户的问题、提供帮助、解决问题。聊天机器人型AI Agent可以24/7不间断地为用户提供服务,节省人力成本,提高客户满意度。
数据分析型AI Agent:这种类型的大模型AI Agent专注于处理和分析大规模数据,从中提取有用的信息和见解。数据分析型AI Agent可以帮助企业做出更明智的决策、发现潜在的商机、优化运营流程。它们通常与数据科学家、分析师等团队成员合作,共同完成数据分析任务。
自动化流程型AI Agent:自动化流程型AI Agent旨在自动化重复、繁琐的工作流程,提高生产效率和工作质量。它们可以代替人工完成机械性的任务,比如数据录入、文件整理、流程监控等。自动化流程型AI Agent可以帮助企业节省时间、减少错误率、提高效率。
智能决策型AI Agent:智能决策型AI Agent是一种能够根据数据和规则做出决策的大型人工智能程序。它们可以分析各种信息、权衡利弊、预测结果,帮助企业管理层做出更加科学、合理的决策。智能决策型AI Agent在风险管理、投资决策、市场营销等方面有着广泛的应用。
情感识别型AI Agent:情感识别型AI Agent是-种能够识别和理解人类情感的大型AI程序。它们可以分析文本、语音、图像等数据,识别出其中的情感色彩,从而更好地理解用户的需求和情感状态。情感识别型AI Agent可以被用于情感。
测试 LLM 的 Agent 能力
自从 Agent 概念出现以来,国内应用雨后春笋涌现,十个AI应用里边,五个办公Agent,三个AIGC,还有两个是数字人。各大开源 llm 的发布也紧跟 Agent 更新,从对话模型扩展到工具调用,很多项目已经不需要使用 LangChain 外部工具来实现 Agent 任务了。下面测试清华去年 10 月发布的 ChatLMG3-b6 是较少能够在消费级显卡甚至移动端设备运行的中文开源 llm 之一。
https://github.com/THUDM/ChatGLM3
项目中有原生支持的 Agent Demo 以及 LanChain Agent Demo,做简要代码说明。
1.openai_api_demo.py:
定义并加载工具,源码提供天气获取工具,描述工具的作用和参数: { 'model': 'chatglm3', 'messages': [ {'role': 'user', 'content': '帮我查询北京的天气怎么样'} ], 'stream': True, 'tools': { 'random_number_generator': { 'name': 'random_number_generator', 'description': 'Generates a random number x, s.t. range[0]