Agent Workflow 学习向:LLM 节点,用 prompt 生成文本(默认 stub,可选真实模型)

📅 发布时间:2026/8/24 21:28:15
Agent Workflow 学习向:LLM 节点,用 prompt 生成文本(默认 stub,可选真实模型)
上一篇Code 节点比模板更强的变量加工相关02 最小工作流 API · 03 浏览器联调台示例仓库flow-forge本篇讲工作流里新增LLM 节点——用 prompt 模板调用「模型提供者」生成文本。默认不必申请 API Key想接真实模型时再配三个环境变量。先说结论前四篇已经有后端壳子、最小图执行、浏览器联调、Code 可编程变换。缺的是 Workflow 产品里很常见的一步——让模型根据提示词写出一段文字。对比TemplateCodeLLM本篇干什么填空成句跑短脚本加工变量渲染 prompt → 交给模型 → 拿回文本配置字段data.templatedata.codedata.prompt结果是否确定是是stub 下确定真实模型下可变化本地默认无需外网无需外网Stub固定Echo: …无需 Key一句话LLM 节点把「生成」从确定性节点里拆出来本仓用可替换的 Provider默认 stub 保证测试与跟跑不依赖外网。HTTP 仍是 create → run → events。变的是图里多了data.type: llm以及应用启动时选哪个 Provider。1. 为什么需要单独的 LLM 节点Template 只能拼固定句式Code 只能做你写得出来的小逻辑。很多工作流要的是「根据用户输入让模型写一段回复 / 摘要 / 改写」。对照 Dify 一类产品LLM 节点就是这一步。本仓 changellm-node沿用 Code 已验证的扩展模式图校验加类型 → Runner 加分支 → 执行细节放进独立模块并额外引入Provider提供者抽象把「怎么生成」从「图怎么跑」里拆开。术语是什么本仓怎么用LLM 节点图上的「模型生成」一步data.type: llmdata.promptprompt提示词发给模型的那段文字模板支持{name}这类占位符与 Template 相同Provider真正负责「根据 prompt 返回文本」的组件可换成 stub 或 OpenAI 兼容 HTTPStub假模型不联网、输出可预期默认输出形如Echo: 渲染后的 prompt2. 功能一图里怎么配 LLM 节点{id:llm_1,data:{type:llm,prompt:Say hello to {name}}}字段含义type: llmRunner 走模型生成分支prompt提示词模板{name}来自本次运行的inputs或上游变量校验不能为空长度上限约 8KB最小整图start → llm → end{nodes:[{id:start_1,data:{type:start}},{id:llm_1,data:{type:llm,prompt:Say hello to {name}}},{id:end_1,data:{type:end}}],edges:[{id:e1,source:start_1,target:llm_1},{id:e2,source:llm_1,target:end_1}]}inputs示例{name: Forge}。3. 功能二跑起来会发生什么Runner 走到 LLM 节点时白话顺序用当前变量表渲染data.prompt缺占位符 → 失败和 Template 一样把渲染后的完整字符串交给当前的ProviderProvider 返回一段文本写入变量text以及llm_1.text这类按节点命名的副本供 End 输出照常写node_started/node_succeeded或失败事件默认 stub 下你看到什么未配环境变量时Provider 是 Stub不联网直接返回Echo: Say hello to Forge对应outputs大致是{text:Echo: Say hello to Forge}这足够证明图校验、变量传递、事件落库、联调页展示整条链路通了。CI 与本地 pytest 也只依赖 stub不强制你有 API Key。和 Template / Code 怎么选场景更合适的节点固定句式填空Template大小写、简单运算Code需要「模型写出来」的内容LLM先拼上下文再生成start → template → llm → end4. 功能三Provider 抽象——为什么不把「调 API」写死在节点里若把 HTTP 调用直接塞进 Runner 分支测试要么真打外网要么到处 mock。本仓做法LLM 节点只负责渲染 prompt → 调用 provider.complete(prompt) → 写 text Provider 负责stub 回声或发 HTTP 给真实模型实现何时启用行为StubLlmProvider默认env 不齐Echo: promptOpenAiCompatibleProvider三个环境变量都配齐POST/chat/completions取第一条消息文本应用启动时在工厂里选 Provider再注入 RunnerHTTP 启动 run 时带上。测试里也可以传入假 Provider模拟「模型挂了」→ Runfailed。接真实模型时三者缺一不可仍回落 stub环境变量含义FLOW_FORGE_LLM_BASE_URL如https://api.openai.com/v1或其它兼容端点FLOW_FORGE_LLM_API_KEY密钥FLOW_FORGE_LLM_MODEL模型名本 slice不做流式 SSE、多模态、工具调用、模型管理后台。先把「节点 可替换 Provider」钉住。5. 你怎么跟跑方式 A浏览器联调页起好apiweb见第三篇左侧图换成上面的 start → llm → end或复制SAMPLE_LLM_GRAPHinputs{name: Forge}点「运行」stub 下应看到Echo: Say hello to Forge方式 Bcurlapi/README.md有 LLM 节点完整示例。方式 C自动化cdapi uv run pytest覆盖合法 llm 图、缺 prompt、缺变量失败、stub 成功、provider 异常失败、env 工厂选 stub/真实实现等。想接真实模型先设好三个环境变量再启动 Flask同一张图无需改 JSON。6. 仓库地图先职责后语法位置本篇职责core/workflow/graph.py允许llm校验data.promptcore/workflow/nodes/llm.py渲染 prompt 调 providercore/workflow/providers/stub、OpenAI 兼容、按 env 工厂core/workflow/runner.py调度循环里的llm分支app.py启动时创建 provider挂到app.extensionsweb/lib/sample.ts可选SAMPLE_LLM_GRAPH读代码建议顺序先跟跑 stub → 看nodes/llm.py两步渲染 / 调用→ 再看providers/stub.py与factory.py为何能切换。本篇顺带认识的词词先怎么记和本篇的关系prompt你写给模型的说明/问题模板data.promptProvider「谁来生成文本」的可替换实现stub 或真实 HTTPstub测试/演示用的假实现默认Echo: …注入创建 Runner 时把 provider 传进去测试可换假 provider{name}占位符运行时换成变量值与 Template 同一套规则和前作怎么接篇补哪一段04 Code 节点确定性可编程变换本篇非确定性真实模型/ 可 stub 的「生成」一步 Provider 缝下一篇更可能落在画布、并行边或其它产品能力本切片停在「LLM 节点 默认可测的 Provider」。你可以从这里带走什么生成与确定性变换宜分成不同节点类型便于测试与职责清晰。LLM 节点契约prompt渲染 →provider.complete→ 写入text。默认 stub让跟跑与 CI 不依赖 API Key真实模型用 env 切换图 JSON 可不动。Provider 抽象是关键缝换模型供应商时优先换实现而不是改 Runner 主循环。加节点类型的套路再次复用图校验 → Runner 分支 → 独立模块 → 文档/示例。仓库与相关文档GitHubhttps://github.com/jimchou-h/flow-forgeLLM 说明与 curlapi/README.md节点执行core/workflow/nodes/llm.pyStub Providerproviders/stub.py按 env 选择providers/factory.pyWeb 示例图web/lib/sample.ts欢迎 Star、Issue 和 PR。_本文基于 Flow Forgellm-node覆盖 LLM 节点、Stub/OpenAI 兼容 Provider 与默认跟跑路径。