Part3-实现一个agent

写在前面

前一篇文章提到了如何为ChatGPT/LLM大语言模型添加额外知识,其中第3点“通过langchain这个chatgpt编程框架来给chatgpt赋能。 langchain可以将不同的工具模块和chatgpt给链接(chain)起来”。今天我们要做一个类似于langchain功能的微小智能体,去完成这个目标。

实现框架

在这里插入图片描述
拥有大模型加持的智能代理会是什么样?作者们受到达尔文「适者生存」法则的启发,提出了基于大模型的智能代理通用框架。一个人如果想要在社会中生存,就必须学会适应环境,因此需要具有认知能力,并且能够感知、应对外界的变化。同样,智能代理的框架也由三个部分组成:控制端(Brain)、感知端(Perception)和行动端(Action)。

控制端:

通常由 LLMs 构成,是智能代理的核心。它不仅可以存储记忆和知识,还承担着信息处理、决策等不可或缺的功能。它可以呈现推理和计划的过程,并很好地应对未知任务,反映出智能代理的泛化性和迁移性。

感知端:

将智能代理的感知空间从纯文本拓展到包括文本、视觉和听觉等多模态领域,使代理能够更有效地从周围环境中获取与利用信息。

行动端:

除了常规的文本输出,还赋予代理具身能力、使用工具的能力,使其能够更好地适应环境变化,通过反馈与环境交互,甚至能够塑造环境。

功能步骤

构建大模型:

这一步是开发控制端,本文使用的是书生浦语的模型:internlm2-chat-7b,internlm2-chat-20b,部署参数:24GB的显卡,推算逻辑如下:书生浦语 7B,就是7,000,000,000*BFloat(16bits ~2Bytes) = 14GB ,再加上临时参数,至少需要16GB的内存。

算力平台:
https://www.autodl.com/console/instance/list?random=1716190941670

模型平台(魔搭):
https://modelscope.cn/models

卡型号:
RTX4090D,
GPU: 24GB显存,CPU:18 vCPU AMD EPYC 9754 128-Core Processor,内存:60GB,硬盘(系统盘):30 GB,数据盘:50GB

效果:据查能容7K的上下文

代码内容:
BaseModel: 在这里插入图片描述
InternLM2类,这个类继承自BaseModel类:
在这里插入图片描述

构建工具:

这一步在实现感知端。在本文我们实现了调用Google搜索的接口作为工具。因此我们需要构造一个Tools类。在这个类中,我们需要添加一些工具的描述信息和具体实现方式。Google调用要去serper官网申请一下token: https://serper.dev/dashboard, 然后在tools.py文件中填写你的key,这个key每人可以免费申请一个,且有2500次的免费调用额度。

代码实现:
在这里插入图片描述

构建agent:

这一步在实现行动端。这个Agent是一个React范式的Agent,我们在这个Agent类中,实现了text_completion方法,这个方法是一个对话方法,我们在这个方法中,调用InternLM2模型,然后根据React的Agent的逻辑,来调用Tools中的工具。
在这里插入图片描述
运行出来的示例应该是这样的:
在这里插入图片描述
Agent的结构是一个React的结构,提供一个system_prompt,使得大模型知道自己可以调用那些工具,并以什么样的格式输出。
重点在于:每次用户的提问,如果需要调用工具的话,都会进行两次的大模型调用,第一次解析用户的提问,选择调用的工具和参数,第二次将工具返回的结果与用户的提问整合。这样就可以实现一个React的结构。
代码实现:
在这里插入图片描述

运行agent:

引入Agent类,调用下载好的7B大模型。
在这里插入图片描述
输出提示语:
在这里插入图片描述
进行第一步对话:
在这里插入图片描述
注意到在回答问题过程中,会有几个过程:
调用google搜索接口工具:Action: google_search
搜索参数:Action Input: “search_query”: “特朗普出生年份”
搜索结果:Thought: 唐纳德·约翰·特朗普(Donald John Trump),1946年6月14日出生于美国纽约市,美国政治人物,第45任美国总统。在从政之前,他是一位成功的企业家和媒体名人
第二步经过大模型整合后的结果:Final answer: 唐纳德·约翰·特朗普,1946年6月14日出生于美国纽约市,美国政治人物,第45任美国总统。在从政之前,他是一位成功的企业家和媒体名人)。
在这里插入图片描述
再来一个问题,可以看到仍然调用Google搜索接口工具:
在这里插入图片描述
这个问题估计调用Google搜索接口工具搜不出来,于是直接调用大模型接口:
在这里插入图片描述

过程思考(待解)

1、调用书生浦语20B模型时,24GB的显卡一直报错内存不足,待测试应该要用 20*1,000,000,000 * (16bits ~ 2Bytes) = 40GB 内存的显卡,要么调整加载的单位(Bfloat ->其他数据类型)。
2、agent 在调用搜索工具时,判断标准是啥。

  • 25
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值