InternLM进阶岛第2关Lagent 自定义你的 Agent 智能体

目录

 

一、Agent基本介绍

1.1 什么是Agent

1.2 Agent的应用场景

二、Lagent 介绍

2.1 基础介绍

2.2 常见工具调用能力范式

2.2.1 通用智能体范式

优势:

劣势:

2.2.2 模型特化智能体范式

优势:

劣势:

三、任务要求:

3.1 环境配置

3.2 Lagent框架中Agent的使用

附笔记:

 3.3制作一个属于自己的Agent

3.4Multi-Agents博客写作系统的搭建

目录

一、Agent基本介绍

1.1 什么是Agent

1.2 Agent的应用场景

二、Lagent 介绍

2.1 基础介绍

2.2 常见工具调用能力范式

2.2.1 通用智能体范式

优势:

劣势:

2.2.2 模型特化智能体范式

优势:

劣势:

三、任务要求:

3.1 环境配置

3.2 Lagent框架中Agent的使用

附笔记:

 3.3制作一个属于自己的Agent

3.4Multi-Agents博客写作系统的搭建

3.5部署到Modelscape


一、Agent基本介绍

1.1 什么是Agent

Agent是一种能够自主感知环境并根据感知结果采取行动的实体,以感知序列为输入,以动作作为输出的函数。它可以以软件形式(如聊天机器人、推荐系统)存在,也可以是物理形态的机器(如自动驾驶汽车、机器人)。

基本特性:

  • 自主性:能够在没有外部干预的情况下做出决策。
  • 交互性:能够与环境交换信息。
  • 适应性:根据环境变化调整自身行为。
  • 目的性:所有行为都以实现特定目标为导向。

1.2 Agent的应用场景

Agent技术的应用领域其实十分广泛,涵盖了从交通、医疗到教育、家居和娱乐等生活的方方面面,比如:

(1)自动驾驶系统

  • 应用:自动驾驶汽车、出租车等。
  • 目标:安全、快捷、守法、舒适和高效。
  • 传感器:摄像头、雷达、定位系统等。
  • 执行器:方向盘、油门、刹车、信号灯。

(2)医疗诊断系统

  • 应用:医院诊断、病情监控。
  • 目标:精准诊断、降低费用。
  • 传感器:症状输入、患者自述。
  • 执行器:检测、诊断、处方。

二、Lagent 介绍

2.1 基础介绍

Lagent 是一个轻量级开源智能体框架,旨在让用户可以高效地构建基于大语言模型的智能体。同时它也提供了一些典型工具以增强大语言模型的能力。

Lagent 目前已经支持了包括 AutoGPT、ReAct 等在内的多个经典智能体范式,也支持了如下工具:

  • Arxiv 搜索
  • Bing 地图
  • Google 学术搜索
  • Google 搜索
  • 交互式 IPython 解释器
  • IPython 解释器
  • PPT
  • Python 解释器

其基本结构如下所示:

2.2 常见工具调用能力范式

2.2.1 通用智能体范式

这种范式强调模型无需依赖特定的特殊标记(special token)来定义工具调用的参数边界。模型依靠其强大的指令跟随与推理能力,在指定的system prompt框架下,根据任务需求自动生成响应。这种方式让模型在推理过程中能更灵活地适应多种任务,不需要对Tokenizer进行特殊设计。

优势
  • 灵活适应不同任务,无需设计和维护复杂的标记系统。
  • 适合快速迭代,降低微调和部署的复杂性。
  • 更易与多模态输入(如文本和图像)结合,扩展模型的通用性。
劣势
  • 由于没有明确标记,调用工具时的错误难以捕捉和纠正。
  • 在复杂任务中,模型生成可能不够精准,导致工具调用的准确性下降。

(1)ReAct:将模型的推理分为ReasonAction两个步骤,并让它们交替执行,直到得到最终结果:

  • Reason:生成分析步骤,解释当前任务的上下文或状态,帮助模型理解下一步行动的逻辑依据。
  • Action:基于Reason的结果,生成具体的工具调用请求(如查询搜索引擎、调用API、数据库检索等),将模型的推理转化为行动。

