AutoGen .NET dev-team 示例入门指南:从零跑通事件驱动的 GitHub AI 开发团队(gh-flow)
【免费下载链接】autogenA programming framework for agentic AI项目地址: https://gitcode.com/GitHub_Trending/au/autogen
AutoGen 仓库的dev-team示例(又名gh-flow)用事件驱动的多 Agent 系统模拟一支完整的 AI 开发团队:Product Manager 生成 README、Developer Lead 拆解开发计划、Developer 产出代码,全部通过 GitHub Issue 与人类协作完成。本文基于仓库中的入门文档 github-flow-getting-started.md 展开,结合 GithubOptions.cs、AzureOptions.cs、seed-memory/Program.cs 等源码,完整讲清 GitHub App 注册、本地调试、Azure 部署与向量库初始化的每一步操作与底层机制,读完即可把这套 Agent 团队接入自己的仓库。
一、这套方案是如何工作的
先建立整体图景,后面的配置才有意义。整个流程由 GitHub 事件触发(详见 README.md):
- 用户在 GitHub 仓库创建一个 Issue,用自然语言描述要做什么;
- ProductManagerAgent 响应,产出 README 草案,用户通过 Issue 评论迭代反馈,批准后关闭 Issue,README 被提交进 PR;
- DeveloperLeadAgent 生成拆解后的开发计划,同样可迭代,批准后按计划为每个子任务创建新的 Dev Issue;
- DeveloperAgent 产出代码,批准后提交 PR;代码同时会存入 Blob 存储并在沙箱中运行验证。
事件流转由HubberAgent 协调(创建 Issue、分支、PR),AzureGenie负责存储与沙箱调度,Sandbox轮询运行结果。这些 Agent 的注册发生在后端入口 Program.cs:
builder.AddGrpcAgentWorker(builder.Configuration["AGENT_HOST"]!) .AddAgentWorker() .AddAgent<AzureGenie>(nameof(AzureGenie)) .AddAgent<Hubber>(nameof(Hubber)) .AddAgent<Dev>(nameof(Dev)) .AddAgent<ProductManager>(nameof(ProductManager)) .AddAgent<DeveloperLead>(nameof(DeveloperLead));可以看到整个系统构建在 AutoGen 的Microsoft.AutoGen.Core与Microsoft.AutoGen.Core.Grpc之上(见 DevTeam.Backend.csproj 中的 ProjectReference),文档中提到的“依赖 Orleans 的 Agents 实现”即来源于此——Agent 作为 Grpc Agent Worker 运行,因此还带有 Orleans Dashboard 可观测能力。
二、前置条件
在动手之前,你需要准备四样东西:
- 一个可用的 gpt3.5-turbo 或 gpt4 模型访问权限(推荐 gpt4);
- 一个按本文配置注册并安装好的GitHub App;
- 一套通过 azd 供应好的Azure 资源(沙箱、文件存储等);
- 一组用于路由的Issue 标签(Labels)。
注册并配置 GitHub App
按文档要求注册一个 GitHub App,关键选项如下:
- 名称与描述任意填写;
- Homepage URL 可填任意值(例如仓库地址);
- Webhook URL 先填一个占位值,本地跑起来配好隧道后再回填;
- 设置一个 Webhook Secret,后面要填入
appsettings.json的WebhookSecret属性; - Repository 权限设置为:
- Contents — 读写
- Issues — 读写
- Metadata — 只读
- Pull requests — 读写
- 订阅事件:Issues与Issue comment;
- 允许任意用户或组织安装该 App。
App 创建完成后,立即生成一枚 Private Key——它是后端从应用身份调用 GitHub API 的凭证。
后端如何用这些配置:Program.cs 中
GithubAuthService用GithubOptions构造 GitHub 客户端;Program.cs 中endpoints.MapGitHubWebhooks(secret: ghOptions.WebhookSecret)表明WebhookSecret会被用于校验每个入站 Webhook 请求的签名,因此这个值必须与 App 后台配置完全一致。
创建路由标签(Labels)
系统靠 GitHub Issue 上的Label来决定“该和哪个技能/人格说话”。默认的技能与人格对应以下四个标签:
PM.ReadmeDo.ItDevLead.PlanDeveloper.Implement
这些标签不会自动出现在你的仓库中,需要手动添加。之后每扩展一个自定义技能,别忘了同步添加对应标签。
三、本地运行
使用 Codespaces
仓库为本地调试预置了 Codespaces 环境(个人账户有免费额度)。在 GitHub 页面上为你的仓库创建一个 Codespace:
Codespace 中已装好 azd 等工具,并且本地版Qdrant也已就绪(这一点在向量库初始化章节会用到)。
配置 appsettings.json
文档指出示例文件夹下提供两个模板:appsettings.azure.template.json(部署到 Azure 用)与appsettings.local.template.json(本地运行用)。按你的运行环境选用其一,重命名为appsettings.json并填写其中的值。当前仓库中的 appsettings.Development.json 只包含日志级别配置,业务配置正是通过下面两个配置节绑定进类型化 Options 的。
GitHubOptions 配置项
对应源码 GithubOptions.cs,四个属性均带[Required]校验(ValidateOnStart()会在启动时强制检查,见 Program.cs):
| 配置项 | 类型 | 获取方式 |
|---|---|---|
AppKey(PrivateKey) | string | 注册 App 时生成的密钥。若当时没保存,去 App 设置页“Private keys”处点Generate a new private key,会下载一个.pem文件;把-----BEGIN RSA PRIVATE KEY-----与-----END RSA PRIVATE KEY-----之间的全部内容在一行内粘贴进来 |
AppId | int | App 设置页顶部的 App ID |
InstallationId | long | 打开该 App 的某个安装页,URL 形如https://github.com/settings/installations/<installation-id>,末尾的数字即是 |
WebhookSecret | string | 注册 App 时在 Webhooks 设置的 Secret 值 |
AzureOptions 配置项
对应源码 AzureOptions.cs,同样全部必填:
| 配置项 | 说明 |
|---|---|
SubscriptionId | 要使用的 Azure 订阅 ID |
Location | 资源所在区域 |
ContainerInstancesResourceGroup | 沙箱容器实例(Container Instances)部署所在的资源组 |
FilesAccountName | Azure Storage 账户名 |
FilesShareName | 文件共享(File Share)名称 |
FilesAccountKey | 存储账户密钥 |
SandboxImage | 沙箱使用的容器镜像 |
启动应用并暴露 Webhook
在 VS Code 的资源管理器中找到解决方案,对后端项目(文档中称gh-flow项目,对应仓库里的 DevTeam.Backend)右键选择Debug → Start new instance即可调试启动。
启动后,必须把本地应用暴露给 GitHub App 的 Webhook。文档以 DevTunnels 为例(ngrok 等同类工具同样可行)。下面两条命令分别用于一次性创建持久隧道和转发端口:
TUNNEL_NAME=_name_your_tunnel_here_ devtunnel user login devtunnel create -a $TUNNEL_NAME devtunnel port create -p 5244 $TUNNEL_NAME隧道建好后,日常只需执行转发命令:
devtunnel host $TUNNEL_NAME复制得到的本地地址(形如https://your_tunnel_name.euw.devtunnels.ms),在末尾追加/api/github/webhooks,用它更新 GitHub App 的 Webhook URL。这就是后端MapGitHubWebhooks监听的入站端点,至此本地链路已经打通。
顺带一提:Orleans Dashboard
由于 Agent 运行时基于 Orleans,隧道地址下还提供一块 Dashboard:https://your_tunnel_name.euw.devtunnels.ms/dashboard,上面有运行中 Agent 的有用指标与统计信息,调试事件流转时非常实用。
四、用 azd 部署 Azure 侧资源
示例使用 azd(Azure Developer CLI,Codespace 中已预装)管理 Azure 资源。整体流程:
- 登录 Azure:
azd auth login- 创建新环境并供应资源:
ENVIRONMENT=_name_of_your_env azd env new $ENVIRONMENT azd provision -e $ENVIRONMENT- 供应完成后,查看环境输出值:
azd env get-values -e devazd 的具体行为由 azure.yaml 定义:应用名为ai-dev-team,唯一的服务gh-flow指向 DevTeam.AppHost(.NET Aspire 主机工程),宿主类型为containerapp(Azure Container Apps)。这也解释了前面文档中“在 Azure 上运行时 Qdrant 被部署到 ACA”的说法。
五、把 WAF 文档载入向量库(seed-memory)
这是开工前最后一步,也是文档反复强调的收尾动作。
- 本地运行时,Qdrant 已经在 Codespace 中就绪;
- 部署到 Azure 时,Qdrant 随 ACA 一起部署。
加载器是samples目录下的 seed-memory 项目。操作步骤:把config文件夹中的 appsettings.template.json 复制/重命名为appsettings.json,填入OpenAI 详情与Qdrant 端点,然后执行:
dotnet run模板文件的字段(与 KernelSettings.cs 的JsonPropertyName一一对应)如下:
{ "serviceType": "AzureOpenAI", "serviceId": "", "deploymentOrModelId": "", "embeddingDeploymentOrModelId": "", "endpoint": "", "apiKey": "", "qdrantEndpoint": "" }从源码看(seed-memory/Program.cs),它用 Semantic Kernel 的MemoryBuilder构建了一个1536 维的 Qdrant 内存存储,并绑定 Azure OpenAI 嵌入模型;随后逐页解析azure-well-architected.pdf,把每页文本以新 GUID 为 ID 写入名为waf的集合(collection),作为 Agent 团队可检索的“架构知识库”。所以这一步的本质是:把 Azure Well-Architected 框架文档向量化入库,供后续 Agent 做 RAG 检索。
配置加载逻辑同样值得注意:KernelSettings.LoadSettings() 优先读取config/appsettings.json,找不到时回退到 user secrets,两者都缺才会抛出带提示的异常。
六、WIP:使用 user-secrets 的本地配置方式
文档末尾还保留了一段标注为 WIP(进行中)的本地配置方式,通过dotnet user-secrets写入密钥,注意这里的键前缀是OpenAI:与Github:(顶层键,而非AzureOptions/GitHubOptions节):
dotnet user-secrets set "OpenAI:Key" "your_key" dotnet user-secrets set "OpenAI:Endpoint" "https://your_endpoint.openai.azure.com/" dotnet user-secrets set "Github:AppId" "gh_app_id" dotnet user-secrets set "Github:InstallationId" "gh_inst_id" dotnet user-secrets set "Github:WebhookSecret" "webhook_secret" dotnet user-secrets set "Github:AppKey" "gh_app_key"官方推荐的完整路径仍是第三节的appsettings.json模板方式,user-secrets 方式仅作为过渡手段。
七、快速自检清单
按顺序核对以下要点,即可确认整条链路就绪:
- GitHub App 已注册,权限、事件(Issues / Issue comment)与 Webhook Secret 配置完毕,Private Key 已生成;
- 仓库中已添加
PM.Readme、Do.It、DevLead.Plan、Developer.Implement四个标签; appsettings.json中GithubOptions与AzureOptions两组必填值全部填好(缺一会在启动校验时失败);- 隧道已指向
https://<tunnel>/api/github/webhooks,并回填到 GitHub App 的 Webhook URL; azd provision供应的 Azure 资源输出值已核对(azd env get-values -e <env>);seed-memory已成功把 WAF 文档写入 Qdrant 的waf集合;- 打开隧道地址下的
/dashboard,能看到 Orleans 中注册的 Agent 指标。
满足以上条件后,就可以在仓库中创建带标签的 Issue,观察 ProductManager → DeveloperLead → Developer 的整条事件链了。
【免费下载链接】autogenA programming framework for agentic AI项目地址: https://gitcode.com/GitHub_Trending/au/autogen
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考