langchain 入门指南 - 让 AI 从互联网获取信息

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

我们知道,LLM 是训练出来之后,它其实是没有办法告知我们最新的信息的。因为它的训练数据是固定的,所以它只能回答它学习到的内容。

比如,如果我们问,"今天广州天气怎么样?",LLM 是没有办法回答的。

通过前面的文章,我们也知道了,我们也可以自己提供一些信息给 LLM,让它回答我们的问题,因为 LLM 它其实是有分析推理能力的。

所以有一种办法是,搜索一下互联网,找到相关的信息,然后将搜索到的信息提供给 LLM,让它回答我们的问题。

直接问 LLM 天气如何

如果我们直接问 LLM 今天天气如何,它们会告诉我们无法提供实时天气信息:

python 复制代码
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model_name="gpt-3.5-turbo",
    temperature=0,
    max_tokens=200,
    api_key="your key",
    base_url="https://api.openai-hk.com/v1",
)

response = llm.invoke('今天广州天气如何?')

print(response.content)

输出:

很抱歉,我无法提供实时天气信息。你可以通过询问天气应用程序或者网站来获取广州今天的天气情况。希望可以帮到你。看看下一句我能帮上忙吗?

这是因为,LLM 的训练数据都是训练模型的那时候的,所以它是没有办法提供实时信息的,它只知道过去的信息。

LLMRequestsChain

我们可以使用 LLMRequestsChain 这个类来实现这个功能。这个类是 Chain 的子类,它可以从互联网上获取信息,然后提供给 LLM。

这其实等于是,我们搜索到了内容,然后让 LLM 帮我们提炼出我们想要的信息。

python 复制代码
from langchain.chains.llm import LLMChain
from langchain_community.chains.llm_requests import LLMRequestsChain
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model_name="gpt-3.5-turbo",
    temperature=0,
    max_tokens=200,
    api_key="your key",
    base_url="https://api.openai-hk.com/v1",
)

def query_baidu(question):
    template = """
    在 >>> 和 <<< 之间是从百度搜索结果中提取的原始文本。
    提取问题 '{query}' 的答案或者说 "not found" 如果信息不包含在内。

    >>> {requests_result} <<<
    """

    prompt = PromptTemplate(
        input_variables=["query", "requests_result"],
        template=template
    )
    inputs = {
        'query': question,
        'url': "https://www.baidu.com/s?wd=" + question.replace(" ", "+"),
    }

    llm_chain = LLMChain(llm=llm, prompt=prompt)
    request_chain = LLMRequestsChain(llm_chain=llm_chain, output_key="query_info")

    return request_chain.invoke(inputs)

print(query_baidu("今天广州天气?"))

输出:

{
  'query': '今天广州天气?',
  'url': 'https://www.baidu.com/s?wd=今天广州天气?',
  'query_info': '广州今天天气为大雨,东北风1级,气温在27~35°C之间,紫外线指数为优。体感温度为35°C,湿度为72.0%,降水量为0.0毫米。注意防晒,穿短袖类衣物。日出时间为05:51,日落时间为19:15。整体来说,天气较为闷热,不适合洗车。'
}

说明:

  1. 调用 invoke 的时候,inputs 中的 url 参数是必须的,这个参数会被 LLMRequestsChain 用来请求互联网上的信息。
  2. template 中的 requests_resultLLMRequestsChain 处理后的结果,它底层会将这个结果作为参数传递给 llm_chain
  3. 也就是说,最终我们给 llm_chain 的输入包含了我们的问题,以及从互联网获取到的信息。

使用 Serper API

因为从互联网搜索信息的场景非常常见,因此也有人为我们准备了一些 API,让我们可以直接调用。

比如,我们可以使用 Serper API 来获取搜索结果:

python 复制代码
import os
# https://serper.dev
os.environ['SERPER_API_KEY'] = 'your key'

from langchain_community.utilities import GoogleSerperAPIWrapper

def query_web(question):
    search = GoogleSerperAPIWrapper()
    return search.run(question)

print(query_web("今天广州天气?"))

输出:

80°F

这里的 GoogleSerperAPIWrapper 是一个封装了 Serper API 的类,它可以直接调用 Serper API 来获取搜索结果。

相比我们自己使用 LLMRequestsChain 来获取信息,使用 Serper API 可以更加方便,因为它已经为我们封装好了。

总结

通过这篇文章,我们知道了,我们可以通过搜索引擎来获取信息,然后将这些信息提供给 LLM,让它帮我们提炼出我们想要的信息。

我们有两种方法可以从互联网获取信息:

  1. 使用 LLMRequestsChain,这个类可以帮我们从互联网上获取信息,然后提供给 LLM。
  2. 使用 Serper API,这个 API 可以直接调用,获取搜索结果。
相关推荐
GocNeverGiveUp7 分钟前
机器学习2-NumPy
人工智能·机器学习·numpy
B站计算机毕业设计超人1 小时前
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
大数据·人工智能·爬虫·python·机器学习·课程设计·数据可视化
学术头条1 小时前
清华、智谱团队:探索 RLHF 的 scaling laws
人工智能·深度学习·算法·机器学习·语言模型·计算语言学
18号房客1 小时前
一个简单的机器学习实战例程,使用Scikit-Learn库来完成一个常见的分类任务——**鸢尾花数据集(Iris Dataset)**的分类
人工智能·深度学习·神经网络·机器学习·语言模型·自然语言处理·sklearn
feifeikon1 小时前
机器学习DAY3 : 线性回归与最小二乘法与sklearn实现 (线性回归完)
人工智能·机器学习·线性回归
游客5201 小时前
opencv中的常用的100个API
图像处理·人工智能·python·opencv·计算机视觉
古希腊掌管学习的神1 小时前
[机器学习]sklearn入门指南(2)
人工智能·机器学习·sklearn
凡人的AI工具箱2 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite
咸鱼桨2 小时前
《庐山派从入门到...》PWM板载蜂鸣器
人工智能·windows·python·k230·庐山派
强哥之神2 小时前
Nexa AI发布OmniAudio-2.6B:一款快速的音频语言模型,专为边缘部署设计
人工智能·深度学习·机器学习·语言模型·自然语言处理·音视频·openai