【LLM】 TinyAgent 构建指南

news2024/9/28 5:35:55

文章目录

  • TinyAgent 构建指南
    • 项目概述
    • 实现步骤
      • 步骤一:模型构建
      • 步骤二:工具构建
      • 步骤三:Agent 构建
      • 步骤四:运行 Agent
    • 结论
    • 参考文献
    • 学习心得

TinyAgent 构建指南

项目地址:https://github.com/datawhalechina/tiny-universe

项目概述

我们将手动实现一个 Agent 系统,并逐步深入了解其结构和运作原理。以下是基于 React 论文中的一些示例,展示了如何构建和整合模型与工具。

实现步骤

步骤一:模型构建

首先,我们需要加载大语言模型。在本项目中,我们将使用 InternLM2 作为我们的对话模型。通过 transformers 库,我们可以轻松加载模型。

我们从一个 BaseModel 类开始,该类定义了基本的方法,比如 chatload_model,以便后续扩展。

class BaseModel:
    def __init__(self, path: str = '') -> None:
        self.path = path

    def chat(self, prompt: str, history: List[dict]):
        pass

    def load_model(self):
        pass

接下来,创建一个 InternLM2Chat 类,继承自 BaseModel,实现模型加载和聊天功能。

class InternLM2Chat(BaseModel):
    def __init__(self, path: str = '') -> None:
        super().__init__(path)
        self.load_model()

    def load_model(self):
        print('================ 加载模型 ================')
        self.tokenizer = AutoTokenizer.from_pretrained(self.path, trust_remote_code=True)
        self.model = AutoModelForCausalLM.from_pretrained(self.path, torch_dtype=torch.float16, trust_remote_code=True).cuda().eval()
        print('================ 模型加载完成 ================')

    def chat(self, prompt: str, history: List[dict], meta_instruction: str = '') -> str:
        response, history = self.model.chat(self.tokenizer, prompt, history, temperature=0.1, meta_instruction=meta_instruction)
        return response, history

步骤二:工具构建

tools.py 文件中,我们将构建一些工具,例如 Google 搜索。首先,创建一个 Tools 类,添加工具的描述和实现方式。

我们需要为 Google 搜索工具添加描述信息,以便在构造 system_prompt 时让模型了解工具的功能和参数。

class Tools:
    def __init__(self) -> None:
        self.toolConfig = self._tools()
    
    def _tools(self):
        tools = [
            {
                'name_for_human': '谷歌搜索',
                'name_for_model': 'google_search',
                'description_for_model': '谷歌搜索是一个通用搜索引擎,可用于访问互联网、查询百科知识、了解时事新闻等。',
                'parameters': [
                    {
                        'name': 'search_query',
                        'description': '搜索关键词或短语',
                        'required': True,
                        'schema': {'type': 'string'},
                    }
                ],
            }
        ]
        return tools

    def google_search(self, search_query: str):
        pass

步骤三:Agent 构建

Agent.py 文件中,我们将实现一个符合 React 方法论的 Agent 类。在此类中,实现 text_completion 方法,用于对话处理。

首先,我们需要构造系统提示 (system_prompt),使模型清楚可以调用哪些工具以及如何格式化输出。

def build_system_input(self):
    tool_descs, tool_names = [], []
    for tool in self.tool.toolConfig:
        tool_descs.append(TOOL_DESC.format(**tool))
        tool_names.append(tool['name_for_model'])
    tool_descs = '\n\n'.join(tool_descs)
    tool_names = ','.join(tool_names)
    sys_prompt = REACT_PROMPT.format(tool_descs=tool_descs, tool_names=tool_names)
    return sys_prompt

system_prompt 向大模型说明其可用工具及其功能,确保输出格式一致。

每次用户提问时,如果需要调用工具,模型将进行两次调用:第一次解析问题并选择工具,第二次整合工具返回的结果与用户问题。

下面是 Agent 类的简要实现:

class Agent:
    def __init__(self, path: str = '') -> None:
        pass

    def build_system_input(self):
        # 构造系统提示词
        pass
    
    def parse_latest_plugin_call(self, text):
        # 解析工具调用和参数
        pass
    
    def call_plugin(self, plugin_name, plugin_args):
        # 调用选择的工具
        pass

    def text_completion(self, text, history=[]):
        # 整合两次调用
        pass

在这里插入图片描述

步骤四:运行 Agent

