文件按职责归属,头文件按使用者范围放置。架构职责与依赖方向见 架构设计,四层职责名称、源码目录与构建目标的对照见其中的 架构总览。
| 目录 | 内容 |
|---|---|
include/ |
头文件,按使用范围分目录;contracts/ 是各层共用的轻量运行时契约(edgeflow_runtime_contracts),platform_mock/ 是平台公共定义替身 |
src/ |
四层实现:adapter/、core/、common_nodes/ 与 custom_nodes/、engine/;cli/ 是随框架编译的命令行工具 alg_pipeline_tool 与 alg_show |
demo/ |
统一 Demo 程序、Demo Profile 与 Mock 方案(fixtures/mock/) |
configs/ |
示例方案的 Pipeline JSON 与部署 .conf,命名见配置说明 |
data/ |
Demo Profile 使用的示例数据集 |
models/ |
模型资产清单与说明;权重文件不入库 |
dev_support/ |
测试用 Model/Backend 替身、Node 起步模板和可选基准,不链接进生产 SDK |
tests/ |
按 unit/、integration/、contract/、e2e/ 分类的测试,见测试指南 |
tools/ |
开发者直接运行的工具:Pipeline Studio、Node 脚手架、开发 Recipe 与模型选择检查 |
scripts/ |
构建、门禁、测试、格式化、架构图渲染与交付脚本 |
cmake_ext/ |
见构建扩展目录 |
doc/ |
架构、开发指南与参考文档,入口见文档目录 |
plans/ |
跨多个 PR、仍在进行中的工作计划;不是现行规则,最后一个阶段合入后删除,见工作计划 |
.agents/skills/ |
项目开发 Skills,用法见文档目录 |
新增工具按调用方选择目录:开发者在编排或编写组件时手动运行的放 tools/;构建、门禁
与 CI 调用的放 scripts/;需要链接框架运行时的 C++ 命令行程序放 src/cli/,可执行文件
仍输出到 build/。
本项目维护的 CMake 模块、生成模板和 Node 契约清单统一放在仓库根目录的
cmake_ext/,由顶层 CMakeLists.txt 和相应测试引用。根目录的 cmake/ 留给公司
内部构建系统使用;本仓库不在该位置保留转发目录或符号链接。
cmake 命令、CMakeLists.txt 文件名,以及第三方安装包的 lib/cmake/ 路径保持原约定。
src/ 各层实现目录、src/cli/ 与 demo/ 使用 GLOB_RECURSE CONFIGURE_DEPENDS
递归收集 .cpp,普通实现文件增删无需修改 CMake,下次构建自动更新。
Engine 的 backends/ 单独归 Backend 目标;Adapter 的 shared_algorithm_runtime.cpp
与 src/log.cpp 显式归组合根。CLI 的两个可执行入口及 Demo 的 main.cpp 从公共实现中排除,
分别归自己的可执行目标。新增独立目标时仍须声明其入口和归属,不能混入已有目标。
测试按 tests/RuntimeTests.cmake 的目录和命名规则收集;跨 runner、进程隔离、生成源码及
可选 E2E 目标保留显式登记,新测试 suite 仍须被 CTest filter 覆盖。
| 使用者 | 位置与构建目标 | 约定 |
|---|---|---|
| SDK 调用方 | include/edgeflow/;edgeflow_public_headers |
Operator、日志及生成的版本头;只有明确列举的调用头向 SDK 消费方传播 |
| 源码扩展开发者 | include/adapter/、include/core/、include/nodes/、include/engine/、include/contracts/;edgeflow_extension_headers |
Adapter、Node、Model、Backend 的源码接口与共享契约,需要随框架重新编译,不承诺内部 C++ 动态 ABI |
| 模块实现与仓库测试 | src/ 中与 .cpp 相邻;edgeflow_internal_headers |
运行时装配、配置解析、注册表内部及输出池等实现 |
运行时四层仍使用各自受限的 include view,不链接覆盖整个仓库的内部头目标。
模板、内联函数和扩展基类可以直接实现在头文件中;是否需要头文件由使用范围决定。
多个 .cpp 或测试需要引用一个声明,不意味着它应成为公开 SDK 接口。
使用范围之外,还要区分定义的来源:include/platform_mock/ 存放当前外网环境使用的
平台公共定义替身,包括业务 DTO、平台枚举、控制参数、命名 I/O、函数表类型和错误码。
它们作为现行调用接口的依赖,被显式列入 SDK 头视图,但不属于框架自有数据模型。
具体清单与排除项见平台模拟定义。
include/edgeflow/ SDK 调用接口
export.h / log.h
operator/interface.h
operator/types.h Company* 数据 DTO 门面
include/platform_mock/ 本地平台公共定义模拟
error_codes.h
operator_data_types.h / operator_types.h
include/adapter/ 源码扩展契约与辅助接口
io_converter.h
io_converter_registry.h
operator_value_type.h 中性值与平台 binding 接口
io_values.h Converter 内容值
platform_value_binding.h 当前模拟平台的布局 helper
src/adapter/
shared_algorithm_runtime.cpp/.h
deployment_io_config.cpp/.h
io_plan_resolver.cpp/.h
input/ 各业务输入转换器
output/ 各业务输出转换器
operator/ Operator 通用机制
operator_config_resolver.cpp/.h
operator_process_binding.cpp/.h
operator_adapter.cpp
platform_value_binding.cpp 当前模拟平台的校验、分配、预算与重置
转换器作者包含 adapter/io_converter.h 与 adapter/converter_authoring.h,编写 InputConverter 与
OutputConverter 函数回调及各自的 Definition,并通过 REGISTER_INPUT_CONVERTER 和 REGISTER_OUTPUT_CONVERTER 注册。
常见单槽、每请求一行的回调使用 DecodeRequestRows / EncodeResultRows 调用普通业务函数,
批次与绑定归辅助层;多槽、展开和汇聚保留显式算法。
每个转换器登记一个宿主槽、typed 逻辑端口与共享参数声明;Pipeline 根 io 选择这些登记。
端口 Definition 与回调共用同一 typed 端口常量,端口名即业务键名,
绑定不做改名。常见必需槽可用 ExternalInputSlot<T> /
ExternalOutputSlot<T> 推导类型和默认同名后缀,输出容量字段由已注册 ValueType 决定;
特殊布局仍使用完整定义。
业务专属实现可按修改关联同文件组织,共享 converter 保留独立引用;不要求为每个业务创建聚合宏或新注册表。
宿主值类型与命名输出分配方案通过 adapter/operator_value_type.h 登记;实现只管理
单份结构及嵌套存储,队列、租约和初始化审计归通用机制所有。常见类型直接使用
MakeTypedInputBinding<T> 与 MakePooledOutputBinding<T>;模板保留在扩展头中,
非模板分配实现归 src/adapter/operator/,不按业务复制池机制。
完整步骤见业务接入。
include/core/ 编排契约与 Node 注册接口
pipeline_config.h Pipeline JSON 解析结果
pipeline_validator.h 依赖推导与校验,产出 ValidatedPipelinePlan
pipeline.h 按校验计划执行
alg_context.h / blackboard_key.h / session_context.h
node_interface.h / node_definition.h / node_registry.h / port_definition.h
biz_definition.h / pipeline_catalog.h
src/core/ 上述接口的实现;pipeline_config_structure.cpp/.h 等私有头相邻放置
include/nodes/ Node 作者接口,模板与内联实现,没有对应的 src/nodes/
authoring.h Node 作者统一包含的入口头
function_node.h Spec 声明、AuthorNode 与 REGISTER_FUNCTION_NODE
node_base.h Node 运行时基类 NodeBase
model_binding.h / model_calls.h / control_authoring.h
include/contracts/parameters.h 四层共享的参数声明与解析
traceable_batch_operations.h Join、Group 等批处理与来源追踪辅助
src/common_nodes/ 框架维护的中性 Node,每个文件一个 *_node.cpp
support/ 多个 Node 共用的私有辅助
src/custom_nodes/ 领域算法 Node,按操作而非业务命名
起步模板在 dev_support/node_authoring/,由 tools/scaffold_custom_node.py 生成到
src/custom_nodes/,见自定义 Node 源码指南。
include/engine/ Model/Backend 接口、注册表与 FixedBatchExecutor
src/engine/
runtime/ Model/Backend 注册表与运行时工厂
models/<模型>/ 模型预处理与语义;共享辅助放在 common/、bge_common/
backends/<运行时>/ 厂商运行时资源,厂商头文件只在此处包含
text/ / text_generation/ UTF-8 处理与通用自回归生成
| 名称 | 含义 |
|---|---|
Converter (type, name) |
按方向唯一;type 是宿主 key 后缀,name 对应业务值 |
NodePortDefinition.logical_name |
Node 的逻辑端口名称,由 Pipeline 映射到具体黑板键 |
IoPortDefinition.blackboard_key |
输入/输出边界使用的实际黑板键 |
配置在根 io.input / io.output 的每项填写 type、name 和可选 params。
框架按方向和这一对标识查找登记,由所选端口组成 Core 边界。
同一方向复用载体 type 时,宿主 key 使用 name.type;唯一 type 接受任意非空前缀。
业务 name 使用 snake_case,描述外部请求/响应的语义,例如 ocr_invoice_qa。
方案、数据集与 Profile 可以沿用对应词根和部署变体;它们不定义新载体类型或转换器身份。
Demo 按宿主载体组织在 demo/input/、demo/output/,文件名描述载体及展示,
由 REGISTER_DEMO_INPUT / REGISTER_DEMO_OUTPUT 登记;同一载体上的业务共享这些代码。
转换器由宿主后缀和业务名配对标识,不带版本号:发布前直接改名,发布后的不兼容变化见 CONTRIBUTING。
宿主槽在所属转换器 .cpp 内声明,回调通过选中项的 options 访问本地逻辑端口与不可变参数。
Node 与 Converter 的本地逻辑端口共用 NodePortDefinition,通过
RequiredInputPort、OptionalInputPort、OutputPort 声明。接入准备将选中端口与实际引用
组合成 IoPortDefinition 边界,交给 Core 验证。
Catalog JSON 的 Node 与 Converter 端口 key 都是本地逻辑端口名。
配置中的实际来源写为 input.端口名 或 节点名.端口名,由 Validator 形成 typed 黑板绑定。
core/port_definition.h、core/node_definition.h 分别维护端口与 Node 元数据;
Converter 定义位于 adapter/io_converter.h,Catalog 查询位于 core/pipeline_catalog.h 和接入层 IoCatalog。
engine/inference_definition.h 维护 Model/Backend 元数据;张量与 Host 内存辅助接口
在 engine/tensor.h。node_registry.h 的主要类型是 NodeRegistry。
SDK 调用代码使用以下 edgeflow/ 前缀入口:
| 规范入口 | 说明 |
|---|---|
edgeflow/export.h |
符号可见性宏 |
edgeflow/log.h |
统一日志入口 |
edgeflow/version.h |
版本头(由 CMake 生成) |
edgeflow/operator/interface.h |
C++ Operator 接口及函数表 |
edgeflow/operator/types.h |
Company* 数据 DTO 门面(转发至 platform_mock/operator_data_types.h) |
Company*、公共宏、C++ Operator 公开函数签名、结构布局及 libcompany_alg_sdk
名称属于调用契约。内部扩展统一使用 NodeRegistry。
edgeflow/operator/types.h 仅转发 platform_mock/operator_data_types.h 中的 Company*
数据 DTO。计算平台、Control 参数、命名 I/O 与函数表类型定义在
platform_mock/operator_types.h,由 edgeflow/operator/interface.h 引入;错误码来自
platform_mock/error_codes.h。
真实公司公共头需要在授权内网单独核对和接入。
示例配置和 Profile 的命名见配置说明。