DevStream 接口规范
最新版本:1.0.0
发布日期:2025年3月7日
编辑:
- 任晶磊(jinglei.ren@devchat.ai)
- 杨波波(bobo.yang@devchat.ai)
- 廖明镜(mingjing.liao@devchat.ai)
DevStream 接口规范定义面向人工智能应用的工作流标准接口格式,目标是为人、智能和程序提供统一的工作流理解和运行机制。 他们在本规范中统称为用户。 工作流接口通过一个约定的目录结构和目录中的文件进行定义。
1. 工作流定义
每个工作流接口由一个YAML格式的文本文件完整定义,称为工作流定义。
工作流定义固定使用文件名 interface.yml
,其所在目录称为工作流定义目录。
该文件描述工作流的功能、结构化参数等信息和运行所需的元数据。
1.1. 工作流属性
在工作流定义中,通过工作流属性声明工作流的功能和行为。 每个工作流属性是一 个 YAML 对象。 工作流属性名对应 YAML 对象中的键(key)。 本节按属性名列出并规定其值(value)的格式。
1.1.1. description
(必选)
工作流的简短描述,适用于用户快速了解工作流的功能。 在工作流列表或聊天窗口的提示中,通常展示该属性。 本属性值是一个字符串。
示例:
description: Say hello to the world!
1.1.2. help
(可选)
工作流的帮助文档,支持Markdown格式。
运行工作流时通过 --help
参数输出帮助文档内容(取系统默认语言)。
本属性值是一个子对象列表,其中每个子对象的键是语言代码,值是帮助文档的文件路径。
语言代码遵照ISO 639-1;文件路径按相对于工作流定义目录进行解析。
工作流参数 --help.<lang>
输出指定语言代码 <lang>
对应的帮助文档;如果没有匹配的语言代码,默认显示列表第一个。
示例:
help:
- en: README.md
- zh: README.zh.md
对应工作流 <workflow>
运行时:
/<workflow> --help # 默认显示第一个帮助文档,即 README.md
/<workflow> --help.en # 显示 README.md
/<workflow> --help.zh # 显示 README.zh.md
/<workflow> --help.fr # 不显示
1.1.3. runtime
(必选)
工作流运行环境的元数据,属性值是一个 YAML 对象。
该对象包含一个以 id
为键的必选子对象,其值是一个字符串。
该字符串声明使用哪个系统运行当前工作流,应为 DevStream 支持的某个运行时系统的唯一标识。
示例:
runtime:
id: shell-python
DevStream 实现的运行时系统 shell-python
支持本地运行 Python 独立脚本。
运行时所需声明的其他对象参见具体运行时系统的要求,不在本规范中约定。
这些对象都应作为 runtime
属性值的子对象。
1.2. 工作流参数
在工作流定义中,通过工作流参数声明工作流所需的输入信息。
工作流参数是一个以 parameters
为键的可选 YAML 对象,其值可包含如下子对象。
1.2.1. __input__
(可选)
用户的非结构化输入是否必选,其值是 required
或 optional
。
非结构化输入指自然语言描述的用户需求。
用户运行工作流时可同时输入所需的文字表述。
相应的输入值在工作流运行时可由内置变量 __input__
取得。
示例:
parameters:
__input__: required
表明工作流必须辅以文字输入。例如,用户在聊天窗口输入 /slack.post LGTM to PR #2428
,DevStream 会在工作流 /slack.post
运行时将 LGTM to PR #2428
赋值给内置变量 __input__
。
2. 命名空间
DevStream 采用文件目录组织工作流命名空间。 工作流定义存储于对应的目录下。 指定根目录下的目录树结构映射为一个工作流命名空间。
2.1. 名字路径
目录路径相对于根目录表示,遵循 POSIX 风格,即使用正斜杠 /
作为路径分隔符。
工作流路径以正斜杠 /
起始,采用半角点号 .
作为分隔符,各路径组件与其定义目录路径一一对应。
工作流路径也称为工作流名称。
示例:
工作流 /feature.add
的定义位于 /feature/add/
目录下;目录 /feature/remove/
下定义的工作流名称是 /feature.remove
。这两个工作流的目录树结构如下。
feature
├── add
│ └── interface.yml
└── remove
└── interface.yml
2.2. 命名规范
单个路径组件名字应遵循以下规范:
- 仅使用字母、数字、下划线(
_
)和连字符 (-
)。 - 不使用空格和特殊字符。
- 最大长度255个字符。
合法名字的正则表达式为:^[A-Za-z0-9_-]{1,255}$
。
2.3. 路径可见性
为方便用户定制和扩展工作流,DevStream 设置多个命名空间,相互按优先级覆盖。 对于包含相同工作流名称的两个命名空间,高优先级命名空间中对应的目录路径对用户可见,即高优先级命名空间中的同名工作流会被用户运行。
2.3.1. 命名空间组织
DevStream 设置两个默认命名空间,以名为 sys
(系统)和 comm
(社区)的目录为根目录,分别定义系统自带的工作流和社区贡献的工作流。
sys
命名空间的优先级高于 comm
。
2.3.2. 自定义命名空间
DevStream 保留一个名为 usr
的目录,存放用户自定义的命名空间。
用户自定义命名空间的根目录应置于 usr
目录下。
用户自定义命名空间需在 usr
目录下的 config.yml
文件中注册,否则对用户不可见。
config.yml
包含一个以 namespaces
为键、以字符串列表为值的 YAML 对象,称为命名空间注册表