2665 字约 9 分钟
npc:go
在指定的 Docker 镜像中执行 AI 任务。
在 Issue 或 PR 评论中 @NPC 角色会使用内置的 system/user prompt; 其他事件下,可通过 systemPrompt、userPrompt、role 参数自定义提示词。
可以在镜像中安装 NPC 运行时所需的 CLI 工具和 Skills, 例如使用 CNB Skill。 更多 NPC 相关配置,请查阅 自定义 NPC。
适用事件
参数
参数速览
以下列表按用途列出 npc:go 的全部参数,方便先对整体有概念,再跳转到对应小节细看。
- role:NPC 角色名,仅 API 触发时生效
- systemPrompt:NPC 系统提示词,仅 API 触发时生效
- userPrompt:NPC 用户输入,仅 API 触发时生效
- model:Agent 使用的模型 ID,所有事件下生效
- maxTurns:Agent 最大对话轮次,所有事件下生效
- contextWindow:模型上下文窗口大小,所有事件下生效
- maxTokens:模型最大输出 token 数,所有事件下生效
- thinkingLevel:模型推理深度,所有事件下生效
- supportImage:是否启用图片输入,所有事件下生效
role、systemPrompt、userPrompt 用于定制 NPC 的提示词,是否需要配置取决于触发方式:
- 评论触发(在 Issue / PR 评论中
@NPC,即issue.comment@npc/pull_request.comment@npc事件):提示词已由 NPC 角色自带,无需配置。 角色及其提示词在.cnb/settings.yml中定义、优先级更高,即使在本步骤配置了role、systemPrompt、userPrompt也会被忽略。 - API 触发(
api_trigger):需要自行配置提示词。 请求体中的npc.name=CodeBuddy只会让本次构建以@CodeBuddy为代理人运行 (影响流水线展示、标题、计费口径、CNB_TOKEN 权限等),提示词仍需由你提供:systemPrompt/userPrompt:在本步骤的options中传入;role(可选):配置后按.cnb/settings.yml中的 NPC 角色解析,拼接到 system prompt。
role
- type:
String - required:
false
NPC 角色名称,需在 .cnb/settings.yml 文件的 NPC 的 roles 字段中定义, 可参考 UI 定制。 仅 API 触发(api_trigger)时生效;评论触发(issue.comment@npc / pull_request.comment@npc)时被忽略。
systemPrompt
- type:
String - required:
false
NPC 系统提示词。 仅 API 触发(api_trigger)时必填;评论触发(issue.comment@npc / pull_request.comment@npc)时被忽略, 提示词由 NPC 角色自带。
userPrompt
- type:
String - required:
false
NPC 用户输入,主要用于用户向 NPC 描述任务。 仅 API 触发(api_trigger)时必填;评论触发(issue.comment@npc / pull_request.comment@npc)时被忽略, 提示词由 NPC 角色自带。
maxTurns
- type:
Number - required:
false
Agent 最大对话轮次。所有事件下均生效,达到上限时 Agent 会被中止,输出可能不完整。
不指定时取值规则:
- 未指定
model(使用平台默认模型)时,沿用平台为默认模型配置的maxTurns; - 指定了自定义
model时,不再沿用平台为默认模型配置的取值,回落到内置默认500。
显式传入时以你的取值为准。
model
- type:
String - required:
false
Agent 使用的模型 ID。不指定时使用平台默认模型,所有事件下均生效。
contextWindow
- type:
String | Number - required:
false
模型上下文窗口大小,支持以下写法:
- 带小写单位:
"128k"(k = 1000)或"1m"(m = 1000000) - 纯数字:
128000或"128000"
取值范围为 128k ~ 1m(即 128000 ~ 1000000 tokens),越界或格式不合法(如大写、带小数、带空白)会直接报错。 用于上下文超限时触发自动摘要压缩,需与所选 model 实际支持的上下文窗口保持一致。 不指定时取值规则:
- 未指定
model(使用平台默认模型)时,沿用平台 CodeBuddy NPC 为默认模型配置的取值; - 指定了自定义
model时,不再继承 CodeBuddy NPC 的配置(上下文能力因模型而异、不可复用), 回落到内置默认1m(1000000)。
显式传入时以你的取值为准,所有事件下均生效。
示例:
$:
issue.comment@npc:
default:
docker:
image: cnbcool/default-npc:latest
stages:
- name: npc go
type: npc:go
options:
contextWindow: 128k # 等效于 128000,也可写成 "128000" 或 128000
# issue 评论与 PR 评论事件配置一致,可按需配置
pull_request.comment@npc:
default:
docker:
image: cnbcool/default-npc:latest
stages:
- name: npc go
type: npc:go
options:
contextWindow: 128k # 等效于 128000,也可写成 "128000" 或 128000maxTokens
- type:
String | Number - required:
false
模型最大输出 token 数,支持以下写法:
- 带小写单位:
"48k"(k = 1000)或"1m"(m = 1000000) - 纯数字:
64000或"64000"
校验接受范围为 48k ~ 1m(即 48000 ~ 1000000 tokens),越界或格式不合法 (如大写、带小数、带空白)会直接报错。 不指定时取值规则:
- 未指定
model(使用平台默认模型)时,沿用平台 CodeBuddy NPC 为默认模型配置的取值; - 指定了自定义
model时,不再继承 CodeBuddy NPC 的配置(能力因模型而异、不可复用),回落到内置默认48k(48000)。
显式传入时以你的取值为准,所有事件下均生效。
示例:
$:
issue.comment@npc:
default:
docker:
image: cnbcool/default-npc:latest
stages:
- name: npc go
type: npc:go
options:
maxTokens: 64k # 等效于 64000,也可写成 "64000" 或 64000
# issue 评论与 PR 评论事件配置一致,可按需配置
pull_request.comment@npc:
default:
docker:
image: cnbcool/default-npc:latest
stages:
- name: npc go
type: npc:go
options:
maxTokens: 64k # 等效于 64000,也可写成 "64000" 或 64000thinkingLevel
- type:
String - required:
false
模型推理深度,可选值:off / minimal / low / medium / high / xhigh / max。 不指定时取值规则:
- 未指定
model(使用平台默认模型)时,沿用平台 CodeBuddy NPC 为默认模型配置的取值; - 指定了自定义
model时,不再继承 CodeBuddy NPC 的配置(推理能力因模型而异、不可复用),回落到 内置默认medium。
显式传入时以你的取值为准,所有事件下均生效。
示例:
$:
issue.comment@npc:
default:
docker:
image: cnbcool/default-npc:latest
stages:
- name: npc go
type: npc:go
options:
thinkingLevel: high # 提高推理深度以获得更深入的思考,可选 off / low / medium / high / xhigh / max 等
# issue 评论与 PR 评论事件配置一致,可按需配置
pull_request.comment@npc:
default:
docker:
image: cnbcool/default-npc:latest
stages:
- name: npc go
type: npc:go
options:
thinkingLevel: high # 提高推理深度以获得更深入的思考,可选 off / low / medium / high / xhigh / max 等supportImage
- type:
Boolean - required:
false
是否启用图片输入能力(多模态)。开启后,NPC 可读取并理解 Issue / PR 评论等场景中 粘贴的图片(支持 PNG / JPEG / WebP / GIF,单张建议不超过 5 MiB)。
不指定时取值规则:
- 未指定
model(使用平台默认模型)时,沿用平台 CodeBuddy NPC 为默认模型配置的开关; - 指定了自定义
model时,不再继承 CodeBuddy NPC 的配置(不同模型的图片能力不可复用), 回落到内置默认false(关闭)。
显式传 true 才会注册图片读取工具并声明图片输入;设为 false 或未配置时,图片仅按纯文本处理。
示例:
$:
issue.comment@npc:
default:
docker:
image: cnbcool/default-npc:latest
stages:
- name: npc go
type: npc:go
options:
supportImage: true # 启用图片输入(多模态)
# issue 评论与 PR 评论事件配置一致,可按需配置
pull_request.comment@npc:
default:
docker:
image: cnbcool/default-npc:latest
stages:
- name: npc go
type: npc:go
options:
supportImage: true # 启用图片输入(多模态)模型能力参数的默认值
model、maxTurns、 contextWindow、maxTokens、 thinkingLevel、supportImage 这几个参数都与所选模型相关:不同模型的能力(上下文窗口、最大输出、推理深度、图片输入)并不通用, 因此它们的默认值并不是固定不变的。
无论配置哪个参数,取值都遵循同一条优先级规则:
- 显式指定 时,以你传入的值为准;
- 未指定 时,取决于是否指定了
model:- 未指定
model(走平台默认模型)——沿用平台 CodeBuddy NPC 为默认模型配置的对应取值; - 指定了自定义
model——不再沿用默认模型的配置,回落到下面的内置默认值。
- 未指定
- maxTurns:
500 - contextWindow:
1m(1000000) - maxTokens:
48k(48000) - thinkingLevel:
medium - supportImage:
false(关闭)
未指定
model时各参数沿用的默认模型配置值,以各参数小节说明为准。
环境变量
npc:go 会读取当前流水线的全部环境变量,包括平台内置变量、流水线 / Stage / Job 各层的 env 与 imports,以及上游 Job 的 exports。
超时
所在 Job 声明的 timeout 作用于 Agent 的每一次工具执行(如 bash 命令): 单次工具执行超过该时长、或连续无输出达到该时长,会被强制中断并以执行失败返回给 Agent; 未声明时取默认值(无输出超时 10 分钟,单次最长 2 小时)。
Agent 会话本身不设整体超时,整体时长受流水线超时(20 小时)约束。
输出结果
{
// NPC 最后一条 assistant 消息的文本内容
"result": "..."
}配置样例
1. NPC 事件流水线:在 issue.comment@npc 事件中调用 npc:go, 镜像需包含 NPC 运行时需要的 CLI 工具和 Skills(镜像构建见下方第 2 步):
$:
issue.comment@npc:
- docker:
# 指定镜像,内含 NPC 运行时需要的 CLI 工具和 Skills
image: ${CNB_DOCKER_REGISTRY}/${CNB_NPC_SLUG_LOWERCASE}:latest
stages:
- name: npc go
type: npc:go2. 构建并推送 NPC 镜像:将镜像推送到制品库后,供上方 NPC 事件流水线使用:
main:
push:
- services:
- docker
stages:
- name: Docker build
script: docker build -t ${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}:latest .
- name: Docker push
script: docker push ${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}:latest在 Dockerfile 中,需安装 NPC 运行时所需的 Skills 和 CLI 工具。 例如,下面的示例安装了 cnb-skill 和 cnb-cli 工具。
FROM node:22-bookworm-slim
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates git git-lfs curl jq ripgrep \
&& rm -rf /var/lib/apt/lists/* \
&& git lfs install \
&& npm install -g @cnbcool/cnb-cli skills \
&& npx skills add https://cnb.cool/cnb/skills/cnb-skill.git -g -ySkills 支持自动加载以下目录: ~/.agents/skills、~/.codebuddy/skills 以及对应的项目目录:.agents/skills、.codebuddy/skills。
项目级 Skills 优先级高于用户级,同名 Skill 项目级会覆盖用户级。
NPC 角色的 prompt 定义在 .cnb/settings.yml 文件中,请查阅 自定义 NPC。