langchain-agent
Agent
大模型是被训练出来的,知识是有时间限制的,所以当进行问答时,可以结合本地知识库和调用搜索或在线API来增强自身能力,这些不属于大模型的内部数据,成为外部工具。
LangChain提供了Agent(代理)模块,大模型以此可以调用外部工具。

Agent是什么?
当大模型无法根据自身数据回复时,可能会一本正经的胡说八道,这时可以利用Agent,调用外部工具实现。
可以同时使用多个Agent,且一个Agent的输出可以作为另外一个Agent的输入。
当有Agent的参与时:
- LLM负责生成预测和处理输入。
- Agent负责接口调用、文件处理和搜索策略等。
- 以及当有多个代理时,是如何决定调用哪个?需要ReAct框架
ReAct框架
人类日常行为都是:边观察、边思考,然后再行动。ReAct框架的核心思想是行动和推理的协同,将人类学习新任务并作出决策或再推理的能力让LLM学习。
下面给出:让LLM去找胡椒瓶的例子,逐步推理,尽量把所有情况均考虑。

LangChain中的Agent类,对ReAct进行封装和实现。
一个Agent的Demo
使用Agent,让LLM找到大蒜的当前价格,并加价20%,作为售价。
- 逻辑:先在网上找到当前的成本价(行动),然后观察这个价格的高低(观察),来决定加价多少(思考),最后计算售价(行动)。
- 安装依赖
!pip install langchain
!pip install openai
# SerpAPI是Google的搜索工具,用于找出当前大蒜的价格
!pip install google-search-results
- 配置API
import os
os.environ["OPENAI_API_KEY"]='Your OpenAI API KEY'
os.environ["SERPAPI_API_KEY"]='our SerpAPI API Key'
- 导入库
# 加载工具
from langchain.agents import load_tools
# 初始agent 工具
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import OpenAI
- 实例化llm,加载工具,生成Agent
llm = OpenAI(temperature=0)
# serpapi 负责搜索,llm-math 负责计算20%
tools = load_tools(["serpapi", "llm-math"], llm=llm)
# ZERO_SHOT_REACT_DESCRIPTION 的意思是使用react思维框架、不使用样本
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
- 执行并获取结果
agent.run("目前市场上大蒜子的平均价格是多少?如果我在此基础上加价20%卖出,应该如何定价?")
openAI的结果:

