Eino + DeepFlux 实战全景复盘:100 篇,从 5 分钟 Demo 到企业级平台(第100篇-E86)

作者:leeyi日期:2026/8/31

这是第 100 篇,收官篇。不拆新源码——反过来,把 99 篇走过的路和 DeepFlux 这个真实仓库放在一起盘一遍。

(一)100 篇走了哪几步

回头看,系列其实是一条"从外向内、再向外"的路线:

第一季(01-14):从平台往下看。 先拆 DeepFlux 这个企业级平台——DDD 四层、Session 状态机、ReAct 主循环、HITL、SSE 推流、Hook 护栏、多 LLM、RAG、记忆、RLS 多租户、审计、可观测。当时的问题是"企业级 Agent 平台长什么样",答案是 14 篇。

补充篇前半(E1-E30):钻进引擎。 平台跑在 Eino 上,那就把 Eino 拆开——Graph/Chain/Workflow 三种编排、Pipe 流式管道、七个组件接口(ChatModel/Tool/Retriever/Embedder/Document/Indexer/Prompt)、五个适配器怎么桥接。这段是最"源码"的:compose.Graph 怎么编译、Pregel 怎么调度、StreamReader 怎么背压,一路读到仓库内部。

补充篇后半(E31-E99):回到初学者。 意识到系列对新手不友好,从 E31"5 分钟跑通第一个 Agent"重开一条上手线,按"能跑→会说话→会思考→会做事→有知识→记得你→不乱跑→多 Agent→上线"的顺序重走一遍。B 场景的主题分布就是这个结构的投影:入门/实战 19 篇 + 源码 24 篇,两条线基本对半。

(二)Eino 的知识地图:99 篇收拢成六块

如果只允许留下六句话:

  1. 编排三件套:Chain 线性、Graph 通用 DAG、Workflow 字段映射。选择标准不是"哪个强",是控制流和数据流谁复杂——E52 给过决策表。
  2. 一切皆流:从 Pipe[T](channel 背压)到 StreamReader 到 SSE,token 是一个个蹦出来的,中间每一跳都可能丢、可能堵、可能要转换。E6/E7/E45 三篇其实讲的是同一件事的三个深度。
  3. 组件即接口:七个组件接口全部是"接口 + 多实现 + Option 传参"的范式。会看一个,就会看全部;适配器写法在 E29 收拢成五个样板。
  4. 中断是常态:HITL 八模式(E85)、Checkpoint 七状态(E80)、per-tool 中断——生产 Agent 的一半复杂度在"停下来等人",不在"跑得快"。
  5. RAG 的魔鬼在切片和评测:E68 切片策略、E70 别信榜单测自己的、E74 多查询 vs 重排的分工、E76 端到端六步链路。检索效果差,九成不是模型问题。
  6. 上下文是稀缺资源:记忆四元组(E78)、衰减淘汰(E79)、长对话摘要(E82)、工具结果裁剪(E83)——全部在回答"窗口不够时先扔什么"。

(三)DeepFlux 怎么用 Eino:三平面

demo 的 C 场景验证了 DeepFlux 的骨架,对应三条平面的拍板:

平面落点职责
控制orchestration BCWorkflow 编排:步骤、审批点、断点续跑(V5 per-tool checkpoint)
智能agent BCAgent 语义:会话、记忆召回、工具策略、方案包
执行Eino(go.mod 依赖)图编译、节点调度、流式管道、组件生态

两个 BC 都是标准 DDD 四层(application/domain/infrastructure/interfaces,C2 验证)。Eino 被压在 infrastructure 附近做执行引擎,不向上渗透——这是系列反复出现的边界原则:框架管跑,业务管意义。

30 个 internal 目录里,核心 BC(agent/orchestration/kb/memory/tool/hook/audit/tenant/auth/llm/mcp)构成平台的骨架,其余是支撑(storage/embedding/observability)和外围(billing/branding/sop)。

(四)框架边界:Eino 给了什么,DeepFlux 自己建了什么

收官最适合回答的问题。对照表:

能力Eino 提供DeepFlux 自建为什么自建
图编排/调度✅ Graph/Chain/Workflow引擎能力,直接用
流式管道✅ Pipe/StreamReaderSSE 会话层(HertzStreamer)业务要 critical 帧语义、断线恢复
ChatModel 适配✅ 多 Providerprofiles.yaml + Quirks 修复链配置驱动 + 模型脾气数据化
记忆❌ 无官方组件四元组 scope + DecayScore + Profile作用域语义是业务决策
多租户❌ 不在框架范围Postgres RLS + SET LOCAL + 双防线隔离是合规要求不是功能
工具安全中间件钩子五层防线(白名单→HITL→护栏→nonce→审计)纵深防御,单层都会被绕过
HITL✅ Interrupt/Resume + Checkpoint审批中心、超时兜底 CronJob面向人的流程完整闭环
可观测✅ Callback 切面OTel 三信号 + Langfuse 双链路企业要的是 trace_id 串日志和成本账单

