CNB 自定义 NPC 创建全流程。基于现有 NPC 仓库 fork 改造,接入自有大模型 API(如 GLM-5.1),配置密钥仓库,部署到目标组织。适用于需要创建私有 NPC(代码审查、专属客服等)的场景。触发词:"创建NPC"、"造NPC"、"私有NPC"、"自定义NPC"、"fork NPC"。
CNB 自定义 NPC 创建工作流是一项面向实际任务的技能,主要用于v1.0 · 2026-04-24 · 基于「灵鉴」PR审查NPC实战复盘;参考架构:CNB 官方 NPC 工程师方案二(issue #959);
需有仓库创建、Issue 评论权限;自有大模型 API;API URL + API Key(如智谱 GLM-5.1);NPC 最终归属的组织(如 cnbmm)。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
v1.0 · 2026-04-24 · 基于「灵鉴」PR审查NPC实战复盘 参考架构:CNB 官方 NPC 工程师方案二(issue #959)
需求确认 → Fork参考NPC → 改造配置 → 创建密钥仓库 → 推送代码 → 转移到目标组织 → 关联密钥仓库 → 测试验证 → 上线
| 条件 | 说明 |
|---|---|
| CNB Token | 需有仓库创建、Issue 评论权限 |
| 自有大模型 API | API URL + API Key(如智谱 GLM-5.1) |
| 目标组织 | NPC 最终归属的组织(如 cnbmm) |
| 参考 NPC 仓库 | 可 fork 的已有 NPC 仓库(如 tencent/cloud/cloudbase/community) |
确认清单:
提示词模板:
确认 NPC 创建需求: - 功能定位:[代码审查/技术客服/文档助手/通用] - 大模型:[GLM-5.1/GPT-4/DeepSeek/其他] - API 端点:[URL] - NPC 名称:[名称] - 部署组织:[组织名] - 参考NPC:[fork来源仓库]
⚠️ API 不支持 fork 操作(errcode 9),必须用 git clone。
# 克隆参考 NPC 仓库
git clone https://{username}:{CNB_TOKEN}@cnb.cool/{参考NPC仓库路径}.git /tmp/{npc-name}
cd /tmp/{npc-name}
git checkout -b main # 确保分支名是 main
创建新的 NPC 仓库(API):
curl -s -X POST
-H "Accept: application/vnd.cnb.api+json"
-H "Authorization: Bearer $CNB_TOKEN"
-H "Content-Type: application/json"
"${CNB_API_ENDPOINT}/{username}/-/repos"
-d '{
"name": "{npc-name}",
"description": "{NPC描述}",
"visibility": "private"
}'
推送到新仓库:
cd /tmp/{npc-name}
git remote remove origin
git remote add origin https://{username}:{CNB_TOKEN}@cnb.cool/{username}/{npc-name}.git
git push -u origin main
.cnb/settings.ymlnpc:
roles:
- name: {NPC名称}
slogan: "{一句话口号}"
prompt: |
你是{角色定位},负责{具体职责}。
你的任务:
1. {任务1}
2. {任务2}
3. {任务3}
回复要求:
- 使用 Markdown 格式回复
- 语气专业、友好
- 控制在 {字数} 字以内
avatar:
src: ".cnb/avatar.svg"
Prompt 设计原则:
.codebuddy/skills/my-llm/SKILL.md这是核心!NPC Agent 框架会按 Skill 指令调自定义大模型。
---
name: my-llm
description: 调用自有大模型 API 生成回复
allowed-tools: Bash
---
# 调用自有大模型
当需要回复用户时,执行以下步骤:
## 步骤 1:获取相关信息(如 PR diff)
```bash
curl -s -H "Accept: application/vnd.cnb.api+json"
-H "Authorization: Bearer $CNB_TOKEN"
"$CNB_API_ENDPOINT/$CNB_REPO_SLUG/-/pulls/$CNB_EVENT_ISSUE_NUMBER"
```
## 步骤 2:拼接 Prompt
将获取的信息整合为 system prompt + user prompt。
## 步骤 3:调用大模型 API
```bash
curl -s ${YOUR_LLM_API_URL}/chat/completions
-H "Authorization: Bearer ${YOUR_LLM_API_KEY}"
-H "Content-Type: application/json"
-d '{
"model": "glm-5.1",
"messages": [
{"role": "system", "content": "你是{角色},{能力描述}"},
{"role": "user", "content": "{用户问题/PR信息}"}
],
"temperature": 0.3,
"max_tokens": 4096
}' | jq -r '.choices[0].message.content'
```
## 步骤 4:发表评论
```bash
cnb issues comment --body "回复内容"
```
Skill 设计要点:
allowed-tools: Bash — 必须声明,否则无法执行 curl${YOUR_LLM_API_KEY}),不硬编码$CNB_TOKEN、$CNB_REPO_SLUG、$CNB_EVENT_ISSUE_NUMBER.cnb.yml# NPC 触发配置(使用 npc:go 模式)
.npc: &npc
- env:
YOUR_LLM_API_URL: ((your-llm-api-url))
YOUR_LLM_API_KEY: ((your-llm-api-key))
YOUR_MODEL_NAME: ((your-model-name))
stages:
- name: npc go
type: npc:go
# 事件绑定
$:
pull_request.comment@npc: *npc
issue.comment@npc: *npc
关键:
npc:go,让平台 NPC Agent 框架调度,它会读取 Skill 指令执行((变量名)) 引用密钥仓库的文件pull_request.comment@npc — PR 评论触发issue.comment@npc — Issue 评论触发pull_request.open — PR 创建触发issue.open — Issue 创建触发.cnb/avatar.svgSVG 格式,建议 120×120,辨识度要高。
放到 .cnb/avatar.svg,settings.yml 中引用 src: ".cnb/avatar.svg"。
密钥仓库是独立仓库,文件名=变量名,文件内容=值。
# 创建密钥仓库
curl -s -X POST
-H "Accept: application/vnd.cnb.api+json"
-H "Authorization: Bearer $CNB_TOKEN"
-H "Content-Type: application/json"
"${CNB_API_ENDPOINT}/{username}/-/repos"
-d '{
"name": "{npc-name}-secrets",
"description": "{NPC名称} 密钥仓库",
"visibility": "private"
}'
# 创建密钥文件
mkdir -p /tmp/{npc-name}-secrets && cd /tmp/{npc-name}-secrets
git init && git checkout -b main
echo -n "{API_URL}" > your-llm-api-url
echo -n "{API_KEY}" > your-llm-api-key
echo -n "{MODEL_NAME}" > your-model-name
git add -A && git commit -m "init: NPC 密钥配置"
git push -u origin main
cd /tmp/{npc-name}
# 清理不需要的原仓库文件(如企微通知、stale bot 等)
rm -rf {不需要的目录}
git add -A
git commit -m "feat: {NPC名称} - 基于参考NPC改造,接入{模型名}"
git push
⚠️ API 不支持转移(errcode 9 管理规则限制),必须网页操作。
提供链接给用户:
https://cnb.cool/{username}/{npc-name}/-/settings → 转移到目标组织https://cnb.cool/{username}/{npc-name}-secrets/-/settings → 转移到目标组织转移后路径变为:{目标组织}/{npc-name} 和 {目标组织}/{npc-name}-secrets
⚠️ 只能网页操作,API 无此接口。
在 NPC 仓库设置页面 → 找到密钥仓库配置 → 填入 {目标组织}/{npc-name}-secrets
# 在 NPC 仓库创建测试 Issue
curl -s -X POST
-H "Accept: application/vnd.cnb.api+json"
-H "Authorization: Bearer $CNB_TOKEN"
-H "Content-Type: application/json"
"${CNB_API_ENDPOINT}/{org}/{npc-name}/-/issues"
-d '{
"title": "测试 NPC 触发",
"body": "@{org}/{npc-name}({NPC名称}) 测试一下"
}'
# @ NPC 触发
curl -s -X POST
-H "Accept: application/vnd.cnb.api+json"
-H "Authorization: Bearer $CNB_TOKEN"
-H "Content-Type: application/json"
"${CNB_API_ENDPOINT}/{org}/{npc-name}/-/issues/{number}/comments"
-d '{
"body": "@{org}/{npc-name}({NPC名称}) 请回复一下"
}'
等待 15-20 秒后检查:
# 查评论
curl -s -H "Accept: application/vnd.cnb.api+json"
-H "Authorization: Bearer $CNB_TOKEN"
"${CNB_API_ENDPOINT}/{org}/{npc-name}/-/issues/{number}/comments"
# 查流水线
curl -s -H "Accept: application/vnd.cnb.api+json"
-H "Authorization: Bearer $CNB_TOKEN"
"${CNB_API_ENDPOINT}/{org}/{npc-name}/-/build/logs"
成功标志: NPC 评论出现(is_npc: true)
在需要使用该 NPC 的仓库中,编辑 .cnb/settings.yml:
npc:
imports:
list:
- repo: {org}/{npc-name}
推送后,该仓库的 PR/Issue 中就可以 @{org}/{npc-name}({NPC名称}) 触发了。
| # | 坑 | 解法 |
|---|---|---|
| 1 | API 不支持 fork | 用 git clone + git push 到新仓库 |
| 2 | API 不支持转移仓库(errcode 9) | 必须网页操作 |
| 3 | 密钥仓库是独立仓库,不是页面表单 | 每个密钥=一个文件(文件名=变量名,内容=值) |
| 4 | 密钥仓库关联只能网页操作 | 提供链接给用户手动操作 |
| 5 | 用自建 Docker + 脚本绕过 npc:go | ❌ 错误思路。应该用 npc:go + Skill |
| 6 | API Key 直接写在 .cnb.yml | ❌ 安全问题。用 ((变量名)) 引用密钥仓库 |
| 7 | 智谱 API URL 要用 coding 专用端点 | https://open.bigmodel.cn/api/coding/paas/v4(非通用 /api/paas/v4) |
| 8 | 流水线 success 但 NPC 不回复 | 检查密钥仓库是否正确关联 |
| 9 | 私有仓库 Token 无法访问 | 提示 errcode 7 "secret repo does not support token" |
Skill 步骤:获取 PR diff → 拼接审查 prompt → 调大模型 → 发审查评论
Skill 步骤:知识库检索(如有)→ 拼接回答 prompt → 调大模型 → 发回复
Skill 步骤:获取文档内容 → 分析质量 → 调大模型生成建议 → 发评论
基于 {参考NPC仓库} fork 创建私有 NPC,名称「{名称}」,接入 {模型名},部署到 {组织}
在 {org}/{npc-name} 创建 Issue 并 @NPC 测试触发,15秒后查评论和流水线状态
在 {目标仓库} 的 .cnb/settings.yml 中添加 npc.imports 引用 {org}/{npc-name}
| 工作流 | 用途 |
|---|---|
| cnb-npc-create(本 Skill) | 创建自定义 NPC(造 NPC) |
| cnb-npc-dispatch | 给已有 NPC 派发任务(用 NPC) |
两者互补:先用本 Skill 造 NPC,再用 dispatch Skill 派活。
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.3万人学习
共49课时 | 82.7万人学习
最新文章