AIDEV · Agent Package v1

AIDEV 智能体接入与资源初始化方案

面向接入系统开发人员:在模块仓库维护智能体及依赖配置,通过平台基础镜像中的 bkai-init 初始化和更新资源。

版本 bkai-init 0.1.1 更新于 2026-09-29

1. 方案说明

接入系统将智能体配置和依赖资源组织为一个 Agent Package,由 bkai.yaml 声明同步清单。平台初始化完成后,接入系统在部署流程中调用 bkai-init 完成资源同步。

你需要提供

模块自行维护的接入目录、Agent 配置及依赖资源;在部署流程中配置连接信息并执行同步。

平台提供

内置 bkai-init 的基础镜像和应用态接口。接入方通过命令使用,不需要自行对接平台内部服务。

同步范围

创建或更新 Agent、角色、Skill 和知识库;知识库支持 Markdown 与图片目录同步。MCP 由接入方预先创建,Agent 按 code 引用。

更新保护

同步可能覆盖已有配置。先查看差异,将平台手工维护的资源加入黑名单;同步配置不等于发布智能体。

先按下方规则确定资源 code,再维护配置。建议显式指定目标空间;sync --confirm 才执行写入,--publish 才发起智能体发布,发布配置不等于完成应用部署。

1.1 接入前必读

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。

2. 开始前准备

阅读顺序:准备目录与依赖 → 编写同步清单 → 填写 Agent 配置 → 校验、查看差异并同步 → 确认结果。

2.1 资源 code 命名规则 · 必须遵守

code 是创建、更新和关联资源的稳定标识,不是展示名称。所有资源 code 只使用小写;名称 name 可以使用中文。

资源命名规则正确示例
智能体 / 子智能体必须以 ai- 开头,前缀后首位为小写英文字母;其余仅小写英文、数字或中划线;总长 5–16 位(含前缀)。不支持下划线。ai-job
ai-job-exec
角色 / MCP / Skill小写英文字母开头;其余仅小写英文、数字、下划线或中划线;1–64 位。bk_job_role
bk-job-apigw-mcp
job_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

2.2 安装 bkai-init 与使用基础镜像

安装、配置与调试步骤均包含在本页,无需访问其它文档。先完成包安装,再选择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 登录名解析能力;本页更新不代表包或镜像已发布,平台侧能力也需部署对应实现。

2.2.1 Python 包安装 · Python 3.11+

独立环境 · 替换包源地址后执行
# 使用平台提供、当前网络可访问的可信包源
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 中填写令牌。

2.2.2 生成本地接入模板

先生成新目录,再按业务修改配置并校验
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;知识库文档由接入方维护。

2.2.3 容器使用 · 镜像推送成功后执行

Podman · 拉取镜像并只读挂载接入目录
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。详见执行同步。

模块 Dockerfile · 将接入目录随镜像交付
ARG BKAI_INIT_IMAGE
FROM ${BKAI_INIT_IMAGE}
COPY --chown=10001:10001 ./bk-job /bk-job

基础镜像不包含业务接入目录或应用凭据。由模块挂载或复制目录;宿主 export 后,通过 --env 按变量名传入容器,宿主环境不会自动进入容器。CLI 日志会脱敏应用密钥及其它敏感字段,分享前仍应检查业务信息。知识库文档同步会删除线上多余文档;同步前先确认本地目录完整,并完成应用、空间及 MCP 授权。

2.3 准备接入目录

平台提供

提供应用态资源同步接口和基础镜像,镜像内置 bkai-init。

接入方负责

将接入目录随模块交付,在基础镜像中调用 bkai-init 执行同步;不要把凭据放入目录。

目录示例 · bk-job
/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 与图片按目录层级打包同步;未使用的资源目录无需创建。

2.4 准备依赖资源

角色 · 按需准备

使用角色引用时,在 collections/ 定义 Collection 资源,先创建或更新角色,再同步 Agent。

子智能体 · 先子后主

引用对象必须可访问且已发布,引用的指令必须存在于发布版本;同包可通过 --publish 按依赖顺序发布。

MCP · 接入方准备

仅支持 APIGW MCP。接入方先创建、发布并完成授权;使用 bkai-init 接入时,公开和非公开 MCP 都需要提前授权,公开不代表免授权。

知识库 · 接入方维护

在模块的 knowledgebases 目录中维护配置、Markdown 与图片。同步整个目录,线上多余文档会被删除;无文档时仅同步配置。

