Agent

参考:LangChain 实战:Agent思维

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

LangChain提供了Agent(代理)模块,大模型以此可以调用外部工具。

Agent是什么?

当大模型无法根据自身数据回复时,可能会一本正经的胡说八道,这时可以利用Agent,调用外部工具实现。

可以同时使用多个Agent,且一个Agent的输出可以作为另外一个Agent的输入。

当有Agent的参与时:

  1. LLM负责生成预测和处理输入。
  2. Agent负责接口调用、文件处理和搜索策略等。
  3. 以及当有多个代理时,是如何决定调用哪个?需要ReAct框架

ReAct框架

人类日常行为都是:边观察、边思考,然后再行动。ReAct框架的核心思想是行动和推理的协同,将人类学习新任务并作出决策或再推理的能力让LLM学习

下面给出:让LLM去找胡椒瓶的例子,逐步推理,尽量把所有情况均考虑。

LangChain中的Agent类,对ReAct进行封装和实现。

一个Agent的Demo

使用Agent,让LLM找到大蒜的当前价格,并加价20%,作为售价。

  • 逻辑:先在网上找到当前的成本价(行动),然后观察这个价格的高低(观察),来决定加价多少(思考),最后计算售价(行动)。
  1. 安装依赖
!pip install langchain
!pip install openai
# SerpAPI是Google的搜索工具,用于找出当前大蒜的价格
!pip install google-search-results
  1. 配置API
import os
os.environ["OPENAI_API_KEY"]='Your OpenAI API KEY'
os.environ["SERPAPI_API_KEY"]='our SerpAPI API Key'
  1. 导入库
# 加载工具
from langchain.agents import load_tools
# 初始agent 工具
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import OpenAI
  1. 实例化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)
  1. 执行并获取结果
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的更多相关文章

  1. SSIS 包部署 Package Store 后,在 IS 中可以执行,AGENT 执行却报错

    可以执行 SSIS Package ,证明用 SSIS Package 的账户是可以执行成功的.SQL Server Agent 默认指定账号是 Network Service. 那么可以尝试一下将 ...

  2. 搭建TFS 2015 Build Agent环境(一)

    Download the build agent Downloading the build agent is really simple. Navigate to your TFS control ...

  3. 数据库日常维护-CheckList_01历史Agent Job执行情况检查

    检查Agent Job中日常维护作业或业务作业是否成功,如每天的备份.碎片整理.索引维护.历史备份文件清除等,可利用SSMS工具,通过CDC下面设置好的DB Server List,运行下面脚本一次, ...

  4. 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 | ...

  5. 【RDA】使用RDA(Remote Diagnostic Agent)工具对数据库进行健康检查

    [RDA]使用RDA(Remote Diagnostic Agent)工具对数据库进行健康检查 分类: Linux RDA英文全称叫做"Oracle Remote Diagnostic Ag ...

  6. JDWP Agent

    JDWP Agent Implementation Description Revision History Disclaimer 1. About this Document 1.1 Purpose ...

  7. 安装TFS(2015)工作组模式代理服务器(Agent)

    TFS的代理服务器(agent)用于持续集成编译和发布,为开发.测试团队和运维团队带来的非常便捷高效的发布和测试速度,许多企业和研发团队都在自己的研发测试平台中广泛使用这一技术. 在部署TFS代理服务 ...

  8. 执行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,则先执行如下命令 ...

  9. Jenkins 2.16.3默认没有Launch agent via Java Web Start,如何配置使用

    问题:Jenkins 2.16.3默认没有Launch agent via Java Web Start,如下图所示,而这种启动方式在Windows上是最方便的. 如何设置才能让出来呢? 打开&quo ...

  10. SQL Agent服务无法启动如何破

    问题现象 从阿里云上镜像过来的一台的数据库服务器,SQL Agent服务启动不了,提示服务启动后停止.(原数据库服务器是正常的,怀疑跟镜像有关) 如下是系统日志和SQL Agent的日志 SQLSer ...

随机推荐

  1. You Shi Zai Wo

    Xuzhou is a place where there have been more than 50 large-scale battles from ancient times to the p ...

  2. apisix~限流插件的使用

    参考: https://i4t.com/19399.html https://github.com/apache/apisix/issues/9193 https://github.com/apach ...

  3. 第二篇:低功耗模组Air724UG硬件设计手册

    ​  接着上篇,继续分享. 3.5 串口 模块提供了五个通用异步收发器:主串口 UART1.校准串口 UART2.通用串口 UART3.调试串口 HOST UART 和 ZSP UART. 3.5.1 ...

  4. Gradio 和 Streamlit 安装与使用教程

    最近 Sealos Devbox 有点火 ,越来越多的小伙伴都开始使用 Sealos Devbox,有位小伙伴写的文章阅读量已经接近了两万! 评论区有个小伙伴问我能不能出一篇部署 Gradio 和 S ...

  5. Flink CDC 实时同步 MySQL

    Flink CDC 系列文章 Flink CDC 实时同步 MySQL Flink CDC 实时同步 Oracle 准备工作 MySQL 数据库(version: 5.7.25),注意,MySQL 数 ...

  6. vagrant 环境安装(前置篇)

    ubuntu可以直接 apt 源查找 sudo apt search vagrant 直接就 sudo apt-get install vagrant 如果版本不是 2.2.6 可以去 https:/ ...

  7. (Redis基础教程之十) 如何在Redis中运行事务

    介绍 Redis是一个开源的内存中键值数据存储.Redis允许您计划一系列命令,然后一个接一个地运行它们,这一过程称为_transaction_.每个事务都被视为不间断且隔离的操作,以确保数据完整性. ...

  8. Winform解决跨线程更新UI的问题

    最近又拿起了Winform的程序,由于要起socket server,所以需要起线程,这里就遇到了经典的跨线程UI调用的问题. 如果什么都不写,直接由线程更新UI,会报错:线程间操作无效. 这里的解决 ...

  9. Win10多用户同时登陆

    1. 说明: (1)Win服务器版默认是支持多用户登陆的,甚至可以在主机上用不同用户自己远程登陆自己,如window server 2016. (2)Win10正常情况下是不允许用户同时远程的,即一个 ...

  10. Mac文件拷贝Win后的._文件清理

    前言 我们在从mac向win拷贝文件后总会多出来 部分 ._ 开头的文件或名为.DS_Store的文件 根据上图在苹果官方社区的回答来看,这些文件存储了主文件的一些资料,图表等数据,如果说未来这些文件 ...