Runnable 才是 LangChain 真正的骨架:一次读懂 Invoke、Batch、Stream

OpenViking上下文数据库Golang集成实践 技术创新文件系统范式:将AI Agent的上下文管理从扁平向量存储提升为结构化文件系统分层检索策略:L0/L1/L2三层加载机制,减少62.1%的Token消耗记忆自迭代:会话提交触发Agent经验沉淀,实现越用越智能工程实践完整Golang实现:提供生产级可用的OpenViking客户端库企业级集成方案:涵盖文档摄入、检索、会话管理等全流程性能优化成果:检索准确率提升24.1%,响应时间减少53.3%可观测性提升可视化检索轨迹:实现检索过程的白盒化,调试效率提升77.1%全面监控指标。 阅读详情

读完这篇,你应该会把LangChain 的理解顺序彻底倒过来,不是先有 Chain、再有Agent、最后才碰Runnable。而是恰恰相反。LangChain 先把几乎所有能力都压成Runnable,再在它上面长出 LCEL、RAG、Chain、Agent 和一整套运行时能力。


你会在这篇文章里得到什么

  • 一张看清Runnable在 LangChain 里的总骨架图
  • 一套读懂 invoke、batch、stream的统一协议心智模型
  • 一个判断“为什么 stream 没有流起来”的源码级排障框架

适合谁

  • 工程实践者、框架阅读者、需要讲清 LangChain 内核的人。
  • 如果你已经会写 prompt | model | parser,但还是觉得 LangChain 的概念太散,这篇会很有用。

01

—

背景:为什么我说骨架不是 Chain,而是 Runnable

很多人第一次学 LangChain,是从LLMChain、RetrievalQA、AgentExecutor 这种“现成对象”入手的。但沿着源码往下走,你会发现这些名字更像“产品层包装”,真正稳定的执行面其实是 Runnable。一个非常强的信号是:在源码 langchain/langchain_classic/chains/llm.py 里,LLMChain已经被标记为 deprecated,替代方案直接写成 RunnableSequence, e.g: prompt | llm。

这不是小改名。这意味着官方自己的抽象重心,已经从“预制 Chain 类”转向“可组合的统一执行协议”。

一句话结论,Runnable统一了三件事:

  1. 统一能力对象:Prompt、Model、Retriever、Tool、Parser、History 都能落到同一执行面
  2. 统一组合方式:串联是RunnableSequence,并联是 RunnableParallel
  3. 统一运行时能力:config、tracing、retry、fallback、history、dynamic config 都跟着协议走

02

—

总骨架:LangChain 先把一切压成 Runnable

如果只看`libs/core/langchain\_core/runnables/\_\_init\_\_.py`和 `base.py`(langchain源码)  的导出面,你会发现一个非常清晰的世界:
  • 核心抽象是 Runnable
  • 组合原语是 RunnableSequence 和 RunnableParallel
  • 包装器生态包括 RunnableBinding、RunnableWithFallbacks、RunnableWithMessageHistory
  • 结构改写工具包括 RunnableAssign、RunnablePick、RunnablePassthrough
  • 控制流扩展包括 RunnableBranch、RouterRunnable

也就是说,LangChain 并不是让每个高层对象都自带一套独立调用协议。它做的事更像是:先把异构对象都压扁成 Runnable,再让它们用同一种方式被调用、被组合、被追踪。这就是“骨架”的定义。


03

—

三个名字,其实是一套协议:invoke、batch、stream

源码里最值得反复看的,其实不是某个具体子类,而是 libs/core/langchain\_core/runnables/base.py 这一层的默认实现关系。

invoke是单输入、单输出。

batch默认不是“模型厂商的原生批量接口”,而是“并发地调用很多次 invoke”。同步版本默认走线程池,异步版本默认走 gather_with_concurrency。

stream 默认也不是天然 token streaming。对于基类来说,它只是把 invoke 的最终结果 yield 出去。