在该案例中,使用 InternLM2-chat-7B 模型。如果您希望 Agent 更加稳定,可以使用其 big cup 版本 InternLM2-20b-chat

以下是运行示例:

from Agent import Agent

agent = Agent('/root/share/model_repos/internlm2-chat-20b')

response, _ = agent.text_completion(text='你好', history=[])
print(response)

response, _ = agent.text_completion(text='周杰伦是哪一年出生的?', history=_)
print(response)

response, _ = agent.text_completion(text='周杰伦是谁?', history=_)
print(response)

response, _ = agent.text_completion(text='他的第一张专辑是什么?', history=_)
print(response)

该系统将智能响应用户查询并结合 Google 搜索提供的信息。

结论

本文介绍了如何构建一个基本的 Agent 系统,结合了大语言模型与外部工具。未来,我们将继续扩展更多工具功能,特别是在地理信息系统分析方面。

参考文献

  • ReAct: Synergizing Reasoning and Acting in Language Models

学习心得

本次尝试构建一个基本的agent。使用tramsformer库完成load_model的目的,自定义类实现了chat方法。自定义Tools 类,添加工具的描述和实现方式(以google搜索为例)。都会进行两次的大模型调用,第一次通过parse_latest_plugin_call方法解析用户的提问,通过call_plugin方法选择调用的工具和参数,第二次通过text_completion方法将工具返回的结果与用户的提问整合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2172498.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解位示图计算方法、代码

位示图 位示图的核心思想计算过程与位操作假设问题场景: 实际操作与计算:1. 位示图的初始化2. 设置某一位(标记资源占用)3. 清除某一位(释放资源)4. 查询某一位(检查资源状态) 示例问…

【2米/8米光学卫星】

2米/8米光学卫星 2米/8米光学卫星,通常指的是GF-1 B、C、D卫星,这是我国民用空间基础设施发展规划中的首个民用高分辨率光学陆地业务星座,也是自然资源部组建后发射的首批业务卫星。以下是对该卫星的详细介绍: 一、基本信息 发…

k8s 分布式存储平台 -- Longhorn

文章目录 一、什么是 Longhorn二、架构设计1、工作原理2、工作流程3、基于微服务设计的优势 三、安装1、安装要求2、使用 Longhorn 命令行工具(验证方式一)3、使用环境检查脚本(验证方式之二)3.1、安装 jq3.2、运行脚本 4、安装 o…

AI会议时代:企业如何搭上快车?

“我 们认为,AI绝不仅是会议的辅助工具,而更会是重塑会议流程的关键力量。通过AI的个性化定制、大规模支持、智能分析这些技术,AI会议将大大提升会议的智能化与高效性,进而成为企业数字化转型的核心驱动力。” 作者|斗斗 编辑…

QTreeview model过滤

QTreeview model数据过滤:大小写区分,对列过滤,对子对象过滤 示例: 需要自定义QSortFilterProxyModel, //自定义过滤model mProxyModel new TreeFilterProxyModel(this); //添加treeview当前model mProxyModel->setSource…

【源码+文档+调试讲解】学生选课系统Python

摘 要 学生选课系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的Python进行编写,使用了Django框架。该系统从三个对象:由管理员和学生、教师来对系统进行设计构建。主要功能包括:个人信息修改,对学生、教…

Brave编译指南2024 MacOS篇-获取源码(三)

引言 在上一篇文章中,我们介绍了Brave浏览器的基本特性,以及编译Brave所需的系统要求和推荐工具。现在,我们将进入编译过程的第一个实际步骤:获取Brave的源代码。这一步骤对于后续的编译和开发工作至关重要。 1. Brave源码的获取途径 Brave的源码托管在GitHub上,任何人都可以…

YOLO格式数据集转为COCO数据集(简单粗暴)

最近需要用的coco格式的数据集,但是在网上找的很多 毕竟麻烦,简单记录一下! 1、调整目录结构(以GC10-DET数据集为例) YOLO格式数据集目录结构如下: 简单来说就是images文件夹里面有train、val、test三个文…

OJ在线评测系统 在Linux虚拟机搭建Docker 概念 入门 安装

Docker的基本概念 为什么要用docker容器技术 为了提升系统的安全性 把不同的程序和宿主机进行隔离 使得某个程序 应用的执行不会影响到系统本身 docker技术可以实现程序和宿主机的隔离 容器可以理解成对一系列应用程序、服务和环境的封装 从而把程序运行在一个隔离的 封闭…

