【Agent】基于 Microsoft Agent Framework 的智能代码注释工具:让 AI 为你的代码“说话“
·
基于 Microsoft Agent Framework 的智能代码注释工具:让 AI 为你的代码"说话"
项目地址:code_comment_agent
技术栈:Python + Microsoft Agent Framework RC6 + Azure OpenAI
适用场景:代码文档补全、 legacy 代码维护、团队代码规范统一
一、背景与痛点
作为开发者,我们经常遇到这样的困境:
- Legacy 代码"裸奔":接手老项目时,发现关键函数没有任何注释,理解业务逻辑像"破译密码"
- 注释质量参差:团队成员注释风格不一,有的过于简略,有的冗长无效
- 时间成本高:手动为每个函数添加规范注释,耗时且易遗漏
有没有一种方式,能让 AI 自动理解代码意图,并生成专业、规范的注释?
答案是:Code Comment Agent —— 一个基于 Microsoft Agent Framework RC6 构建的智能代码注释工具。
二、核心功能一览
| 功能 | 说明 |
|---|---|
| 📝 自动添加注释 | 为缺少注释的代码自动生成清晰的说明 |
| 🔍 结构分析 | 智能识别函数、类、模块等代码结构 |
| 🌐 多语言支持 | Python、JS/TS、Java、Go、Rust、C/C++ 等 15+ 语言 |
| 📊 注释统计 | 分析代码注释比例,量化可读性状况 |
| 💾 批量处理 | 支持目录级批量处理,一键搞定整个项目 |
| 🔧 灵活配置 | 支持 OpenAI API 和本地模型(Ollama/vLLM) |
三、技术架构解析
3.1 Agent Framework 核心概念
Microsoft Agent Framework RC6 提供了一套简洁的 Agent 构建范式:
Agent = Instructions + Tools + Client
- Instructions:定义 Agent 的角色和行为准则
- Tools:赋予 Agent 调用外部工具的能力
- Client:连接 LLM(OpenAI/Azure/本地模型)
本项目正是基于这一架构,构建了一个"代码注释专家" Agent。
3.2 工作流程
工作步骤详解:
- 文件读取:读取代码内容,统计行数、注释比例等基础信息
- 结构分析:识别函数、类、接口等代码元素及其位置
- 注释生成:LLM 根据代码语义生成符合语言规范的注释
- 输出保存:带注释的代码保存到
commented_code/目录
四、代码实现详解
4.1 工具函数设计
Agent 需要两个核心工具来完成任务:
(1) 代码文件读取工具
def read_code_file(
file_path: Annotated[str, Field(description="代码文件的完整路径")],
) -> str:
"""读取指定路径的代码文件内容。
Args:
file_path: 代码文件路径
Returns:
文件内容字符串,包含基本信息统计
"""
# 文件存在性检查
if not os.path.exists(file_path):
return f"文件不存在: {file_path}"
# 支持的文件类型验证
supported_exts = [
".py", ".js", ".ts", ".tsx", ".jsx",
".java", ".kt", ".go", ".rs", ".cpp", ".c", ".h",
".cs", ".swift", ".php", ".rb", ".sh", ".sql",
]
# 读取内容并统计
with open(file_path, "r", encoding="utf-8") as f:
content = f.read()
# 计算注释比例
lines = content.split("\n")
comment_lines = sum(1 for line in lines
if any(line.strip().startswith(m)
for m in ["#", "//", "/*", "///"]))
return f"注释比例: {comment_lines / len(lines) * 100:.1f}%\n" + content
设计要点:
- 使用
Annotated+Field提供参数描述,让 LLM 正确调用 - 返回内容包含统计信息,帮助 Agent 理解代码现状
- 支持 15+ 种编程语言
(2) 代码结构分析工具
def analyze_code_structure(
code_content: Annotated[str, Field(description="代码内容字符串")],
language: Annotated[str, Field(description="编程语言类型")] = "python",
) -> str:
"""分析代码结构,识别函数、类、模块等。"""
# 不同语言的识别模式
patterns = {
"python": {
"function": r"^\s*def\s+(\w+)\s*\(",
"class": r"^\s*class\s+(\w+)",
"import": r"^\s*(import|from)\s+",
},
"javascript": {
"function": r"^\s*(function\s+\w+|const\s+\w+\s*=)",
"class": r"^\s*class\s+(\w+)",
},
"go": {
"function": r"^\s*func\s+(\w+)",
"struct": r"^\s*type\s+(\w+)\s+struct",
},
}
# 遍历代码行,匹配结构模式
for line in code_content.split("\n"):
for category, pattern in patterns[language].items():
if re.search(pattern, line):
# 记录发现的代码结构
...
设计要点:
- 为不同语言定义专属的正则模式
- 返回结构化报告,包含行号便于精确定位
4.2 Agent 构建核心
class CodeCommentAgentSystem:
def __init__(self):
self._setup_chat_client()
def _setup_chat_client(self):
"""配置 OpenAI 兼容的 Chat Client"""
from agent_framework.openai import OpenAIChatCompletionClient
# 支持官方 API 和本地模型
if os.getenv("OPENAI_BASE_URL"):
# 本地模型 / Azure / 兼容端点
self.chat_client = OpenAIChatCompletionClient(
model=os.getenv("OPENAI_CHAT_MODEL"),
base_url=os.getenv("OPENAI_BASE_URL"),
api_key=os.getenv("OPENAI_API_KEY"),
)
else:
# OpenAI 官方
self.chat_client = OpenAIChatCompletionClient(
model="gpt-4o-mini",
api_key=os.getenv("OPENAI_API_KEY"),
)
async def add_comments(self, file_path: str) -> str:
"""为代码添加注释"""
from agent_framework import Agent
# 创建代码注释专家 Agent
comment_agent = Agent(
name="Comment_Specialist",
client=self.chat_client,
instructions="""你是一个专业的代码注释专家。
注释原则:
1. 文件级注释:描述模块用途、主要功能和依赖
2. 函数注释:说明用途、参数、返回值、异常
3. 类注释:说明类的用途、属性和关键方法
4. 复杂逻辑注释:解释算法和业务逻辑意图
5. 避免过度注释:简单代码保持自解释
注释风格:
- Python: Docstring (""" """)
- JavaScript: JSDoc (/** */)
- Go: godoc (//)
- C/C++: Doxygen
""",
tools=[read_code_file, analyze_code_structure],
)
# 构建任务并执行
task_prompt = f"""请为 {file_path} 添加专业注释。
步骤:
1. 调用 read_code_file 读取文件
2. 调用 analyze_code_structure 分析结构
3. 输出带注释的完整代码"""
result = await self._run_agent(comment_agent, task_prompt)
return result
架构亮点:
- Instructions 设计:明确定义注释原则和风格,确保输出质量
- Tools 注册:Agent 可自主决定何时调用工具
- 流式输出:实时显示生成过程,提升用户体验
4.3 交互式运行模式
async def interactive_mode(self):
"""交互式 CLI 模式"""
while True:
print("\n请选择操作:")
print(" 1. 为单个文件添加注释")
print(" 2. 批量处理目录")
print(" 3. 查看注释统计")
print(" 4. 退出")
choice = input("请输入选项: ").strip()
if choice == "1":
file_path = input("文件路径: ")
result = await self.add_comments(file_path)
self._save_commented_code(result, file_path)
elif choice == "2":
# 批量处理目录下所有代码文件
await self._batch_process(input("目录路径: "))
五、使用指南
5.1 安装与配置
# 克隆项目
git clone https://github.com/loveStudyWjj/code_comment_agent.git
cd code_comment_agent
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/Mac
# 或 venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements.txt
依赖列表(requirements.txt):
agent-framework>=0.0.6
python-dotenv
pydantic
openai
5.2 环境配置
复制 .env.example 为 .env:
cp .env.example .env
配置选项:
# 方式一:OpenAI 官方 API
OPENAI_API_KEY=sk-your-api-key-here
OPENAI_CHAT_MODEL=gpt-4o-mini
# 方式二:本地模型(Ollama/vLLM)
OPENAI_BASE_URL=http://localhost:11434/v1
OPENAI_CHAT_MODEL=llama3
# 方式三:Azure OpenAI
OPENAI_BASE_URL=https://your-resource.openai.azure.com
OPENAI_API_KEY=your-azure-key
OPENAI_CHAT_MODEL=gpt-4
5.3 运行示例
python code_comment_agent.py
交互示例:
============================================================
代码注释补全系统 (Microsoft Agent Framework RC6)
============================================================
请选择操作:
1. 为单个文件添加注释
2. 批量处理目录下的代码文件
3. 查看文件注释比例统计
4. 退出
请输入选项 (1/2/3/4): 1
请输入代码文件路径: ./src/utils.py
正在分析代码并添加注释...
============================================================
[Agent 输出带注释的代码]
============================================================
带注释的代码已保存至: commented_code/utils_commented_20260403_120000.py
六、注释输出示例
原始代码(无注释):
def calculate_discount(price, customer_type, years):
if customer_type == "vip":
base_discount = 0.2
else:
base_discount = 0.1
loyalty_bonus = min(years * 0.01, 0.15)
final_price = price * (1 - base_discount - loyalty_bonus)
return final_price
Agent 生成的带注释代码:
"""
价格折扣计算模块
提供基于客户类型和忠诚度的智能折扣计算功能。
"""
def calculate_discount(
price: float,
customer_type: str,
years: int
) -> float:
"""计算客户的最终折扣价格。
根据客户类型和购买年限,综合计算折扣比例。
Args:
price: 商品原始价格
customer_type: 客户类型("vip" 或普通客户)
years: 客户购买年限,用于计算忠诚度奖励
Returns:
应用折扣后的最终价格
Example:
>>> calculate_discount(1000, "vip", 5)
650.0 # VIP 20% + 5年忠诚度 5% = 25% 折扣
"""
# VIP 客户享受更高基础折扣
if customer_type == "vip":
base_discount = 0.2
else:
base_discount = 0.1
# 忠诚度奖励:每年增加 1%,上限 15%
loyalty_bonus = min(years * 0.01, 0.15)
# 计算最终价格
final_price = price * (1 - base_discount - loyalty_bonus)
return final_price
七、技术亮点总结
| 特性 | 实现方式 |
|---|---|
| Agent 自主决策 | LLM 自动决定何时调用工具,无需硬编码流程 |
| 多语言适配 | 正则模式库 + 语言映射表 |
| 注释风格规范 | Instructions 中定义各语言的注释惯例 |
| 流式输出 | async for update in agent.run(stream=True) |
| 本地模型支持 | OpenAI 兼容接口,可接入 Ollama/vLLM |
| 批量处理 | 目录遍历 + 智能跳过 node_modules 等目录 |
八、扩展方向
- 注释质量评分:添加注释质量评估功能,量化改进效果
- Git Hook 集成:pre-commit 时自动检查注释覆盖率
- IDE 插件:VS Code/JetBrains 插件,实时注释建议
- 团队模板:支持自定义注释模板,统一团队风格
- 增量处理:只处理新增/修改的函数,节省 API 成本
九、结语
Code Comment Agent 展示了 Agent Framework 在代码辅助领域的应用潜力:
- 工具调用让 Agent 具备了"读代码"的能力
- 精心设计的 Instructions 确保注释质量和风格统一
- 流式交互提供了直观的用户体验
这不仅是一个工具,更是 AI 辅助编程的一次实践探索。期待 Agent Framework 在更多场景中释放价值!
参考资料:
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)