基于 Amazon Bedrock AgentCore 从 .NET 代码生成架构图与自动化文档
- 作者

- 姓名
- Nino
- 职业
- Senior Tech Editor
在大型企业级软件开发中,保持架构文档与实际代码库同步一直是一项极其繁琐且容易失控的技术挑战。特别是在采用大规模 .NET 架构的服务端系统中,随着代码频繁变更与微服务拆分,原本绘制在 Visio 或 Confluence 上的静态架构图很快就会失效,沦为“技术债务”。
为了解决这一痛点,领先的金融经纪与科技企业开始采用基于 AI Agent 的自动化架构文档流水线。通过结合 Amazon Bedrock AgentCore、Amazon Bedrock Knowledge Bases 以及 AWS CodePipeline,开发者能够构建出一套能够在代码提交(Git Commit)时自动解析 C# 代码、生成 C4 组件图与时序图、并将系统架构知识向量化入库的智能代理系统。
本文将深入剖析该 Agent 架构的设计理念、核心代码实现逻辑、架构图生成模式,并分享如何借助 n1n.ai 等大模型 API 聚合平台优化多模型调度与成本控制。
传统架构文档的困境与 Agent 解法
典型的企业级 .NET 解决方案往往包含数十个 .csproj 项目文件、复杂的依赖注入(Dependency Injection)关系、Entity Framework Core 映射以及跨服务的 gRPC/REST 接口。人工梳理这些系统的组件拓扑结构极其耗时。
传统文档管理方式存在三大核心痛点:
- 维护成本高昂:开发人员不得不手动更新 PlantUML 或 Visio 节点。
- 缺少语义化聚合:传统的静态 AST(抽象语法树)生成工具往往只能输出密密麻麻的类图,缺乏业务与架构层面的逻辑抽象。
- 信息孤岛严重:文档与实际代码解耦,开发者在日常开发中难以迅速查询“某个 API 依赖了哪些底层 DB 架构”。
引入基于 Amazon Bedrock AgentCore 的 Agent 方案后,系统不再仅仅是机械地扫描语法,而是通过 Anthropic Claude 3.5 Sonnet 等大语言模型担当“虚拟架构师”的角色:Agent 能够准确识别控制器(Controllers)、中间件(Middleware)、服务层(Services)及数据库上下文(DbContext),将这些代码结构转化为标准且易读的 Mermaid 或 PlantUML 图表,同时将上下文存入向量数据库,提供自然语言检索支持。
基于 AgentCore 的自动化文档流水线整体架构
该方案采用事件驱动架构,在代码合并至主干时触发 Agent 流水线。其总体工作流如下:
[代码提交 Git] -> [AWS CodePipeline 触发]
|
v
[Roslyn / AST 结构元数据提取器]
|
v
[Amazon Bedrock AgentCore 核心代理]
/ \\
v v
[架构图生成引擎 (Mermaid)] [Amazon Bedrock 向量知识库]
| |
v v
[S3 / 开发者文档门户] [OpenSearch Serverless 检索]
核心组件职责拆解
- 构建与触发器 (AWS CodePipeline / GitHub Actions):监测 .NET 项目的代码变更,拉取最新 C# 代码文件并启动 Agent 工作流。
- AST 元数据提取模块:基于 .NET Compiler Platform (Roslyn) 或轻量级正则表达式提取 API 路由、依赖注入注册关系(
AddTransient,AddScoped,AddSingleton)与实体映射。 - Amazon Bedrock AgentCore 调度中心:执行多步推理任务,将提取到的元数据发送给 LLM,指导其输出具有层级结构的 C4 架构模型 JSON 描述。
- 图表合成引擎:将 Agent 生成的层级描述转换成 Mermaid.js 或 PlantUML 代码段。
- 知识库索引 (Amazon Bedrock Knowledge Bases):将生成的架构 Markdown 与源码上下文同步注入 OpenSearch Serverless 向量库,方便团队进行 RAG(检索增强生成)问答。
关键代码实现:代码解析与 Mermaid 架构图生成
下面展示一段通过 Python 实现的完整处理逻辑:首先提取 .NET 控制器中的依赖关系,随后通过 LLM API(支持直接调用 Bedrock 或通过 n1n.ai 统一接口接入)自动生成 Mermaid 架构图。
步骤 1:.NET C# 代码元数据提取
在调用大模型前,先通过脚本解析 .cs 文件,获取类名、注入的依赖项以及 HTTP 路由:
import os
import re
import json
def parse_csharp_controller(file_content: str) -> dict:
# 提取类名
class_match = re.search(r"public\s+class\s+(\w+Controller)\s*:\s*ControllerBase