Skill · 接入方准备

接入方维护 Skill 包。自定义镜像先同步到环境镜像仓库,由模块 Helm Chart 上报、平台开白;仅在 Skill 根目录 Dockerfile 引用。

Tools · 暂不支持

当前不支持配置 Tools,Manifest 中保留空数组。

2.5 编写同步清单

bkai.yaml 只声明本次需要同步的资源,路径相对于该文件所在目录。按需保留清单项;只使用内联 Prompt 时,可移除角色资源项。

bkai.yaml
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

3. 填写 Agent 配置

以下为完整配置示例。先替换智能体编码、名称和 Prompt,再按实际依赖调整资源关联;后续各节 Demo 为配置片段,应合并到同一个 spec 下,不要重复声明 spec 或覆盖其它配置。角色引用可替换主例的 inline Prompt。

agents/bk_job_ai.yaml
# 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: []                   # 本期暂不支持

3.1 字段说明 · 基础与模型

字段类型 / 约束说明
apiVersion / kind固定字符串固定为 bkai.tencent.com/aidev-agent/v1 与 Agent。
metadata.code必填 stringai- 开头,总长 5–16 位,详见命名规则;用于定位智能体。
metadata.name / descriptionstring名称必填,描述可选;名称由平台校验。
spec.user_scope可选,public / custom人员使用范围:public 为所有人,custom 为指定人。省略时,新建沿用平台默认范围,已有智能体保持原范围;不接受 null 或其它值。
spec.admins可选,list[str]目标租户的 login_name 清单,每项最长 64 字符,不含逗号、空白或控制字符;自动解析为 bk_username 后去重追加、保留原成员。省略、null、[] 不处理。主子智能体分别配置,与使用者范围及空间 IAM 无关。
prompt.typeinline / collection内联正文或角色引用,两种模式互斥;collection 对应平台角色资源。
prompt.contentstringinline 模式必填,直接填写提示词正文;collection 模式不填写。
prompt.codestringcollection 模式必填,填写角色资源的 metadata.code;不填写平台 ID。
model.llm_codestring,协议默认 aidev-chat-auto默认模型;省略时由 bkai-init 按协议默认值补齐后提交平台。
model.fallback_modelstring / null备用模型,null 表示不指定。
model.temperaturenumber / null生成随机性;平台范围 0–2。
model.context_windowinteger / null会话轮次,只接受 1–30 的整数;不是 token 数或 K 单位。256、字符串 "16"、小数和布尔值均报错。
model.llm_token_limitinteger / null上下文 token 上限;平台最小值 1024。
model.max_tokensinteger / null回复 token 上限;平台范围 1–20480。
model.tool_output_compress_thrdinteger / null工具输出压缩阈值;平台最小值 1024。

资源文件不指定 space,统一由调用方传入。Agent 禁止配置 version(包括 null),发布版本由平台分配;Package 的 metadata.version 不用于 Agent 发布。模型还需满足目标模型自身的能力限制。

3.1.1 人员使用范围

Agent YAML · 按需添加到 spec
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 仅展示登录名及追加意图,不校验用户映射,也不把无法回读的管理员名单判断为一致。

3.2 角色资源与引用

角色使用独立的 Collection 资源,目录为 collections/。通过资源清单管理角色的创建与更新;Agent 使用角色编码引用。

collections/job_role.yaml
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 / kindbkai.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[].rolesystem / user / assistant首条必须为 system,且只能有一条 system。
spec.content[].content非空 string固定消息正文,不支持角色运行时变量;部署时的文件变量替换见“变量替换”。
spec.generate_type / is_publicspace / public;boolean默认选 space;public 强制公开,space 使用 is_public。
spec.tag_names二维 string 数组,默认 []每项为一条标签路径。

角色 code 同样要求小写、字母开头、最长 64 位,允许下划线和中划线。角色不定义变量和默认模型,模型统一在 Agent 的 model 中配置。

3.2.1 角色引用 Demo

将主示例中的 spec.prompt 替换为以下内容;其它配置保持不变。使用前将上面的角色文件加入同步清单。

