一架梯子,一头程序猿,仰望星空!
LangChain教程(JS版本) > 内容正文

LLMs


LLMs介绍

大型语言模型(LLMs)是LangChain的核心组件。LangChain不提供自己的LLMs,而是提供了一个标准接口,用于与许多不同的LLMs进行交互。

有关更详细的文档,请查看我们的:

  • 操作指南:核心功能的实例,如流式传输,异步等。
  • 集成:如何使用不同的LLM提供商(OpenAI,Anthropic等)

入门

有很多LLM提供商(OpenAI,Cohere,Hugging Face等)- LLM类的设计目的是为所有这些提供一个标准接口。

在本教程中,我们将使用OpenAI LLM包装器,尽管突出显示的功能对于所有LLM类型都是通用的。

设置

首先,我们需要安装官方的OpenAI包:

npm

npm install -S openai

Yarn

yarn add openai

pnpm

pnpm add openai

访问API需要一个API密钥,您可以通过创建帐户并转到 此处 获取。一旦我们有了密钥,我们将通过运行以下命令将其设置为环境变量:

export OPENAI_API_KEY="..."

如果您不想设置环境变量,可以在初始化OpenAI LLM类时直接通过openAIApiKey参数传递密钥:

import { OpenAI } from "langchain/llms/openai";

const llm = new OpenAI({
  openAIApiKey: "YOUR_KEY_HERE",
});

否则,您可以使用空对象进行初始化:

import { OpenAI } from "langchain/llms/openai";

const llm = new OpenAI({});

call: string in -> string out​

使用LLM最简单的方法是使用.call方法:传入一个字符串,获取一个字符串的完成结果。

const res = await llm.call("Tell me a joke");

console.log(res);

// "为什么鸡过马路?
// 因为它要去对面。"

generate: 批量调用,更丰富的输出

generate 允许你使用一个字符串列表来调用模型,返回的响应比仅有文本更完整。这个完整的响应可以包含多个顶部回答和其他特定于 LLM 提供者的信息:

const llmResult = await llm.generate(["告诉我一个笑话", "告诉我一首诗"], ["告诉我一个笑话", "告诉我一首诗"]);

console.log(llmResult.generations.length)

// 30

console.log(llmResult.generations[0]);

/*
  [
    {
      text: "\n\n问:鱼碰到墙壁时说了什么?\n答:**坝!**",
      generationInfo: { finishReason: "stop", logprobs: null }
    }
  ]
*/

console.log(llmResult.generations[1]);

/*
  [
    {
      text: "\n\n玫瑰是红色的,\n紫罗兰是蓝色的,\n糖是甜的,\n而你也是。",
      generationInfo: { finishReason: "stop", logprobs: null }
    }
  ]
*/

你还可以访问返回的特定于提供者的信息。这些信息在不同的提供者之间不是规范化的

console.log(llmResult.llmOutput);

/*
  {
    tokenUsage: { completionTokens: 46, promptTokens: 8, totalTokens: 54 }
  }
*/

下面是一个包含额外参数的例子,将 max_tokens 设置为 -1 以启用令牌大小计算:

import { OpenAI } from "langchain/llms/openai";

export const run = async () => {
  const model = new OpenAI({
    // 自定义所使用的 OpenAI 模型,默认为 `text-davinci-003`
    modelName: "text-ada-001",

    // `max_tokens` 支持一个特殊的 -1 参数,它会计算指定模型 modelName 的最大令牌长度,并将其作为 `max_tokens` 参数包含在请求中发送到 OpenAI
    maxTokens: -1,

    // 使用 `modelKwargs` 直接传递参数给 OpenAI 调用
    // 注意,它们使用的是蛇形命名法而不是驼峰命名法
    modelKwargs: {
      user: "me",
    },

    // 用于调试和记录额外信息
    verbose: true,
  });

  const resA = await model.call(
    "一个制造五颜六色袜子的公司做个好的公司名字是什么?"
  );
  console.log({ resA });
  // { resA: '\n\n绚丽袜子' }
};

高级

本部分适用于希望更深入了解 LangChain 工作原理的用户。如果你刚开始使用,你可以跳过本节。

LLMs 和 Chat Models 都构建在 BaseLanguageModel 类之上。这个类为所有模型提供了一个公共接口,使我们可以在链式调用中轻松替换模型而不改变其他代码。

BaseLanguageModel 类具有两个抽象方法:generatePromptgetNumTokens,分别由 BaseChatModelBaseLLM 实现。

BaseLLMBaseLanguageModel 的子类,为 LLM 提供了一个公共接口,而 BaseChatModelBaseLanguageModel 的子类,为 Chat Model 提供了一个公共接口。



关联主题