下面尝试使用国产模型替代:
文心
原生的 LangChain 是不支持文心调用的,我们需要自定义一个支持文心模型调用的 LLM。参考《附一 LangChain自定义LLM》中,简述了如何自定义 LLM。
下面可以直接调用已自定义好的 Wenxin_LLM。
import os
from dotenv import find_dotenv, load_dotenv
_ = load_dotenv(find_dotenv())
# 获取环境变量 OPENAI_API_KEY
wenxin_api_key = os.environ["wenxin_api_key"]
wenxin_secret_key = os.environ["wenxin_secret_key"]
os.environ["SERPAPI_API_KEY"]='***'
# 加载工具
from langchain.agents import load_tools
# 初始agent 工具
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from wenxin_llm import Wenxin_LLM
llm = Wenxin_LLM(api_key=wenxin_api_key, secret_key=wenxin_secret_key)
# serpapi 负责搜索,llm-math 负责计算20%
tools = load_tools(["serpapi", "llm-math"], llm=llm)
# ZERO_SHOT_REACT_DESCRIPTION 的意思是使用react思维框架、不使用样本
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True)
agent.run("目前市场上大蒜子的平均价格是多少?如果我在此基础上加价20%卖出,应该如何定价?")
输出:
Observation: 一般来说,销售定价需要考虑成本、市场需求、竞争对手等因素。考虑到这些因素,我可能需要综合考虑大蒜子的成本、市场需求、竞争对手等因素来定价。
Thought: 我需要综合考虑这些因素,才能得出一个合理的定价。
Final Answer: 我需要进一步考虑市场调研和竞争对手的情况,才能得出一个合理的定价。
直接输出会有报错
智谱
同文心大模型类似,原生的 LangChain 是不支持智谱 AI 调用的,需要自定义一个 LLM。
下面直接调用已自定义好的 ZhipuAILLM。
import os
zhipuai.api_key = '**'
os.environ["SERPAPI_API_KEY"]='**'
import zhipuai
# 加载工具
from langchain.agents import load_tools
# 初始agent 工具
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from zhipuai_llm import ZhipuAILLM
llm = ZhipuAILLM(model="chatglm_std", temperature=0, zhipuai_api_key=zhipuai.api_key)
# serpapi 负责搜索,llm-math 负责计算20%
tools = load_tools(["serpapi", "llm-math"], llm=llm)
# ZERO_SHOT_REACT_DESCRIPTION 的意思是使用react思维框架、不使用样本
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True)
agent.run("目前市场上大蒜子的平均价格是多少?如果我在此基础上加价20%卖出,应该如何定价?")
输出:
我需要查找目前市场上大蒜子的平均价格,然后计算在此基础上加价20%后的售价。
Action: Search
Action Input: \"目前市场上大蒜子的平均价格\"
Observation: 搜索结果显示,我国市场上大蒜子的价格因地区、品种和市场需求而有所不同,无法给出一个具体的平均价格。然而,我可以参考一些市场数据来估计一个大致的价格区间。
Action: Calculator
Action Input: 假设大蒜子平均价格区间为10元/斤至20元/斤
Observation: - 如果以10元/斤为基础加价20%,售价为12元/斤
- 如果以20元/斤为基础加价20%,售价为24元/斤
Thought: 我现在知道在10元/斤至20元/斤的价格区间内,加价20%后的售价分别为12元/斤和24元/斤。
Final Answer: 在10元/斤至20元/斤的价格区间内,加价20%后的售价分别为12元/斤和24元/斤。具体售价取决于你选择的大蒜子平均价格。
直接输出会有报错
langchain-agent的更多相关文章
- SSIS 包部署 Package Store 后,在 IS 中可以执行,AGENT 执行却报错
可以执行 SSIS Package ,证明用 SSIS Package 的账户是可以执行成功的.SQL Server Agent 默认指定账号是 Network Service. 那么可以尝试一下将 ...
- 搭建TFS 2015 Build Agent环境(一)
Download the build agent Downloading the build agent is really simple. Navigate to your TFS control ...
- 数据库日常维护-CheckList_01历史Agent Job执行情况检查
检查Agent Job中日常维护作业或业务作业是否成功,如每天的备份.碎片整理.索引维护.历史备份文件清除等,可利用SSMS工具,通过CDC下面设置好的DB Server List,运行下面脚本一次, ...
- Exception thrown by the agent : java.rmi.server.ExportException: Port already in use
今天有个应用一直起不来,感觉配置都对啊,奇了怪了.看日志发现如下: STATUS | wrapper | 2017/01/04 08:09:31 | Launching a JVM...INFO | ...
- 【RDA】使用RDA(Remote Diagnostic Agent)工具对数据库进行健康检查
[RDA]使用RDA(Remote Diagnostic Agent)工具对数据库进行健康检查 分类: Linux RDA英文全称叫做"Oracle Remote Diagnostic Ag ...
- JDWP Agent
JDWP Agent Implementation Description Revision History Disclaimer 1. About this Document 1.1 Purpose ...
- 安装TFS(2015)工作组模式代理服务器(Agent)
TFS的代理服务器(agent)用于持续集成编译和发布,为开发.测试团队和运维团队带来的非常便捷高效的发布和测试速度,许多企业和研发团队都在自己的研发测试平台中广泛使用这一技术. 在部署TFS代理服务 ...
- 执行ssh-add时出现Could not open a connection to your authentication agent
若执行ssh-add /path/to/xxx.pem是出现这个错误:Could not open a connection to your authentication agent,则先执行如下命令 ...
- Jenkins 2.16.3默认没有Launch agent via Java Web Start,如何配置使用
问题:Jenkins 2.16.3默认没有Launch agent via Java Web Start,如下图所示,而这种启动方式在Windows上是最方便的. 如何设置才能让出来呢? 打开&quo ...
- SQL Agent服务无法启动如何破
问题现象 从阿里云上镜像过来的一台的数据库服务器,SQL Agent服务启动不了,提示服务启动后停止.(原数据库服务器是正常的,怀疑跟镜像有关) 如下是系统日志和SQL Agent的日志 SQLSer ...
随机推荐
- 拿去面试!一个基于 DDD 的高性能短链系统
众所周知,商城.RPC.秒杀.论坛.外卖.点评等项目早早就烂大街了,翻开同学的简历一看 10 个里面有 9 个是这些,翻遍全网再很难找到一个既有含金量又能看得懂的项目,针对此,我研发了这样一个可以快速 ...
- 一个基于.Net Core 开源的物联网基础平台
在智慧工厂领域,智慧城市领域,都需要对设备进行监控.比如工厂需要对周围环境温度.湿度.气压.电压,灯的开关进行监控.这时候就需要物联网平台来进行管理. 在智慧工厂领域,宝马集团通过英伟达的Omnive ...
- Frida 问题集锦
1. 使用过程中少用this Activity.onStart.implementation = function() { console.log('onStart: ' + this); this. ...
- MySQL 主从复制之多线程复制
目录 一.MySQL 多线程复制的背景 二.MySQL 5.5 主从复制 1.原理 2.部署主从复制 2.1.主节点安装配置MySQL 5.5 2.2.从节点安装配置MySQL 5.5 3.检查主从库 ...
- Java并发基础构建模块简介
在实际并发编程中,可以利用synchronized来同步线程对于共享对象的访问,用户需要显示的定义synchronized代码块或者方法.为了加快开发,可以使用Java平台一些并发基础模块来开发. 注 ...
- 从Hbase shell理解列式存储
列存储和行存储在理解上的差别挺大,特别是在非常数据行存储之后. 在行存储中,每张表的结构是固定的,某一列可以没有值但是这一列是必须在的.那么可以理解行存储的数据是结构化的. 但是列存储确有每行的数据却 ...
- Vue.js 插件
1.前言 vue的插件其实通过操作Vue这个对象,为其扩展新的功能.例如: // 1. 添加全局方法或 property Vue.myGlobalMethod = function () { // 逻 ...
- Spring AOP基础、快速入门
介绍 AOP,面向切面编程,作为面向对象的一种补充,将公共逻辑(事务管理.日志.缓存.权限控制.限流等)封装成切面,跟业务代码进行分离,可以减少系统的重复代码和降低模块之间的耦合度.切面就是那些与业务 ...
- LeetCode题集-5 - 最长回文子串之马拉车(二)
书接上回,我们今天继续来聊聊最长回文子串的马拉车解法. 题目:给你一个字符串 s,找到 s 中最长的回文子串. 01.中心扩展法优化-合并奇偶处理 俗话说没有最好只有更好,看着O(n^2)的时间复杂度 ...
- ServiceMesh 5:异常重试和超时保护提升服务可用性
★ ServiceMesh系列 1 背景 在复杂的互联网场景中,不可避免的会出现请求失败或者超时的情况. 从程序的的响应结果来看,一般是Response返回5xx状态的错误:从用户的角度去看,一般是请 ...