你需要提供
模块自行维护的接入目录、Agent 配置及依赖资源;在部署流程中配置连接信息并执行同步。
AIDEV · Agent Package v1
面向接入系统开发人员:在模块仓库维护智能体及依赖配置,通过平台基础镜像中的 bkai-init 初始化和更新资源。
接入系统将智能体配置和依赖资源组织为一个 Agent Package,由 bkai.yaml 声明同步清单。平台初始化完成后,接入系统在部署流程中调用 bkai-init 完成资源同步。
模块自行维护的接入目录、Agent 配置及依赖资源;在部署流程中配置连接信息并执行同步。
内置 bkai-init 的基础镜像和应用态接口。接入方通过命令使用,不需要自行对接平台内部服务。
创建或更新 Agent、角色、Skill 和知识库;知识库支持 Markdown 与图片目录同步。MCP 由接入方预先创建,Agent 按 code 引用。
同步可能覆盖已有配置。先查看差异,将平台手工维护的资源加入黑名单;同步配置不等于发布智能体。
先按下方规则确定资源 code,再维护配置。建议显式指定目标空间;sync --confirm 才执行写入,--publish 才发起智能体发布,发布配置不等于完成应用部署。
APIGW MCP 必须提前授权,公开 MCP 也不例外。先创建、发布 MCP Server,并完成接入应用及目标智能体所需的授权,再执行 bkai-init。bkai-init 只引用 MCP,不负责创建或审批授权。
初始化参考:APIGW MCP Server 创建 / 更新与主动授权(GitHub 官方文档)。网关同步配置中的 target_app_codes 可指定主动授权的应用;spec.mcps[].code 填写网关返回的完整 MCP Server 编码。具体支持项以目标网关版本为准,更多约定见 3.4 MCP。
--space 默认 bkaidev,多租户需显式传完整 ID(如 system-bkaidev),不会自动拼接租户前缀。资源文件不指定空间。见 2.1 命名规则、4.1 运行参数。sync --confirm 写入;平台手工维护的资源通过 --exclude-resource 排除。见 4.3 覆盖保护。--publish --publish_config_only=0 请求常规发布,bkai-init 不等待部署完成。首次初始化请先发布子智能体,确认完成后再同步主智能体。平台可能复用相同代码版本,见 发布规则、3.6 子智能体。BK_API_URL_TMPL、BKAI_APP_CODE、BKAI_APP_SECRET;CLI 与 Python 均从同一个地址模板生成平台和 BK User 地址。不要写入资源文件。username 与 access_token 均可选。BKAI_USERNAME(或 --username)填写登录名,不传默认 bk_admin;由 bkai-init 查询 BK User 转换为实际 bk_username。查询失败或结果不唯一时停止,应用需具备 BK User 查询权限。--tenant-id 默认 system;--space 默认 bkaidev,不自动拼接租户前缀,多租户需显式传完整空间 ID,如 system-bkaidev。资源文件不指定空间,统一使用调用参数;应用需有相应权限。/bk-job。阅读顺序:准备目录与依赖 → 编写同步清单 → 填写 Agent 配置 → 校验、查看差异并同步 → 确认结果。
code 是创建、更新和关联资源的稳定标识,不是展示名称。所有资源 code 只使用小写;名称 name 可以使用中文。
| 资源 | 命名规则 | 正确示例 |
|---|---|---|
| 智能体 / 子智能体 | 必须以 ai- 开头,前缀后首位为小写英文字母;其余仅小写英文、数字或中划线;总长 5–16 位(含前缀)。不支持下划线。 | ai-jobai-job-exec |
| 角色 / MCP / Skill | 小写英文字母开头;其余仅小写英文、数字、下划线或中划线;1–64 位。 | bk_job_rolebk-job-apigw-mcpjob_skill |
| 知识库 | 小写英文字母开头;其余仅小写英文、数字或下划线;1–64 位,不支持中划线。 | bk_job_docs |
知识库不能使用 bk-job-docs。知识库 code 直接用于 Milvus 集合名,Milvus 不支持中划线,请使用 bk_job_docs。
| 资源 | 完整匹配正则 | 错误示例 |
|---|---|---|
| 智能体 | ^ai-[a-z][a-z0-9-]{1,12}$ | job-agent、ai-Job、ai-job_exec、ai-a |
| 角色 / MCP / Skill | ^[a-z][a-z0-9_-]{0,63}$ | Job_role、1job |
| 知识库 | ^[a-z][a-z0-9_]{0,63}$ | bk-job-docs、Job_docs |
commands[].agent_code 及 CLI 筛选、黑名单均按对应资源规则校验;变量替换后再校验。bkai-init 不兼容不符合新规则的旧 code,不自动转小写、重命名或迁移;平台保留旧数据不代表 CLI 可接受旧编码。BK_JOB_MODULE 可以大写。Agent / Collection / Skill / KnowledgeBase;CLI 资源类型使用小写,例如 agent/ai-job。文件名不代替资源 code。安装、配置与调试步骤均包含在本页,无需访问其它文档。先完成包安装,再选择CLI、Python或容器方式接入。
| 交付项 | 地址 / 版本 | 当前状态 |
|---|---|---|
| Python 包 | bkai-init==0.1.1 | 固定版本;请平台提供可访问的包源,不假设已发布到公共 PyPI。 |
| 包源 | BKAI_PIP_INDEX_URL | 提供 bkai-init 的包源 /simple 地址,由平台提供。 |
| 依赖源 | BKAI_DEPENDENCY_INDEX_URL | 提供 Jinja2、PyYAML、requests 等依赖的可访问包源。 |
| 基础镜像 | BKAI_INIT_IMAGE | 平台提供的可拉取镜像完整地址,固定 TAG 为 0.1.1。 |
本指引目标版本为 bkai-init 0.1.1,包版本与镜像 TAG 保持一致。请向平台确认所用构建包含常规发布及 admins 登录名解析能力;本页更新不代表包或镜像已发布,平台侧能力也需部署对应实现。
# 使用平台提供、当前网络可访问的可信包源
export BKAI_PIP_INDEX_URL='<bkai-init 包源的 /simple 地址>'
export BKAI_DEPENDENCY_INDEX_URL='<公共依赖源的 /simple 地址>'
python3.11 -m venv .venv-bkai-init
. .venv-bkai-init/bin/activate
python -m pip install \
--index-url "$BKAI_PIP_INDEX_URL" \
--extra-index-url "$BKAI_DEPENDENCY_INDEX_URL" \
"bkai-init==0.1.1"
python -m pip show bkai-init
bkai-init --help上述包源变量仅用于安装示例,不是 bkai-init 运行参数。包源不一定包含公共依赖;如一个源已包含全部依赖,可省略 --extra-index-url。两个源均参与候选解析,不保证优先级,只使用平台确认的可信源。仓库访问权限由平台说明,不要在 HTML 中填写令牌。
bkai-init init ./bk-job --agent-code ai-job --name "作业助手"
# 替换为目标空间 ID;CLI 需要显式传入 --space
export BKAI_SPACE_ID='<目标空间ID>'
bkai-init validate -f ./bk-job/bkai.yaml --space "$BKAI_SPACE_ID"init 只生成本地文件,不访问平台、不需要应用凭据,也不会同步或发布。目标目录必须不存在。需要依赖时可加 --with-skill job_skill、--with-knowledgebase bk_job_docs 或 --with-subagent ai-job-exec;知识库文档由接入方维护。
export BKAI_INIT_IMAGE='<可访问镜像仓库>/bk-aidev-init:0.1.1'
podman pull --platform linux/amd64 "$BKAI_INIT_IMAGE"
podman run --rm --platform linux/amd64 "$BKAI_INIT_IMAGE" --help
# 当前目录包含 bk-job/;先在宿主设置目标空间
export BKAI_SPACE_ID='<目标空间ID>'
podman run --rm --platform linux/amd64 -v "$PWD/bk-job:/bk-job:ro" \
"$BKAI_INIT_IMAGE" validate -f /bk-job/bkai.yaml --space "$BKAI_SPACE_ID"
# 在宿主直接配置连接信息,再传入容器
export BK_API_URL_TMPL='https://bkapi.example.com/api/{api_name}/{stage}'
export BKAI_APP_CODE='<应用编码>'
export BKAI_APP_SECRET='<应用密钥>'
podman run --rm --platform linux/amd64 \
--env BK_API_URL_TMPL --env BKAI_APP_CODE --env BKAI_APP_SECRET \
-v "$PWD/bk-job:/bk-job:ro" "$BKAI_INIT_IMAGE" diff \
-f /bk-job/bkai.yaml --tenant-id system --space "$BKAI_SPACE_ID"使用 Docker 时替换命令名即可。镜像入口已是 bkai-init,直接传子命令;默认用户为 10001:10001,挂载目录须对其可读。确认差异后将 diff 改为 sync 并追加 --confirm;需要发布智能体时再追加 --publish --publish_config_only=0。详见执行同步。
ARG BKAI_INIT_IMAGE
FROM ${BKAI_INIT_IMAGE}
COPY --chown=10001:10001 ./bk-job /bk-job基础镜像不包含业务接入目录或应用凭据。由模块挂载或复制目录;宿主 export 后,通过 --env 按变量名传入容器,宿主环境不会自动进入容器。CLI 日志会脱敏应用密钥及其它敏感字段,分享前仍应检查业务信息。知识库文档同步会删除线上多余文档;同步前先确认本地目录完整,并完成应用、空间及 MCP 授权。
提供应用态资源同步接口和基础镜像,镜像内置 bkai-init。
将接入目录随模块交付,在基础镜像中调用 bkai-init 执行同步;不要把凭据放入目录。
/bk-job/
├── bkai.yaml
├── agents/
│ ├── bk_job_ai.yaml
│ └── bk_job_exec.yaml
├── collections/
│ └── job_role.yaml
├── skills/
│ └── job_skill/
│ ├── skill.yaml
│ ├── Dockerfile # 可选;引用基础镜像
│ └── SKILL.md
├── knowledgebases/
│ └── bk_job_docs/
│ ├── knowledgebase.yaml
│ ├── README.md
│ └── guides/
│ └── execute.md
└── tools/ # 预留
knowledgebases 下每个目录对应一个知识库,在 knowledgebase.yaml 定义 code 和配置,未指定 code 时使用目录名。Markdown 与图片按目录层级打包同步;未使用的资源目录无需创建。
使用角色引用时,在 collections/ 定义 Collection 资源,先创建或更新角色,再同步 Agent。
引用对象必须可访问且已发布,引用的指令必须存在于发布版本;同包可通过 --publish 按依赖顺序发布。
仅支持 APIGW MCP。接入方先创建、发布并完成授权;使用 bkai-init 接入时,公开和非公开 MCP 都需要提前授权,公开不代表免授权。
在模块的 knowledgebases 目录中维护配置、Markdown 与图片。同步整个目录,线上多余文档会被删除;无文档时仅同步配置。
接入方维护 Skill 包。自定义镜像先同步到环境镜像仓库,由模块 Helm Chart 上报、平台开白;仅在 Skill 根目录 Dockerfile 引用。
当前不支持配置 Tools,Manifest 中保留空数组。
bkai.yaml 只声明本次需要同步的资源,路径相对于该文件所在目录。按需保留清单项;只使用内联 Prompt 时,可移除角色资源项。
apiVersion: bkai.tencent.com/v1
kind: AgentPackage
metadata:
name: bk-job
version: "1.0.0"
resources:
- collections/job_role.yaml
- skills/job_skill
- knowledgebases/bk_job_docs
- agents/bk_job_exec.yaml
- agents/bk_job_ai.yaml
以下为完整配置示例。先替换智能体编码、名称和 Prompt,再按实际依赖调整资源关联;后续各节 Demo 为配置片段,应合并到同一个 spec 下,不要重复声明 spec 或覆盖其它配置。角色引用可替换主例的 inline Prompt。
# AIDEV Agent CLI Manifest v1
apiVersion: bkai.tencent.com/aidev-agent/v1
kind: Agent
metadata:
code: ai-job
name: 蓝鲸作业智能助手
description: 面向蓝鲸作业平台的智能助手
spec:
user_scope: public # 所有人可使用;custom 为指定人,省略则不修改使用范围
admins: [] # 按需填写 login_name;自动转为 bk_username,仅追加,空值不处理
prompt:
type: inline
content: |
## Role
蓝鲸作业智能助手
## Constraints
- 仅回答与蓝鲸作业平台相关的问题。
model:
llm_code: aidev-chat-auto
fallback_model: null
temperature: 0.7
context_window: 16 # 上下文轮数
llm_token_limit: 28000
max_tokens: 4096
tool_output_compress_thrd: 4096
conversation_settings:
opening_remark: 你好,我可以帮助你查询作业执行情况。
predefined_questions:
- 如何查询作业执行状态?
enable_chat_session: true
enable_word_selection_popup: true
commands:
- id: query_job_status
name: 查询作业状态
icon: null
agent_code: ai-job
alias: null
content: |
查询作业 {{ job_id }} 在 {{ environment }} 环境中的执行状态。
最多返回 {{ limit }} 条记录。
补充信息:{{ context }}
components:
- type: text
key: job_id
name: 作业 ID
placeholder: 请输入作业 ID
default: ""
required: true
hide: false
- type: select
key: environment
name: 环境
placeholder: 请选择环境
default: test
required: true
hide: false
options:
- label: 测试
value: test
- label: 生产
value: production
- type: number
key: limit
name: 返回数量
default: 10
min: 1
max: 100
required: false
hide: false
- type: textarea
key: context
name: 补充信息
placeholder: 输入或引用需要分析的文本
default: ""
rows: 4
required: false
hide: false
enable_fill_back: true
fill_back_component_key: context
fill_regx: null
support_upload:
vision: false
file: false
# 引用子智能体指令:按 agent_code 和 id 定位
- id: execute_job
agent_code: ai-job-exec
alias: 作业执行助手
subagents:
- code: ai-job-exec
mcps:
- type: apigw
code: bk-job-apigw-mcp
is_selected_all: false
selected_tools:
- tool_name: get_job_status
skills:
- code: job_skill
envs:
- key: BK_JOB_MODULE
value: bk-job
knowledgebases:
items:
- code: bk_job_docs
retriever_code: ""
query_function: mixed
recall_channels: [dense, sparse]
rrf_weights:
dense: 0.7
sparse: 0.3
document_fragment_count: 20
polish: true
origin: false
is_response_when_no_knowledgebase_match: true
rejection_message: 未找到相关作业文档,请补充问题信息。
tools: [] # 本期暂不支持
| 字段 | 类型 / 约束 | 说明 |
|---|---|---|
apiVersion / kind | 固定字符串 | 固定为 bkai.tencent.com/aidev-agent/v1 与 Agent。 |
metadata.code | 必填 string | ai- 开头,总长 5–16 位,详见命名规则;用于定位智能体。 |
metadata.name / description | string | 名称必填,描述可选;名称由平台校验。 |
spec.user_scope | 可选,public / custom | 人员使用范围:public 为所有人,custom 为指定人。省略时,新建沿用平台默认范围,已有智能体保持原范围;不接受 null 或其它值。 |
spec.admins | 可选,list[str] | 目标租户的 login_name 清单,每项最长 64 字符,不含逗号、空白或控制字符;自动解析为 bk_username 后去重追加、保留原成员。省略、null、[] 不处理。主子智能体分别配置,与使用者范围及空间 IAM 无关。 |
prompt.type | inline / collection | 内联正文或角色引用,两种模式互斥;collection 对应平台角色资源。 |
prompt.content | string | inline 模式必填,直接填写提示词正文;collection 模式不填写。 |
prompt.code | string | collection 模式必填,填写角色资源的 metadata.code;不填写平台 ID。 |
model.llm_code | string,协议默认 aidev-chat-auto | 默认模型;省略时由 bkai-init 按协议默认值补齐后提交平台。 |
model.fallback_model | string / null | 备用模型,null 表示不指定。 |
model.temperature | number / null | 生成随机性;平台范围 0–2。 |
model.context_window | integer / null | 会话轮次,只接受 1–30 的整数;不是 token 数或 K 单位。256、字符串 "16"、小数和布尔值均报错。 |
model.llm_token_limit | integer / null | 上下文 token 上限;平台最小值 1024。 |
model.max_tokens | integer / null | 回复 token 上限;平台范围 1–20480。 |
model.tool_output_compress_thrd | integer / null | 工具输出压缩阈值;平台最小值 1024。 |
资源文件不指定 space,统一由调用方传入。Agent 禁止配置 version(包括 null),发布版本由平台分配;Package 的 metadata.version 不用于 Agent 发布。模型还需满足目标模型自身的能力限制。
spec:
user_scope: public # 所有人可使用;指定人使用填 custom主、子智能体分别配置,不继承。custom 的人员名单通过平台管理;public 不免除入口鉴权、租户隔离和依赖资源授权,也不等于资源公开属性。
使用范围修改会影响已有发布版本,不依赖本次 --publish。先通过 plan / diff 确认,再执行同步;目标 CLI 和平台需支持该字段,设置失败或回读不一致时停止,不静默忽略。
配置 admins: ["alice", "bob"](替换为实际登录名)后,bkai-init 在任何资源写入前查询普通人员及虚拟用户,将唯一匹配的登录名解析成 bk_username;在 Agent 配置写入后、发布前追加管理员,仅支持插件智能体。查无用户、同名歧义、禁用/过期或查询失败时停止,不透传未解析登录名。追加失败会停止后续同步与发布,已写入的配置或权限不自动回滚。
调用应用需同时具备 BK User 普通人员 /api/v3/open/tenant/users/-/lookup/ 和虚拟用户 /api/v3/open/tenant/virtual-users/-/lookup/ 查询权限,按目标租户查询。admins 统一填写 login_name,不直接填写 bk_username;plan / diff 仅展示登录名及追加意图,不校验用户映射,也不把无法回读的管理员名单判断为一致。
角色使用独立的 Collection 资源,目录为 collections/。通过资源清单管理角色的创建与更新;Agent 使用角色编码引用。
apiVersion: bkai.tencent.com/v1
kind: Collection
metadata:
code: bk_job_role
name: 蓝鲸作业专家
spec:
collection_type: role
generate_type: space
is_public: false
tag_names: []
content:
- role: system
content: |
你是蓝鲸作业专家,仅回答与作业平台相关的问题。
- role: user
content: 如何查询作业执行状态?
- role: assistant
content: 我可以帮助你查询作业执行状态,请提供作业 ID。| 字段 | 类型 / 约束 | 说明 |
|---|---|---|
apiVersion / kind | bkai.tencent.com/v1 / Collection | 纳入 bkai.yaml.resources。 |
metadata.code / name | 必填 string | 填写角色编码和名称;重复同步时使用 code 定位已有角色。 |
spec.icon | 可选 string / null,最长 1024 字符 | 可填写图标;省略时遵循平台默认或更新规则。 |
spec.collection_type | 仅 role,默认 role | 本协议只管理角色资源。 |
spec.content | 非空消息数组 | 每项使用 role、content;保持消息顺序,不合并为单段字符串。 |
spec.content[].role | system / user / assistant | 首条必须为 system,且只能有一条 system。 |
spec.content[].content | 非空 string | 固定消息正文,不支持角色运行时变量;部署时的文件变量替换见“变量替换”。 |
spec.generate_type / is_public | space / public;boolean | 默认选 space;public 强制公开,space 使用 is_public。 |
spec.tag_names | 二维 string 数组,默认 [] | 每项为一条标签路径。 |
角色 code 同样要求小写、字母开头、最长 64 位,允许下划线和中划线。角色不定义变量和默认模型,模型统一在 Agent 的 model 中配置。
将主示例中的 spec.prompt 替换为以下内容;其它配置保持不变。使用前将上面的角色文件加入同步清单。
spec:
prompt:
type: collection
code: bk_job_role--exclude-resource collection/bk_job_role,仅跳过角色资源写入,Agent 仍可引用线上角色。若也不希望刷新 Agent 快照,需同时排除 Agent。在 spec.conversation_settings 中配置开场白、预设问题和快捷指令。需要用户填写参数时,在 commands 中定义 components,再通过 {{ key }} 引用组件值;完整示例见“Agent 配置”。
| 字段 | 类型 / 约束 | 说明 |
|---|---|---|
opening_remark | string,默认空字符串 | 开场白,最长 1024 字符。 |
predefined_questions | string[],默认 [] | 预设问题。 |
commands | Command[],默认 [] | 自定义指令或来源指令引用;展开后须满足下方指令结构。 |
enable_chat_session | boolean,默认 true | 是否启用多会话。 |
enable_word_selection_popup | boolean,默认 false | 是否启用划词弹出菜单。 |
| 字段 | 类型 / 约束 | 说明 |
|---|---|---|
id | 必填 string | 指令标识;引用时填写来源指令 ID。同一 Agent 内必须唯一,避免默认指令 ID 冲突。 |
name | 必填 string | 自定义指令必填;引用简写由 CLI 从来源补齐。 |
icon | string / null,平台无默认值 | 完整提交必须提供;无图标显式填 null。 |
agent_code | string / null | 引用来源指令时填写来源智能体 code;自定义指令省略时表示当前智能体。 |
alias | string / null,默认 null | 目标智能体的展示别名。 |
content | string / null,默认 null | 正文使用 {{ key }} 引用组件;不是 prompt 字段。 |
components | Component[],默认 [] | 见下方完整组件定义。 |
enable_fill_back | boolean,默认 false | 启用引用文本回填。 |
fill_back_component_key | string / null | 启用回填时必填,必须匹配 components 中某个 key。 |
fill_regx | string / null,默认 null | 引用文本匹配正则;保留平台字段拼写 regx。 |
support_upload | 对象,默认 {} | 仅支持 vision、file 两个键,值为 boolean;声明开关不代表执行链路一定支持上传。 |
| 字段 | 类型 / 约束 | 说明 |
|---|---|---|
type | 必填 string | 支持 text、textarea、number、select 四类控件。 |
key | 必填 string | 组件引用键;同一指令内必须唯一。 |
name / placeholder | string / null,默认 null | 展示名称与输入提示。 |
default | string / integer / boolean / list / null | 按控件类型填写默认值;select 默认值须匹配 options 中的选项。 |
required | boolean / null,默认 false | 是否必填;建议配置使用明确布尔值。 |
hide | boolean,默认 false | 是否隐藏组件。 |
rows | integer / null,默认 null | textarea 行数。 |
min / max | integer / null,默认 null | 数值边界;平台会校验整数默认值是否在范围内。 |
options | 对象数组 / null,默认 null | select 选项,使用 {label: string, value: string或number};label 为展示文本,value 为实际取值。 |
| 字段 | 类型 | 说明 |
|---|---|---|
agent_id / agent_name / space_id | integer / string / string,均可为 null | 由 CLI 根据目标资源补齐;避免在接入仓库固定环境 ID。 |
status | ready / deleted,默认 ready | 平台状态,接入方无需配置。 |
updated_by / updated_at | string / null | 平台维护的审计字段,接入方无需配置。 |
fill_back / fill_regx | boolean / null;string / null | 平台由指令级回填设置计算,无需在组件中重复声明。关闭回填时会重置这两个字段。 |
请只填写上表支持的组件字段,不配置 multiple。文本回填在指令层统一设置,不需要在组件内重复配置。
接入方先创建、发布 APIGW MCP Server,并提前完成接入应用及目标智能体所需的授权,再在 Agent 的 spec.mcps 中引用并选择工具。
spec:
mcps:
- type: apigw
code: bk-job-apigw-mcp
is_selected_all: false
selected_tools:
- tool_name: get_job_status默认启用全部工具,只填写 type、code 即可;也可显式设置 is_selected_all: true。需要固定工具范围时,按示例填写 false 和 selected_tools。
| 字段 | 类型 / 约束 | 说明 |
|---|---|---|
mcps[].type / code | apigw / string | type 固定为 apigw,code 填写已创建的 MCP Server 编码;无需填写地址和平台 ID。 |
mcps[].is_selected_all | boolean,默认全选 | 显式 true / false 优先;省略且未选择工具(或列表为空)时为 true,只提供非空 selected_tools 时为 false。plan / diff 与 sync 保持一致。 |
mcps[].selected_tools | 对象数组 | 每项 tool_name: string。建议全选时省略或填 [];否则列出需要启用的工具。 |
mcps[].id | 禁止填写 | 仅通过 code 引用;传入 id(包括 null)直接报错,不接受环境相关 ID。 |
公开和非公开 MCP 都必须提前授权。公开可见、已发布不等于允许 bkai-init 或目标智能体使用。请先完成网关授权及平台应用权限配置,再执行 plan / sync;bkai-init 不自动创建 MCP Server,也不自动申请或授予权限。
全选会包含 MCP 后续新增工具;若需限制使用范围,请显式填写 is_selected_all: false 和工具清单。
code 填写网关中完整、准确的 MCP Server 编码,遵循小写、字母开头、最长 64 位规则,允许下划线和中划线。权限不足或查询不到时停止处理,不绕过授权。
接入方可参考 APIGW MCP Server 初始化接口(GitHub 官方文档) 创建或更新 MCP,并通过 target_app_codes 主动授权所需应用;这一步由接入方完成,不属于 bkai-init 的资源同步。
bkai-init 使用 Agent 的 metadata.code 作为 agent_code 查询 MCP,目标租户和空间来自 --tenant-id、--space。无需增加配置开关,也不要求智能体编码与调用应用编码相同。
| 当前租户中的智能体 | 接入规则 |
|---|---|
| 尚未创建 | 校验调用应用对目标空间的权限后,按 APIGW 数据查询 MCP;不要求先在平台创建智能体。 |
| 已经创建 | 保留原有校验:应用须有智能体所在空间的权限,且该空间必须与 --space 一致;不匹配则停止。 |
是否已创建仅按当前租户判断,其它租户的同名智能体不影响本次初始化。以上规则需目标平台版本支持;查询成功不代表运行调用已验证,MCP 授权要求不变。
接入方通过资源清单同步 Skill,再在 Agent 的 spec.skills 中引用。以下为关联配置,不是 Skill 资源自身的定义。
spec:
skills:
- code: job_skill
envs:
- key: BK_JOB_MODULE
value: bk-job| 字段 | 类型 / 约束 | 说明 |
|---|---|---|
skills[].code | 必填 string | 填写已同步且目标租户、空间可访问的 Skill 编码。 |
skills[].envs | 可选对象数组,可为 [] | 每项填写 key 和可选的 value,约束见下方。 |
skills[].envs[].key | 必填 string,最长 64 字符 | 同一 Skill 下不能重复;必须在 Skill 的环境变量依赖声明中存在。 |
skills[].envs[].value | 可选 string,允许空字符串 | 保留首尾空白;未填写、空字符串和默认值的行为见更新规则。 |
skills[].version | 不纳入 Agent 关联输入 | 关联只要求 Skill 存在且可访问,不要求对应 SkillVersion 快照存在;不在 Agent YAML 中指定版本。此行为需平台部署对应修复。 |
示例中的 BK_JOB_MODULE 需先在 Skill 环境变量依赖中声明。仓库仅保存非敏感值;自定义镜像通过模块 Helm Chart 上报,Skill 资源中仅保留引用。envs: [] 不表示清空所有变量,具体行为见“执行同步”。
apiVersion: bkai.tencent.com/v1
kind: Skill
metadata:
code: job_skill
name: 作业查询 Skill
# 不填 version,由平台根据 ZIP 内容自动确定版本
description: 查询作业执行信息
spec:
generate_type: space
is_public: false
tag_names: []目录必须包含 SKILL.md,由接入方维护 Skill 内容及环境变量依赖声明。code 小写、字母开头、最长 64 位,允许下划线和中划线;Agent 中引用相同 code。
版本可省略,不再以 Package 版本兜底。平台比较 ZIP hash:首次创建为 0.0.1;内容变化时在最新版本上将补丁号加 1,未变化则覆盖当前版本。无法取得旧 ZIP hash 时按版本覆盖处理;无法读取新上传 ZIP 时停止。显式版本须为 x.x.x,支持同版本覆盖;版本快照不存在时由平台创建。
FROM {{ SKILL_BASE_IMAGE | default("registry.example.com/team/skill:1.0") }}Skill 沙箱默认镜像白名单为 ["python:3.11-slim", "bkdbm-aidev-skills-env", "bkai-skill-image-base"];环境显式配置优先。自定义基础镜像先入环境镜像仓库并完成平台开白。只支持根目录已有的 Dockerfile,不提供 spec.base_image,也不自动生成 Dockerfile;替换规则见变量替换。
在 Agent 的 spec.subagents 中填写子智能体编码,规则与主智能体一致:ai- 开头、总长 5–16 位。引用对象必须可访问且已发布,引用的指令必须存在于该发布版本。
apiVersion: bkai.tencent.com/aidev-agent/v1
kind: Agent
metadata:
code: ai-job-exec
name: 作业执行助手
spec:
prompt:
type: inline
content: 你是作业执行助手,帮助用户理解任务信息。
model:
llm_code: aidev-chat-auto
context_window: 16
conversation_settings:
commands:
- id: execute_job
name: 分析作业执行
icon: null
content: 请分析任务 {{ task_id }} 的执行信息。
components:
- type: text
key: task_id
name: 任务 ID
required: true
tools: []spec:
subagents:
- code: ai-job-exec
# 可选:引用该子智能体的已发布指令
conversation_settings:
commands:
- id: execute_job
agent_code: ai-job-exec
alias: 作业执行助手来源智能体需包含 ID 为 execute_job 的指令。仅关联子智能体时,无需添加上述 commands 项;引用展开规则见后文。
| 字段 | 类型 / 约束 | 说明 |
|---|---|---|
subagents[].code | 必填 string | 填写可访问的子智能体编码;名称、平台 ID 和关联信息由同步工具获取。 |
subagents 来源 commands[] | id、name、agent_id;status 可选 | 由同步工具读取来源指令,不需要重复填写;引用方式见上方 Demo。 |
新建主子智能体时,先用 --resource agent/子智能体code --confirm --publish --publish_config_only=0 同步并发布子智能体,在平台确认完成后再同步主智能体。bkai-init 只提交发布请求,不等待部署;CLI 不绕过子智能体发布校验。详见发布规则。
每个知识库使用一个目录,维护配置及 Markdown、图片;Agent 通过 code 引用。知识库 code 只允许小写英文、数字、下划线,字母开头、最长 64 位;不支持中划线。
apiVersion: bkai.tencent.com/v1
kind: KnowledgeBase
metadata:
code: bk_job_docs
name: 作业平台知识库
description: 作业平台使用文档
spec:
generate_type: space
is_public: false
config: {}
tag_names: []metadata 定义标识、名称和描述;spec 定义可见性、知识库 config 和标签,具体 config 按目标平台能力填写。Agent 的检索配置见下例,两者不混用。
spec:
knowledgebases:
items:
- code: bk_job_docs
retriever_code: ""
query_function: mixed
recall_channels: [dense, sparse]
rrf_weights:
dense: 0.7
sparse: 0.3
document_fragment_count: 20
polish: true
origin: false
is_response_when_no_knowledgebase_match: true
rejection_message: 未找到相关作业文档,请补充问题信息。以下字段直接位于 knowledgebases 下;items 是关联列表,其余配置统一作用于全部关联知识库,不增加 retrieval 层。
| 字段 | 类型 / 约束 | 说明 |
|---|---|---|
items[].code | string | 填写已同步的知识库编码;小写英文字母开头,仅小写英文、数字、下划线,最长 64 字符。 |
retriever_code | 可选 string | 检索器编码。 |
query_function | semantic / mixed / sql | 兼容检索方式字段;不代表所有知识库都支持 SQL。与召回通道保持一致。 |
recall_channels | dense / sparse 数组 | 召回通道,与 query_function 保持一致。 |
rrf_weights | string → number 对象 | RRF 权重,每项范围 0–1;示例使用 dense、sparse,不要求权重总和必须为 1。 |
document_fragment_count | integer | 返回文档片段数;示例为 20。 |
polish / origin | boolean / boolean | 检索结果处理开关;首次接入按示例填写,并与平台确认目标版本的具体返回效果后调整。 |
is_response_when_no_knowledgebase_match | boolean | 未命中时是否允许根据通识回答。 |
rejection_message | string,可为空 | 拒答文案。 |
建议明确填写需要的检索配置,更新前查看差异;不要通过省略字段来假设保留线上原值。
同步后根据任务 ID 在平台确认导入状态,并检查知识库目录与文档;没有任务查询入口时,将任务 ID 提供给平台维护方核实。失败、部分成功或结果未知均不视为导入成功,不以 CLI 正常退出代替任务验收。
包含文档时按整个知识库根目录镜像同步,会删除线上多余内容。请先确认目录完整;没有文档时仅同步配置,不清空线上文档。导入完成不等于向量处理及问答验证完成。
仅接受 Markdown 和图片,排除根目录 knowledgebase.yaml、.DS_Store、.git、__pycache__;拒绝符号链接及其它文件类型。ZIP 最大 500 MiB、文件总大小最大 2 GiB、最多 10000 个文件,平台继续校验路径与解压安全。show / diff 不比较文档内容。
{{ key }}。CLI 校验组件 key 唯一、引用存在、默认值匹配类型与选项,数值范围有效。agent_code + id 定位。agent_code 必须出现在 subagents 中;读取来源最新发布版本,复制 name、icon、content、components、回填与上传设置,alias 允许本地覆盖。“自定义定义”和“来源引用”使用同一 commands 数组,不新增 reference 层。来源引用只接受 id、agent_code、alias;需要修改正文或组件时,定义新的本地指令。资源引用只填 code,不填平台资源 ID;指令 id 是指令标识,仍需保留。
以下命令在已安装 bkai-init 的环境中执行。部署时使用平台基础镜像,将接入目录放入镜像或挂载到任务中,并注入连接信息。建议按“校验 → 查看 → 对比 → 同步”执行。
| 配置 | 接入说明 |
|---|---|
BK_API_URL_TMPL | 统一地址模板,示例 https://bkapi.example.com/api/{api_name}/{stage};api_name 分别为 bk-aidev、bk-user,stage 为 prod。CLI 自动解析,Python 示例从此模板生成两个地址。 |
BKAI_APP_CODE / BKAI_APP_SECRET | 应用编码和密钥;未配置时分别读取 BKPAAS_APP_ID / BKPAAS_APP_SECRET。命令参数优先,真实凭据不入库。 |
BKAI_ACCESS_TOKEN / --access-token / access_token | 可选,通常无需配置;环境变量兼容 ACCESS_TOKEN。不替代应用、空间及 MCP 授权。 |
BKAI_USERNAME / --username / username | 可选,填写登录名,不传默认 bk_admin。所有输入均经 BK User 转换为实际 bk_username。 |
-f | 本次同步清单的路径,例如 /bk-job/bkai.yaml。 |
--tenant-id | 目标租户,默认 system;建议在部署任务中显式填写。 |
--space | 默认 bkaidev,不接受空值,不自动拼接租户前缀;多租户需显式传完整 ID,如 system-bkaidev。所有资源统一使用此空间,旧 metadata.space 不再生效。CLI 不自动读取 BKAI_SPACE_ID,使用该环境变量时需通过 --space 显式传参。 |
--resource | 选择清单中的一个或多个资源,可重复传入;格式 kind/code。省略表示全包;类型为 agent、collection、skill、knowledgebase。 |
--exclude-resource | 按资源排除,优先于选择列表,可重复传入,例如 agent/ai-job;适用于 plan / sync,show 不支持黑名单。 |
--confirm | 确认执行 sync;不传则只读预览,不上传、不写入、不发布。 |
--publish | 显式开启智能体发布,先子后主;不传则仅同步草稿。 |
--publish_config_only | 0 或 1,默认 0;需同时指定 --publish。0 显式请求发布到开发者中心,1 仅发布配置;平台可按代码版本一致策略跳过重新部署。 |
--var KEY=VALUE | 传入部署变量,可重复;规则和白名单见下方。 |
发布规则:常规发布显式传递 is_publish_to_paas_v3=true。bkai-init 只调用发布接口,不轮询或等待部署完成;pending / running 标记为“已提交,后台处理中”,successful 按接口结果记录发布完成。实际部署结果请到平台确认,发布请求失败不自动重试。主智能体引用仍校验子智能体已发布。平台“代码版本一致时仅更新配置”的优化保持不变。
# 替换为目标环境的配置;不打印凭据
export BK_API_URL_TMPL='https://bkapi.example.com/api/{api_name}/{stage}'
export BKAI_APP_CODE='<应用编码>'
export BKAI_APP_SECRET='<应用密钥>'
export BKAI_SPACE_ID='<目标空间ID>'
# 可选:不传 username 默认 bk_admin;通常不需要 access_token
# export BKAI_USERNAME='bk_admin'
# export BKAI_ACCESS_TOKEN='<按需填写>'
# CLI 通过 --space 显式接收空间 ID
# 1. 校验本地配置
bkai-init validate -f /bk-job/bkai.yaml --space "$BKAI_SPACE_ID"
# 2. 查看清单涉及资源的线上配置
bkai-init show -f /bk-job/bkai.yaml --tenant-id system --space "$BKAI_SPACE_ID"
# 3. 对比本地配置与线上配置
bkai-init diff -f /bk-job/bkai.yaml --tenant-id system --space "$BKAI_SPACE_ID"
# 4. 预览完整主子智能体初始化计划
bkai-init plan -f /bk-job/bkai.yaml --space "$BKAI_SPACE_ID" --publish
# 5. 确认后同步并发布配置(先子后主)
bkai-init sync -f /bk-job/bkai.yaml \
--tenant-id system --space "$BKAI_SPACE_ID" \
--confirm --publish --publish_config_only=0
# 仅同步指定依赖;--resource 支持一个或多个
bkai-init sync -f /bk-job/bkai.yaml --space "$BKAI_SPACE_ID" --confirm \
--resource skill/job_skill knowledgebase/bk_job_docs
# 查看一个资源的线上配置
bkai-init show -f /bk-job/bkai.yaml --space "$BKAI_SPACE_ID" \
--resource agent/ai-job --format json
# 平台手工维护的主智能体整体跳过;未选资源不自动同步
bkai-init sync -f /bk-job/bkai.yaml --space "$BKAI_SPACE_ID" --confirm \
--exclude-resource agent/ai-job资源选择只接受清单中的对象,不自动同步未选中的依赖;MCP 是 Agent 关联,不是独立同步资源。所有本地配置仍需通过校验。plan 就绪不保证写权限或服务端执行成功。
plan 与 sync 均按 bkai.yaml 的资源事项展示进度、配置路径和当前步骤。正常接口仅保留缩进后的请求 URL,不展开输入、响应正文或接口处理结果;MCP 查询成功合并成一行。以下为输出结构示例,计数和错误内容以实际执行为准。
[3/8] 正在处理:Skill/job_skill
配置:skills/job_skill/skill.yaml
✓ 打包完成
✓ 上传完成
→ 正在同步 Skill
接口请求:POST https://bkapi.example.com/api/bk-aidev/prod/openapi/aidev/app/v1/skills/upsert/
✓ 同步完成
【正在查询 MCP】bk-job-apigw-mcp agent_code: ai-job 成功[3/8] 正在处理:Skill/job_skill
配置:skills/job_skill/skill.yaml
✓ 打包完成
✓ 上传完成
→ 正在同步 Skill
接口请求:POST https://bkapi.example.com/api/bk-aidev/prod/openapi/aidev/app/v1/skills/upsert/
请求参数:
{
"skill_code": "job_skill",
"space_id": "<目标空间ID>"
}
接口响应:[HTTP 500]
{
"error": {
"code": 500,
"message": "Incorrect string value for column skill_markdown"
}
}
✗ 同步 Skill失败:skill_markdown 字符编码不兼容
初始化已停止
已完成 2 项,失败 1 项,未执行 5 项
失败事项:Skill/job_skill
失败步骤:同步 Skill
排查建议:检查平台数据库字段字符集
反馈信息:执行时间、CLI 版本、请求标识(服务端提供时)plan 只检查、不写入;使用 plan --format json 或 --format yaml 获取结构化计划。未传 --confirm 的 sync 同样只预览。知识库异步导入显示“已提交,后台处理中”,不计为全部处理完成。
查询请求遇到连接失败、超时、HTTP 429 或 5xx 时,分别等待 1、2、4 秒重试(最多请求 4 次);写入请求及其它业务错误不会盲目重试。失败反馈保留资源、步骤、执行时间、CLI 版本和服务端请求标识;不要粘贴原始凭据。已完成事项不会自动回滚,重试前先用 show / diff 确认线上状态。
[] 不代表清空全部变量,最终取值需满足 Skill 的依赖声明。使用受限的 Jinja 变量语法,支持 {{ KEY }} 和 {{ KEY | default("默认值") }}。默认值仅在未传变量时生效,显式空字符串保持为空;不自动读取环境变量。
| 文件白名单 | 处理方式 |
|---|---|
| 入口 bkai.yaml、清单引用的 Agent / Collection YAML | 解析后仅替换字符串值,不替换键名、结构或类型。 |
| 已声明 Skill 根目录 skill.yaml、知识库根目录 knowledgebase.yaml | 同上;不是扫描所有 YAML。 |
| 已声明 Skill 根目录已有 Dockerfile | 只替换文本,写入上传包,不修改本地源文件。 |
bkai-init sync -f /bk-job/bkai.yaml --space "$BKAI_SPACE_ID" --confirm \
--var SKILL_BASE_IMAGE=registry.example.com/team/skill:1.0 \
--var SKILL_NAME=job_skillname: "{{ SKILL_NAME | default('作业查询 Skill') }}"。未传值且无默认值的 YAML 占位符保留,供智能体运行时组件引用;部署变量不要与组件 key 重名。先按本页包安装步骤安装固定版本 bkai-init==0.1.1 及依赖,再从包顶层 from bkai_init import BkaiInit 导入;CLI 与 Python 使用同一个包、同一个虚拟环境,无需另外安装。
import logging
import os
import sys
from bkai_init import BkaiInit
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
api_url_template = os.environ["BK_API_URL_TMPL"] # 使用下方含 {api_name}/{stage} 的统一模板
initializer = BkaiInit(
base_url=api_url_template.format(api_name="bk-aidev", stage="prod"),
app_code=os.environ["BKAI_APP_CODE"],
app_secret=os.environ["BKAI_APP_SECRET"],
bk_user_base_url=api_url_template.format(api_name="bk-user", stage="prod"),
username=os.environ.get("BKAI_USERNAME"), # 可选;不传默认 bk_admin(登录名)
access_token=os.environ.get("BKAI_ACCESS_TOKEN"), # 可选;通常可省略这一行
tenant_id="system",
space=os.environ["BKAI_SPACE_ID"],
variables={"SKILL_BASE_IMAGE": "registry.example.com/team/skill:1.0"},
)
package = "/bk-job/bkai.yaml"
initializer.validate(package)
online = initializer.show(package, resources={"agent/ai-job"})
differences = initializer.diff(package, resources={"agent/ai-job"})
preview = initializer.plan(package, publish=True, publish_config_only=False)
# 写入操作:仅在调用方确认计划后执行
report = initializer.sync(package, publish=True, publish_config_only=False)先执行下方 export 环境变量配置,再运行 Python。CLI 自动读取 BK_API_URL_TMPL;Python 从同一模板生成地址后传给 BkaiInit,不需要另配两个地址变量。username、access_token 两个参数均可省略。Python 的 sync() 直接写入,没有 confirm 参数;只读预览使用 plan()。Python 与 CLI 使用相同的发布规则。类调用的 logging 由应用配置,CLI 默认输出到 stdout。
交付顺序:先构建并发布 pip 包,再构建安装该包的基础镜像,最后由各模块加入自己的接入目录。基础镜像 Dockerfile 通过 pip 安装已发布版本,不复制 bkai-init 源码。
ARG BKAI_INIT_IMAGE
FROM ${BKAI_INIT_IMAGE}
COPY --chown=10001:10001 ./bk-job /bk-job# 在当前终端直接执行,替换为目标环境的配置
export BK_API_URL_TMPL='https://bkapi.example.com/api/{api_name}/{stage}'
export BKAI_APP_CODE='<应用编码>'
export BKAI_APP_SECRET='<应用密钥>'
export BKAI_SPACE_ID='<目标空间ID>'
# 可选:不传 username 默认 bk_admin;通常不需要 access_token
# export BKAI_USERNAME='bk_admin'
# export BKAI_ACCESS_TOKEN='<按需填写>'使用应用凭据即可,无需配置 access token。容器通过 --env 按变量名接收宿主已 export 的配置;--space 仍由宿主显式传参。若设置了可选变量,运行容器时追加 --env BKAI_USERNAME 或 --env BKAI_ACCESS_TOKEN。Docker 用户将下方 podman 替换为 docker。真实凭据不要写入镜像、Git 或共享命令记录。
智能体的 user_scope 在 Agent YAML 的 spec 中配置,不是环境变量或容器命令参数。
export BKAI_SPACE_ID='<目标空间ID>'
export BKAI_INIT_IMAGE='<可访问镜像仓库>/bk-aidev-init:0.1.1'
podman build --platform linux/amd64 --build-arg BKAI_INIT_IMAGE="$BKAI_INIT_IMAGE" -t bkai-init-demo:local .
podman run --rm --platform linux/amd64 bkai-init-demo:local validate \
-f /bk-job/bkai.yaml --space "$BKAI_SPACE_ID"
podman run --rm --platform linux/amd64 \
--env BK_API_URL_TMPL --env BKAI_APP_CODE --env BKAI_APP_SECRET \
bkai-init-demo:local plan -f /bk-job/bkai.yaml \
--tenant-id system --space "$BKAI_SPACE_ID" --publish
podman run --rm --platform linux/amd64 \
--env BK_API_URL_TMPL --env BKAI_APP_CODE --env BKAI_APP_SECRET \
bkai-init-demo:local sync -f /bk-job/bkai.yaml \
--tenant-id system --space "$BKAI_SPACE_ID" \
--confirm --publish --publish_config_only=0podman run --rm -it --platform linux/amd64 --entrypoint sh \
--env BK_API_URL_TMPL --env BKAI_APP_CODE --env BKAI_APP_SECRET \
--env BKAI_SPACE_ID bkai-init-demo:localbkai-init --help
bkai-init validate -f /bk-job/bkai.yaml --space "$BKAI_SPACE_ID"
bkai-init plan -f /bk-job/bkai.yaml \
--tenant-id system --space "$BKAI_SPACE_ID"
# 确认计划后才执行写入;此命令仅同步草稿
bkai-init sync -f /bk-job/bkai.yaml \
--tenant-id system --space "$BKAI_SPACE_ID" --confirm
# 需要发布时,在 plan 和 sync 中追加 --publish --publish_config_only=0通用调试直接使用 bkai-init,不执行模块自带的配置渲染或额外初始化脚本。连接配置沿用 BK_API_URL_TMPL;不要打印凭据。模块特有的初始化逻辑由各接入系统自行维护,不属于本指引。
image:
repository: registry.example.com/modules/bk-job-init
tag: "1.0.0"
pullPolicy: IfNotPresent
bkai:
enabled: true
tenantId: system
space: "<目标空间ID>" # 必填,替换为真实目标值
packagePath: /bk-job/bkai.yaml
excludeResources: []sync --confirm,并传入 packagePath、tenantId、space。示例 Job 默认只同步草稿;首次初始化主子智能体时,按发布约定显式追加 --publish --publish_config_only=0。show / diff,核对名称、Prompt、模型、指令和资源关联;无法读取的字段不能据此认定一致。show 只查看线上配置,不查询权限。diff --check 返回 0 表示无差异、1 执行错误、2 有差异、3 无法完整比较;Skill 文件、envs 值、角色标签及知识库文档等无法回读的内容不能据此认定一致。
先定位失败事项与步骤,再携带脱敏日志反馈;不要仅截取最后一行错误。
| 配置 | 接入说明 |
|---|---|
认证或权限失败 | 检查连接信息、租户和空间,以及应用对目标资源的授权。 |
资源不存在或编码冲突 | 确认资源已创建、code 正确且可唯一定位;引用子智能体指令时确认来源已发布。 |
智能体不存在或不在当前空间 | 检查目标租户、空间及已有智能体的归属;首次接入且智能体未创建时,确认平台支持 MCP 初始化查询规则,不要通过创建空壳智能体绕过检查。 |
不支持的配置 | 确认 CLI 和平台版本,不要直接删除重要配置后覆盖已有 Agent;先与平台确认支持范围。 |
API_NOT_FOUND / 1640401 | 这是网关路由未找到,不等同于 MCP 不存在。检查 api_name 是否为 bk-aidev、网关环境、资源路径及接口发布状态;仅业务明确返回 MCP 不存在时检查 MCP 创建、发布和授权。 |
skill_markdown: Incorrect string value | 检查平台 MySQL 表与字段是否支持 utf8mb4,四字节字符(如 Emoji)可能触发此错误;由平台修复字符集。 |
INITIALIZE_APP_MEMBERS_ERROR | 应用成员初始化调用 BK IAM 失败。将 create_group 路径、HTTP 状态及 request_id 提供给权限中心 / 平台维护方排查;不是 Skill 或本地 YAML 错误。 |
关联 Skill 版本不存在 | 确认 Skill 存在且可访问,并确认平台已部署关联不依赖版本快照的修复;无需在 Agent 关联中补写版本。 |
同步中途失败 | 先查看线上状态和差异,再修正并重试。此前成功的资源可能已写入,不会自动全部回滚。 |
本地校验检查配置格式,计划预览检查同步动作和依赖;同步成功后,仍需验证智能体的实际运行效果。
Agent、角色、Skill、知识库创建更新;指令与组件、子智能体及发布版本引用;APIGW MCP 引用;知识库 Markdown 与图片 ZIP 同步;按 admins 追加开发者中心管理员。
Tools 同步、角色运行时变量、MCP 自动审批授权、空间 IAM 授权、自动回滚;tools 保持空数组。知识库不接受 Markdown 和图片以外的文件。
MCP 无论是否公开都需提前授权;子智能体及引用指令必须满足发布要求。接口不支持或权限不足时停止,不通过 private 接口或提前创建空壳资源绕过检查。
资源接口调用统一使用 src/aidev/aidev/resource/openapi/services/app 下的应用态接口,不直接调用平台内部服务。初始化身份由 bkai-init 直接查询 BK User,平台不增加身份查询接口;管理员追加通过平台 app 接口执行。常规接入只需配置环境变量和命令参数。