LangChain 基于 ChatGPT 整合 Google 搜索 强化问答应用

一、LangChain Agents

LangChain 中的 Agents 是什么呢,对于官方的描述是:某些应用程序不仅需要预先确定的对 LLM/其他工具的调用链,还可能需要依赖于用户输入的未知链。在这些类型的链中,有一个 Agents 可以访问一套工具。根据用户输入,代理可以决定调用这些工具中的哪一个(如果有的话)。因此代理可以理解为是一个函数之上的抽象,通过该函数可以调用不同的模块,类似于 huggingface 中的 AutoModel

那基于 Agents 可以做什么呢?

例如:在原生的 ChatGPT 中对于某些领域的问题回答是有些吃力的,比如让 ChatGPT 介绍下什么是 LangChain

from langchain.llms import OpenAI
import os

openai_api_key=os.environ["OPENAI_API_KEY"]
llm = OpenAI(model_name="gpt-3.5-turbo", openai_api_key=openai_api_key)
my_text = "介绍下 langChain "
print(llm(my_text))

在这里插入图片描述

可以看出回答不是我们想要的内容,对于这种情况下,我们可以选择通过构建本地知识库去丰富问答,例如下面这篇文章:

LangChain 基于 ChatGPT 构建本地知识库问答应用

但如果知识内容是可以通过搜索引擎查询到的话,此时使用LangChain 中的 Agents 代理某个搜索引擎(比如谷歌搜索),根据搜索的结果总结回答内容,无疑是一个低成本的方案。

下面开始实践下 LangChainChatGPT 和 谷歌搜索 整合到一起后的效果。

二、谷歌搜索 API Key 申请

首先访问 https://serpapi.com/ 注册账号,可以选择 GitHub 登录和 Google 登录,如果有的话直接登录:

在这里插入图片描述

然后来到 https://serpapi.com/manage-api-key 中,生成 API Key

在这里插入图片描述

由于我先前已经生成过 API Key 所以这里显示的是 Regenerate API Key

如果第一次生成Api Key,需要选择一个套餐,这里可以选择免费套餐,每个月可以免费调用 100 次:

在这里插入图片描述

选择前需要验证邮箱和手机号,验证后就可以继续了。

三、langChain 使用 Google 搜索 Agents

安装 Google 搜索依赖:

pip install google-search-results

整合:

from langchain.agents import load_tools, AgentType
from langchain.agents import initialize_agent
from langchain.chat_models import ChatOpenAI
from langchain import PromptTemplate
import os

# llm
openai_api_key = os.environ["OPENAI_API_KEY"]
llm = ChatOpenAI(temperature=0.5, openai_api_key=openai_api_key, model_name="gpt-3.5-turbo")

# 谷歌搜索 key
serpapi_api_key = os.environ["SERPAPI_API_KEY"]
toolkit = load_tools(["serpapi"], llm=llm, serpapi_api_key=serpapi_api_key)
agent = initialize_agent(
    tools=toolkit,
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

template = "{value},请使用中文回答"
prompt = PromptTemplate(
    input_variables=["value"],
    template=template,
)

while True:
    questions = input("请输入问题: \n")
    if not questions or questions == '':
        print('输入问题为空,无法做出回答!')
        continue
    if questions == "0":
        break
    print("回答结果: \n")
    res = agent.run(prompt.format(value=questions))
    print(res)

效果测试:

问题:介绍下什么是 langchain?

在这里插入图片描述

问题:介绍下 CSDN 小毕超

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43692950/article/details/131491167