LangChain入门教程 - 使用代理Agent
对于大模型,比如某些场景,需要数学计算,或者需要从某些网站获取参考资料,就必须使用专门的代理来完成任务。这里我们使用langchain提供的数学工具来实现一个最简单的例子,下一篇我们会讲如何自己实现代理。
首先创建一个对话模型,记得自己设置环境变量QIANFAN_AK和QIANFAN_SK。
from langchain_community.chat_models import QianfanChatEndpointchatModel = QianfanChatEndpoint(model='ERNIE-Bot',endpoint='completions'
)
组装代理
我们使用lc库提供的数学包LLMMathChain组装数学代理,负责数学相关的计算工作。这里简单解释一下代理的工作原理,不完全正确,但大概原理是没跑的:大模型在收到问题后,和工具的描述匹配一下,决定使用哪些工具。然后把问题理解后生成合适的参数调用工具并返回结果。这里面是个大黑盒,怎么理解和拆分问题并匹配工具都是由大模型自己决定的,你只能通过提示词给出参考。对于百度的千帆,测试中发现对于数学问题用英文提问比较好,如果是中文理解就问有问题,没法正确调用工具。
from langchain import LLMMathChain
from langchain.agents import AgentType, initialize_agent
from langchain.tools import BaseTool, Tool
from pydantic import BaseModel, Fieldtools = []class CalculatorInput(BaseModel):question: str = Field()llm_math_chain = LLMMathChain(llm=chatModel, verbose=True)tools.append(Tool.from_function(func=llm_math_chain.run,name='牛逼的计算器',description='用于回答数学问题',args_schema=CalculatorInput)
)# ZERO_SHOT_REACT_DESCRIPTION代表根据工具的描述进行选择
agent = initialize_agent(tools, chatModel, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True
)
这里args_schema参数用于构造输入参数,CalculatorInut的写法参考pydantic的文档:pydantic · PyPI
提问
# 使用英文便于大模型理解
agent.run('What is the result of 5.85 raised to the 2.16 power?'
)"""输出
> Entering new AgentExecutor chain...This is a mathematical question that requires raising a number to a specific power.Action: 牛逼的计算器
Action Input: Calculate 5.85 raised to the power of 2.16> Entering new LLMMathChain chain...
Calculate 5.85 raised to the power of 2.16```text
5.85**2.16
```
...numexpr.evaluate("5.85**2.16")...Answer: 45.400085499141575
> Finished chain.Observation: Answer: 45.400085499141575
Thought:I now know the result of 5.85 raised to the 2.16 power.Final Answer: 5.85 raised to the 2.16 power is equal to 45.400085499141575.> Finished chain.
"""
代理是如何执行的?
前面我们在构造tool时,func参数设置为llm_math_chain.run。那么这个函数支持哪些参数,被调用时传进来的参数又是什么样的呢?一种方法是找源码,那个比较费事,我们可以inspect库提供的方法查看信息,然后自己在run函数外面包一层,就能看到想要看的信息了。
使用inspect函数查看信息,我们可以看到run有哪些参数和参数的默认值。
import inspectsig = inspect.signature(llm_math_chain.run)for name, para in sig.parameters.items():print(name, para.default)'''输出
args <class 'inspect._empty'>
callbacks None
tags None
metadata None
kwargs <class 'inspect._empty'>
'''
我们在这里只关心第一个参数args,我们自己定义一个函数打印传了什么参数进来。
from langchain import LLMMathChain
from langchain.tools import BaseTool, Tool
from pydantic import BaseModel, Fieldtools = []class CalculatorInput(BaseModel):question: str = Field()llm_math_chain = LLMMathChain(llm=chatModel, verbose=True)def my_math_func(*args):print('输入参数', args)return llm_math_chain.run(*args)tools.append(Tool.from_function(func=my_math_func,name='牛逼的计算器',description='用于回答数学问题',args_schema=CalculatorInput)
)'''
我们可以看到以下输出:Action: 牛逼的计算器Action Input: Calculate 5.85 raised to the 2.16 power.
输入参数 ('Calculate 5.85 raised to the 2.16 power.\n',)
'''
相关文章:
LangChain入门教程 - 使用代理Agent
对于大模型,比如某些场景,需要数学计算,或者需要从某些网站获取参考资料,就必须使用专门的代理来完成任务。这里我们使用langchain提供的数学工具来实现一个最简单的例子,下一篇我们会讲如何自己实现代理。 首先创建一…...
windows驱动开发-内核编程技术汇总(五)
使用安全字符串函数 和应用层不一样的是,windows内核完全使用Unicode字符串,许多支持AsciiC的windowsAPI,是在应用层完成项Unicode的切换的。许多系统安全问题是由缓冲区处理不善和生成的缓冲区溢出引起的。 糟糕的缓冲区处理通常与字符串操…...
Java中的optional类是啥和例子
Optional 是 Java 8 引入的一个容器对象,用于表示值存在或不存在。这是一个可以为 null 的容器对象,但使用 Optional 比直接使用 null 更安全,因为 Optional 类提供了许多有用的方法,以便更优雅地处理可能存在或不存在的值。 使用…...
AI大模型探索之路-训练篇16:大语言模型预训练-微调技术之LoRA
系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…...
mysql事务锁排查
-- mysql show full PROCESSLIST; -- 查看哪些表在锁。 show open tables where IN_use>0; -- 正在执行的事务: SELECT * FROM information_schema.INNODB_TRX;-- 8.0之前 查看正在锁的事务 select * from information_schema.innodb_locks;-- 查看等待锁的事务 …...
ChatGPT变懒原因:正在给自己放寒假!已被网友测出
ChatGPT近期偷懒严重,有了一种听起来很离谱的解释: 模仿人类,自己给自己放寒假了~ 有测试为证,网友Rob Lynch用GPT-4 turbo API设置了两个系统提示: 一个告诉它现在是5月,另一个告诉它现在是1…...
C#标签设计打印软件开发
1、新建自定义C#控件项目Custom using System; using System.Collections.Generic; using System.Text;namespace CustomControls {public class CommonSettings{/// <summary>/// 把像素换算成毫米/// </summary>/// <param name="Pixel">多少像素…...
Springboot+vue+小程序+基于微信小程序的在线学习平台
一、项目介绍 基于Spring BootVue小程序的在线学习平台从实际情况出发,结合当前年轻人的学习环境喜好来开发。基于Spring BootVue小程序的在线学习平台在语言上使用Java语言进行开发,在数据库存储方面使用的MySQL数据库,开发工具是IDEA。…...
正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-13-按键实验
前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…...
ubuntu与redhat的不同之处
华子目录 什么是ubuntu概述 ubuntu版本简介桌面版服务器版 安装部署部署后的设置设置root密码关闭防火墙启用允许root进行ssh登录更改apt源安装所需软件 安装nginx安装apache网络配置Netplan概述配置详解配置文件DHCP静态IP设置设置 软件安装方法apt安装软件作用常用命令配置ap…...
三岁孩童被家养大型犬咬伤 额部撕脱伤达10公分
近期,一名被家养大型犬咬伤了面部的3岁小朋友,在被家人紧急送来西安国际医学中心医院,通过24小时急诊门诊简单救治后,转至整形外科,由主治医师李世龙为他实施了清创及缝合手术。 “患者额部撕脱伤面积约为10公分&…...
@click=“handleClick()“不会传递默认事件参数
当你使用click"handleClick()"这种形式绑定事件处理器时,Vue会将它视为一个函数调用,而不是一个事件监听器。在这种情况下,Vue不会自动传递原生事件对象作为默认参数。 如果你想让Vue自动传递原生事件对象作为默认参数,…...
KVM安装Ubuntu24.04简要坑点以及优点
本机环境是ubuntu22.04的环境,然后是8核16线程 ssd是500的 目前对于虚拟机的选择,感觉kvm确实会更加流畅,最重要的一点是简洁,然后实际安装效果也比较的好,如果对于速度方面希望快一点,并且流畅一点的话这…...
QT_day1
#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//修改窗口标题this->setWindowTitle("4.6.0");//修改窗口图标this->setWindowIcon(QIcon("C:\\Users\\zj\\Desktop\\yuanshen\\icon"));//修改窗口大小this…...
AWS宣布推出Amazon Q :针对商业数据和软件开发的生成性AI助手
亚马逊网络服务(AWS)近日宣布推出了一项名为“Amazon Q”的新服务,旨在帮助企业利用生成性人工智能(AI)技术,优化工作流程和提升业务效率。这一创新平台的推出,标志着企业工作方式的又一次重大变…...
C++:多继承虚继承
在C中,虚继承(Virtual Inheritance)是一种特殊的继承方式,用于解决菱形继承(Diamond Inheritance)问题。菱形继承指的是一个类同时继承自两个或更多个具有共同基类的类,从而导致了多个实例同一个…...
Linux进程间通信
每个进程的用户空间都是独立的,不能相互访问。 所有进程的内核空间(32位系统3G-4G)都是共享的 应用场景 作为缓冲区,处理速度不同的进程之间的数据传输资源共享:多个进程之间共享同样的资源,一个进程对共享数据的修改,…...
【二叉树算法题记录】222. 完全二叉树的节点个数
题目描述 给你一棵 完全二叉树 的根节点root ,求出该树的节点个数。 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位…...
每日新闻掌握【2024年5月6日 星期一】
2024年5月06日 星期一 农历三月廿八 大公司/大事件 多个品牌黄金优惠后价格重回600元/克以下 “五一”假期期间,记者走访调研黄金消费市场发现,受国际金价回落及“五一”假期促销等多重因素影响,终端黄金价格出现了较为明显的回落。包括周大…...
谈谈Tcpserver开启多线程并发处理遇到的问题!
最近在学习最基础的socket网络编程,在Tcpserver开启多线程并发处理时遇到了一些问题! 说明 在linux以及Windows的共享文件夹进行编写的,所以代码中有的部分使用 #ifdef WIN64 ... #else ... #endif 进入正题!!&…...
智能车竞赛调参避坑指南:从舵机中值校准到PD参数整定,新手也能快速上手的实战经验
智能车竞赛调参实战手册:从机械校准到控制算法优化的全流程解析 引言:为什么调参是智能车竞赛的核心竞争力? 全国大学生智能汽车竞赛中,硬件组装和基础代码编写只是起点,真正的挑战在于如何让车辆在赛道上稳定高速行驶…...
毕业设计实战:基于SpringBoot+Vue+MySQL的校园一卡通管理系统设计与实现指南
毕业设计实战:基于SpringBootVueMySQL的校园一卡通管理系统设计与实现指南 在开发“基于SpringBootVueMySQL的校园一卡通管理系统”毕业设计时,曾因器材借用表未通过学生ID与器材ID双外键关联踩过关键坑——初期仅单独设计借用表的编号字段,…...
双臂机器人Matlab仿真及程序源码
双臂机器人matlab仿真,程序源码,带注释,带轨迹规划。打开Matlab敲下第10086行机械臂仿真代码,突然发现让两个铁胳膊和谐共舞可比教人类小朋友握手难多了。今天就唠唠怎么用Matlab让双机械臂画出完美轨迹,重点看黄色告警…...
SpringBoot+Vue学生在线训练考试系统源码+论文
代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择: 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…...
包含多体型模板的AI虚拟智能试衣系统源码
温馨提示:文末有资源获取方式在电商竞争日益白热化的今天,商品展示图的质量直接决定了点击率与转化率。对于服装类目而言,传统模特拍摄不仅面临模特、摄影、场地的高昂成本,更受限于漫长的拍摄周期。为了解决这一行业痛点…...
如何快速掌握云端几何计算:5步实现设计自动化革命
如何快速掌握云端几何计算:5步实现设计自动化革命 【免费下载链接】compute.rhino3d REST geometry server based on RhinoCommon and headless Rhino 项目地址: https://gitcode.com/gh_mirrors/co/compute.rhino3d Rhino Compute是基于RhinoCommon和无头Rh…...
FreeCAD+AI实战:手把手教你用CAD-Assistant自动生成3D模型(附避坑指南)
FreeCADAI实战:手把手教你用CAD-Assistant自动生成3D模型(附避坑指南) 在传统CAD设计流程中,从手绘草图到可编辑的3D模型往往需要经历繁琐的描线、约束添加和参数调整。CAD-Assistant的出现彻底改变了这一局面——这款基于工具增强…...
Qwen3-4B-Thinking-2507:轻量级AI推理模型的3大突破性技术革命
Qwen3-4B-Thinking-2507:轻量级AI推理模型的3大突破性技术革命 【免费下载链接】Qwen3-4B-Thinking-2507-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/Qwen3-4B-Thinking-2507-GGUF 在AI模型参数规模持续膨胀的今天,Qwen3-4B-Thi…...
Midscene.js vs Selenium:AI自动化与浏览器测试工具实战对比(附场景选择指南)
Midscene.js vs Selenium:AI自动化与浏览器测试工具实战对比(附场景选择指南) 在自动化测试和业务流程自动化的世界里,工具的选择往往决定了项目的成败。作为一名经历过无数次深夜调试和紧急修复的老兵,我深知选错工具…...
给你一张清单 9个降AI率网站 毕业论文全流程必备测评与推荐
在当前学术写作日益依赖AI工具的背景下,如何有效降低论文的AIGC率、去除AI痕迹,同时保持内容的逻辑性和语义通顺,成为许多学生和研究者关注的焦点。AI降重工具应运而生,不仅能够精准识别并修改AI生成内容的特征,还能在…...
