Langchain.js | 基础-LCEL(二)👀👀👀

633 阅读4分钟

前言

这一次 , 整理 LECL 常用 api(旧 api 舍弃) , 如果开发需要用到的 api 不在下面文中的范围的 , 可以到下面网址中查找

环境配置

首先你必须有 : deno + jupyter 环境

参考我之前的文章 : deno+Jupyter Notebook😀 | js也可以和python玩交互式🤔

之后我统一配置引入的包

deno.json 配置

{
    "imports": {
      "lodash": "npm:/lodash@4.17.21",
      "dotenv": "https://deno.land/std@0.220.0/dotenv/mod.ts",
      "langchain": "npm:/langchain@0.1.28",
      "langchain/": "npm:/langchain@0.1.28/",
      "@langchain/openai": "npm:/@langchain/openai@0.0.22",
      "@langchain/openai/": "npm:/@langchain/openai@0.0.22/",
      "@langchain/core": "npm:/@langchain/core@0.1.48",
      "@langchain/core/": "npm:/@langchain/core@0.1.48/"
    },
    "deno.enable": true
  }
  

建立.env 文件 , 从环境变量中读取秘钥和中转路径

常用 api

速览

invoke

  • 调用方式:它是用于 Runnable 对象的基础调用方法,通过在对应的 Runnable 实例后面使用 . 操作符来调用,例如:runnableInstance.invoke(inputParameters),其中 runnableInstance 就是一个具体的 Runnable 对象,而 inputParameters 则是根据该对象要求传入的相应参数。
  • 功能特点:执行单个参数集的操作,通常等待操作完成并返回最终结果,适用于简单的、一次性的任务执行场景,比如向语言模型发起一次提问并获取完整回答的情况。

batch

  • 调用方式:同样是作用于 Runnable 对象,也是借助 . 操作符来调用,像 runnableInstance.batch(batchInputParameters)。这里的 runnableInstanceRunnable 对象,batchInputParameters 是一组参数的集合,往往是多个符合输入要求的参数组组成的数组形式。
  • 功能特点:支持批量传入多组参数,能一次性对多组输入执行对应的 Runnable 操作,适合同时处理多个相似任务的场景,例如批量向语言模型发送多个不同的提问,然后统一获取所有问题对应的回答结果,提高执行效率,减少多次单个调用带来的开销。

stream

  • 调用方式:通过 . 操作符在 Runnable 对象上调用,即 runnableInstance.stream(inputParameters),输入合适的参数后,以流的形式返回相关数据。
  • 功能特点:它的独特之处在于返回的数据是以流的方式呈现,在执行过程中不是等待整个操作全部完成才返回结果,而是可以逐步返回中间产生的数据,比如在语言模型生成文本回复时,能够实时获取逐字、逐句或者按一定数据块生成的内容,便于实时展示或者进行其他实时处理,常用于需要实时反馈的交互场景中。

withFallbacks

  • 调用方式:作为任何 Runnable 对象都有的函数,可以这样使用,例如 runnableInstance.withFallbacks(fallbackConfigs),其中 fallbackConfigs 一般包含了备用 Runnable 对象等配置信息,用于定义备用策略。
  • 功能特点:提供了一种容错机制,通过创建具有容错、备用策略的可运行对象序列,当主 Runnable 在执行过程中出现故障(像网络问题、服务不可用等原因导致无法正常返回结果)时,能够自动切换到备用的 Runnable 对象继续执行任务,尽力保障整个操作流程不会因为某个环节的问题而完全失败,增强了系统的可靠性和稳定性,在依赖外部服务(如不同的语言模型 API)的场景中应用价值较大。

实战

invoke

invoke通常用于单个参数的简单调用执行

batch

batch用于批量传入多组参数进行调用,比如同时向语言模型发送多个不同的提问等情况:

stream

stream接口以流的方式返回数据,常用于需要逐步获取结果的场景,比如实时展示语言模型生成回复的内容片段等情况。在Langchain.js中,部分模块支持流式响应,以下是一个简单示例(注意不同模块对流式的具体实现细节和支持情况可能有差异):

下面就是大模型 , 一个一个字蹦出来 , 就是"流"的形式

由于 jupyter notebook 有限制 , 部分文字为展现

withFallbacks

Langchain.js (以及更广泛的 LangChain 相关框架概念中),withFallbacks 是一个很有用的机制,通常用于创建具有容错、备用策略的可运行对象(Runnable)序列

withFallbacks 允许你指定一个主 Runnable 对象以及一个或多个备用(fallbackRunnable 对象。当主 Runnable 在执行过程中出现故障(例如,由于网络问题、服务不可用等原因导致无法正常返回结果)时,框架会自动尝试使用备用的 Runnable 对象来继续执行任务,以尽量获取有效的结果,避免整个流程完全失败。

使用 Langchain.js 尝试创建两个不同的 ChatOpenAI 实例,一个是 fakeLLM ,一个是 realLLM,并打算给 fakeLLM 设置备用策略(通过 withFallbacks),让它在出现问题时可以切换使用 realLLM 来进行调用。

以下结果 , 正常运行

后记

日后使用 langchain 过程中 , 觉得常用的 api , 将会持续更新 ~