Agent · 角色引用配置
spec:
  prompt:
    type: collection
    code: bk_job_role
  1. 先创建或更新 bkai.yaml 声明的 Collection,再解析 Agent 的 prompt.code;未在清单中的角色只做已有资源引用。
  2. 填写角色 code 即可,不需要平台 ID;不支持引用含模板变量的角色。
  3. collection 模式只填写 type、code;inline 模式只填写 type、content。切换到 inline 时平台清空角色关联与快照。
  4. 更新角色后,还需再次同步引用该角色的 Agent,已有 Agent 不会自动使用新的角色正文。需要对外生效时,另行完成发布。

3.2.2 资源同步约定

3.3 对话设置、指令与组件

在 spec.conversation_settings 中配置开场白、预设问题和快捷指令。需要用户填写参数时,在 commands 中定义 components,再通过 {{ key }} 引用组件值;完整示例见“Agent 配置”。

3.3.1 conversation_settings

字段类型 / 约束说明
opening_remarkstring,默认空字符串开场白,最长 1024 字符。
predefined_questionsstring[],默认 []预设问题。
commandsCommand[],默认 []自定义指令或来源指令引用;展开后须满足下方指令结构。
enable_chat_sessionboolean,默认 true是否启用多会话。
enable_word_selection_popupboolean,默认 false是否启用划词弹出菜单。

3.3.2 commands[] · 指令配置

字段类型 / 约束说明
id必填 string指令标识;引用时填写来源指令 ID。同一 Agent 内必须唯一,避免默认指令 ID 冲突。
name必填 string自定义指令必填;引用简写由 CLI 从来源补齐。
iconstring / null,平台无默认值完整提交必须提供;无图标显式填 null。
agent_codestring / null引用来源指令时填写来源智能体 code;自定义指令省略时表示当前智能体。
aliasstring / null,默认 null目标智能体的展示别名。
contentstring / null,默认 null正文使用 {{ key }} 引用组件;不是 prompt 字段。
componentsComponent[],默认 []见下方完整组件定义。
enable_fill_backboolean,默认 false启用引用文本回填。
fill_back_component_keystring / null启用回填时必填,必须匹配 components 中某个 key。
fill_regxstring / null,默认 null引用文本匹配正则;保留平台字段拼写 regx。
support_upload对象,默认 {}仅支持 vision、file 两个键,值为 boolean;声明开关不代表执行链路一定支持上传。

3.3.3 components[] · 四类控件共用结构

字段类型 / 约束说明
type必填 string支持 text、textarea、number、select 四类控件。
key必填 string组件引用键;同一指令内必须唯一。
name / placeholderstring / null,默认 null展示名称与输入提示。
defaultstring / integer / boolean / list / null按控件类型填写默认值;select 默认值须匹配 options 中的选项。
requiredboolean / null,默认 false是否必填;建议配置使用明确布尔值。
hideboolean,默认 false是否隐藏组件。
rowsinteger / null,默认 nulltextarea 行数。
min / maxinteger / null,默认 null数值边界;平台会校验整数默认值是否在范围内。
options对象数组 / null,默认 nullselect 选项,使用 {label: string, value: string或number};label 为展示文本,value 为实际取值。
平台维护字段(无需填写)
字段类型说明
agent_id / agent_name / space_idinteger / string / string,均可为 null由 CLI 根据目标资源补齐;避免在接入仓库固定环境 ID。
statusready / deleted,默认 ready平台状态,接入方无需配置。
updated_by / updated_atstring / null平台维护的审计字段,接入方无需配置。
fill_back / fill_regxboolean / null;string / null平台由指令级回填设置计算,无需在组件中重复声明。关闭回填时会重置这两个字段。

请只填写上表支持的组件字段,不配置 multiple。文本回填在指令层统一设置,不需要在组件内重复配置。

3.4 MCP

接入方先创建、发布 APIGW MCP Server,并提前完成接入应用及目标智能体所需的授权,再在 Agent 的 spec.mcps 中引用并选择工具。

Agent · MCP 关联 Demo
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 / codeapigw / stringtype 固定为 apigw,code 填写已创建的 MCP Server 编码;无需填写地址和平台 ID。
mcps[].is_selected_allboolean,默认全选显式 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 位规则,允许下划线和中划线。权限不足或查询不到时停止处理,不绕过授权。

3.4.1 MCP 初始化与空间校验

接入方可参考 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 授权要求不变。

3.5 Skill

接入方通过资源清单同步 Skill,再在 Agent 的 spec.skills 中引用。以下为关联配置,不是 Skill 资源自身的定义。

Agent · Skill 关联 Demo
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: [] 不表示清空所有变量,具体行为见“执行同步”。

