TwKit
正在载入
TwKit

AI 说“做完了”,后台其实还在跑?Qwen Code 官方文档:把它接进钉钉前,先选对 outputMode,再把 privatePolicy 从 ope… · @swordBluesy · TwKit

@swordBluesy

AI 说“做完了”,后台其实还在跑?Qwen Code 官方文档:把它接进钉钉前,先选对 outputMode,再把 privatePolicy 从 open 改掉 这是通义千问 Qwen Code 官方文档“Channels(渠道)”里的 DingTalk(钉钉)页面和 Channels 总览页,标题直译是《DingTalk》。先把结论放在前面,因为它反常识: 官方的钉钉配置示例里写的是 privatePolicy: "open",而总览页对 open 的解释是“任何人都能给它发私聊”。也就是说,你把一个能在你电脑上干活的 AI 接进钉钉,照抄示例,等于对所有能搜到这个机器人的人开放。官方同一页还给了 allowlist(只允许名单里的人)等更紧的选项。 先说清词。 渠道(Channel),是 Qwen Code 里“从别的软件和它说话”的通道,比如钉钉、Telegram、微信。你在手机上发一条消息,电脑上的 Qwen Code 就替你干活,再把结果发回来。 Stream 模式(Stream Mode),是钉钉机器人的一种连接方式。官方说它让机器人主动向钉钉服务器建一条 WebSocket(长连接),所以不需要公网网址,也不需要服务器,是最省事的部署方式。 AppKey 和 AppSecret,是钉钉应用的“账号和密码”。官方把它们也叫 Client ID 和 Client Secret。 一个真实例子(官方写的):启动后在钉钉里给机器人发一条消息,你会先看到一个 眼睛表情反应,表示它在处理,随后收到回复。 先把话说全: 前提有两个:你有一个钉钉组织账号,还有一个带 AppKey 和 AppSecret 的钉钉机器人应用。 官方说钉钉是目前唯一接入 outputMode 这个输出策略的适配器。 交互卡片(interactiveCards)要你自己在配置里加才会开;不写这个对象就是关闭。 一、第一步:在钉钉开发者平台建机器人 官方给了四个动作。打开钉钉开发者平台(DingTalk Developer Portal)。新建一个应用,或用已有的。在应用里启用机器人(Robot)能力。在机器人设置里启用 Stream 模式(界面上叫“机器人协议,Stream 模式”)。最后在应用凭证页记下 AppKey(Client ID)和 AppSecret(Client Secret)。 二、第二步:把凭证放进环境变量 终端输入两行:export DINGTALK_CLIENT_ID=你的AppKey,export DINGTALK_CLIENT_SECRET=你的AppSecret。官方也允许写在 settings.json 的 env 段里,但那是明文,自己权衡。 三、第三步:在 ~/.qwen/settings.json 里加渠道 官方示例的结构是:最外层 channels,里面起一个名字,比如 my-dingtalk,下面写这些字段。type 填 dingtalk。clientId 写 $DINGTALK_CLIENT_ID,clientSecret 写 $DINGTALK_CLIENT_SECRET。useConnectionManager 写 true。privatePolicy 示例写的是 open。sessionScope 写 user。cwd 填你的项目目录。instructions 写一句给助手的设定,示例是“You are a concise coding assistant responding via DingTalk.”。groupPolicy 示例写 open,atSender 写 true,groups 里用 "*" 配 requireMention 为 true,意思是群里要 @ 它才回。 各字段官方的含义(来自总览页):privatePolicy 控制私聊,有四档:disabled 忽略私聊,allowlist 只有 allowedUsers 名单里的人能发,pairing 名单内直接放行、其他人要在本机批准配对,open 任何人都能发,新建的托管渠道默认是 pairing。sessionScope 默认 user,每个用户一个独立会话。groupPolicy 默认 disabled。cwd 是助手干活的目录,默认当前目录。 所以更稳的写法是:把 privatePolicy 改成 allowlist,再加一行 allowedUsers 写你自己的用户 ID(总览页的示例就是这样写的)。 四、第四步:选对 outputMode(输出模式) 这是钉钉页最值得读的一段。官方有三个值,默认 per_turn。 per_turn:主任务一结束,主卡片就用最后一条助手回复收尾。之后每个后台通知,各发一张独立的完成卡片。官方举例:一个主结果加十一个后台通知,会得到一张主结果卡和十一张后续卡。 per_task:等主任务和它关联的后台任务全做完,再发一张最终结果卡。 per_response:每一条完整回复都发一张结果卡。 所以“看起来做完了”可能只是主任务结束,后台的 shell、监控、工作流还在跑。想要一个确定的“全做完”,官方建议选 per_task。注意:只接受这三个值,官方点名 final_only 和 process_and_result 是还没发布的值,不是别名,写了会不被接受。 配置写法:在渠道对象里加 "outputMode": "per_task" 即可,可以和 interactiveCards 并存。 五、第五步:交互卡片(可选) 在渠道里加 interactiveCards 对象,总开关和两类卡片默认都开:statusCard(状态卡)和 questionCard(提问卡,默认等 270,000 毫秒,也就是 270 秒)。把 interactiveCards.enabled 设为 false 就全关;也可以单独关某一类。官方还说 Web Shell 的渠道编辑器不显示这个设置,但你改别的字段时它会原样保留。 六、第六步:启动 只启动钉钉渠道:qwen channel start my-dingtalk。启动所有已配置的渠道:qwen channel start。然后在钉钉里给机器人发消息,看到眼睛表情就成功了。 七、掉线了怎么办 useConnectionManager 默认就是 true,它会监控 Stream 长连接,连接没响应时替换钉钉 SDK 客户端,官方说一般应保持开启。设成 false 就退回 SDK 自己的保活和自动重连。 八、官方还提到的进阶 官方页尾还写了:Qwen Code 以 qwen serve 方式运行时,外部的 Webhook 事件可以触发无人值守的任务,并把最终的 Markdown 结果送到钉钉用户或群里。这一段细节较多,这篇不展开。 原文链接:https://qwenlm.github.io/qwen-code-docs/en/users/features/channels/dingtalk/ 原文:Qwen Code 官方文档(由 S1哥 整理) S1哥观点 这篇文档最狠的地方,是示例和安全建议打架:示例为了省事写了 open,官方总览页又把默认值定成 pairing。照抄的人,拿到的是最宽松的那个。 真正的信号是:AI 助手接进聊天软件,是在你电脑门口开了一扇门。门装得越方便,越要先想清楚谁有钥匙。这扇门通向的是你的项目目录和命令行。 评论区二选一:你接钉钉会选 allowlist 还是 pairing?你的任务是主任务一结束就想看结果,还是要等后台全跑完?这是国产 AI 小白到精通系列,前几篇(Qwen Code 上手、Telegram 通道)在我主页。 今天送:Qwen Code 钉钉机器人配置模板和安全清单,评论区第一条直接拿。

曝光 169 · 评论 4 · 点赞 1 · 书签 0

查看原帖