在 LangChain 应用里集成了很多不同类型的大语言模型,比如 OpenAI,HuggingFaceInference,Cohere 等等。LangChain 给这些模型提供了统一的用法。
要使用这些模型可以先导入模型,新建一个模型实例,然后调用这个实例上面的 call 或者 generate 方法使用模型处理任务。
OpenAI
我们先在这个 Node.js 模块文件的顶部导入一个 OpenAI,它是 OpenAI 提供的大语言模型,比如 GPT 系列模型。它来自 langchain/llms/openai。LLM 就是 Large Language Model 的简称。
导入的这个 OpenAI 是一个类,我们可以新建一个实例。声明一个 model,新建一个 OpenAI 这个类的实例,把这个实例交给 model。
声明一个 prompt,它是一个字符串,这个 prompt 就是要交给模型处理的提示文本。“一句话介绍 ninghao.net”。
getNumTokens
如果你想知道这行文本的 token 数量,可以用一下模型上的 getNumTokens 这个方法,把这个 prompt 交给这个方法处理一下,它返回是一个 promise,在前面用 await,然后把结果交给 tokens 。在控制台上输出 tokens 检查一下。
在终端,运行一下应用,这里输出的这个数字就是 prompt 表示的文本需要的 token 数量。
call
这些大语言模型类的上面一般都会有一个 call 方法,这个方法接收一个提示文本,方法会根据这个提示文本返回一个完成文本。
方法返回的是一个 promise,在前面加上一个 await,然后给结果起个名字叫 result。在控制台输出这个 result。注意要使用 OpenAI 模型,我们需要在环境变量里设置一个名字是 OPENAI_API_KEY 的环境变量,它的值是在 OpenAI 账户里生成的接口密钥。
在终端,执行 node index.mjs。这里会输出模型根据提示文本生成的文本内容。
generate
除了可以使用模型上的 call 这个方法,我们还可以使用 generate 这个方法生成文本,用一下 model 上面的 generate,它的值是一组字符串,每个字符串都是一个提示文本,模型会根据这组提示文本分别生成内容。这里除了这个 prompt,再添加一个提示文本,比如 “列出最受欢迎的程序语言”。
再把结果输出到控制台上,这里需要用 JSON.stringify 处理一下 result,第二个参数是 null,第三个参数是 2 。
在终端,运行一下应用,这回得到的结果是一个对象,里面的 generations 是一个数组,里面的数据项目就是根据提示文本生成的完成文本。数据项目又是一个数组,它里面的数据项目是一个对象,text 属性的值就是模型生成的具体的文本。
除了这个 generations 属性以外,这里可能还会有一个 llmOutput 属性,它的值就是这次使用 OpenAI 接口所消耗的 token 的数量。
配置
创建这个 OpenAI 实例的时候可以提供一个配置对象,比如可以配置具体要使用哪个模型,最大允许的 token 数量,停止符,超时,还有 temperature 等等。
可以设置一下 modelName,用一下 gpt-3.5-turbo 这个模型,这个模型的价格比默认的 davinci 模型便宜。再把 temperature 设置成 0,降低生成的文本的多样性。
在终端可以再运行一下应用。这次输出的就是使用 OpenAI 的 gpt-3.5-turbo 这个模型生成的文本内容。