NLP(五十七)LangChain使用Google Search Agent

news2024/11/16 15:37:17

大模型存在的问题

  大模型在给人带来眼前一亮的表现,深深地震撼各行各业人们的同时,其本身也存在着不少问题。
  以OpenAI的ChatGPT模型为例,其存在的问题有:

  1. 事实错误,容易一本正经地胡说八道,造成幻觉问题。
    个园、瘦西湖重复,平江路古街是苏州的景点,回答错误
  2. 逻辑推理能力弱,缺乏像人类一样的判断能力
    大模型不会坚持自己正确的答案,逻辑推理能力弱
  3. 世界知识的局限性与时限性,对专业领域知识、私人知识和实时信息,无法回答
    OpenAI的ChatGPT模型的知识库截止至2021年9月,无法回答这之后的信息

LangChain中的Agent

  Agent(代理)是LangChain中的高级功能,可插件化地对模型回答进行修改或补充,弥补模型存在的不足,相当于模型的插件。其中,Google Search代理允许我们使用谷歌搜索。
  首先,我们需要在Google Cloud credential console (https://console.cloud.google.com/apis/credentials)中获取GOOGLE_API_KEY,在Programmable Search Enginge (https://programmablesearchengine.google.com/controlpanel/create)中获取GOOGLE_CSE_ID,接着安装pip install google-api-python-client第三方模块。具体的设置过程不在此讲述,读者可自行设置。
  下面将介绍如何在LangChain中使用Google Search Agent,Python示例代码如下:

import os

os.environ["GOOGLE_CSE_ID"] = "xxx"
os.environ["GOOGLE_API_KEY"] = "xxx"

from langchain.tools import Tool
from langchain.utilities import GoogleSearchAPIWrapper

search = GoogleSearchAPIWrapper()


# return first five search results
def top3_results(query):
    return search.results(query, 3)


tool = Tool(
    name="Google Search",
    description="Search Google for recent results.",
    func=top3_results,
)

print(tool.run("2022年诺贝尔物理学奖获得者?"))

谷歌搜索结果如下:

[{‘title’: ‘三名科学家分享2022年诺贝尔物理学奖-新华网’, ‘link’: ‘http://www.news.cn/2022-10/04/c_1129050882.htm’, ‘snippet’: ‘Oct 4, 2022 … 新华社斯德哥尔摩10月4日电(记者和苗付一鸣)瑞典皇家科学院4日宣布,将2022年诺贝尔物理学奖授予法国科学家阿兰·阿斯佩、美国科学家约翰·克劳泽和\xa0…’}, {‘title’: ‘2022年诺贝尔物理学奖为何颁给了这三位? -中新网’, ‘link’: ‘https://www.chinanews.com.cn/cj/2022/10-05/9867029.shtml’, ‘snippet’: ‘Oct 5, 2022 … 北京时间10月4日下午,瑞典皇家科学院宣布,将2022年诺贝尔物理学奖颁给法国科学家阿兰·阿斯佩(Alain Aspect)、美国科学家约翰·克劳泽(John F.’}, {‘title’: ‘解读2022年诺贝尔物理学奖:为第二次量子革命奠定基础–经济·科技 …’, ‘link’: ‘http://finance.people.com.cn/n1/2022/1010/c1004-32542107.html’, ‘snippet’: ‘Oct 10, 2022 … 瑞典皇家科学院4日宣布,将2022年诺贝尔物理学奖授予法国科学家阿兰·阿斯佩、美国科学家约翰·克劳泽和奥地利科学家安东·蔡林格,以表彰他们在“纠缠光子\xa0…’}]

使用Google Search Agent改善大模型

  借助Google Search Agent,针对大模型回答不了实时信息或超过训练预料库知识的问题,我们能很好地改善这一问题。这也是如何使用外部知识来改善大模型表现的一种办法。
  以下是示例Python代码:

from langchain.agents import ZeroShotAgent, Tool, AgentExecutor
from langchain.memory import ConversationBufferMemory
from langchain import OpenAI, LLMChain
from langchain.utilities import GoogleSearchAPIWrapper
import os
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.agents import load_tools

os.environ["GOOGLE_CSE_ID"] = "xxx"
os.environ["GOOGLE_API_KEY"] = "xxx"
os.environ["OPENAI_API_KEY"] = 'sk-xxx'

llm = OpenAI(model_name="gpt-3.5-turbo", temperature=0)
tools = load_tools(["google-search"], llm=llm)

agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

print(agent.run("现在上海的地铁里程有多少?"))

对于“现在上海的地铁里程有多少?”这个问题,LangChain的回复链及最终答案如下:

> Entering new  chain...
I'm not sure about the current length of the Shanghai subway system.
Action: google_search
Action Input: "current length of Shanghai subway system"
Observation: With a total length of 169 km it is the world's 2nd largest fully automated metro system, after the Singapore MRT. Most lines currently use 6 car sets, with the ... Dec 29, 2021 ... Beijing's epic subway system added 53 kilometers of new track in 2021, ... addition of Line 14, the total length of the Shanghai Metro now ... This article lists the openings of lines, line segments, stations and fare schemes of the ... The first section opened in 1993, and the system currently has 802 ... Apr 15, 2010
Thought:Based on the search results, the current length of the Shanghai subway system is 831 kilometers (516.4 miles).
Final Answer: The current length of the Shanghai subway system is 831 kilometers.

> Finished chain.
The current length of the Shanghai subway system is 831 kilometers.

  我们再来看几个例子:

问题:2022年的诺贝尔物理学家获得者是谁?
回答:The 2022 Nobel Prize in Physics was awarded to Alain Aspect, John F. Clauser, and Anton Zeilinger.

问题:2022年的上海市市长是谁?
回答:2022年的上海市市长是龚正。

问题:2023年苏迪曼杯在哪里举行,获胜者是谁?
回答:The 2023 Sudirman Cup was held in Suzhou, China, and the winner was China.

问题:今年的端午节是哪几天?
回答:This year’s Dragon Boat Festival will be on June 22nd, 2023.

有了Google Search Agent,ChatGPT能很好地回复上述问题,解决了实时信息无法回答的问题,避免了世界知识的局限性和时效性。而没有Google Search Agent,对于上述问题,基本无法回答,就算能回答,也是2021年9月之前的文本信息了。
  美中不足的是,LangChain使用Google Search Agent,给出的问题答复,往往都是英语。而我们想得到中文答案的话,还需要再想一点办法,但回复的内容是令人满意的。

总结

  本文主要介绍了如何在LangChain中使用Google Search Agent,来改善大模型存在的不足之处。

参考文献

  1. Google Search:https://python.langchain.com/docs/modules/agents/tools/integrations/google_search
  2. Google搜索包装器:https://www.langchain.asia/ecosystem/google_search

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

重定向爬虫和多线程爬虫

前言 重定向爬虫是指在抓取网页时,如果目标网站内部存在重定向机制,即当你访问一个网页时,服务器会把你重定向到另一个目标网页。重定向爬虫可以帮助我们发现这种重定向链接,从而更有效地抓取目标网站的内容。 要实现重定向爬虫…

分享一些关于 CSS Grid 基础入门知识

网格系统(CSS Grid)是CSS中最重要的特性之一。它能够以简单的方式将元素对齐到列和行中。CSS网格使得设计复杂且响应式的网页变得更加容易,无需使用浮动、表格或定位。它还具有许多更强大的功能,如果你多加练习,就能发…

北京大学2018计算机学科夏令营上机考试

目录 A:计算两个日期之间的天数【暴力不水】 B:回文子串【暴力不水】 C:The Die Is Cast【DFS】 D:Euro Efficiency【看不懂】 E:重要逆序对【归并排序】 F:Tram【看不懂】 G:食物链【图】 H:DFS spanning tree【不会】 A:计算两个日期之间的天数【暴力不水】 //…

《微服务架构设计模式》第四章 使用Saga管理事务

内容总结自《微服务架构设计模式》 使用Saga管理事务 一、XA解决方案存在问题二、使用Saga管理事务Saga是什么补偿事务是什么Saga协调模式协同式Saga编排式Saga 隔离性Saga结构 三、总结 一、XA解决方案存在问题 在多个服务、数据库和消息代理之间维持数据一致性的传统方式是采…

小黑重庆归来,眼睛复查顺利,见到了三年没见的线上同门的leetcode之旅:剑指 Offer II 015. 字符串中的所有变位词

小黑代码1:滑动窗口 class Solution:def findAnagrams(self, s: str, p: str) -> List[int]:# 字符串长度n_s len(s)n_p len(p)if n_s < n_p:return []# 差值数组arr [0] * 26# 初始窗口for i in range(n_p):arr[ord(p[i])-97] - 1arr[ord(s[i])-97] 1# 计算初始窗口…

Web服务器群集:Tomcat配置https证书

目录 一、理论 1.SSL 2.HTTPS协议和HTTP协议的区别 3.https证书配置 4.tomcat强制使用https 二、实验 1.https证书配置过程 2.tomcat强制使用https 三、总结 一、理论 1.SSL &#xff08;1&#xff09;概念 SSL是网络加密传输协议&#xff0c;是支持在网络服务器(主…

chatgpt赋能python:烧录代码过程是怎样的

烧录代码过程是怎样的 烧录代码是将编写好的程序代码烧录进内置闪存器件&#xff08;Flash&#xff09;或外部存储器&#xff08;SD卡、EEPROM等&#xff09;中的过程。本文将介绍烧录代码的具体过程和常用工具&#xff0c;以及一些注意事项。 烧录代码的步骤 步骤一&#x…

分布式负载均衡 Ribbon

一、Ribbon简介 是Netfix发布的负载均衡&#xff0c;Eureka一般配合Ribbon进行使用&#xff0c;基于HTTP和TCP的客户端负载均衡工具。 只有负载均衡的能力&#xff0c;不具有发送请求的能力&#xff0c;要配合服务通信组件。 RestTemplate 针对各种类型的 HTTP 请求都提供了相…

青少年机器人技术一级考试备考重点(一):机器人常识

随着机器人技术的飞速发展&#xff0c;越来越多的青少年开始关注并参与其中。青少年机器人技术考试作为一项评估学生机器人技术水平的重要考试&#xff0c;备受广大青少年和家长的关注。为了更好地备战青少年机器人技术一级考试&#xff0c;了解考试的学习要点和备考重点是非常…

LeetCode-67. 二进制求和

LeetCode-67. 二进制求和 1、题目描述2、解题思路3、代码实现4、解题记录 ) 1、题目描述 题目描述&#xff1a; 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 示例1&#xff1a; 输入:a “11”, b “1” 输出&#xff1a;“100” 示例2&…

kafka实现消息接受和发送

1、首先引入依赖 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId> </dependency> <dependency><groupId>org.springframework.kafka</groupId><artifactId>spr…

第九十五天学习记录:C++核心:类和对象Ⅳ(五星重要)

C对象模型和this指针 成员变量和成员函数分开存储 在C中&#xff0c;类内的成员变量和成员函数分开存储只有非静态成员变量才属于类的对象上 #include<iostream> using namespace std;class Person {int m_A;//非静态成员变量 属于类的对象上static int m_B;//静态成…

Gradio库的Gallery模块介绍与select方法详解

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

Flask boostrap实现图片视频上传下载展示

Flask boostrap实现图片视频上传下载展示 1、展示效果2、前端代码3、后端代码 1、展示效果 项目目录结构 2、前端代码 html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title>&l…

Go 程序是怎样跑起来的

Go 程序是怎样跑起来的 引入 我们从一个 helloworld 的例子开始 package mainimport "fmt"func main() {fmt.Println("hello world") }用 vim 要打开&#xff0c;输入命令&#xff1a; :%!xxd下面是输出 00000000:7061 636b 6167 6520 6d61 696e 0a0a…

tomcat概述,优化,多实例部署

目录 一、概述 二、三个容器 1、Web 容器&#xff1a; 2、Servlet 容器&#xff1a; 3、JSP 容器&#xff1a; 三、Tomcat 功能组件结构 四、优化 1、启动速度优化 2、配置参数优化 五、多实例部署 一、概述 Tomcat 是 Java 语言开发的&#xff0c;Tomcat 服务器是一…

ubuntu下安装docker遇到的问题

如果你还没有安装虚拟机&#xff0c;推荐一篇关于安装Ubuntu的详细教程&#xff1a; VMware虚拟机安装Ubuntu20.04详细图文教程https://blog.csdn.net/weixin_41805734/article/details/120698714首先&#xff0c;安装docker的前提是虚拟机能够联网&#xff0c;如果能看到右上…

官方文档中docker安装php插件xdebug

docker安装php插件 直接上代码常见问题如果查看系统类型如何查看xdebug合适的版本安装异常提示Cannot find autoconf. Please check your autoconf installation and the$PHP_AUTOCONF environment variable. Then, rerun this script.configure: error: in /tmp/pear/temp/pea…

Zookeeper 分布式锁

优质博文&#xff1a;IT-BLOG-CN 一、简介 随着公司业务的发展&#xff0c;单机应用已经无法支撑现有的用户量&#xff0c;之前采用synchronized和Lock锁已经无法满足分布式系统的要求。我们应用程序目前都会运行120台&#xff0c;节假日会扩容至240台&#xff0c;属于多JVM环…

领域事件驱动(二)聚合与聚合根的了解

上一章对值对象以及实体进行了一些简单的讲解&#xff1a; 聚合 聚合&#xff1a;我们把一些关联性极强、生命周期一致的实体、值对象放到一个聚合里。 聚合有一个聚合根和上下文边界&#xff0c;这个边界根据业务单一职责和高内聚原则&#xff0c;定义了聚合内部应该包含哪…