ChatGpt

学习ChatGpt(八)- Langchain之Agent

2023-10-29  本文已影响0人  梅林骑士

什么是代理(Agent)?

在编程中,代理的核心思想是使用一个大型语言模型(LLM)来选择执行的一系列动作。在传统的链式编程(chains)中,这些动作通常被硬编码在代码中。而在代理模式中,一个语言模型被用作推理引擎,来确定要采取哪些动作以及以何种顺序执行。

代理的关键概念:

在Langchain中,代理可以根据需求进行自定义,也可以使用官方提供的代理。下面是一个示例代码,演示了如何使用Langchain的代理功能:

# 导入必要的模块和工具
from langchain.agents import initialize_agent, Tool
from langchain.agents import load_tools
from langchain.llms import OpenAI
from langchain.agents import AgentType
from langchain import hub
from langchain.tools.render import render_text_description

# 初始化配置
import os
import config
config.init(os)

# 定义查询
query = "对比下InternLM-123B和gpt4"

# 初始化LLM模型和工具
llm = OpenAI(temperature=0, verbose=True)
tools = load_tools(["serpapi", "llm-math"], llm=llm)
llm_with_stop = llm.bind(stop=["\nObservation"])
prompt = hub.pull("hwchase17/react")
prompt = prompt.partial(
    tools=render_text_description(tools),
    tool_names=", ".join([t.name for t in tools]),
)

# 定义代理
agent = {
    "input": lambda x: x["input"],
    "agent_scratchpad": lambda x: format_log_to_str(x['intermediate_steps'])
} | prompt | llm_with_stop | ReActSingleInputOutputParser()

# 初始化代理执行器
agent_executor = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

# 执行查询
agent_executor.invoke({"input": query})

以上代码演示了如何使用Langchain的代理功能,通过LLM的代理增加了数学运算和搜索两种能力。这个例子展示了Langchain代理的灵活性和强大功能。

但是你如果稍微深入点研究会发现agent的Tool只能传入2个,超过了就会崩溃。
而且还有其他问题,我尝试问了他100以内的素数,它居然报错了

ValueError: unknown format from LLM: This cannot be solved using the numexpr library.

我把同样的问题给了gpt3.5他就给出了结果,原因是因为llm-math这个Tool接管这个逻辑分支,名字叫llm-math怎么敢啊?

然后我把这个Tool删除之后它就运行正常了。

上一篇 下一篇

猜你喜欢

热点阅读