当前位置: 首页 > news >正文

【Agent】Microsoft Agent Framework 实战:打造智能 Git 周报生成工具

Microsoft Agent Framework 实战:打造智能 Git 周报生成工具

从手动写周报到 AI 自动生成,用 Python + Microsoft Agent Framework RC6 构建你的第一个 Agent 应用

一、前言:程序员周报的痛点

每周五下班前,你是不是都在对着 Git 提交记录发愁?

git log --since="1 week ago" --oneline

看着一堆fix bugadd featureupdate config这样的提交记录,手动整理成一份"专业"的周报。这个过程既枯燥又容易遗漏重要内容。

如果能有一个智能助手,自动把原始提交记录转化成结构清晰、语言专业的周报,岂不是美滋滋?

今天我们就用Microsoft Agent Framework RC6来构建这样一个 Git 周报生成工具,体验 Agent 开发的完整流程。

二、Microsoft Agent Framework 简介

Microsoft Agent Framework 是微软推出的轻量级 AI Agent 开发框架,核心特点:

特点说明
轻量级仅需少量代码即可构建 Agent
工具集成支持将 Python 函数自动注册为 Agent 工具
流式输出支持 streaming 模式,实时展示生成过程
兼容性好支持 OpenAI API 及各类兼容模型(本地模型、Azure 等)

相比 LangChain、AutoGen 等框架,Microsoft Agent Framework 更专注于"工具调用 + 任务执行"的简洁范式,非常适合快速构建实用性 Agent。

安装依赖

pipinstallagent-framework python-dotenv

三、核心设计思路

3.1 整体架构

用户输入(仓库路径、天数范围) ↓ Agent 调用工具获取 Git 数据 ↓ ├── get_git_commit_logs() → 提交记录 ├── get_git_stats() → 统计数据 ↓ LLM 将原始数据转化为专业周报 ↓ 输出 Markdown 格式周报并保存

3.2 工具函数设计

Agent 需要两个核心工具:

工具一:获取提交记录

defget_git_commit_logs(repo_path:Annotated[str,Field(description="Git 仓库路径")]=".",days:Annotated[int,Field(description="获取过去 N 天的提交记录")]=7,)->str:"""获取指定路径下过去 N 天的 Git 提交记录"""since_date=(datetime.now()-timedelta(days=days)).strftime("%Y-%m-%d")cmd=["git","-C",repo_path,"log",f"--since={since_date}","--oneline","--pretty=format:%s (%ad)","--date=short",]result=subprocess.run(cmd,capture_output=True,text=True,encoding="utf-8")returnf"过去{days}天的提交记录:\n{result.stdout}"

工具二:获取统计数据

defget_git_stats(repo_path:str=".",days:int=7)->str:"""获取提交次数、新增/删除行数、变更文件数等统计"""# 统计提交数量# 统计代码行变化# 统计变更文件数returnf"提交次数:{count}\n新增行数:{added}\n删除行数:{deleted}"

3.3 使用 Pydantic 进行工具定义

Microsoft Agent Framework 使用 Pydantic 的Annotated+Field进行参数定义,这样可以:

  • 自动生成工具的 JSON Schema
  • 提供参数说明(description)
  • 支持类型验证和默认值
fromtypingimportAnnotatedfrompydanticimportFielddefget_git_commit_logs(repo_path:Annotated[str,Field(description="Git 仓库路径,默认当前目录")]=".",days:Annotated[int,Field(description="获取过去 N 天的提交记录")]=7,)->str:

LLM 会根据这些描述自动决定何时调用工具、如何传参。

四、完整实现代码

4.1 创建 Agent 系统

classGitWeeklyReportSystem:"""基于 Microsoft Agent Framework RC6 的 Git 周报生成系统"""def__init__(self):self._setup_chat_client()def_setup_chat_client(self):"""设置 OpenAI 兼容的 Chat Client"""fromagent_framework.openaiimportOpenAIChatCompletionClient model=os.getenv("OPENAI_CHAT_MODEL")oros.getenv("OPENAI_MODEL","gpt-4o-mini")base_url=os.getenv("OPENAI_BASE_URL")api_key=os.getenv("OPENAI_API_KEY","sk-placeholder")ifbase_url:# 支持本地模型(如 Ollama、vLLM 等)self.chat_client=OpenAIChatCompletionClient(model=model,base_url=base_url,api_key=api_key)else:# 使用 OpenAI 官方 APIself.chat_client=OpenAIChatCompletionClient(model=model,api_key=api_key)

关键点说明

  • 使用OpenAIChatCompletionClient(Chat Completions API)而非OpenAIChatClient(Responses API)
  • 这样可以兼容本地模型(Ollama、vLLM、LocalAI 等)
  • 通过环境变量灵活配置模型端点

4.2 创建 Agent 实例