(2)ReWoo:全称为Reason without Observation,是在ReAct范式基础上进行改进的Agent架构,针对多工具调用的复杂性与冗余性提供了一种高效的解决方案。相比于ReAct中的交替推理和行动,ReWoo直接生成一次性使用的完整工具链,减少了不必要的Token消耗和执行时间。同时,由于工具调用的规划与执行解耦,这一范式在模型微调时不需要实际调用工具即可完成。

  • Planner:用户输入的问题或任务首先传递给Planner,Planner将其分解为多个逻辑上相关的计划。每个计划包含推理部分(Reason)以及工具调用和参数(Execution)。Task List按顺序列出所有需要执行的任务链。
  • Worker:每个Worker根据Task List中的子任务,调用指定工具并返回结果。所有Worker之间通过共享状态保持任务执行的连续性。
  • Solver阶段:Worker完成任务后,将所有结果同步到Solver。Solver会对这些结果进行整合,并生成最终的答案或解决方案返回给用户。

2.2.2 模型特化智能体范式

在这种范式下,模型的工具调用必须通过特定的special token明确标记。如InternLM2使用<|action_start|><|action_end|>来定义调用边界。这些标记通常与模型的Tokenizer深度集成,确保在执行特定任务时,能够准确捕捉调用信息并执行。

优势
  • 特定标记明确工具调用的起止点,提高了调用的准确性。
  • 有助于模型在部署过程中避免误调用,增强系统的可控性。
  • 提高对复杂调用链的支持,适合复杂任务的场景。
劣势
  • 需要对Tokenizer和模型架构进行定制,增加开发和维护成本。
  • 调用流程固定,降低了模型的灵活性,难以适应快速变化的任务。

三、任务要求:

使用 Lagent 复现文档中 “制作一个属于自己的Agent” 和 “Multi-Agents博客写作系统的搭建”两部分内容,记录复现过程并截图。

将你的Agent部署到 Hugging Face 或 ModelScope 平台,应用名包含 Lagent 关键词(优秀学员必做)

3.1 环境配置

开发机选择 30% A100,镜像选择为 Cuda12.2-conda,名字命名为Agent

 首先来为 Lagent 配置一个可用的环境。

# 创建环境
conda create -n lagent python=3.10 -y
# 激活环境
conda activate lagent
# 安装 torch
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y
# 安装其他依赖包
pip install termcolor==2.4.0
pip install streamlit==1.39.0
pip install class_registry==2.1.2
pip install datasets==3.1.0

接下来,通过源码安装的方式安装 lagent。

# 创建目录以存放代码
mkdir -p /root/agent_camp4
cd /root/agent_camp4
git clone https://github.com/InternLM/lagent.git
cd lagent && git checkout e304e5d && pip install -e . && cd ..
pip install griffe==0.48.0

3.2 Lagent框架中Agent的使用

首先,需要申请 API 授权令牌 ,前往 书生·浦语 API 文档 申请并获取 Authorization 令牌,将其填入后续代码的 YOUR_TOKEN_HERE 变量中。

注意:这里出于安全考虑,我隐藏了自己的APIKey

创建一个代码example,创建agent_api_web_demo.py,在里面实现我们的Web Demo:

conda activate lagent
cd /root/agent_camp4/lagent/examples
touch agent_api_web_demo.py

ction,也称为工具,Lagent中集成了很多好用的工具,提供了一套LLM驱动的智能体用来与真实世界交互并执行复杂任务的函数,包括谷歌文献检索、Arxiv文献检索、Python编译器等。具体可以查看文档

此处让LLM调用Arxiv文献检索这个工具:

agent_api_web_demo.py中写入下面的代码,这里利用 GPTAPI 类,该类继承自 BaseAPILLM,封装了对 API 的调用逻辑,然后利用Streamlit启动Web服务:

import copy
import os
from typing import List
import streamlit as st
from lagent.actions import ArxivSearch
from lagent.prompts.parsers import PluginParser
from lagent.agents.stream import INTERPRETER_CN, META_CN, PLUGIN_CN, AgentForInternLM, get_plugin_prompt
from lagent.llms import GPTAPI

class SessionState:
    """管理会话状态的类。"""

    def init_state(self):
        """初始化会话状态变量。"""
        st.session_state['assistant'] = []  # 助手消息历史
        st.session_state['user'] = []  # 用户消息历史
        # 初始化插件列表
        action_list = [
            ArxivSearch(),
        ]
        st.session_state['plugin_map'] = {action.name: action for action in action_list}
        st.session_state['model_map'] = {}  # 存储模型实例
        st.session_state['model_selected'] = None  # 当前选定模型
        st.session_state['plugin_actions'] = set()  # 当前激活插件
        st.session_state['history'] = []  # 聊天历史
        st.session_state['api_base'] = None  # 初始化API base地址

    def clear_state(self):
        """清除当前会话状态。"""
        st.session_state['assistant'] = []
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值