最容易被忽略的一层其实是 transform:

  • stream 面向“单个输入,输出一个迭代器”
  • transform 面向“输入本身就是 chunk 流,输出也是 chunk 流”

而基类默认的 transform 会先把输入 chunk 缓冲起来,再去调 stream。

所以从源码角度讲,真正决定“是不是边算边出”的,不是接口名里有没有 stream,而是中间节点有没有认真实现 transform。

最小伪代码其实只有这一段:

chain = prompt | model | parser
chain.invoke(x)          # 单次执行
chain.batch([x1, x2])    # 并发批量
for chunk in chain.stream(x):
...

对调用者来说,链没变。变的只是“消费方式”。这正是统一协议的价值。


04

—

真正的组合原语只有两个:串联和并联

RunnableSequence 是 LangChain 里最重要的组合器,这句话甚至直接写在 base.py 的 docstring 里。

它的本质非常直接:上一个 step 的输出,就是下一个 step 的输入。

但源码里有两个细节非常关键:

  1. batch 不是把整条链一起批量化,而是“一层一层向前推进”,每个 step 都调用自己的 step.batch()

  2. tracing 不是糊成一团的,子运行会被打上 seq:step:n 这样的child callback

标记RunnableParallel 则是另一种完全不同的语义:

  • 同一个输入,被扇出给多个子 Runnable
  • invoke 时并发执行
  • stream 时交错吐出 keyed chunks,最后再合成字典

这也是为什么在 LCEL 里,一个普通的 Python dict 能直接成为并联节点。

因为 coerce\_to\_runnable() 会把它自动提升为 RunnableParallel。

所以从读源码的角度,LCEL 其实不是“新语言”。

它只是把两种最核心的图结构写得更顺手了:

  • | = 串联
  • {...} = 扇出并联

05

—

为什么很多 stream 看起来不流?答案在 transform 边界

这是 Runnable 体系里最容易讲错的一点。很多人会下意识地认为:只要我调用了 stream(),系统就应该一边生成一边往下游传。源码告诉你,不一定。

在 RunnableSequence 的实现里,整条链能不能真正连续 streaming,取决于每一个组件是否都实现了 transform。只要中间有一步是阻塞型的,后面的流就会被截断。

最典型的就是 RunnableLambda。它非常好用,但 base.py 的说明写得也很直白:它默认并不擅长 streaming;如果你要做“边接收上游 chunk,边吐下游 chunk”的逻辑,更合适的是 RunnableGenerator 或者你自己实现 transform。

所以一个特别实用的排障句式是:

不是“为什么 stream() 失效了?”而是“这条链中间哪个节点没有实现 transform,导致出现了 stream boundary?”这个判断一旦建立起来,你看 LangChain 的 streaming 问题会快很多。


06

—

Runnable 的外骨骼:为什么 retry、fallback、history 都能无缝粘上来

如果说 Sequence 和 Parallel 负责的是“结构”,那 Binding 和各种 wrapper 负责的就是“运行时外骨骼”。源码里这一层也非常漂亮。

你会看到很多能力都不是重写一套新协议,而是在保留 invoke / batch / stream 的前提下,包一层:

  • bind() 负责绑定额外 kwargs
  • with\_config() 负责绑定运行配置
  • with\_retry() 负责失败重试
  • with\_fallbacks() 负责降级切换
  • RunnableWithMessageHistory 负责会话历史
  • DynamicRunnable 负责运行时可配置替换

这件事的威力在于:你不用为了 tracing 造一套新对象,也不用为了 fallback 再改一套链路。因为大家都认同同一个协议面,所以能力可以横向叠加。再往下一层看 libs/core/langchain\_core/runnables/config.py,你会发现 RunnableConfig 也不是“可选参数包”这么简单。

它真正承担的是协议传播:

  • tags
  • metadata
  • callbacks
  • max\_concurrency
  • recursion\_limit
  • configurable

