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

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

Microsoft Agent Framework 实战打造智能 Git 周报生成工具从手动写周报到 AI 自动生成用 Python Microsoft Agent Framework RC6 构建你的第一个 Agent 应用一、前言程序员周报的痛点每周五下班前你是不是都在对着 Git 提交记录发愁git log --since1 week ago --oneline看着一堆fix bug、add feature、update 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(descriptionGit 仓库路径)].,days:Annotated[int,Field(description获取过去 N 天的提交记录)]7,)-str:获取指定路径下过去 N 天的 Git 提交记录since_date(datetime.now()-timedelta(daysdays)).strftime(%Y-%m-%d)cmd[git,-C,repo_path,log,f--since{since_date},--oneline,--prettyformat:%s (%ad),--dateshort,]resultsubprocess.run(cmd,capture_outputTrue,textTrue,encodingutf-8)returnf过去{days}天的提交记录\n{result.stdout}工具二获取统计数据defget_git_stats(repo_path:str.,days:int7)-str:获取提交次数、新增/删除行数、变更文件数等统计# 统计提交数量# 统计代码行变化# 统计变更文件数returnf提交次数:{count}\n新增行数:{added}\n删除行数:{deleted}3.3 使用 Pydantic 进行工具定义Microsoft Agent Framework 使用 Pydantic 的AnnotatedField进行参数定义这样可以自动生成工具的 JSON Schema提供参数说明description支持类型验证和默认值fromtypingimportAnnotatedfrompydanticimportFielddefget_git_commit_logs(repo_path:Annotated[str,Field(descriptionGit 仓库路径默认当前目录)].,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 Clientfromagent_framework.openaiimportOpenAIChatCompletionClient modelos.getenv(OPENAI_CHAT_MODEL)oros.getenv(OPENAI_MODEL,gpt-4o-mini)base_urlos.getenv(OPENAI_BASE_URL)api_keyos.getenv(OPENAI_API_KEY,sk-placeholder)ifbase_url:# 支持本地模型如 Ollama、vLLM 等self.chat_clientOpenAIChatCompletionClient(modelmodel,base_urlbase_url,api_keyapi_key)else:# 使用 OpenAI 官方 APIself.chat_clientOpenAIChatCompletionClient(modelmodel,api_keyapi_key)关键点说明使用OpenAIChatCompletionClientChat Completions API而非OpenAIChatClientResponses API这样可以兼容本地模型Ollama、vLLM、LocalAI 等通过环境变量灵活配置模型端点4.2 创建 Agent 实例asyncdefgenerate_report(self,repo_path:str.,days:int7)-str:fromagent_frameworkimportAgent# 创建周报专家 Agent配备工具report_agentAgent(nameReport_Specialist,clientself.chat_client,instructions你是一个擅长写周报的职场专家。 你的任务是将原始的代码提交记录转化为一份结构清晰、语言专业的周报。 要求 1. 将提交记录分类为【新功能开发】、【问题修复与优化】、【常规维护】三大类 2. 将口语化的提交记录转化为专业描述 3. 突出工作价值和成果使用主动语态 4. 使用 Markdown 格式输出,tools[get_git_commit_logs,get_git_stats],)# 构建任务提示task_promptf请帮我生成一份专业的周报 1. 获取仓库 {repo_path} 过去{days}天的提交记录 2. 获取统计数据 请调用工具获取数据后合成 Markdown 格式周报。resultawaitself._run_agent(report_agent,task_prompt)returnresultAgent 创建要点name: Agent 名称用于识别client: LLM 客户端实例instructions: Agent 的角色定义和行为准则tools: 可调用的工具函数列表4.3 流式输出实现asyncdef_run_agent(self,agent,prompt:str)-str:运行 Agent 并流式打印输出chunks:list[str][]asyncforupdateinagent.run(prompt,streamTrue):ifhasattr(update,text)andupdate.text:chunks.append(update.text)print(update.text,end,flushTrue)# 实时输出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. 退出)choiceinput(请输入选项: ).strip()ifchoice1:reportawaitself.generate_report()self._save_report(report)elifchoice2:repo_pathinput(仓库路径: )or.daysint(input(天数: )or7)reportawaitself.generate_report(repo_path,days)self._save_report(report)五、配置与使用5.1 环境变量配置创建.env文件# 方式一使用 OpenAI 官方 API OPENAI_API_KEYsk-your-api-key OPENAI_MODELgpt-4o-mini # 方式二使用本地模型Ollama OPENAI_BASE_URLhttp://localhost:11434/v1 OPENAI_MODELqwen2.5:7b OPENAI_API_KEYollama # Ollama 不需要真实 key # 方式三使用其他兼容服务如 DeepSeek、Moonshot 等 OPENAI_BASE_URLhttps://api.deepseek.com/v1 OPENAI_API_KEYsk-your-deepseek-key OPENAI_MODELdeepseek-chat5.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 编码代码做了兼容处理resultsubprocess.run(cmd,capture_outputTrue,textTrue,encodingutf-8,errorsreplace,# 非法字符替换而非报错)输出时也处理了 GBK 编码问题try:print(update.text,end,flushTrue)exceptUnicodeEncodeError:safe_textupdate.text.encode(gbk,errorsreplace).decode(gbk)print(safe_text,end,flushTrue)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:int7)-str:分析代码变更并给出改进建议defget_issue_links(repo_path:str.)-str:从提交信息中提取关联的 Issue/PR 编号7.2 多 Agent 协作可以引入多个 Agent 进行协作data_collectorAgent(nameData_Collector,tools[get_git_logs,get_stats,get_branch_info],instructions负责收集和整理 Git 数据,)report_writerAgent(nameReport_Writer,instructions负责将数据转化为专业周报,)# Data_Collector 收集数据 → Report_Writer 撰写周报7.3 接入企业系统定时任务自动生成周报并发送邮件集成到钉钉/飞书/企业微信与 Jira、GitLab 等平台对接八、总结Microsoft Agent Framework RC6 提供了一个简洁高效的 Agent 开发范式定义工具函数使用Annotated Field描述参数创建 Agent配置 client、instructions 和 tools运行 Agent调用agent.run()执行任务整个 Git 周报生成工具仅 300 行代码却实现了自动获取 Git 数据智能转化专业周报流式输出实时展示本地模型兼容交互式用户体验这正是 Agent 开发的魅力所在——让 AI 真正成为可编程的智能助手。相关资源Microsoft Agent Framework: https://github.com/microsoft/agent-framework完整代码: https://github.com/loveStudyWjj/git_weekly_report_agentOllama 本地模型: https://ollama.ai如果觉得有帮助欢迎点赞收藏有问题欢迎评论区讨论

