LangChain 21 Agents自问自答与搜索 Self-ask with search

LangChain系列文章

  1. LangChain 实现给动物取名字,
  2. LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字
  3. LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄
  4. LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索Indexes for information retrieve
  5. LangChain 5易速鲜花内部问答系统
  6. LangChain 6根据图片生成推广文案HuggingFace中的image-caption模型
  7. LangChain 7 文本模型TextLangChain和聊天模型ChatLangChain
  8. LangChain 8 模型Model I/O:输入提示、调用模型、解析输出
  9. LangChain 9 模型Model I/O 聊天提示词ChatPromptTemplate, 少量样本提示词FewShotPrompt
  10. LangChain 10思维链Chain of Thought一步一步的思考 think step by step
  11. LangChain 11实现思维树Implementing the Tree of Thoughts in LangChain’s Chain
  12. LangChain 12调用模型HuggingFace中的Llama2和Google Flan t5
  13. LangChain 13输出解析Output Parsers 自动修复解析器
  14. LangChain 14 SequencialChain链接不同的组件
  15. LangChain 15根据问题自动路由Router Chain确定用户的意图
  16. LangChain 16 通过Memory记住历史对话的内容
  17. LangChain 17 LangSmith调试、测试、评估和监视基于任何LLM框架构建的链和智能代理
  18. LangChain 18 LangSmith监控评估Agent并创建对应的数据库
  19. LangChain 19 Agents Reason+Action自定义agent处理OpenAI的计算缺陷
  20. LangChain 20 Agents调用google搜索API搜索市场价格 Reason Action:在语言模型中协同推理和行动
    在这里插入图片描述

1. Self-ask with search自问自答与搜索

这个代理利用了一个工具,应该被称为中级答案。这个工具应该能够查找问题的事实答案。最初的自问自答与搜索论文,其中提供了谷歌搜索API作为工具。
LangChain 21 Agents自问自答与搜索 Self-ask with search_第1张图片
Self-ask with search 就相当于把大问题切成小问题,逐步解答。

Agents/chat_agents_self_ask.py 这个演示展示了自问自答和搜索链。
大问题:最近一届奥运会男子100米赛跑冠军的家乡是哪里?
拆解为小问题:

  1. 最近一届奥运会男子100米赛跑冠军是谁?
  2. 冠军的家乡在哪里?
# 导入与 OpenAI 语言模型交互的模块。
from langchain.llms import OpenAI  

# 导入创建和管理提示模板的模块。
from langchain.prompts import PromptTemplate  

# 导入用于初始化代理和定义代理类型的模块。
from langchain.agents import initialize_agent, AgentType

# 导入创建和管理 OpenAI 聊天模型实例的类。
from langchain.chat_models import ChatOpenAI

# 导入用于定义和初始化工具的模块。
from langchain.agents import Tool

# 导入用于包装 SERP API 的实用工具。
from langchain.utilities import SerpAPIWrapper

# 导入 Langchain 的 hub 模块用于拉取预设的提示。
from langchain import hub

# 导入用于格式化代理日志的工具。
from langchain.agents.format_scratchpad import format_log_to_str

# 导入用于解析自问自答(Self-Ask)输出的解析器。
from langchain.agents.output_parsers import SelfAskOutputParser

# 导入用于执行代理的执行器。
from langchain.agents import AgentExecutor

# 从 .env 文件加载环境变量,常用于管理 API 密钥等敏感数据。
from dotenv import load_dotenv  
load_dotenv()  

# 设置 SERPAPI 的 API 密钥环境变量。
import os
os.environ["SERPAPI_API_KEY"] = 'xxx'

# 初始化 OpenAI 模型。
llm = OpenAI(temperature=0)

# 初始化 SERPAPI 包装器。
search = SerpAPIWrapper()

# 定义工具列表,包括一个中间回答工具,使用搜索功能。
tools = [
    Tool(
        name="Intermediate Answer",
        func=search.run,
        description="useful for when you need to ask with search",
    )
]

# 从 Langchain hub 拉取预设的提示。
prompt = hub.pull("hwchase17/self-ask-with-search")

# 将 OpenAI 模型与停止标记绑定。
llm_with_stop = llm.bind(stop=["\nIntermediate answer:"])

# 定义一个智能代理,包括输入处理、格式化和输出解析。
agent = (
    {
        "input": lambda x: x["input"],
        "agent_scratchpad": lambda x: format_log_to_str(
            x["intermediate_steps"],
            observation_prefix="\nIntermediate answer: ",
            llm_prefix="",
        ),
    }
    | prompt
    | llm_with_stop
    | SelfAskOutputParser()
)

# 初始化代理执行器,并设置为详细模式。
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# 使用代理执行器处理特定查询。
agent_executor.invoke(
    {"input": "最近一届奥运会男子100米赛跑冠军的家乡是哪里?"}
)

执行结果

(develop)[1] % python Agents/chat_agents_self_ask.py                   ~/Workspace/LLM/langchain-llm-app


> Entering new AgentExecutor chain...
 Yes.
Follow up: 最近一届奥运会男子100米赛跑冠军是谁?您可以让系统朗读此内容暂停概要 意大利选手马塞尔·雅各布斯的成绩是9.80秒,获得金牌,他也成为意大利第一位男子百米冠军,也是29年来第一位来自欧洲的百米冠军,这是他几年内第二次打破欧洲选手的纪录,和史蒂夫·穆林斯的世界纪录第10名成绩相同。
Follow up: 马塞尔·雅各布斯的家乡是哪里?拉蒙特·马塞尔·雅各布斯(Lamont Marcell Jacobs),1994年9月26日出生于美国的埃尔帕索(EL PASO),意大利男子田径运动员。
So the final answer is: El Paso, USA

代码
https://github.com/zgpeace/pets-name-langchain/tree/develop

参考

  • https://python.langchain.com/docs/modules/agents/

你可能感兴趣的:(LLM-Large,Language,Models,langchain,LLM,chatgpt,prompt)