logo
59
171
WeChat Login

文档咨询:npc接入外部系统#3761

Open
created 12 hours ago
Edit

描述一下体验不好的点

在我远古的记忆当中,npc只能与外界通过issues交互,且观测到npc的记忆窗可能只有标题,内容和被艾特的那一条评论。

今天看到“外部系统接入npc”,因此我想要知道npc:go的行为是什么?npc与issue的接口是啥样子的?api trigger 事件和 comment事件似乎是两个不同的触发方式?那么api trigger 是不是实现了webhook功能?

所以,我还想要知道,npc是类似 “duck typing”吗?只要是响应事件(无论是回复评论还是响应api调用)并做出回应,那么他就是一个NPC?

npc:go 和 vscode:go 有啥类似的吗?记得有个单/双容器模式的对比? npc:go 能不能看成是双容器?

那么api trigger 是不是实现了webhook功能?

@samsong(AcidBunny) 可以这么理解

只要是响应事件(无论是回复评论还是响应api调用)并做出回应,那么他就是一个NPC?

@samsong(AcidBunny) 可以这么理解的,npc:go 也支持传入自己的提示词,来执行操作的(在issue场景也是如此)

npc:go 和 vscode:go 有啥类似的吗?记得有个单/双容器模式的对比? npc:go 能不能看成是双容器?

@samsong(AcidBunny) 可以,npc:go 是运行在容器外的,即他是操作你的容器,你的容器是他的手,他是外挂在容器外的大脑。

Codex

NPC
referenced ISSUE
Developer

@npc/codex(Codex) 你怎么看

Codex

NPC
1

Codex

NPC

@alibaba(宋冬冬🦕) 你好!关于 Issue #3761 的问题,我查阅了 CNB 官方文档后,分享下我的看法:


1. NPC 与 Issue 的接口是什么样子的?

NPC 与 Issue 的交互接口有两种:

  • 评论触发:在 Issue 或 PR 中 @NPC角色名 提及 NPC,触发 issue.comment@npcpull_request.comment@npc 事件,NPC 在对应流水线沙箱中运行后自动回复评论。
  • API 触发:外部系统通过 OPENAPI 调用 POST /{repo}/-/build/start,以 api_trigger_ 开头的事件名触发流水线,可自定义 rolesystemPromptuserPrompt 等参数。

你说的没错——评论事件和 API trigger 确实是两种不同的触发方式,它们的执行入口不同,但底层都是启动流水线作为沙箱环境,执行 npc:go 来完成任务。

2. API trigger 是不是实现了 Webhook 功能?

leun 已经确认了这一点,我补充一下:API trigger 本质上是 反向 Webhook——传统 Webhook 是「事件发生时推送通知给外部」,而 API trigger 是「外部系统主动调用 CNB API 来触发 NPC 执行任务」。它实现了类似 Webhook 的自动化能力,但方向是反的。外部系统可以在任意时机调用 API,让 NPC 执行任务并通过 Skills 回调外部系统返回结果。

3. NPC 是不是 Duck Typing?

可以这么类比。NPC 的核心特征就是响应事件并做出回应——无论是评论回复还是 API 调用,只要能接收输入、执行任务、返回结果,那就是 NPC。这确实很像 Duck Typing:如果一个东西能像 NPC 一样响应事件,那它就是 NPC。

不过有一点补充:NPC 在 CNB 中是有身份标识的——每个 NPC 角色在 .cnb/settings.yml 中定义了名字、风格、prompt,评论回复会以 NPC 角色名作为提交者。所以它不完全是匿名的 Duck Typing,而是有身份的响应式角色

4. npc:go 和 vscode:go 的关系——能不能看成双容器?

leun 的比喻很精准:「npc:go 运行在容器外,操作你的容器,你的容器是它的手,它是外挂在容器外的大脑。」这确实和双容器模式类似,但有个关键区别:

双容器模式npc:go
架构开发容器 + code-server 容器,共享 /workspaceNPC 沙箱容器 → 操作目标仓库/容器
交互方式两个容器通过文件系统互通NPC 通过 CLI/API(cnb 命令、Skills)操作外部
目的让 code-server 能访问未安装 IDE 的开发环境让 AI 大脑能操作代码仓库和 Issue/PR
运行时机开发环境启动时持续运行事件触发后按需执行,任务完成即回收

所以 npc:go 更准确地说是**「大脑+手」的协作模式**——NPC 是大脑(决策和生成),它操作的容器环境是手(执行和落地),两者通过 CNB 的流水线基础设施连接。这比双容器模式的「并列协作」更像是「主从协作」。


总结:你对 NPC 的理解方向是对的。NPC 本质是一个响应事件的自动化角色,API trigger 提供了类似 Webhook 的外部接入能力,npc:go 可以类比为双容器中的「大脑」角色,但它的交互模式更偏向主从协作而非并列互通。

参考文档:NPC 事件单/双容器模式

难得的技术讨论帖

难得的技术讨论帖

@youkun(哪嘟通临时工 ) 666

Assignee
None yet
Label
仅讨论
Priority
None yet
Time period
-
Property
Add custom properties to record and label key information
Participant