3.5.1 Skill 资源与镜像

skills/job_skill/skill.yaml
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,支持同版本覆盖;版本快照不存在时由平台创建。

skills/job_skill/Dockerfile · 仅在已有文件中引用
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;替换规则见变量替换。

3.6 子智能体

在 Agent 的 spec.subagents 中填写子智能体编码,规则与主智能体一致:ai- 开头、总长 5–16 位。引用对象必须可访问且已发布,引用的指令必须存在于该发布版本。

agents/bk_job_exec.yaml · 子智能体及快捷指令
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: []
Agent · 子智能体关联 Demo
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 不绕过子智能体发布校验。详见发布规则。

3.7 知识库配置

每个知识库使用一个目录,维护配置及 Markdown、图片;Agent 通过 code 引用。知识库 code 只允许小写英文、数字、下划线,字母开头、最长 64 位;不支持中划线。

knowledgebases/bk_job_docs/knowledgebase.yaml
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 的检索配置见下例,两者不混用。

Agent · 知识库关联 Demo
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[].codestring填写已同步的知识库编码;小写英文字母开头,仅小写英文、数字、下划线,最长 64 字符。
retriever_code可选 string检索器编码。
query_functionsemantic / mixed / sql兼容检索方式字段;不代表所有知识库都支持 SQL。与召回通道保持一致。
recall_channelsdense / sparse 数组召回通道,与 query_function 保持一致。
rrf_weightsstring → number 对象RRF 权重,每项范围 0–1;示例使用 dense、sparse,不要求权重总和必须为 1。
document_fragment_countinteger返回文档片段数;示例为 20。
polish / originboolean / boolean检索结果处理开关;首次接入按示例填写,并与平台确认目标版本的具体返回效果后调整。
is_response_when_no_knowledgebase_matchboolean未命中时是否允许根据通识回答。
rejection_messagestring,可为空拒答文案。

建议明确填写需要的检索配置,更新前查看差异;不要通过省略字段来假设保留线上原值。

3.7.1 文档 ZIP 同步

  1. bkai-init 先同步知识库配置,再打包目录中的 Markdown 与图片,保留相对路径。
  2. 向平台申请临时上传 URL,直接上传文件到 BKRepo,再由平台核对上传状态、大小及摘要。
  3. 提交知识库 ZIP 导入,取得任务 ID 后继续后续同步,不等待后台任务完成;日志中的“已提交,后台处理中”不代表导入成功。

同步后根据任务 ID 在平台确认导入状态,并检查知识库目录与文档;没有任务查询入口时,将任务 ID 提供给平台维护方核实。失败、部分成功或结果未知均不视为导入成功,不以 CLI 正常退出代替任务验收。

包含文档时按整个知识库根目录镜像同步,会删除线上多余内容。请先确认目录完整;没有文档时仅同步配置,不清空线上文档。导入完成不等于向量处理及问答验证完成。

仅接受 Markdown 和图片,排除根目录 knowledgebase.yaml、.DS_Store、.git、__pycache__;拒绝符号链接及其它文件类型。ZIP 最大 500 MiB、文件总大小最大 2 GiB、最多 10000 个文件,平台继续校验路径与解压安全。show / diff 不比较文档内容。

3.8 引用与展开规则

  1. 组件引用:content 使用 {{ key }}。CLI 校验组件 key 唯一、引用存在、默认值匹配类型与选项,数值范围有效。
  2. 本智能体指令:填写完整的指令定义;agent_code 可省略,表示当前智能体,无需手工填写平台 ID。
  3. 来源指令:通过 agent_code + id 定位。agent_code 必须出现在 subagents 中;读取来源最新发布版本,复制 name、icon、content、components、回填与上传设置,alias 允许本地覆盖。
  4. 引用失败:来源不存在、无权访问、未发布、指令已删除或 code 无法唯一定位时终止,不用空配置替代。简写展开由 CLI 负责。
  5. 资源定位:引用资源需在指定租户及目标空间内可访问。编码不存在或无法唯一定位时,先修正资源或空间配置,不要随意换成其它环境的 ID。
  6. 回填:enable_fill_back=true 时,目标 key 必须存在;平台将目标组件标记为 fill_back,并同步 fill_regx。关闭时重置组件回填字段。
  7. 默认指令:平台可能自动生成当前智能体的默认指令,无需复制到接入文件中手工维护。

