Stay Hungry,Stay Foolish!

Langchain Chain Agent - Zero-shot ReAct

Langchain Chain Agent - Zero-shot ReAct

https://zhuanlan.zhihu.com/p/645216766

 

"ReAct"一词源于 ReAct: Synergizing Reasoning and Acting in Language Models (react-lm.github.io) , 它由单词“Reason”和“Act”组合而成,这两个词代表了两类不同的LLM应用:

 

1. “Reason Only”型:你可以把Reanson Only型应用比作公司里的商务人士,他们有很强的语言能力,对打交道很在行,但是他们可能不太擅长回答某些专业领域的问题。

这类应用擅长逻辑推断,考虑一个已经训练好的大语言应用(如网页版的ChatGPT-3.5),这类应用的强项是通用文本逻辑推断,但由于其不和外部环境交互,因此它不会更新自己的知识库,会收到“认知范围”的限制。

 

2. “Act Only”型:你可以把Act Only型应用比作公司里的程序员、或者是研发人员。他们对某些特定的问题往往有很强的认知,但可能不太擅长处理一般的人际交往。

这类应用擅长和外部环境交互,例如一个向量数据库的搜索机器人,它的所有知识都来自于背后的向量库,其往往能对某类特定问题做出精准解答,但其通用文本逻辑推理能力较弱。

 

ReAct = Reason + Act (源自 ReAct: Synergizing Reasoning and Acting in Language Models (react-lm.github.io))

 

“ReAct”的思想,则是把这两类人结合起来,对于某个特定的问题,使用大语言模型基底,以交叉方式生成逻辑推理过程和执行特定行动的方法,从而在两者之间实现更强的协同效应。

逻辑推理过程帮助模型制定、跟踪和更新行动计划以及处理异常情况,而行动则使其能够与外部源(例如知识库或环境)进行交互,以获取额外信息,通过这种模式,我们能基于大语言模型构建更为强大的AI应用。

 

“ReAct”是一种将推理和行动与LLMs结合的通用范式。“ReAct”通过Prompt的设计,为大语言模型制定了一个任务生成的口头推理和执行行动的过程。这使得大语言模型应用在执行动态推理的同时,能够创建、维护和调整行动计划,并与外部环境进行交互,将附加信息纳入推理过程;这种通用范式会引导大语言模型重复以下两个操作:

 

1. 思考一步应该做什么?

 

2. 根据上一步的想法采取行动,并获取行动的结果

 

 

#1. 首先,引入必要的库, 并创建一个llm实例作为底座
from langchain.chains import LLMMathChain
from langchain.agents import Tool
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.agents import initialize_agent

from langchain import OpenAI
import os

os.environ["OPENAI_API_KEY"]="your api key"

llm = OpenAI(temperature=0)

#2. 接下来开始制作第一个工具,我们先制作一个llm_math工具Chain,其能够解决数学问题
llm_math = LLMMathChain(llm=llm)

#3. 初始化math_tool
math_tool = Tool(
    name='Calculator',
    func=llm_math.run,
    description='Useful for when you need to answer questions about math.'
)

#4. 接下来制作第二个工具,制作一个LLMChain来专门进行翻译
prompt = PromptTemplate(
    input_variables=["input"],
    template="""
     你需要根据以下信息回复用户关于商品价格的查询,如果你无法从以下信息中解答用户问题,请说我不知道。
     商品信息列表如下:
      可口可乐5元1瓶
      百事可乐3元1瓶
     
     这是用户输入的问题:
    {input}"""
)

search_chain = LLMChain(llm=llm, prompt=prompt)

# 5. 初始化查询工具
search_tool = Tool(
    name='商品信息查询工具',
    func=search_chain.run,
    description='用于专门查询商品的价格信息'
)

#6. 接下来,我们定义tool kit,即将所有工具存进一个数组中
tools = [math_tool,search_tool]

#7. 初始化zero-shot agent

zero_shot_agent = initialize_agent(
    agent="zero-shot-react-description",
    tools=tools,
    llm=llm,
    verbose=True,
)

#8.来试运行一下吧1
zero_shot_agent("可口可乐的价格减去百事可乐的价格得到的结果的三次方是多少?")

 

posted @ 2024-12-09 10:48  lightsong  阅读(9)  评论(0编辑  收藏  举报
Life Is Short, We Need Ship To Travel