[LangChain] Runnable接口 - 1

news/2025/11/2 16:14:00/文章来源:https://www.cnblogs.com/Answer1215/p/19185076

在 LCEL 中,几乎所有的模块:

  • 提示词模板
  • 模型
  • 解析器

都是实现了 Runnable 接口的,可以将这些模块称之为 Runnable 类型。这种类型的模块可以快速插入到链条里面。

RunnableLambda

RunnableLambda 是 LangChain.js 提供的一种轻量级工具,它能把 普通函数 封装成符合 Runnable 接口规范的实例,从而让该函数能够无缝参与到 LCEL 的链式调用与流式处理流程中。

  1. 快速上手案例

    import { RunnableLambda } from "@langchain/core/runnables";const fn = (text) => {return text.toUpperCase();
    };const runnableFn = RunnableLambda.from(fn);const res = await runnableFn.invoke("hello");console.log(res);
    
  2. 关键词高亮插件

    闭包 --> *&*闭包*&*

    import { ChatOllama } from "@langchain/ollama";
    import { PromptTemplate } from "@langchain/core/prompts";
    import { StringOutputParser } from "@langchain/core/output_parsers";
    import { RunnableLambda } from "@langchain/core/runnables";// 1. 创建一个提示词模板
    const pt = PromptTemplate.fromTemplate("请使用中文解释下面的概念:{topic}");// 2. 创建模型
    const model = new ChatOllama({model: "llama3",temperature: 0.7,
    });// 3. 解析器
    const parser = new StringOutputParser();// 4. 创建一个链条
    let chain = pt.pipe(model).pipe(parser);// 5. 创建一个简单的插件
    const fn = (text) => text.replace(/闭包/g, "*&*闭包*&*");
    const highlight = RunnableLambda.from(fn);chain = chain.pipe(highlight);const res = await chain.invoke({topic: "闭包",
    });console.log(res);
    

更多场景:

  • 插入日志收集模块
  • 插入翻译模块(调用外部 API)
  • 插入开关:判断某个条件是否中断执行
  • 格式调整、结构清洗、敏感词过滤

pipe() 方法可接受的三种类型:

  1. Runnable 实例:这是最常用的,也是最推荐的

  2. 普通函数:LCEL 内部会自动用 RunnableLambda.from(fn) 包装成一个 Runnable

  3. 对象:将上游的输入(或结果)分别传给多个 runnable,然后返回一个对象。

    import { ChatOllama } from "@langchain/ollama";
    import { PromptTemplate } from "@langchain/core/prompts";
    import { StringOutputParser } from "@langchain/core/output_parsers";
    import { RunnableLambda } from "@langchain/core/runnables";// 创建模型
    const model = new ChatOllama({model: "llama3",temperature: 0.7,
    });// 解析器
    const parser = new StringOutputParser();// 创建两个子链
    const chain1 = PromptTemplate.fromTemplate("请用中文用 2-3 句概括以下主题的核心含义:{input}"
    ).pipe(model).pipe(parser);const chain2 = PromptTemplate.fromTemplate("请用中文从以下主题中提取 5 个关键词,以逗号分隔:{input}"
    ).pipe(model).pipe(parser);let chain = RunnableLambda.from((x) => x);chain = chain.pipe({summary: chain1,keywords: chain2,
    });const res = await chain.invoke({input: "闭包",
    });
    console.log(res);
    

RunnableMap

RunnableMap(也叫 RunnableParallel),它可以让多个链条 并发执行,并返回一个结构化的对象结果。

RunnableMap.from({ ... }) 会并发执行多个子链,并将它们的结果组合成一个对象返回。

import { ChatOllama } from "@langchain/ollama";
import { PromptTemplate } from "@langchain/core/prompts";
import { StringOutputParser } from "@langchain/core/output_parsers";
import { RunnableMap } from "@langchain/core/runnables";// 创建模型
const model = new ChatOllama({model: "llama3",temperature: 0.7,
});// 解析器
const parser = new StringOutputParser();const chain1 = PromptTemplate.fromTemplate("用中文讲一个关于 {topic} 的笑话").pipe(model).pipe(parser);
const chain2 = PromptTemplate.fromTemplate("用中文写一首关于 {topic} 的两行诗").pipe(model).pipe(parser);const chain = RunnableMap.from({joke: chain1,poem: chain2,
});const res = await chain.invoke({topic: "小狗",
});
console.log(res);

-EOF-

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/953664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 巡检用户创建脚本(Python 版)

MySQL 巡检用户创建脚本(Python 版)脚本依赖 需先安装 MySQL 官方 Python 连接器,执行以下命令安装: pip install mysql-connector-python完整 Python 脚本 import os import getpass import mysql.connector from…

初识目标检测

一.目前我校主要研究方向就是目标检测,所以首先应对目标检测有初步了解。目标检测属于计算机视觉中的一个热门方向,主要应用于物体、人、动物识别、动作识别等。结合我校农业研究方向,通过目标检测,可以用来检测瓜…

MySQL 8.0 双密码机制:改密码不中断业务,无缝切换的安全方案

MySQL 8.0 双密码机制:改密码不中断业务,无缝切换的安全方案改数据库密码时,你是否总在“安全”和“业务连续性”之间纠结?传统单密码模式下,一旦执行密码修改,现有连接会瞬间失效,应用直接报连接错误;若等业务…