“自定义定义”和“来源引用”使用同一 commands 数组,不新增 reference 层。来源引用只接受 id、agent_code、alias;需要修改正文或组件时,定义新的本地指令。资源引用只填 code,不填平台资源 ID;指令 id 是指令标识,仍需保留。

4. 执行校验与同步

以下命令在已安装 bkai-init 的环境中执行。部署时使用平台基础镜像,将接入目录放入镜像或挂载到任务中,并注入连接信息。建议按“校验 → 查看 → 对比 → 同步”执行。

4.1 运行参数

配置接入说明
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_only0 或 1,默认 0;需同时指定 --publish。0 显式请求发布到开发者中心,1 仅发布配置;平台可按代码版本一致策略跳过重新部署。
--var KEY=VALUE传入部署变量,可重复;规则和白名单见下方。

发布规则:常规发布显式传递 is_publish_to_paas_v3=true。bkai-init 只调用发布接口,不轮询或等待部署完成;pending / running 标记为“已提交,后台处理中”,successful 按接口结果记录发布完成。实际部署结果请到平台确认,发布请求失败不自动重试。主智能体引用仍校验子智能体已发布。平台“代码版本一致时仅更新配置”的优化保持不变。

4.2 执行命令

CLI · 直接配置环境变量
# 替换为目标环境的配置;不打印凭据
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 就绪不保证写权限或服务端执行成功。

4.2.1 查看进度与反馈问题

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 确认线上状态。

4.3 更新时如何避免覆盖

4.4 变量替换

使用受限的 Jinja 变量语法,支持 {{ KEY }} 和 {{ KEY | default("默认值") }}。默认值仅在未传变量时生效,显式空字符串保持为空;不自动读取环境变量。

文件白名单处理方式
入口 bkai.yaml、清单引用的 Agent / Collection YAML解析后仅替换字符串值,不替换键名、结构或类型。
已声明 Skill 根目录 skill.yaml、知识库根目录 knowledgebase.yaml同上;不是扫描所有 YAML。
已声明 Skill 根目录已有 Dockerfile只替换文本,写入上传包,不修改本地源文件。
传递多个变量 · 每个变量一个 --var
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_skill

4.5 Python 调用

先按本页包安装步骤安装固定版本 bkai-init==0.1.1 及依赖,再从包顶层 from bkai_init import BkaiInit 导入;CLI 与 Python 使用同一个包、同一个虚拟环境,无需另外安装。

与 CLI 使用同一包及校验规则
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。

4.6 基础镜像与 Helm 接入

交付顺序:先构建并发布 pip 包,再构建安装该包的基础镜像,最后由各模块加入自己的接入目录。基础镜像 Dockerfile 通过 pip 安装已发布版本,不复制 bkai-init 源码。

模块 Dockerfile · 继承基础镜像中的 bkai-init 入口
ARG BKAI_INIT_IMAGE
FROM ${BKAI_INIT_IMAGE}
COPY --chown=10001:10001 ./bk-job /bk-job
Podman / Docker · 宿主环境变量配置
# 在当前终端直接执行,替换为目标环境的配置
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 中配置,不是环境变量或容器命令参数。

Podman / Docker · 先验证,再同步
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=0

4.6.1 通用容器调试

宿主执行 · 进入上方构建的通用镜像
podman 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:local
容器内执行 · 直接调用 bkai-init
bkai-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;不要打印凭据。模块特有的初始化逻辑由各接入系统自行维护,不属于本指引。

业务 Chart · values.yaml
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: []

5. 确认同步结果

show 只查看线上配置,不查询权限。diff --check 返回 0 表示无差异、1 执行错误、2 有差异、3 无法完整比较;Skill 文件、envs 值、角色标签及知识库文档等无法回读的内容不能据此认定一致。

5.1 遇到问题时

先定位失败事项与步骤,再携带脱敏日志反馈;不要仅截取最后一行错误。

配置接入说明
认证或权限失败检查连接信息、租户和空间,以及应用对目标资源的授权。
资源不存在或编码冲突确认资源已创建、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 关联中补写版本。
同步中途失败先查看线上状态和差异,再修正并重试。此前成功的资源可能已写入,不会自动全部回滚。

6. 使用边界

本地校验检查配置格式,计划预览检查同步动作和依赖;同步成功后,仍需验证智能体的实际运行效果。

已纳入协议

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 接口执行。常规接入只需配置环境变量和命令参数。