用 LangChain 构建基于资料库的问答机器人(一):基础用法

本文是学生大使Jambo的系列教程,介绍如何使用LangChain库将Azure OpenAI API更方便地融入应用,特别是构建一个可以根据数据库回答问题的聊天机器人。LangChain提供了便利的功能,如文本生成、聊天模型、LLMResult处理、Prompt模板和Chain组合,简化了与大语言模型的交互过程。
摘要由CSDN通过智能技术生成

大家好,我是学生大使 Jambo。在上一个系列中,我们介绍了关于 Azure OpenAI API 的使用。如果你有跟着教程使用过,那么你应该能感觉到仅仅是调用 API 是非常简单的,繁琐的是如何将 API 与你的应用结合起来。接下来,我将会介绍一个名为 LangChain 的库,它可以帮助你更方便地将 Azure OpenAI 结合到你的应用中。

我也会将这个做成一个系列,最终目标是实现一个可以根据资料库回答问题的聊天机器人。

为什么要用 LangChain

许多开发者希望将像 GPT 这样的大语言模型整合到他们的应用中。而这些应用不仅仅是简单地将用户的输入传递给 GPT,然后将 GPT 的输出返回给用户。

这些应用可能需要根据特定的资料源来回答问题,因此需要考虑如何存储和查找资料。或者需要整理用户的输入,保存以前的消息记录并提取重点。如果你希望模型按照特定的格式输出文本,那么你需要在 prompt(提示)中详细描述格式,甚至需要提供示例。这些 prompt 通常是应用程序后台进行管理,用户往往不会注意到它们的存在。对于一些复杂的应用程序,一个问题可能需要多个执行动作。例如声称可以自动完成指定项目的 AutoGPT,实际上是根据目标和作者编写的 prompt 生成所需的动作并以JSON格式输出,然后程序再执行相应的动作。

LangChain 基本上已经将这些你可能会使用到的功能打包好了,只需要规划程式逻辑并调用函数即可。此外,LangChain 的这些功能与具体使用的模型API无关,不必为不同的语言模型编写不同的代码,只需更换 API 即可。

基本用法

在使用 LangChain 之前,建议先了解 Azure OpenAI API 的调用,否则即使是使用 LangChain,参数和用法也可能不容易理解。具体可以参考我之前的系列教程:用 Python 调用 Azure OpenAi API

LangChain 将由文字续写(补全)的语言模型称为 llm ,拥有聊天界面(输入为聊天记录)的语言模型称为聊天模型。接下来我们也会用 Azure OpenAI API 来进行示例。

安装

因为 LangChain 在调用 OpenAI 的 API 时,实际上会使用 OpenAI 提供的 SDK,因此我们还需要一并安装 openai

pip install langchain
pip install openai

生成文本

实例化模型对象

在使用 API 之前,我们需要先设置环境变量。如果你使用的是 OpenAI 原生的接口,就只需要设置 api_key;如果是 Azure OpenAI API 则还需要设置 api_versionapi_base ,具体的值与使用 openai 库调用 Azure API 一样,可以参考我之前的教程:用 Python 调用 Azure OpenAi API

import os
os.environ["OPENAI_API_KEY"] = ""
os.environ["OPENAI_API_VERSION"] = ""
os.environ["OPENAI_API_BASE"] = ""

当然,这些值也可以在 terminal 中使用 export (在 Linux 下)命令设置,或者在 .env 文件中设置,然后用 python-dotenv 库导入进环境变量。

LangChain 的大语言模型(llm)的类都封装在 llms 中,我们需要从中导入 AzureOpenAI 类,并设置相关的参数。其中指定模型的参数名是 deployment_name,剩下的参数就是 OpenAI API 的参数了。事实上,上面在环境变量中设置的 API 信息也可以在这里作为参数传入,但考虑到便利性和安全性,仍建议在环境变量中设置 API 信息。

要注意的是,prompt 和 stop 参数并不是在这里传入的(stop 可以但是会报警告),而是在下面生成文本时传入。

from langchain.llms import AzureOpenAI
llm = AzureOpenAI(
    deployment_name="text-davinci-003",
    temperature=0.9,
    max_tokens=265,
)

另外,如果你使用的是原生 OpenAI API ,那么导入的类应该是 OpenAI ,并且指定模型的参数名是 model_name,例如:

from langchain.llms import AzureOpenAI
llm = AzureOpenAI(model_name="text-davinci-003")
序列化 LLM 配置

假如你需要对多个场景有不同的 llm 配置,那么将配置写在代码中就会不那么简单灵活。在这种情况下,将 llm 配置保存在文件中显然会更方便。

from langchain.llms import OpenAI
from langchain.llms.loading import load_llm

LangChain 支持将 llm 配置以 json 或 yaml 的格式读取或保存。假设我现在有一个 llm.json 文件,内容如下:

{
   
    "model_name": "text-davinci-003",
    "temperature": 0.7,
    "max_tokens": 256,
    "top_p": 1.0,
    "frequency_penalty": 0.0,
    "presence_penalty": 0.0,
    "n": 1,
    "be
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值