相关文章:

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

Microsoft Agent Framework 实战:打造智能 Git 周报生成工具从手动写周报到 AI 自动生成,用 Python Microsoft Agent Framework RC6 构建你的第一个 Agent 应用一、前言:程序员周报的痛点 每周五下班前,你是不是都在对着 Git 提交…...

学习Latex时的第一个tex内容

学习视频为: https://www.bilibili.com/video/BV1S741127Sg/ https://www.bilibili.com/video/BV1CtfMBGEPp/ 环境的语法结构: 最完整的结构 \begin{环境名}[参数列表] 内容 \end{环境ming} 简化版本(一般在行内使用) \环境名[参数…...

黑马点评实战篇知识点整理-秒杀

全局唯一id问题订单表使用数据自增id:id的规律性太明显受到单表数据量的限制定义在分布式系统下用来生成全局唯一id的工具 要满足以下特性: 唯一性、高可用、高性能、递增性、安全性实现方案(基于Redis自增的策略)64位id1位符号位…...

C++ 数据库缓冲池管理:基于 C++ 实现的 LRU-K 页面置换算法在海量数据访问场景下的命中率优化

各位专家、同仁,下午好! 今天我们齐聚一堂,共同探讨一个在数据库核心组件中至关重要的议题:C 数据库缓冲池管理:基于 C 实现的 LRU-K 页面置换算法在海量数据访问场景下的命中率优化。在当今数据爆炸的时代&#xff0c…...

