DevOps2026年8月19日· 约 7 分钟

.NET AI 实战篇:基于 Microsoft Agent Framework 集成钉钉机器⼈与云效项⽬管理

#AI集成#钉钉机器人#项目管理
Twitter 微博

.NET AI 实战篇:基于 Microsoft Agent Framework 集成钉钉机器⼈与云效项⽬管理

前言

完整代码已经开源,搜索 Sky.DingTalk.AI 即可找到,欢迎 Star 和交流。

https://github.com/SkyChenSky/Sky.DingTalk.AI

不知道大家有没有类似的经历:业务群里,业务同事跟 QA、产品围绕一个问题来回沟通,几轮下来结论清晰了——这是个 Bug,要排期修;或者这是个新需求,要立项评估。讨论的热乎劲儿刚过,接下来却是谁都不爱干的一步:有人得把这几屏聊天记录消化掉,打开云效(或者Oncs)、选项目、选类型、把讨论提炼成标题和描述、指派负责人……讨论越充分,搬运越痛苦。

我们团队的日常沟通都在钉钉,项目管理的云效,中间隔着一层「手工搬运」。这活儿机械、重复、还容易漏字段。于是我最初的目标很朴素:讨论定论后,在群里 @机器人 说一句话,它就帮我把工作项建好,顺便把��址发回来。 正好最近 Microsoft Agent Framework(Microsoft.Agents.AI)GA 了,配合 .NET 10 一拍即合,这两天把这个 Demo 拉通了。

但做着做着你会发现,「把口语落成结构化工作项」这个环节一旦打通,它就不只是一个省事的建单工具——它是整条 AI 研发流水线的第一个闸口。工作项是研发过程的结构化锚点,它后面还可以挂一整串 Agent:

  • Bug 建完只是开始:Agent 根据工作项所属项目拉取代码仓库,让 AI 扫描相关模块,把「疑似出问题的文件、最近的变更记录」贴回工作项描述——开发还没打开 IDE,排查线索已经就位;
  • 需求立项即预估:结合历史相似需求做影响面分析,给出改动范围和涉及模块,辅助排期决策;
  • 订单(数据)查找:根据同事给的订单号,通过MCP由AI进行整理

用一张图表达这个愿景——本文打通的是第一环,后面的 Agent 都挂在「工作项」这个锚点上:

愿景图:业务群讨论经 AI Agent 落成云效工作项,后续可挂载代码扫描初判、影响面分析等 Agent,最终由人做决策

当信息能够在钉钉、云效、代码库之间自动流动,人就从「搬运工」退回到「决策者」的位置。 这篇文章先把这条流水线的第一环打通:从前期准备、钉钉机器人接入、AI Agent 集成,到云效 API 的封装,最后三者串起来跑通——后面那些宏大叙事,都建立在今天这块地基上。

先看最终效果,在钉钉群里 @机器人:

 微信截图_20260819103039

微信图片_20260819102828

@云效助手 下单页在 iOS 上白屏了,项目是商城,严重的话帮我建个缺陷,给陈珙

机器人回复:

创建成功,工作项地址:https://devops.aliyun.com/projex/project/xxx/bug/xxxx

是不是有点意思?下面开工。

目的与作用

先明确目标,避免自嗨式开发。这个 Agent 要解决的核心问题是:

把群里口语化的反馈,自动落地成云效里结构化的工作项。

拆开来看,它干了三件事:

  1. 听懂人话:群消息是口语化的(「白屏了」「帮我建个缺陷」),AI 负责提取出结构化信息——项目名、类型(Bug/需求/任务)、标题、负责人、描述。
  2. 会干活:AI 不是只会聊天,它通过 Function Calling(工具调用)直接操作云效 API——查项目、查成员、建工作项、查列表。
  3. 有上下文:同一个群是多轮会话。你没说清是哪个项目时它会追问一句,你补一句「商城」,它就能接着上文的语境继续把工作项建好,而不是每次都从头再来。

整体架构非常朴素:

整体架构图:钉钉群经 Stream 长连接接入 .NET 宿主程序,内部含钉钉 Stream 客户端、ChatClientAgent、YunxiaoClient,分别对接 DeepSeek 大模型与云效 OpenAPI

技术选型三件套:

  • Jusoft.DingtalkStream:钉钉官方 Stream 模式的 .NET 社区封装,免去自建 WebSocket 和暴露公网回调地址
  • Microsoft.Agents.AI:微软新出的 Agent 框架,ChatClientAgent + 工具注册,几行代码就有一个能调工具的 Agent
  • Sikiro.YunXiao:自己封装的云效 OpenAPI 客户端类库(独立项目,可复用)

前期准备:AI、钉钉、云效的配置获取

这一章没什么技术含量,但不做后面全卡。三家的「钥匙」都要先拿到手。

2.1 AI 接口(DeepSeek 为例)#

Agent 的大脑需要一个 OpenAI 兼容的 Chat Completions 接口,并且必须支持工具调用(Function Calling),这是整个方案的地基。

以 DeepSeek 为例:

  1. 到开放平台注册并充值,创建一个 API Key(sk- 开头)
  2. 记下三样东西:ApiKeyEndpointhttps://api.deepseek.com)、Model(如 deepseek-chat

智谱、通义、Kimi 等国产模型都提供 OpenAI 兼容接口,换模型只改配置就行,这也是后面用 Microsoft.Extensions.AI.OpenAI 抽象的好处。

2.2 钉钉应用(Stream 模式机器人)#

传统钉钉机器人要走 HTTP 回调,需要有公网地址,内网开发很痛苦。Stream 模式通过 WebSocket 长连接反向连接钉钉服务端,本地就能调试,这也是选 Jusoft.DingtalkStream 的原因。

  1. 钉钉开放平台创建一个企业内部应用
  2. 在「应用能力」里添加「机器人」
  3. 消息接收模式选择 Stream 模式
  4. 拿到应用的 ClientId 和 ClientSecret(应用凭证页面)
  5. 发布应用,在群里把机器人添加进来

image

image

 

image

2.3 云效(阿里云 Yunxiao)#

云效 Projex 的 OpenAPI 有两种认证方式,这里有个坑,后面封装时会展开:

方案凭证网关特点
方案一 AK AccessKeyId / Secret devops.cn-hangzhou.aliyuncs.com 阿里云 V2.0 签名,老版 ROA 接口居多
方案二 PAT 个人访问令牌 openapi-rdc.aliyuncs.com x-yunxiao-token 请求头,无需签名,oapi/v1 新接口

个人推荐 PAT 方案:在云效「个人设置 → 个人访问令牌」页面直接生成,不用折腾阿里云主账号 AK,而且新接口(工作项类型、字段定义、极简创建)都在 oapi/v1 下。

还需要记下 OrganizationId(组织 ID):打开云效任意页面,URL 里 organizations/{这串就是}/ 的那段。

image

image

 

 

2.4 配置外置#

三家的凭证全部放进 appsettings.json,不进源码:

{
  "DingTalk": {
    "ClientId": "dingxxxxxxxx",
    "ClientSecret": "xxxxxxxx"
  },
  "Ai": {
    "ApiKey": "sk-xxxxxxxx",
    "Endpoint": "https://api.deepseek.com",
    "Model": "deepseek-chat"
  },
  "Yunxiao": {
    "OrganizationId": "xxxxxxxx",
    "PersonalAccessToken": "pt-xxxxxxxx"
  }
}

原文链接:https://www.cnblogs.com/skychen1218/p/22565475

评论

© 2026 松岛川树