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作为工具。
在这里插入图片描述
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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/221857.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Opencv UI自动化应用人脸识别

OpenCV: Open Source Computer Vision Library OpenCV是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法 OpenCV官网:http://www.opencv.org.cn/ OpenCV 使用 C/C 开发,同时也提供了 Python、Ja…

Java面试题(每天10题)-------连载(44)

目录 Dubbo篇 1、Dubbo支持哪些协议,每种协议的应用场景,优缺点 2、Dubbo超时时间怎么设置? 3、Dubbo有哪些注册中心? 4、Dubbo集群的负载均衡有哪些策略 5、Dubbo是什么? 6、Dubbo的主要应用场景?…

jsp在线辅助教育系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 在线辅助教育系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

geemap学习笔记020:如何搜索Earth Engine Python脚本

前言 本节内容比较简单,但是对于自主学习比较重要,JavaScript提供了很多的示例代码,为了便于学习,geemap将其转为了Python代码。 Earth Engine Python脚本 import ee import geemapee.Initialize()geemap.ee_search() #搜索Ear…

数据结构第7次练习-图(基础篇)

一:判断题 1-1 答案:T 解析:c到a的最短路径是12214,所以是大于10的 1-2 答案:T 一个连通分量要进行一次广度优先搜索 1-3 答案:F 解析:是存在等于顶点的个数减一的情况,比如三个顶点…

Flask项目Day1,Flask常见第三方拓展包

拉项目 git clone https://gitee.com/hahaguai007/python-flask-mysql.git git clone 项目地址运行后即可获取项目 2.创建数据库 在MySQL中创建一个数据库,名字自己定,然后修改RealProject\settings.py里的SQLALCHEMY_DATABASE_URI,格式为 …

【TiDB理论知识04】TiKV-分布式事务与MVCC

分布式事务 下面一个事务 里面有两个更新,分别将id1的Tom改为Jack,将id2的zhangsan 改为 lisi。在MySQL中这个事务很普通,但是在分布式数据库TiDB 中的会遇到什么问题呢? begin; (1,Tom) --> (1,Jack) (2,zhangsan) --> (2,lisi) commit; 比如(…

简单弄懂DDOS攻击

DDoS攻击是网络安全领域中最常见的攻击之一。攻击者通过利用大量合法请求,占用目标服务器的网络带宽和系统资源,从而使目标系统无法正常运行。本文将介绍DDoS攻击的特点和常见类型,以及如何辨别和应对DDoS攻击,并提供Python代码演…

EM32DX-C4【C#】站15

1外观: J301 直流 24V 电源输入 CAN0 CAN0 总线接口 CAN1 CAN1 总线接口 J201 IO 接线段子 S301-1、S301-2 输出口初始电平拨码设置 S301-3~S301-6 模块 CAN ID 站号拨码开关 S301-7 模块波特率拨码设置 S301-8 终端电阻选择开关 2DI: 公共端是…

HTTP之跨域

HTTP之跨域 跨域(Cors)两种请求简单请求浏览器不同的处理方式Access-Control-Allow-OriginAccess-Control-Allow-CredentialswithCredentials属性 非简单请求服务器回应:什么时候会触发OPTIONS(预检请求)呢&#xff1f…

Go中的延时执行魔法:深入浅出defer用法

一、defer 介绍 1、defer 特性 关键字 defer 用于注册延迟调用这些调用直到 return 前才被执行,因此,可以用来做资源清理多个 defer 语句,按先进后出的方式执行defer 语句中的变量,在 defer 声明是就决定了 2、defer 用途 关闭…

re:invent 2023 Amazon Q 初体验

授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre,知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 前言 亚马逊云科技在2023 re:Invent全球大会上宣布推出 Amazon…

C++ 函数进阶

目录 缺省参数 缺省参数的分类 全缺省参数 半缺省参数 缺省参数应用 占位参数 函数重载 函数重载注意事项 C支持函数重载的原理 缺省参数 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。 在调用该函数时,如果没有指定实参则采用该形参的缺省值…

【无标题】从0到1 搭建一个vue3+Django项目

目录 一、后端项目python django二、前端项目vitevue3三、后端配置3.1 将路由指向app3.2 app下创建urls.py, 写入路由3.3 views写入test函数3.4 启动服务,访问路由 四、前端配置4.1 安装一些工具库及创建文件4.1.1 安装需要用的三方库4.1.2 创建文件 4.2…

探索 IndexedDB 的世界:大规模数据存储的解决方案

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

MySQL 数据库如何实现 XA 规范?

本文我们来讨论 MySQL 的 XA 规范有哪些应用相关的内容。 MySQL 为我们提供了分布式事务解决方案,在前面的内容中提到过 binlog 的同步,其实是 MySQL XA 规范的一个应用,那么 XA 规范是如何定义的,具体又是如何应用的呢&#xff…

『App自动化测试之Appium基础篇』| 从定义、原理、环境搭建、安装问题排查等深入了解Appium

『App自动化测试之Appium基础篇』| 从定义、原理、环境搭建、安装问题排查等深入了解Appium 1 关于Android UI自动化测试2 Appium简介3 Appium原理3.1 Android端过程3.2 iOS端过程 4 补充内容5 JDK下载6 JDK配置7 SDK下载8 SDK配置9 配置Android环境10 安装NodeJs11 解决node安…

chineseocr项目不使用web推理-docker容器化

整个流程介绍 拉取 ufoym/deepo 镜像 -- 因为包含了主流深度学习框架,镜像4G出头。拉取 chineseocr 项目代码。修改代码,不使用web,增加命令行传入图片路径的功能打包成docker镜像。 开始 拉取 ufoym/deepo 镜像 :cpu版本为例 do…

Gitlab代码集成阿里代码检查P3C

文章目录 一、获取P3C-PMD1、下载源码2、打包3、上传文件 二、创建hooks1、指定项目2、全局设置 三、使用 一、获取P3C-PMD 1、下载源码 源码地址:https://github.com/alibaba/p3c 也可以直接下载打包好的文件, p3c-pmd-2.1.1-jar.zip: https://pan…

Javaweb之前端工程打包部署的详细解析

6 打包部署 我们的前端工程开发好了,但是我们需要发布,那么如何发布呢?主要分为2步: 前端工程打包 通过nginx服务器发布前端工程 6.1 前端工程打包 接下来我们先来对前端工程进行打包 我们直接通过VS Code的NPM脚本中提供的…