C++ 与 事务多版本并发控制(MVCC):在 C++ 存储内核中利用时间戳排序实现无锁读写冲突控制

各位开发者、架构师,以及对高性能并发系统充满热情的同仁们,大家好!今天,我们将深入探讨一个在现代数据库和存储系统中至关重要的主题:多版本并发控制(MVCC),并聚焦于如何在 C 存储内…...

C++ Move 构造函数的优化原理

C Move构造函数的优化原理 在C11中,移动语义的引入彻底改变了资源管理的方式,而Move构造函数则是实现高效资源转移的核心机制之一。传统拷贝构造函数在涉及动态内存或大型对象时可能带来高昂的性能开销,而Move构造函数通过“窃取”临时对象的…...

从零开始:人工神经网络入门实战 - 用TensorFlow实现MNIST手写数字识别

1. 引言:为什么MNIST是神经网络的"Hello World"? 当你第一次接触编程时,通常会写一个"Hello World"程序。在深度学习领域,MNIST手写数字识别就是那个经典的"Hello World"!这个由美国国…...

ICRA 2025自动叉车顶会论文拆解:ADAPT如何在真实复杂场景完成托盘搬运?

ICRA 2025 最新AGV顶会论文拆解:ADAPT自动叉车系统,如何在真实复杂户外场景完成托盘搬运?如果说仓库 AGV 研究已经逐渐成熟,那么真正更难的,其实是户外、非结构化、天气变化大、障碍物复杂的施工场地搬运。 这篇来自 A…...

2025届毕业生推荐的五大AI学术平台实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 因人工智能技术迅猛发展,AI辅助毕业论文写作成众多学子实际可选之路,…...

2026最权威的十大AI论文工具推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 当今,人工智能技术于学术写作范畴的运用愈发广泛,该技术的关键价值在…...

2026届最火的AI辅助论文网站实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 当前,主要被划分成三类的AI论文写作辅佐平台分别是:文献检索跟整理&a…...

探索三维流固耦合中岩石试样孔隙度变化的奇妙世界

三维流固耦合,考虑岩石试样孔隙度变化在工程和科学研究领域,三维流固耦合问题一直是备受关注的焦点,而当考虑到岩石试样孔隙度变化时,这个问题更是增添了不少复杂性与趣味性。 三维流固耦合基础概念 简单来说,流固耦合…...

D模型生成:从二维图像重建三维结构

