Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .agents/skills/edgeflow-node-developer/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ description: 新增或修改 LLM-EdgeFlow 的 common/custom Node。所有 Node
| 实际需求 | 起点 |
| --- | --- |
| 逐项文本变换,数量与来源不变 | `tools/scaffold_custom_node.py <node_type> --write-test`;`Run` 用 `MapPayloads` 调用 `Transform` |
| 给现有 Node 增加普通配置项 | [教程第 2 节](../../../doc/dev_guide/first_custom_node.md#2-为同一个节点增加普通配置):添加 `Params` 与字段声明;需要运行时更新时再加 Control |
| 文本前处理 → 一次 LLM → 文本后处理 | 同一命令加 `-m llm`:多出 `Models`、`BuildPrompt` / `FormatAnswer`;生成参数由 `GenerateParameters` 从配置读取 |
| 同时生成可运行方案 | [text-llm-node Recipe](../../../doc/dev_guide/recipe_text_llm_node.md),不要再单独运行脚手架 |
| 1:1 的 Embedding/ASR/OCR/Rerank | 同一命令加 `-m <capability>`;检查生成端口是否符合真实算法 |
Expand Down
2 changes: 1 addition & 1 deletion doc/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
| 路径 | 何时使用 | 阅读入口 |
| --- | --- | --- |
| 已有能力编排 | 外部契约不变,调整配置与连线 | [Studio 编排练习](../tools/pipeline_studio/README.md#第一次编排) → [运行当前方案](../tools/pipeline_studio/README.md#运行当前方案);提示词任务可用[现有 Recipe](dev_guide/recipe_prompt_config.md) |
| 新增自定义 Node | 需要实现缺失算法 | [自定义 Node 入门](dev_guide/first_custom_node.md),按任务选择 Recipe 或普通脚手架 |
| 新增自定义 Node | 需要实现缺失算法 | [自定义 Node 入门](dev_guide/first_custom_node.md):同一个节点从文本处理、普通配置到调用模型和接入 Pipeline |
| 新增外部业务契约 | 请求或响应的字段、格式、语义变化 | [业务接入指南](dev_guide/business_onboarding.md),先复用已有转换器、载体和 Demo 运行代码 |

## 使用开发 Skills
Expand Down
14 changes: 7 additions & 7 deletions doc/dev_guide/custom_node_concepts.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,20 +62,20 @@ Node 是批量处理函数。输入端口对应参数,输出端口对应返回

| 名字 | 练习中的例子 | 谁决定它 |
| --- | --- | --- |
| 节点类型 `type` | `my_business_llm` | C++ 注册;说明“这是什么操作” |
| 节点实例 `name` | `generate_entities` | Pipeline;说明“这次使用这个操作的位置” |
| 节点类型 `type` | `my_text_normalize` | C++ 注册;说明“这是什么操作” |
| 节点实例 `name` | `normalize` | Pipeline;说明“这次使用这个操作的位置” |
| 逻辑端口 | `input`、`output` | Node;说明“操作接收、返回哪些值” |

同一个类型可以在一个方案出现多次,只需使用不同的 `name`。

Pipeline 的 `inputs` 直接引用来源。例如:

```json
{"type":"my_business_llm", "name":"generate_entities", "params":{"bind_model":"entity_llm"},
"inputs":{"input":"input.sentence_text"}}
{"type":"my_text_normalize", "name":"normalize", "params":{"bind_model":"normalize_llm"},
"inputs":{"input":"input.query"}}
```

输出引用为 `generate_entities.output`。响应在所选输出转换器的 `inputs` 中连接最终结果的来源。
输出引用为 `normalize.output`。响应在所选输出转换器的 `inputs` 中连接最终结果的来源。
Validator 由引用推导依赖。只有额外执行顺序需要 `depends_on`。必需输入显式连接,可选输入省略即未连接。
内部 Blackboard 数据名就是引用本身,未被引用的输出不发布。换方案时只改引用,逻辑端口保持稳定。

Expand Down Expand Up @@ -111,8 +111,8 @@ Spec 包装读取只读输入,必需值缺失或已连接输入类型不符时
| --- | --- | --- |
| `type` | `llm` | 模型类别;实现由类别和后端唯一选出 |
| `backend.type` | `test_causal_lm_backend` | 运行资源由哪一种后端实现提供;本例为测试后端 |
| `name` | `entity_llm` | Pipeline 为这个模型实例起的名字 |
| 节点配置 `bind_model` | `entity_llm` | 引用上面的模型实例,不是填写模型路径 |
| `name` | `normalize_llm` | Pipeline 为这个模型实例起的名字 |
| 节点配置 `bind_model` | `normalize_llm` | 引用上面的模型实例,不是填写模型路径 |
| `ILlmModel` | C++ 接口 | 节点编译时依赖的能力约定 |

模型类型和后端名称只是这个练习的已注册配置,其他环境以 Catalog 为准。
Expand Down
5 changes: 3 additions & 2 deletions doc/dev_guide/first_control.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,9 @@
发布后不复用。一个命令 ID 只属于一个节点类型,Catalog 会拒绝跨类型重号。
同一节点类型的多个实例共用其命令声明,无需重复注册。

脚手架生成 `src/custom_nodes/prefix_control_node.cpp`。它与[第一个自定义 Node](first_custom_node.md)
的纯计算节点结构相同,只多了 `Params` 和 Control 命令。该节点按一对一关系处理 `TextBatch`,保留来源编号。脚手架拒绝覆盖已有文件。
脚手架生成 `src/custom_nodes/prefix_control_node.cpp`。它沿用[第一个自定义 Node](first_custom_node.md)
的参数声明方式,再增加 Control 命令。普通配置只需要 `Params`,运行时更新才需要 Control。
该节点按一对一关系处理 `TextBatch`,保留来源编号。脚手架拒绝覆盖已有文件。
`--write-test` 同时生成测试文件,节点测试程序自动收集该文件。

## 3. 阅读受控参数声明
Expand Down
Loading
Loading