在阿里云PAI的DSW上面部署InternLM-XComposer2-VL-1.8B和InternVL2-2B

1.准备开发环境 1.1 阿里交互式建模(DWS) 首先,去阿里云账号注册界面注册好自己的账号然后,开通人工智能平台PAI 如果已经开通,可以进入管理控制台点击,“新建实例”实例名称,根据自己的意愿填写资源配额选择"公共资源组(按量付费)"资源规格"ecs.gn7i-c8g1.2x…

回归预测合集|基于灰狼优化21个机器学习和深度学习的数据回归预测Matlab程序 多特征输入单输出

回归预测合集|基于灰狼优化21个机器学习和深度学习的数据回归预测Matlab程序 多特征输入单输出 文章目录 一、清单二、实验结果三、核心代码四、代码获取五、总结 一、清单 基于灰狼优化BP神经网络的数据预测Matlab程序GWO–BP 基于灰狼优化卷积神经网络的数据预测Matlab程序G…

c++day08

思维导图 栈 #include <iostream>using namespace std;template <typename T> class Stack { private:static const size_t MAX 100; // 定义固定容量T data[MAX]; // 存储栈元素的数组size_t len; // 当前栈的大小public:…

华为玄玑感知系统震撼发布:智能穿戴新品引领情绪健康新纪元

在科技日新月异的今天&#xff0c;华为再次以其卓越的创新能力&#xff0c;为智能穿戴领域带来了一场革命性的变革。 8月28日&#xff0c;华为玄玑感知系统暨穿戴创新技术发布会圆满落幕&#xff0c;会上正式揭晓了这款名为“玄玑”的神秘感知系统&#xff0c;预示着穿戴设备将…

9.26 Buu俩题解

[CISCN2019 华东北赛区]Web2 看wp写完之后写的 知识点 存储型XSS与过滤绕过sql注入 题解 好几个页面&#xff0c;存在登录框可以注册&#xff0c;存在管理员页面(admin.php) ->既然存在管理员页面&#xff0c;且直接访问admin.php提示我们 说明存在身份验证&#xff0…

【深度学习】低维向量映射到高维空间的方法

低维向量映射到高维空间的方法 1、全连接层&#xff08;线性层&#xff09;&#xff1a; 全连接层&#xff0c;也称为线性层&#xff0c;是神经网络中最基本的组件之一。它通过一个权重矩阵和一个偏置向量对输入向量进行线性变换。如果输入向量的维度是 din&#xff0c;而我们…

Splashtop 加入 Microsoft 智能安全协会

2024年9月25日 美国加利福尼亚州库比蒂诺 Splashtop Inc . 今天宣布已正式加入 Microsoft 智能安全协会&#xff08;MISA&#xff09;。MISA 由独立软件供应商&#xff08;ISV&#xff09;和托管安全服务提供商&#xff08;MISA&#xff09;组成&#xff0c;他们将其解决方案与…

无人机之视觉导航算法篇

一、图像采集与预处理 图像采集&#xff1a;无人机通过其搭载的摄像头或其他视觉传感器实时采集周围环境的图像信息。 图像预处理&#xff1a;对采集到的图像进行预处理&#xff0c;包括滤波、降噪、增强等操作&#xff0c;以提高图像的质量和清晰度&#xff0c;为后续的特征…

Linux当中的权限问题

文章目录 一、Linux权限的概念1. Linux中的用户分类2. 不同用户之间的转换(1) 普通用户->root(2) root->普通用户(3) 普通用户->普通用户 二、Linux权限管理1. 文件访问者的分类2. 文件类型和访问权限&#xff08;1&#xff09;文件后缀在Linux中的作用&#xff08;2&…

三个视觉领域常用数据标注工具:labelImg 解压安装基础使用、 label-studio 的安装和基础使用【检测数据标注】

&#x1f947; 版权: 本文由【墨理学AI】原创、在CSDN首发、各位大佬、敬请查阅&#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 本次博文主要对如下三个视觉领域常用数据标注工具进行初步整理 labelImglabel-studio 工具Robo…

生成式AI如何辅助医药行业智能营销

生成式AI在医药行业的智能营销中发挥着日益重要的作用&#xff0c;它通过多种方式辅助医药企业提升市场洞察能力、优化营销策略、增强客户互动和体验&#xff0c;从而推动销售增长和品牌价值的提升。以下是生成式AI如何辅助医药行业智能营销的具体方式&#xff1a;一、精准市场…