15. 开发者指南
Developer Guide 面向 FlowNex 的平台开发者和扩展开发者。
15.1 本地开发环境
本地开发通常需要启动:
- MySQL。
- Redis。
- RocketMQ。
- Nacos。
agent-domain-service。user-domain-service。ai-claw-gateway。ai-app-runtime-gateway。ai-app-service。control-center。agent-runtime-gateway。share-harness。- 前端应用。
开发建议:
- 优先阅读根目录
README.md理解模块边界。 - 每个 Java 服务独立启动。
- Python runtime 单独管理依赖。
- migration 先在测试库验证。
- 修改跨服务 DTO 时同步更新调用方测试。
15.2 代码仓模块说明
核心模块:
ai-claw-gateway:FlowNex 主站网关,负责 AI 应用入口之外的对话、管理台、Skill、知识库、任务中心和飞书等交互接入。ai-app-runtime-gateway:AI 应用中心专用接入网关,负责application前缀路由和 AI 应用前端连接承接。ai-app-service:AI 应用层聚合服务,负责应用交互接口、业务语义接口和业务数据落库。control-center:能力中心和编排协同服务,内部实现 Capability Gateway、Capability Registry、Provider Adapter 等能力治理模块。user-domain-service:用户域。agent-domain-service:Agent、会话、消息、任务、Skill 等领域。agent-runtime-gateway:运行时路由和事件回推。share-harness:Python Agent Runtime。xingyun-ai-common:公共能力。
Java 服务通常采用:
*-client
*-domain
*-application
*-infrastructure
*-server
分层约定:
client:DTO 和 Facade。domain:领域模型和领域能力。application:应用服务和用例编排。infrastructure:数据库、Redis、RPC、外部系统适配。server:启动和配置装配。
15.3 新增一个 Tool
新增 Tool 的推荐步骤:
- 明确 Tool 的动作边界。
- 定义 Tool code。
- 定义入参 schema。
- 定义输出结构。
- 定义权限要求。
- 在能力注册处注册 Tool。
- 在
control-center或领域服务中配置 Tool 授权。 - 在
share-harness中实现 Tool 调用适配。 - 增加测试。
- 增加审计和错误映射。
Tool 设计原则:
- 入参结构化。
- 输出可裁剪。
- 错误可解释。
- 权限可控制。
- 调用可审计。
15.4 新增一个 Skill
新增 Skill 的推荐步骤:
- 编写 Skill 描述。
- 定义适用场景。
- 定义输入要求。
- 定义执行步骤。
- 定义输出格式。
- 声明建议 Tool。
- 绑定必要知识库。
- 提供示例。
- 提交审核。
- 发布并灰度。
高质量 Skill 应避免:
- 目标含糊。
- 输出格式不稳定。
- 隐含依赖未声明。
- 要求使用未授权 Tool。
- 把大量知识硬编码进 Skill。
15.5 新增一个知识检索 Provider
如果未来需要接入 OpenViking 之外的知识 Provider,应遵守统一适配边界。
新增步骤:
- 定义 Provider code。
- 实现检索 Adapter。
- 实现凭证和 endpoint 配置读取。
- 复用本地
KnowledgeAsset / KnowledgeMapping / KnowledgeAcl。 - 保证检索前权限裁剪。
- 输出统一
KnowledgeSearchResponse。 - 记录统一命中轨迹。
Provider 不应绕过本地权限系统。
15.5.1 新增一个业务线 Capability Provider
业务线 AI 能力接入 FlowNex 时,应以 Capability Provider 的方式接入,而不是让 Skill 或 Tool 直接调用业务线接口。
推荐步骤:
- 明确能力边界,判断是完整 AI 应用、原子能力还是业务系统动作。
- 定义
capabilityCode、版本、负责人和所属业务线。 - 定义输入 Schema、输出 Schema 和示例数据。
- 定义鉴权方式,但只保存凭证引用,不把密钥下发给 runtime。
- 实现 Provider Adapter,完成协议转换、字段映射、错误码映射、超时和重试。
- 在 Capability Registry 登记能力元数据。
- 在管理台配置租户、部门、角色、Agent 或 Skill 的可见范围。
- 将能力包装为 Tool,必要时再封装为 Skill。
- 接入 Trace、Metrics、Audit 和自动回归测试。
- 完成联调、灰度、验收和回滚预案。
Provider Adapter 至少需要处理:
| 能力 | 要求 |
|---|---|
| 鉴权 | 使用平台托管凭证或短期 token,不暴露密钥 |
| Schema 校验 | 调用前校验输入,调用后校验输出 |
| 错误映射 | 将业务线错误码转换为 FlowNex 统一错误 |
| 幂等 | 写操作必须支持幂等键或业务去重 |
| 超时重试 | 明确哪些错误可重试,哪些错误不可重试 |
| 降级 | Provider 不可用时返回可解释降级结果 |
| 审计 | 记录调用主体、能力、输入摘要、输出摘要和结果 |
接入验收建议:
- 能力在目录中可查询。
- 未授权用户无法调用。
- 已授权用户可通过 Agent / Skill 正常调用。
- 调用 Trace 可按
taskId和capabilityCode查询。 - 错误码和异常提示清晰。
- 自动回归样例通过。
- 运营报表能看到调用量、成功率、耗时和失败原因。
15.6 新增一个 AGFS 插件
AGFS 插件用于扩展文件系统后端或特殊路径行为。
新增插件建议:
- 实现统一
FileSystem接口。 - 支持
Read / Write / ReadDir / Stat / Mkdir / Open / Delete。 - 接入生命周期 Hook。
- 接入权限检查。
- 接入 Version Tree。
- 接入 checkpoint。
- 增加集成测试。
插件不应把业务租户逻辑硬编码到路径解析中。租户和项目隔离应通过 Space、Mount 和 rootFileId 表达。
15.7 新增一个 Runtime 事件
新增 Runtime 事件需要考虑:
- 事件名称。
- 事件 payload。
- 是否展示给用户。
- 是否持久化。
- 是否参与指标。
- 是否需要兼容旧客户端。
- 是否需要进入任务回放。
事件设计应尽量结构化,避免只传自然语言文本。
示例:
{
"eventType": "knowledge.search.completed",
"taskId": "10001",
"providerResourceIds": ["kb_policy"],
"hitCount": 3,
"durationMs": 420
}
15.8 测试规范
测试应覆盖:
- 单元测试。
- Facade 契约测试。
- 应用服务测试。
- Mapper 测试。
- Runtime 工具测试。
- API 集成测试。
- 跨服务协议兼容测试。
- AGFS 文件一致性测试。
- 知识权限裁剪测试。
- Skill 绑定知识范围测试。
关键链路必须有回归测试:
- 创建消息和任务。
- 下发 runtime。
- runtime 回调。
- 知识检索。
- Skill 使用。
- 文件产物持久化。
- SSE 推送。
15.9 兼容性与版本策略
跨服务协议需要保持兼容。
变更原则:
- DTO 新增字段优先使用可选字段。
- runtime 请求新增字段应允许旧版本忽略。
- 事件 payload 新增字段不应破坏旧消费者。
- 数据库 migration 应可重复执行或具备保护。
- 新能力通过 feature flag 灰度。
版本对象包括:
- 服务版本。
- Runtime 协议版本。
- Skill 版本。
- Tool 版本。
- Knowledge mapping 版本。
- AGFS 文件版本。
- 多 Agent 策略版本。