ensure\_config() 负责兜底和继承,patch\_config() 负责给 child run 打补丁,ContextThreadPoolExecutor 负责把上下文拷进并发线程里。

这就是为什么 Runnable 不只是“能跑”。它还负责把运行时语义完整地带着一起跑。


07

—

读完源码后,我会这样定义 Runnable

如果让我用一句更工程化的话来下定义:

Runnable 是 LangChain 的统一执行协议。它把“单次执行、批量执行、流式执行、异步执行、结构组合、配置传播、Tracing、Fallback、History”全部压到了同一个抽象层上。所以我们平时看到的 Prompt、Model、Parser、Retriever、Tool、Agent,看起来像不同东西。但进入运行时之后,它们尽量都变成一类东西。这才是骨架。不是因为它名字底层,而是因为它承担了整个系统最稳定的“连接规则”。

三个最值得记住的坑:

  1. 不要把 batch() 直接理解成“底层厂商真的提供了批量 API”。在 Runnable 基类里,它的默认含义更接近“并发地跑很多次 invoke()”。
  2. 不要把 stream() 直接理解成“天然逐 token 透传”。如果中间节点没有实现 transform,你拿到的可能只是“最终结果的迭代器包装”。
  3. 不要把 retry、fallback、history、config 当成和主链并列的另一套系统。它们在源码里更像协议包装器,核心价值是“附着在同一执行面上”。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

在这里插入图片描述

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

在这里插入图片描述

用AI学习graphify Graphify是一个AI驱动的知识图谱构建工具,能够将代码、文档、论文、图像和视频等多模态数据转换为结构化知识图谱。其核心技术特点包括: 多模态处理能力: 支持25+编程语言的AST解析 处理PDF、Markdown等文档 集成Whisper进行音视频转录 高效知识提取: 采用确定性AST解析与LLM语义提取结合 相比直接读取源文件,查询token消耗最多减少71.5倍 增量更新机制仅处理变更文件 智能分析功能: 自动识别高中心性的"上帝节点" 发现跨领域的"意外连接&quo 阅读详情

相关推荐

到底什么是Harness工程?一篇文章从入门到企业落地全解析

随着OpenClaw爆火,Harness Engineering(驾驭工程)成为AI编程时代的热门概念,很多小白对其感到陌生。本文用通俗类比和真实案例,避开复杂术语,从基础定义入手,讲清Harness Engineering的核心逻辑——人类工程师设计“约束系统”(马具),让AI模型(烈马)安全高效地完成代码工作,同时拆解其核心组件、企业落地场景和实战成果,帮小白快速入门,读懂这项能解放人力、提升效率的新技术,轻松掌握它的核心价值和落地思路。

program哲学 3289

基于RAG的企业智能客服项目,已拿70万offer!

基于 RAG 构建一套企业智能客服系统📖。

m0_59164520的博客 1450

2.3 Runnable 核心方法详解(invoke/ainvoke、batch/abatch、stream/astream 等)