从二维图像重建三维结构:D模型的革命性突破 在计算机视觉和人工智能领域,从二维图像重建三维结构一直是一项极具挑战性的任务。传统的三维建模方法依赖多视角图像或深度传感器,而近年来,基于深度学习的D模型(如Diffus…...

海康云台 ISPAI 二次开发

最近做了个视频会议的项目,硬件用的海康球机DS-2DC4A212IW-DE/C,甲方要求在会议内封装一个云台可以进行拖拽 控制摄像头方向以及焦距的功能,官方给的SDK还不能直接复用,只能手搓了,下面是代码可直接复用,需…...

1111111111111111111111

111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

零基础学唱歌全套教程 声乐技巧入门到进阶资源

很多想自学唱歌的朋友,应该都有过这样的困扰:想入门却不知道从哪一步开始,网上找的教程要么太零散,知识点前后接不上;要么内容太晦涩,完全摸不着门道。这段时间我整理了一批适配不同学习阶段的唱歌相关教程…...

2025 直播电商行业发展白皮书解读:规模、生态与规范化趋势

直播电商作为数字经济与零售业态深度融合的典型模式,近年来保持稳健增长并逐步进入规范化发展阶段。本文基于《2025 直播电商行业发展白皮书》核心内容,从行业规模、生态结构、技术应用、治理现状与发展方向等维度,对行业整体态势进行梳理与分…...

Vibe Coding 有哪些实用技巧?这篇文章讲透工作流、提示词和避坑方法

Vibe Coding 是什么?一篇讲清它的技巧、工作流与避坑方法 这两年,AI 编程工具越来越强,很多开发者开始用自然语言驱动代码生成。围绕这种开发方式,一个很火的词出现了:Vibe Coding。 简单说,Vibe Coding 就…...

YOLO12保姆级教程:2025最新目标检测模型,5分钟开箱即用

YOLO12保姆级教程:2025最新目标检测模型,5分钟开箱即用 1. 前言:为什么选择YOLO12? 目标检测是计算机视觉领域最基础也最重要的任务之一。2025年最新发布的YOLO12模型,凭借其革命性的注意力为中心架构,在…...

一种风速测量仪的设计与制作

风速、风向的测量在气象预报、环境监测、风力发电、航空航天等领域中有着重要意义。随着传感器技术、微处理器技术和网络通信技术的发展,相比传统的人工观测,数字化、智能化的气象仪器在观测精度、速度和稳定性等方面都有较大优势,因此针对数…...

Qwen2.5-VL-7B-Instruct快速部署:纯本地无网络依赖,一键启动视觉助手

Qwen2.5-VL-7B-Instruct快速部署:纯本地无网络依赖,一键启动视觉助手 1. 工具概览与核心优势 1.1 什么是Qwen2.5-VL-7B-Instruct Qwen2.5-VL-7B-Instruct是阿里通义千问团队推出的多模态大模型,专为视觉-语言交互任务设计。这个70亿参数的…...

C++ 智能指针在 STL 容器中的应用

C智能指针在STL容器中的应用 在现代C开发中,智能指针和STL容器是两大核心工具。智能指针通过自动管理内存,显著降低了资源泄漏的风险;而STL容器则提供了高效的数据存储和操作方式。将两者结合使用,既能确保内存安全,又…...

新手必学!3个OpenClaw基础Skill快速上手,5分钟搞定实操任务

新手必学!3个OpenClaw基础Skill快速上手,5分钟搞定实操任务在前两篇内容里,我们先是吃透了OpenClaw Skill的核心概念,又完成了全平台的环境部署、Skill安装加载与必装技能配置,理论和准备工作都已经到位。很多新手安装…...

3大核心功能解密:Greasy Fork如何成为浏览器扩展的终极解决方案

3大核心功能解密:Greasy Fork如何成为浏览器扩展的终极解决方案 【免费下载链接】greasyfork An online repository of user scripts. 项目地址: https://gitcode.com/gh_mirrors/gr/greasyfork 你是否曾为浏览器功能不足而烦恼?想要屏蔽烦人的广…...

2025届学术党必备的五大降重复率方案推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 想要切实有效地把文章的AI生成可能性降低下来,就要从语言组织以及内容编排这两个…...

Go协程goroutine泄漏检测

Go协程泄漏检测:高效排查隐形资源黑洞 在Go语言的高并发场景中,goroutine的轻量级特性使其成为开发者首选,但若管理不当,goroutine泄漏会像隐形黑洞般吞噬系统资源。这类泄漏通常因协程阻塞或未正确关闭导致,最终引发…...

CSDN程序员副业图谱技术文章推荐

CSDN程序员副业图谱技术文章推荐CSDN作为国内知名的技术社区,收录了大量关于程序员副业和技术图谱的文章。以下是一些相关的高质量中文文献和技术资源:程序员副业方向《程序员如何开启副业:技术变现的多种途径》《技术副业实战:从…...

C++ constexpr 编译期计算的应用技巧

C constexpr 编译期计算的艺术 在现代C中,constexpr关键字彻底改变了编译期计算的游戏规则。它允许开发者将复杂的计算任务从运行时转移到编译期,从而提升程序性能并增强代码的可维护性。从简单的常量计算到复杂的元编程,constexpr的应用场景…...

第11天:函数组合、记忆化与定时器

今天复习了函数组合、记忆化、setTimeout 和 setInterval,以下是知识点梳理与问答整理。一、函数组合(Compose / Pipe)1. 什么是函数组合?我的回答:把上一个函数的返回值作为下一个函数的参数,形成流水线式…...

植物大战僵尸游戏辅助工具:解锁9大隐藏功能提升玩家效率的完整指南

植物大战僵尸游戏辅助工具:解锁9大隐藏功能提升玩家效率的完整指南 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 在游戏辅助工具领域,开源项目往往能提供最具创新性的解决…...