记录Vmware WorkStation下安装的ESXi DCUI下 Resolving Hostname失败

原因未知,只是摸索出了一个方法可以解决实验环境如下: 有三台机器,宿主机Host 安装Vmware Workstation Pro17,虚拟机A 装的是Windows Server,在上面装了dns服务器,虚拟机B 装了EXSi 8,虚拟网卡选择的是NAT模式问…

【为美好CTF献上祝福】python 逆向

pyinstxtractor pyinstxtractor 是一个用于解包由 PyInstaller 打包的 Python 可执行文件的工具。 能把打包后的 .exe 文件还原为原始的项目结构。

MySQL参数优化最佳实践

MySQL参数优化最佳实践作为DBA,是否遇到过这样的糟心场景:云服务器CPU、内存明明还很空闲,可一到业务高峰期,数据库就开始“掉链子”——连接超时、查询卡死不说,CPU还会突然飙到100%;查看日志更是满屏报错:“T…

班级任务数据采集与融合实验第二次报告

数据采集与融合实验第二次报告 作业1 1)实验内容 要求:在中国气象网(http://www.weather.com.cn)给定城市集的7日天气预报,并保存在数据库。 该实验先观察url格式,发现不同城市的页面只和城市代码有关,于是使用…

LVGLSharp:LVGL的C#绑定库介绍

在嵌入式系统和图形用户界面(GUI)开发领域,LVGL(Light and Versatile Graphics Library)是一个广受欢迎的开源图形库,它提供了丰富的UI组件和高效的渲染能力,适用于各种资源受限的设备。而LVGLSharp则是LVGL的一…

Java方法——递归

Java方法——递归递归 A函数调用B函数 递归则是A函数调用A函数 利用递归可以用简单的程序来解决一些复杂问题。它通常把一个大型复杂问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量程序就能…

2025 年 11 月氨糖软骨素厂家哪家好?剂型优化与人群适配双维度测评推荐

氨糖软骨素的服用体验与实际效果,很大程度取决于剂型设计合理性与对不同人群的适配性,市场上部分产品因剂型单一(如仅片剂)、配方未考虑特殊人群需求,导致服用不便、效果不佳。本次推荐基于国际关节健康协会 2025…

论文应该这样读(How to Read a Paper)

August 2, 2013 S. Keshav David R. Cheriton School of Computer Science, University of Waterloo Waterloo, ON, Canada keshav@uwaterloo.ca 摘要:科研人员一般都花费大量时间来阅读论文(下文亦有写作“文章”,…

各省市车牌号记忆 测试游戏

之前用C#写过这个小工具,现在用C++ Builder又试了一下,修正了一些错误。 见附件。打开释放即可以使用,无需其它文件或安装过程。 需要源码的可以留言。 https://files.cnblogs.com/files/blogs/845201/PrjChePaiTes…

2025年11月氨糖软骨素厂家哪家好?原料溯源与临床效果双维度优选推荐

氨糖软骨素产品的品质核心在于原料安全性与临床效果可靠性,但市场上部分产品存在原料来源不明、效果缺乏数据支撑等问题。本次推荐基于国际关节健康产业协会 2025 年第三季度测评数据,采用 “原料溯源完整性 - 临床效…

range()

range() 是 Python 提供的内置函数。 range([start=0,] end[, step=1]) [] 表示可以省略range(end)range(start, end)range(start, end, step)得到一个等差序列 [start, end),这是一个不可变的序列,不支持元素修改,…

2025 年 11 月氨糖软骨素厂家哪家好?提纯工艺与长效养护双核心测评推荐

氨糖软骨素的核心价值取决于提纯工艺带来的成分活性,以及产品能否实现长效关节养护,但市场上部分产品因工艺落后导致活性流失、养护效果短暂。本次推荐基于国际骨健康产品协会 2025 年第三季度测评数据,采用 “提纯…

2025 年 11 月氨糖软骨素厂家哪家好?成分配比与吸收技术双维度测评推荐

关节健康问题已成为全球关注的健康课题,氨糖软骨素作为核心养护补充剂,市场需求持续攀升,但成分虚标、吸收效率低等问题频发。本次推荐基于国际关节健康协会 2025 年第三季度测评数据,采用 “成分配比科学性 - 吸收…

2025 年 11 月氨糖软骨素厂家哪家好?纯度检测与养护效果双核心测评推荐

氨糖软骨素作为关节养护的关键补充剂,其原料纯度与实际养护效果直接决定产品价值,但市场上部分产品存在纯度不达标、效果夸大等问题。本次推荐基于国际骨健康检测协会 2025 年第三季度测评数据,采用 “纯度实验室检…

总是编译不过去,怎么知道下的代码里的依赖的库比如 ffmpeg 、qt这些具体是依赖哪个版本的

一句话结论Olive master 分支目前(2025-10)官方 CI 与多篇实测都锁定在Qt 5.15.x(5.15.2 最稳,6.x 仍可能踩坑)FFmpeg 4.3.x – 5.0.x(4.3.1 / 4.4 / 5.0 均可,7.0 已确认不能用)OpenImageIO 2.1.12+OpenColor…

MySQL数据库常用命令

MySQL数据库常用命令 一、操作数据库命令创建数据库 create database [if not exists] school;删除数据库 drop database [if not exists] school;使用数据库 use school;查看数据库 show databases;注:如果数据库名,…