self,"""同步执行单条输入,返回完整结果:param input: 输入数据(支持 dict、str、Message 等,取决于组件类型):param config: 执行配置(RunnableConfig 类型,包含回调、标签、元数据等):param kwargs: 额外参数(模型参数、执行参数,会覆盖组件初始化配置):return: 组件输出结果(类型由组件定义,如 ChatResult、str 等)"""def batch(self,"""

Long_像风一样自由 489

从Vibe Coding到可控生产力:Harness Engineering的实践启示

摘要:OpenAI提出的Harness Engineering(工程化治理)理念为AI Agent时代的软件工程提供了关键方法论,旨在解决代码高产出下的质量闭环、上下文管理等核心矛盾。其三大目标包括重构工程师角色、将AI纳入可控体系、实现低成本纠错,通过六大举措(如角色重构、机械化约束、反熵机制等)重构工程流程。该理念与vibe coding高度互补,既保留灵感驱动的敏捷性,又通过工程化体系保障稳定性,最终推动工程师从"代码生产者"升级为"工程体系设计者"。

小程故事多的博客 4401

最新版 Akamai 逆向 风控破解

经过测试,捷星 jetstar.com,德州仪器 ti.com,w6 wizzair.com,还有一些航空公司的都是可以实现一个并发的有需要的可以。

m0_72605044的博客 6628

支付系统保证可靠性的秘诀 ----- 订单的补偿和补单

文章目录WHAT? 前言WHY? 为什么要用多级缓存?HOW 怎么做?方案 版本1:数据库存储专线配置通过优先级进行动态上下线方案 版本1 劣势:方案 版本2 :本地缓存替代数据库方案 版本2 劣势:方案 版本3:分布式缓存做自动补偿方案 版本3 总结:Where 分布式多级缓存还能用在哪些地方?总结 WHAT? 前言 刚入职场的时候觉得支付宝等第三方支付系统好强大,要保证这么多的交易不能错,也不能重复还要保证正确的扣钱,直到后面接触订单系统以及第三方支付公司的核心交易系统后才真正窥探到了支付系统的核心

boboaisisi的专栏 3535

[LangChain之链-02]Runnable:整个LangChain生态世界的起点

LangChain编写的Agent以“图”的形式处理你的任务,图由节点和边构成,所有的功能由节点承载,而承载的功能最终体现为一个Runnable对象,后者窜起了LangChain的“Chain”。由于整个LangChain生态提供的组件都是针对Runnable的实现,所以Runnable是整个生态世界的起点。

JaydenAI的博客 923

Oracle-如何修复undo坏快

undo出现坏快,导致数据库宕机,无法启动

qqqyyy0422的博客 571

LangChain 自定义 Runnable

在 LangChain 中,Runnable是一个核心抽象概念,代表任何可以被调用(invoke)或流式处理(stream)的组件。所有 LangChain 组件(如 LLM、PromptTemplate、OutputParser 等)都实现了 Runnable 接口。链式组合:使用运算符可以轻松组合多个 Runnable统一接口:提供一致的invoke()ainvoke()stream()astream()方法配置支持:支持运行时配置(如超时、重试等)批处理:支持批量处理输入数据预处理/后处理。

AI大模型/Python/Java/MySQL技术栈,快来和我一起学习吧 ~ 645

Qt5+OSG实战:如何用osgQOpenGLWidget在窗口中加载3D模型(附完整代码)

本文详细解析了如何在Qt5中使用osgQOpenGLWidget加载和渲染3D模型,涵盖环境配置、核心架构、性能优化及高级技巧。通过实战案例和完整代码,帮助开发者实现工业级3D模型渲染,提升Qt与OSG的整合效率。

weixin_42741930的博客 264

ESP8266+Mixly+MIXIO物联网实战:用色盘控制WS2812 RGB灯(附完整代码)

本文详细介绍了如何利用ESP8266微控制器、Mixly图形化编程工具与MIXIO物联网平台,快速构建一个可通过网页色盘远程控制WS2812 RGB智能灯带的实战项目。内容涵盖硬件接线、平台配置、代码编写与调试全流程,旨在帮助物联网爱好者与初学者轻松实现创意灯光应用,掌握智能硬件开发的核心技能。

gin88的博客 262

【LangChain 源码解析一:Runnable】

每个invokestreambatch都接受一个可选的config参数。是一个TypedDicttags: list[str] # 标签,用于过滤追踪metadata: dict[str, Any] # 元数据,传给回调callbacks: Callbacks # 回调处理器run_name: str # 追踪 run 的名称max_concurrency: int | None # 最大并行数recursion_limit: int # 递归深度限制(默认 25)

一只小星星 1116

duilib 实现截屏选取功能分析

本文关注点不再截屏而是截屏选取工具 1首先肯定是个透明窗口,且置顶并且是工具窗口(任务栏不显示窗口图标) 窗口样式 <?xml version="1.0" encoding="utf-8"?> <Window shadowattached="false"> <Box > <VBox name="track_box" margin="200,200,200,200" bkimage="file='screen_bord...

目前打算换一个工作,有招聘windows c++方向的也欢迎联系,北京、济南 最好 908

掌握 LangChain 的 Runnable:统一接口、链式组合与流式输出全解析

LangChain 是当前最流行的 LLM(大语言模型)应用开发框架,其核心设计理念是 “可组合、可复用、可追踪”。而这一切的基石,正是它的 Runnable 接口体系。本文将从 Runnable 出发,深入浅出地介绍 LangChain 的核心思想与使用方式。

羑悻的博客. 1万+

【机器学习-18】特征筛选:提升模型性能的关键步骤

我们将介绍不同类型的特征筛选方法,包括基于统计的方法、基于模型的方法和嵌入式方法等,并详细解释每种方法的原理和适用场景。通过特征筛选,我们可以减少数据集的维度,降低模型的复杂度,提高模型的泛化能力,并加速模型的训练过程。通过选择适当的特征筛选方法,我们可以减少模型的复杂度,提高模型的泛化能力,并加速模型的训练过程。然而,并非所有的特征都对模型的性能提升有所贡献,有些特征甚至可能是冗余的、噪声较大的或者与目标变量无关的。我们的目标是通过特征筛选选择出对欺诈检测最有用的特征,以提高模型的预测精度。

qq_38614074的博客 1万+

Jetson Orin 上拉取 GMSL 相机流并保存在 DMA 内存中

本文介绍了在NVIDIA Jetson Orin平台上实现GMSL相机DMA内存共享的低延迟采集方案。通过V4L2+NvBufSurface技术,将相机数据直接存入DMA缓冲区,避免传统流程中的CPU拷贝开销。文章详细说明了设备初始化、DMA缓冲区分配、V4L2绑定等关键步骤,并展示了调用示例。该方案支持零拷贝访问,适用于AI推理、硬件编码等场景,能显著提升车载视觉系统的实时性能,为多路GMSL相机接入和低延迟处理提供了高效解决方案。

J。 696

22_Runnable接口源码拆解_LCEL管道语法背后_invoke_stream_batch究竟做了什么

Runnable。如果只从使用者视角看,它像是一套链式调用 API。但从源码视角看,Runnable不同组件如何拥有统一调用接口?管道语法如何把多个组件组合成一个新组件?为什么组合后的chain仍然可以继续invoke()stream()batch()?普通 Python 函数为什么可以接进 LCEL?tracing、metadata、并发控制、异常处理这些运行时信息如何贯穿整个链路?本文会围绕Runnable抽象类的职责。__or__运算符重载如何生成。invoke()

专注于人工智能与 Java 后端开发的技术博主,持续分享大模型应用、机器学习实战、Spring 生态相关的知识和经验。坚持输出高质量原创文章,用通俗易懂的方式拆解复杂技术,帮助读者快速上手、少走弯路。欢迎关注交流,一起在AI时代共同成长。 411

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LangChain 中统一的可执行抽象:Runnable 组件

Runnable是LangChain中的核心抽象接口,它统一封装了各类可执行组件(如模型、prompt、解析器等)的工作单元。通过标准化接口(如invoke、batch、stream等方法),Runnable实现了执行方式的统一和组件的声明式组合。其核心价值在于:1)提供统一抽象层,使不同组件能无缝交互;2)支持通过LCEL语法灵活构建执行链;3)可组合成复杂结构(并行、分支等)。这种设计使得开发者能以统一方式调用和组合各类AI工作流组件。

qq_65800683的博客 392

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

LangChain LCEL表达式与Runnable可运行协议

本文探讨了LLM应用开发中组件嵌套调用的优化方法。首先指出多组件invoke嵌套的三大缺陷:可维护性差、调试困难、扩展性受限。随后提出两种解决方案:1)自定义Chain类,通过平级调用序列组件;2)利用LangChain的Runnable协议和LCEL表达式(|运算符),实现更简洁的链式调用。文章详细展示了两种方案的具体实现,并指出Runnable协议底层同样采用顺序执行策略,但提供了更丰富的标准化接口(如流式处理、批量调用等)。通过优化,代码可读性和可维护性显著提升,同时保留了执行过程的可见性。

hh051020的博客 1243

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

langchain学习笔记——runnable接口

invoke:将单个输入转换为输出batch:将多个输入转换为输出stream:流式输出。

everyglow的博客 871

AI Agent从无到有39: LangChain 的链式开发核心:Runnable 接口与 LCEL

本文介绍了LangChain框架中的Runnable接口和LCEL(LangChain Expression Language)编排语言。Runnable为所有组件提供了统一的输入输出类型标准(基于Pydantic)和调用方法(invoke/batch/stream等),并通过RunnableConfig支持运行时动态配置。LCEL则使用管道操作符|实现顺序组合,配合RunnableSequence和RunnableParallel实现灵活编排。文章建议简单链使用LCEL,复杂流程采用LangGraph,并

Wang的专栏 528

LangChain Runnable接口:统一AI应用开发的核心抽象与工程实践

在AI应用开发中,接口标准化是提升开发效率和系统可维护性的关键。通过定义统一的调用规范,开发者可以将复杂的计算单元封装为可复用的组件,从而降低系统集成的复杂度。这一原理在大语言模型应用框架中尤为重要,它使得模型调用、数据处理和工作流编排能够以一致的方式进行交互。其技术价值在于通过抽象层屏蔽底层实现差异,让开发者专注于业务逻辑而非适配代码。在检索增强生成(RAG)、智能体工作流和多步骤推理链等场景中,这种统一接口显著提升了组件的组合能力和系统的可观测性。本文以LangChain框架的Runnable接口为例,

weixin_30385925的博客 334

LangChain 之 【Runnable与LCEL】(消息类型、|)

官方定义它为使用 LangChain 组件的基础你可以把它想象成我们生活中的USB-C 接口。无论是大模型、解析器、检索器,还是复杂的 Agent,只要实现了 Runnable 接口,它们就拥有了统一的“插拔”标准LCEL 采用声明式的方法,从现有的 Runnable 对象构建出新的 Runnable 对象。它不改变组件内部的逻辑,只负责定义数据流动的方向使用管道运算符# model 和 parser 都是 Runnable。

zl_dfq的博客 361

【LangChain系列九】Runnable 接口与可配置模型:LangChain 的底层协议

本文介绍了LangChain中的Runnable接口协议,它统一了各类组件(模型、提示词、解析器等)的调用方式,提供了invoke、stream、batch和astream四种核心方法。重点讲解了可配置模型的设计,通过configurable_fields方法允许运行时动态修改参数,支持A/B测试和环境隔离等场景。最后展示了Runnable的组合能力,通过运算符实现组件的灵活串联与并联,体现了面向接口编程的优势。

Yeeear的博客 421

LangChain 45 深入理解LangChain 表达式语言九 Runnable 调用、流输出、批量调用、异步处理 LangChain Expression Language (LCEL)

深入理解LangChain 表达式语言九 Runnable 调用、流输出、批量调用、异步处理 LangChain Expression Language (LCEL) Stream逐个字逐个字输出输出。

AI架构师易筋 1728

理解 LangChain的Runnable RunnableWithMessageHistory

最终会生成 :store['my_topic_123456']=[(user的第1次input), (AI的第1次response), (user的第2次input), (AI的第2次response), (user的第3次input), (AI的第3次response),.....]注意,这里用的是.extend()而不是.append(),说明new_messages也是一个list,包含了input_message和output_message。支持结构化的数据流处理。

bigcarp的专栏 1692
上一篇: 小红书一面:MCP 和 Function Calling 有什么区别?
下一篇: 2026年AI智能体开发指南:10张图讲透核心概念
Python_金钱豹
博客等级 码龄5年 1万+粉丝 2841原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值