首页 > 其他分享 >LangChain |Agent

LangChain |Agent

时间:2024-03-03 17:23:07浏览次数:30  
标签:Agent agent 20% LangChain llm import tools

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的结果:

image-20240303165901813

下面尝试使用国产模型替代:

文心

原生的 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元/斤。具体售价取决于你选择的大蒜子平均价格。

直接输出会有报错

标签:Agent,agent,20%,LangChain,llm,import,tools
From: https://www.cnblogs.com/pam-sh/p/18050323

相关文章

  • 【转】打造大模型Agent:百度智能云千帆杯竞赛第一期解题思路
    随着大型语言模型的进步,使用大模型构建人工智能代理(AIAgents)逐渐成为学术界和业界关注的领域。在这些新兴的研究中,大型语言模型扮演着人工智能代理的核心智能,即它们的“大脑”。这些基于大型语言模型的智能代理(LLM-basedAgents)通过集成了先进的语言理解和生成能力的模型,展现出在......
  • 开源大语言模型作为 LangChain 智能体
    概要开源大型语言模型(LLMs)现已达到一种性能水平,使它们适合作为推动智能体工作流的推理引擎:Mixtral甚至在我们的基准测试中超过了GPT-3.5,并且通过微调,其性能可以轻易的得到进一步增强。引言针对因果语言建模训练的大型语言模型(LLMs)可以处理广泛的任务,但它们经常......
  • 记录一个Mono Runtime与Mono Debugger-Agent的兼容性问题
      在mono集成到C++应用程序中时,可以通过一些参数来配置mono启动时暂停,并在调试器链接上来后再继续运行。这对于调试一些启动时机非常早的代码会非常有用。这通过给mono_jit_parse_options传递参数embedding和suspend来实现。staticvoidprint_usage(void){PRINT_ERR......
  • RevBits Email Security - Endpoint Agent分析(EDR+API集成)
    https://revbits.com/pdf/RevBits_Email_Security_Product_Brief_Securing_Email_Inboxes.pdf 邮件安全检测场景? 根据文档内容,RevBits邮件安全提供以下邮件安全检测场景:终端邮件安全代理软件直接部署在用户终端,可以在邮件进入用户收件箱时进行深度分析,检测和......
  • 解析Sermant热插拔能力:服务运行时动态挂载JavaAgent和插件
    本文分享自华为云社区《服务运行时动态挂载JavaAgent和插件——Sermant热插拔能力解析》,作者:华为云高级软件工程师栾文飞一、概述Sermant是基于Java字节码增强技术的无代理服务网格,其利用Java字节码增强技术,为宿主应用程序提供服务治理功能,以解决大规模微服务场景中的服务治理......
  • ML-Agents Python包安装
    Unity的机器学习工具包ML-Agents还是挺好用的,但是其Python后端在安装的过程中会出一些问题,在这里记录一下。为了方便多Python环境管理,我在搭建环境的时候使用了Anaconda包管理器。目前ML-Agents支持的Python版本为3.10.12,版本过高或过低都可能会缺少对应的依赖。打开一个PowerShe......
  • OneFlow计算框架的OneAgent是不是一个子虚乌有的东西?
    自己是搞强化学习的,今天看了些OneFlow计算框架的一些资料,发现OneFlow官方一直有宣传自己的强化学习框架——OneAgent,但是十分诡异的是从了OneFlow的官方宣传可以看到这个词,但是在所有的网上都是看不到这个词的,不论是GitHub还是pypi还是conda上都没有这个东西,那么问题来了,这个宣传......
  • Langchain中改进RAG能力的3种常用的扩展查询方法
    有多种方法可以提高检索增强生成(RAG)的能力,其中一种方法称为查询扩展。我们这里主要介绍在Langchain中常用的3种方法查询扩展技术涉及对用户的原始查询进行细化,以生成更全面和信息丰富的搜索。使用扩展后的查询将从向量数据库中获取更多相关文档。1、StepBackPromptingTake......
  • LangChain大模型应用开发指南:从基础链式结构到ReAct对话解构
    在自然语言处理领域,大模型的应用已经成为了一种趋势。LangChain是一个基于深度学习的自然语言处理框架,它通过使用链式结构和ReAct对话模型,为开发者提供了一种高效、灵活的方式来进行大模型应用开发。本指南将介绍如何从基础链式结构开始,逐步构建ReAct对话解构,以实现自然语言处理应......
  • 通过4个任务比较LangChain和LlamaIndex
    我们在本地使用大模型的时候,尤其是构建RAG应用的时候,一般会有2个成熟的框架可以使用LangChain:用开发LLM的通用框架。LlamaIndex:专门用于构建RAG系统的框架。选择一个框架是对于项目的后续开发是非常重要的,因为如果后续更换框架是一个非常困难的事情,所以我们这里对这两个框架......