asyncdefgenerate_report(self,repo_path:str=".",days:int=7)->str:fromagent_frameworkimportAgent# 创建周报专家 Agent,配备工具report_agent=Agent(name="Report_Specialist",client=self.chat_client,instructions="""你是一个擅长写周报的职场专家。 你的任务是将原始的代码提交记录转化为一份结构清晰、语言专业的周报。 要求: 1. 将提交记录分类为:【新功能开发】、【问题修复与优化】、【常规维护】三大类 2. 将口语化的提交记录转化为专业描述 3. 突出工作价值和成果,使用主动语态 4. 使用 Markdown 格式输出""",tools=[get_git_commit_logs,get_git_stats],)# 构建任务提示task_prompt=f"""请帮我生成一份专业的周报: 1. 获取仓库 '{repo_path}' 过去{days}天的提交记录 2. 获取统计数据 请调用工具获取数据后,合成 Markdown 格式周报。"""result=awaitself._run_agent(report_agent,task_prompt)returnresult

Agent 创建要点

  • name: Agent 名称,用于识别
  • client: LLM 客户端实例
  • instructions: Agent 的角色定义和行为准则
  • tools: 可调用的工具函数列表

4.3 流式输出实现

asyncdef_run_agent(self,agent,prompt:str)->str:"""运行 Agent 并流式打印输出"""chunks:list[str]=[]asyncforupdateinagent.run(prompt,stream=True):ifhasattr(update,"text")andupdate.text:chunks.append(update.text)print(update.text,end="",flush=True)# 实时输出return"".join(chunks)

流式输出的好处:

  • 用户可以看到生成过程,体验更流畅
  • 避免长时间等待无响应
  • 便于调试和观察 Agent 思考过程

4.4 交互式运行模式

asyncdefinteractive_mode(self):"""交互式运行模式"""print("Git 周报生成系统 (Microsoft Agent Framework RC6)")whileTrue:print("\n请选择操作:")print(" 1. 生成周报(默认:当前目录,过去 7 天)")print(" 2. 自定义参数生成周报")print(" 3. 退出")choice=input("请输入选项: ").strip()ifchoice=="1":report=awaitself.generate_report()self._save_report(report)elifchoice=="2":repo_path=input("仓库路径: ")or"."days=int(input("天数: ")or"7")report=awaitself.generate_report(repo_path,days)self._save_report(report)

五、配置与使用

5.1 环境变量配置

创建.env文件:

# 方式一:使用 OpenAI 官方 API OPENAI_API_KEY=sk-your-api-key OPENAI_MODEL=gpt-4o-mini # 方式二:使用本地模型(Ollama) OPENAI_BASE_URL=http://localhost:11434/v1 OPENAI_MODEL=qwen2.5:7b OPENAI_API_KEY=ollama # Ollama 不需要真实 key # 方式三:使用其他兼容服务(如 DeepSeek、Moonshot 等) OPENAI_BASE_URL=https://api.deepseek.com/v1 OPENAI_API_KEY=sk-your-deepseek-key OPENAI_MODEL=deepseek-chat

5.2 运行程序

python git_weekly_report_agent.py

输出示例:

============================================================ Git 周报生成系统 - 配置检查 ============================================================ 使用 OpenAI 兼容模型端点 端点: http://localhost:11434/v1 模型: qwen2.5:7b ============================================================ 请选择操作: 1. 生成周报(默认:当前目录,过去 7 天) 2. 自定义参数生成周报 3. 退出 请输入选项 (1/2/3): 1 正在生成周报... ============================================================ # 本周工作总结 ## 工作摘要 本周主要完成了用户认证模块的开发工作,修复了若干系统稳定性问题, 并进行了代码结构优化和文档更新。整体提升了系统的安全性和可维护性。 ## 【新功能开发】 - 完成了用户登录认证模块的开发与测试工作 - 实现了 JWT 令牌生成与验证机制 - 新增了用户权限管理功能 ## 【问题修复与优化】 - 修复了系统运行过程中的异常问题,提升了稳定性 - 优化了数据库查询性能,响应时间缩短 30% - 解决了前端页面渲染闪烁问题 ## 【常规维护】 - 更新了项目技术文档,补充了关键接口说明 - 清理了冗余代码,提升了可维护性 - 配置了开发环境依赖项 ## 数据统计 - 提交次数: 12 - 新增行数: 856 - 删除行数: 234 - 变更文件数: 15 ============================================================ 周报已保存至: reports/weekly_report_20260403_143052.md

六、技术亮点解析

6.1 工具自动注册

框架会自动将 Python 函数转换为 Agent 可调用的工具:

tools=[get_git_commit_logs,get_git_stats]

LLM 根据函数签名、参数类型和 Field 描述,自动决定:

  • 是否需要调用工具
  • 调用哪个工具
  • 如何传递参数

6.2 编码问题处理

Windows 环境下 Git 命令可能返回 GBK 编码,代码做了兼容处理:

