[datawhale202405]从零手搓大模型实战:TinyAgent

结论速递

TinyAgent项目实现了一个简单的Agent智能体,主要是实现了ReAct策略(推理+调用工具的能力),及封装了一个Tool。

项目实现有一定的疏漏。为了正确运行代码,本次对代码Agent部分进行了简单修改(完善ReAct prompt及LLM的多次循环调用)。

前情回顾

  1. TinyRAG

1 绪论

1.1 LLM Agent

Agent是人工智能中一个广为人知的概念,指代理人类完成部分工作的AI程序。

LLM Agent是利用LLM构建Agent,比较受到广泛认可的方式是使用LLM作为Agent的大脑,让其自主规划、利用工具来完成人类指定的任务。如下图所示,图片出自The Rise and Potential of Large Language Model Based Agents: A Survey

Conceptual framework of LLM-based agent with three components: brain, perception, and
action

关于Agent有很多有名的项目,除了单Agent之外,Multi-agent也是目前一个比较流行的研究方向(simulated agent society)。
请添加图片描述

1.2 ReAct

ReAct是一种prompt策略,它将CoT(思维链策略)和action(操作工具)结合,使LLM能够实时规划和调整操作工具的策略,从而完成较复杂的任务。下图出自ReAct project

1.3 如何手搓Agent

之前简单玩过Langchain和CrewAI的agent,都是ReAct策略的agent,简单理解agent是prompt-based的role+tool use,其中tool use借助ReAct实现

所以,手搓Agent需要完成

  • 定义Agent的prompt构建:
    • 角色
    • 任务
    • ReAct策略
  • tool:
    • input处理:把agent的动作处理为API的输入
    • 调用API

2 TinyAgent

2.1 项目结构

项目由三大部分构成

  • Agent:集成了prompt模板,其中agent的动作的截取也在此实现
  • Tool:实现了tool的封装
  • LLM:实现LLM的调用

2.2 代码阅读

2.2.1 Agent

代码详见tinyAgent/Agent.py,下为笔记

有两大部分组成

  • prompt:分为两块,一块是tool描述的模板,一块是ReAct的模板
    在这里插入图片描述
    • tool描述:由三个部分组成,tool唯一名name_for_model,tool描述(name_for_human工具人类名,description_for_model工具功能),调用tool所需要生成的格式及参数(JSON格式,指定parameters)。
      其中tool唯一名 和 调用tool所需要生成的格式及参数 是decode LLM的回复时需要的,tool描述是方便LLM理解这个工具是干什么的(这个在多工具时很重要)
    {name_for_model}: Call this tool to interact with the {name_for_human} API. What is the {name_for_human} API useful for? {description_for_model} Parameters: {parameters} Format the arguments as a JSON object.
    
    • ReAct策略:规定了由Question,Thought,Action,Action Input, Observation构成,并且从思考动作到观测这个步骤可以重复多次。这个是ReAct的核心。
  • Agent:
    • LLM调用:build_system_input构建调用LLM所需的prompt,text_completion调用LLM生成回复。只执行了两次调用
    • 工具调用:parse_latest_plugin_call解析/解码LLM回复中关于调用工具的部分,确定调用的tool唯一名 和 调用tool的参数;call_plugin调用工具得到结果。
      疑问:parse_latest_plugin_call没有用正则,而使用的字符串遍历,是出于什么考虑呢?
class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SheltonXiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值