本文是《从零手搓大模型实战》学习的第三篇个人学习笔记,主要通过学习TinyAgent项目来总结开发智能体Agent的相关知识,下面记录下学习内容以及相关心得。
注:TinyAgent相关学习内容来自datawhalechina/tiny-universe
1.什么是智能体Agent? 关于Agent理解
智能体(Agent)是人工智能领域的一个概念,它是一个能够自主运行并具有一定智能的系统或程序,可以在特定的环境(Environment)中通过对环境感知与观察(Observation),根据自身目标和能力进行思考和决策(Decision),并执行相应的动作(Action)达到某种目的或完成任务。
随着大模型LLM发展,基于大语言模型(LLM)的智能体Agent可以被视为一个基于LLM包含多个组件的系统,我们可以把智能体理解为:
智能体 = LLM+观察+思考+行动+记忆
- 大模型(LLM):是智能体的核心,可以看作智能体Agent的大脑,它负责处理和理解语言信息。
- 观察(Observation):Agent需要能够从环境中获取信息,这可能涉及到通过外部传感器(如摄像头、麦克风等)收集数据,然后使用适当的处理方法(如图像识别、语音识别等)来解析这些数据。
- 思考(Thinking) 和推理(Reasoning):在接收到环境信息后,智能体需要能够理解和解释这些信息,进行思考并据此做出决策,通常涉及逻辑推理、规划、问题解决等过程。
- 行动(Action):Agent根据决策来执行特定的动作,这些动作可以通过效应器(如机械臂、扬声器等)在环境中产生效果。
- 记忆(Memory):Agent还需要能够存储和检索过去的信息,以便从中学习并改进其未来的行为。可以是通过经验学习来实现的,也可以是通过存储先前的交互和知识来实现的。
2. 智能体Agent的模式
Agent的设计模式有很多,ReAct(reasoning + acting)的设计理念很有代表性,它主要结合了推理和行动,让Agent能够以交错的方式生成推理步骤和特定于任务的操作。
注意的是:Agent 的行动一般涉及到外部 Tool Use(工具使用),Agent通过利用外部工具来扩展自身功能,这些工具可以是搜索引擎、专业数据库或其他类型的插件,来帮助增强Agent解决问题的能力。
3. TinyAgent的主要架构及一点修改
这里的TinyAgent是一个基于React模式,手动制作的一个最小的Agent结构,主要是演示通过LLM来推理和调用外部自定义工具(这里主要是web 搜索)。
TinyAgent主要包含了3个模块,Agent、LLM、Tool。
- Agent类主要实现了text_completion方法,通过调用大模型LLM,根据React的Agent的逻辑,来调用Tools中的工具。
- LLM模块定义大模型使用,这里默认使用InternLM2作 Agent 模型,不过我本地没下载InternLM2,所以这里修改了一下代码,增加了Zhipu API。
- Tools中定义了一个工具类Tools,初始化时加载了一些工具配置信息,并包含了一个名为google_search的方法,通过serper.dev提供的API接口执行谷歌搜索,我们能够在这个类里面继续扩展增加其他工具,比如计算器、天气查询、特定的数据检索等。
运行测试TinyAgent,如下所示:
agent = Agent()
print(agent.system_prompt)
下面进行具体的提问测试,如:
response, _ = agent.text_completion(text='周杰伦的太太和他年龄相差多少?', history=[])
print(response)
换一个问题:
备注:
论文 ReAct: Synergizing Reasoning and Acting in Language Models