规律很清楚:Eino 给的都是"引擎级"能力(跑、流、调、断),DeepFlux 建的都是"企业级"能力(租户、审计、防线、成本)。框架选型时真正该问的不是"它功能全不全",而是"它的边界划在哪里、边界外的东西我建起来顺不顺手"。Eino 的 Callback/中间件留了足够的切面,这是自建部分能立起来的原因。

(五)诚实复盘:被推翻和会变的

  • Qdrant → pgvector。README 顶部的注就是坦白:E09/E11 写于迁移前,Qdrant 内容是当时实现。少一个独立存储组件,运维面小一半——但代价是 HNSW 2000 维上限这类约束(E72)。
  • FlowAgent / Supervisor 被标 NOT RECOMMENDED。E92/E93 拆源码时反复遇到:Agent 间 Transfer 全量共享上下文,实践中效果不如预期,官方建议改用 AgentTool(Agent 就是 Tool,E91 的 Host-Worker 模式)。看源码注释里的"不推荐"比看功能列表更接近真相。
  • 迁移数在长。143 → 145,两周 +2。任何"当前状态"的数字都是快照,复盘的价值在趋势和结构(序号连续、embed.FS 单一事实源),不在冻结的数值。
  • CozeLoop 自建被否、Langfuse 双链路。生产可观测走过弯路:先自建,内存开销否决,最终 Langfuse JP 区 + 已有 OTel 并行——E88/E89 拆的就是最终形态,弯路只在篇尾提了一句。

(六)写作方法复盘:demo-first

99 篇每篇都有一个 /tmp/eNNdemo:纯标准库 Go、不连网、自检 panic。这个约束逼出了三件事:

  1. 没跑过的结论写不出来。demo 崩了就是理解错了——E87 复刻 Callback 时自检抓出 3 处断言错误,E99 假客户端漏抄 nil 守卫当场空指针。复刻失败的地方,恰恰是源码里最值得讲的细节。
  2. 小白友好不是少讲,是讲能跑的。入门线每篇的最小示例都是"复制粘贴能跑"的,复杂度靠 demo 场景数递增,不靠文字堆砌。
  3. 每篇结尾"git 没动"。一个锚点:系列只读不写,两个仓库(eino/eino-ext/deepflux)在写作期间零改动——所有"实测"都是只读探测,这话说得出口是因为它可验证。

小结

100 篇,一句话收拢:企业级 Agent = 引擎(Eino)× 工程化(DDD/RLS/审计/防线)× 运维(迁移/可观测/交付),缺一条腿都站不稳。

系列到这里收官。两个仓库还在长(迁移 +2 只是开始),如果哪天 Eino 出了 ADK 正式版的多 Agent 方案、或者 DeepFlux 的 orchestration 上了新玩法,再来写续篇也不迟——老规矩,先跑 demo 再说话。


Eino + DeepFlux 实战全景复盘:100 篇,从 5 分钟 Demo 到企业级平台(第100篇-E86)》 是转载文章,点击查看原文


相关推荐


FastAPI 后台任务的边界,以及 Celery、Redis 与自建调度系统的选择
卷无止境2026/8/23

FastAPI 的 BackgroundTasks 很轻巧,但它更像是响应发送后的顺手处理机制,并不是一套可靠的任务队列。写日志、发送不太关键的通知、清理临时文件,它用起来很舒服;一旦任务涉及可靠投递、自动重试、跨机器执行、定时调度或运行状态追踪,就该把工作交给 Celery、Redis Streams,或者独立的任务调度服务。 FastAPI 的 BackgroundTasks 做了什么 FastAPI 的 BackgroundTasks 建立在 Starlette 的后台任务机制之上。开发


AI 工具越好用越要严格把控安全边界
MobotStone2026/8/10

前端时间,有个小伙伴问我:“公众号文章、标书这些东西,是不是都可以直接丢给 AI,让它帮忙处理?” 刚听到这个问题,我觉得挺常见。现在大家写文章、改材料、做总结,第一反应就是找 AI,确实能省不少时间。 但继续聊了几句,我才发现,事情没那么简单。 他已经把公司一整份标书上传给 AI 了。 而这份标书里,不只有网上能查到的公司介绍、业务信息,还包括营业执照、员工社保资料,甚至身份证件等敏感材料。 这两类内容,看起来都是“让 AI 帮忙处理文档”,风险却完全不是一个级别。 比如,一篇准备公开发布的公


Linux——基础开发工具(上)
进击的荆棘2026/7/31