result=subprocess.run(cmd,capture_output=True,text=True,encoding="utf-8",errors="replace",# 非法字符替换而非报错)

输出时也处理了 GBK 编码问题:

try:print(update.text,end="",flush=True)exceptUnicodeEncodeError:safe_text=update.text.encode("gbk",errors="replace").decode("gbk")print(safe_text,end="",flush=True)

6.3 模型兼容性

使用OpenAIChatCompletionClient而非OpenAIChatClient

客户端类型API 类型兼容性
OpenAIChatClientResponses API仅 OpenAI 官方
OpenAIChatCompletionClientChat Completions API兼容所有 OpenAI 兼容服务

这样可以使用:

  • OpenAI GPT 系列
  • Ollama 本地模型
  • vLLM、LocalAI 等推理服务
  • DeepSeek、Moonshot、Qwen 等 API 服务

七、扩展思路

7.1 添加更多工具

可以扩展更多 Git 分析工具:

defget_branch_info(repo_path:str=".")->str:"""获取分支信息"""defget_code_review_suggestions(repo_path:str=".",days:int=7)->str:"""分析代码变更并给出改进建议"""defget_issue_links(repo_path:str=".")->str:"""从提交信息中提取关联的 Issue/PR 编号"""

7.2 多 Agent 协作

可以引入多个 Agent 进行协作:

data_collector=Agent(name="Data_Collector",tools=[get_git_logs,get_stats,get_branch_info],instructions="负责收集和整理 Git 数据",)report_writer=Agent(name="Report_Writer",instructions="负责将数据转化为专业周报",)# Data_Collector 收集数据 → Report_Writer 撰写周报

7.3 接入企业系统

  • 定时任务自动生成周报并发送邮件
  • 集成到钉钉/飞书/企业微信
  • 与 Jira、GitLab 等平台对接

八、总结

Microsoft Agent Framework RC6 提供了一个简洁高效的 Agent 开发范式:

  1. 定义工具函数:使用Annotated + Field描述参数
  2. 创建 Agent:配置 client、instructions 和 tools
  3. 运行 Agent:调用agent.run()执行任务

整个 Git 周报生成工具仅 300+ 行代码,却实现了:

  • 自动获取 Git 数据
  • 智能转化专业周报
  • 流式输出实时展示
  • 本地模型兼容
  • 交互式用户体验

这正是 Agent 开发的魅力所在——让 AI 真正成为可编程的智能助手。


相关资源

  • Microsoft Agent Framework: https://github.com/microsoft/agent-framework
  • 完整代码: https://github.com/loveStudyWjj/git_weekly_report_agent
  • Ollama 本地模型: https://ollama.ai

如果觉得有帮助,欢迎点赞收藏,有问题欢迎评论区讨论!

http://www.jsqmd.com/news/588330/

相关文章:

  • 算法解析 | 深入EGO Planner:无ESDF的实时避障与轨迹优化
  • Power Ring(电源环)是干什么的?
  • 有限元悬臂梁——含一维和二维多种单元类型研究附Matlab代码
  • 扣子(Coze)实战:65个作品涨粉100W!Nano Banana+Grok一键生成科学探秘视频
  • Go 协程调度与系统线程映射
  • 13、探索transforms.RandomRotation()在图像增强中的灵活应用
  • 从“炼金术”到“建筑学”:深度学习结构设计的五大范式
  • 从展台到策略执行:WEEX 在 NBX2026 展示 AI 真实应用场景
  • D2-实验三:k8s Nginx 部署实验,目的学习命名空间ns的创建与管理
  • 基于STM32的保温水壶控制器设计
  • CSDN程序员副业图谱技术文章推荐
  • 不用微信体系的企业IM推荐(附优缺点分析)
  • 汽车充电桩
  • 大模型的部署简介
  • Qwen2.5-VL-7B-Instruct快速部署:纯本地无网络依赖,一键启动视觉助手
  • ELF-RV1126B 实验05B:RKNN 模型加载与运行时初始化验证
  • 有限长度直导线的三维磁场计算:应用毕奥-萨法尔定律附Matlab代码
  • 从相亲决策到机器学习:3000字讲透决策树算法
  • 标题:软黄土改良用水泥搅拌桩的碳排放评估及白泥-水泥复合材料的碳减排研究
  • 一种风速测量仪的设计与制作
  • layout中节点不显示,也没解决,就是记录一下。
  • C++的std--ranges子范围概念与迭代器对在算法约束中的精确表达
  • 湖南长沙正规的空调工厂名声
  • 2025 直播电商行业发展白皮书解读:规模、生态与规范化趋势
  • Dart 堆栈符号化
  • 架桥记:耐达讯自动化CC-Link IE转EtherCAT的工业协议融合实战
  • 2026年新闻发稿高性价比服务商选型指南:行业趋势、适配标准与主流平台分析 - 发稿平台推荐
  • Windows平台MSVC编译的FFmpeg库
  • 植物大战僵尸游戏辅助工具:解锁9大隐藏功能提升玩家效率的完整指南
  • YOLO12保姆级教程:2025最新目标检测模型,5分钟开箱即用