💁‍♂️个人主页:进击的荆棘 👇作者其它专栏: 《数据结构与算法》《算法》《C++起始之路》《Linux》 目录 1.软件包管理器 2.编辑器Vim 3.编译器gcc/g++ 4.自动化构建--make/Makefile 5.Linux第一个系统程序--进度条 6.版本控制器Git 7.调试器-gdb/cgdb使用 1.软件包管理器 1.1什么是软件包 ●在Linux下安装软件,一个通常的办法是下载到程序的源代码,并进行编译,得到可执行程序。 ●但


c++11终章
牢姐与蒯2026/7/23

一.lambda 1.lambda的语法 ①.定义 lambda表达式是一个匿名函数对象,跟普通函数只能定义在全局,或者类里不同,它能够定义在函数的内部。 ②.类型 lambda表达式在使用层而言没有类型,一般用auto或者模板参数定义的对象去接收lambda对象。 ③.lambda的格式 表达式格式跟普通函数相比,少了函数名(匿名),多了捕捉列表。 一个小示例: 注:此处修正一下,返回值部分是“->返回值类型”。 2.lambda的用途 从图中可看出利用lam


GitHub 热榜项目 - 周榜(2026-07-11)
CoderJia_2026/7/15

GitHub 热榜项目 - 周榜(2026-07-11) 生成于:2026-07-11 统计摘要 共发现热门项目: 21 个 Token赞助:siliconflow 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 本期热点趋势总结 本期 GitHub AI 热榜很清晰:Agent 化、低成本推理、隐私本地化、办公自动化正在加速融合。🧠 代表项目里,addyosmani/agent-skills、alir


Objective-C 之 Block 详解
唐诺2026/7/7

iOS核心技能:Objective-C Block完全详解 从语法到原理,从内存到选型,一篇打通Block所有知识点 Block是Objective-C最核心的特性之一,也是每个iOS开发者必须掌握的知识点。它既是回调利器,也是内存陷阱的高发区。本文将系统讲解Block的一切,并在最后与Method进行全方位对比,帮助你彻底掌握Block的选型与使用。 一、什么是Block? Block是Objective-C对C语言函数指针的扩展,它本质上是一个带有自动变量值的匿名函数对象。简单理解:B


用户说 App 卡,但说不清在哪?我把 Flutter 监控 SDK 升级成了链路观测工作台
小林的编程开发日记2026/6/29

用户说 App 卡,但说不清在哪?我把 Flutter 监控 SDK 升级成了链路观测工作台 大家好,去年我写过一篇 Flutter 全链路监控 SDK 那一版可以理解成 v1。 v1 的目标很直接:Flutter App 里发生了什么问题,我要尽可能采到。 比如: Flutter framework error; Dart uncaught error; 启动耗时; 页面加载耗时; Dio / http 请求耗时和状态码; 页面 PV 和停留时长; 用户关键点击; Flutter fram


Python 五大核心数据结构完全指南:列表(List)、字符串(String)、元组(Tuple)、集合(Set)、字典(Dictionary)
FrontPy2026/6/20

Python 核心数据结构完全指南 一、列表 (List) 1.1 定义与特点 列表是 Python 中最常用的数据容器,可以一次性存储多个元素。 定义: 列表名 = [元素1, 元素2, 元素3, ...] 例如: s = [54, 15, 75, 108, 23, 78, 75] 特点: 可以存储不同类型的元素(数字、字符串、布尔值等混合存放)。元素有序,排列顺序固定。元素可以重复。元素可以被修改(增、删、改)。属于序列类型:可通过索引访问。 1.2 列表的索引 正向索引:从 0 开始,


prototype 注入到 singleton 里,prototype是否还是线程安全的
swordbob2026/6/12

"如果 prototype Bean 内部没有共享状态,自身是线程安全的。但 Spring 容器对 prototype 的多例行为有'陷阱',可能导致实际使用中不安全。" 展开讲: prototype 注入到 singleton 里的线程安全分析 一、prototype Bean 自身的线程安全性 1.1 prototype 本身是"独立实例"(这个是安全的) @Service@Scope("prototype")public class ShoppingCart { priv


局部两极分析破解数学建模难题
luj_17682026/6/5

当前博文未提及该问题,以下是基于C知道的知识内容为您回答 在数学建模中,通过“局部两极分析”实现问题求解的突破,其核心思想是:在复杂系统的局部或特定维度上,分别考察其极大化与极小化两种极端状态或趋势,通过分析这两种对立极值的行为、约束与相互作用,来洞察系统的本质结构、关键矛盾与优化路径,从而为全局问题的求解找到突破口。 这种方法融合了优化理论、博弈论和系统分析的思想。 一、 “局部两极分析”的核心逻辑与步骤 “局部两极分析”并非一个固定的算法,而是一种建模策略与思维框架。其通用实施流程可概

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 聚合阅读