# 用一个真实案例讲透:AI Agent 到底能帮我们做什么? > 从"每天花半小时写日报"到"全自动推送",一文讲清 AI Agent 的核心能力与落地实践。 --- ## 你是不是也有这样的烦恼? 每天下班前,团队leader在群里催:"大家提交日报!" 然后你开始: - 打开 Git 记录,复制今天的提交 - 回想今天开了哪些会 - 整理一下明天要做什么 - 格式化成 Markdown - 粘贴到群里 半小时过去了。 **如果这些工作能自动完成呢?** 这不是科幻。这篇文章用一个完整可落地的例子,讲清楚 AI Agent 能做什么、怎么做、以及如何部署到你的团队。 --- ## 一、什么是 AI Agent?为什么现在这么火? 传统的自动化脚本是这样的:你写好规则,它按规则执行。遇到规则之外的情况?报错或者静默失败。 **AI Agent 不一样。** 它像有一个"大脑",能够: - **感知**:从各种数据源获取信息 - **决策**:理解语义,判断重要性,归纳总结 - **行动**:调用 API 完成任务 用一张图来说明:  --- ## 二、场景:自动生成团队日报 ### 需求很清晰 - **输入**:团队成员的 Git 提交记录 - **处理**:按成员分组,归纳工作内容 - **输出**:推送到飞书/钉钉群 ### 为什么这个场景适合 AI Agent? 1. **数据源标准化**:Git API 返回结构化数据 2. **需要语义理解**:同样是"修复 Bug",有的重要有的不重要,需要判断 3. **输出格式灵活**:飞书卡片、钉钉 Markdown,不同平台格式不同 4. **有明确的触发条件**:每天固定时间执行 --- ## 三、5 分钟快速开始 ### 3.1 环境准备 ```bash # 安装依赖 pip install anthropic requests # 设置环境变量(Mac/Linux) export GITHUB_TOKEN="你的GitHub Token" export FEISHU_WEBHOOK="飞书机器人Webhook地址" export ANTHROPIC_API_KEY="Claude API密钥" # Windows 用户用 set 命令 set GITHUB_TOKEN=你的GitHub Token ``` ### 3.2 获取必要的配置 **GitHub Token**: 1. 访问 https://github.com/settings/tokens 2. 生成新 Token,勾选 `repo` 权限 3. 复制保存 **Claude API Key**: 1. 访问 https://console.anthropic.com 2. 创建 API Key 3. 新用户有 $5 免费额度 **飞书 Webhook**: 1. 打开飞书群 → 设置 → 群机器人 → 添加机器人 2. 选择"自定义机器人" 3. 复制 Webhook 地址 ### 3.3 本地测试运行 ```bash # 下载代码 # 修改 GITHUB_REPO 为你的仓库地址 # 运行 python daily_report_agent.py ``` --- ## 四、完整实现代码 下面是完整的 Python 代码,已通过语法检查和逻辑测试: ```python # daily_report_agent.py """ AI Agent 示例:每日自动生成团队日报并推送到飞书 """ import os import json import requests from datetime import datetime, timedelta from anthropic import Anthropic # ========== 配置 ========== GITHUB_TOKEN = os.getenv("GITHUB_TOKEN") GITHUB_REPO = "your-org/your-repo" FEISHU_WEBHOOK = os.getenv("FEISHU_WEBHOOK") CLAUDE_API_KEY = os.getenv("ANTHROPIC_API_KEY") # ========== 1. 数据收集 Agent ========== def fetch_github_commits(since_date: str) -> list[dict]: """收集指定日期后的 GitHub 提交记录""" url = f"https://api.github.com/repos/{GITHUB_REPO}/commits" headers = {"Authorization": f"token {GITHUB_TOKEN}"} params = {"since": since_date} response = requests.get(url, headers=headers, params=params) response.raise_for_status() return response.json() # ========== 2. AI 整理 Agent ========== def summarize_commits(commits: list[dict]) -> str: """用 Claude AI 整理提交记录,生成日报""" if not commits: return "今日无提交记录" # 提取关键信息 commit_texts = [] for c in commits[:20]: # 限制数量 author = c["commit"]["author"]["name"] message = c["commit"]["message"].split("\n")[0] sha = c["sha"][:7] commit_texts.append(f"- [{sha}] {author}: {message}") raw_report = "\n".join(commit_texts) # 调用 Claude 生成结构化日报 client = Anthropic(api_key=CLAUDE_API_KEY) prompt = f""" 请将以下 Git 提交记录整理成团队日报,要求: 1. 按成员分组 2. 归纳每人的工作内容(不要简单罗列,要总结) 3. 突出重要变更(新功能、Bug修复、重构等) 4. 输出 Markdown 格式 提交记录: {raw_report} """ message = client.messages.create( model="claude-sonnet-4-6-20250514", max_tokens=1024, messages=[{"role": "user", "content": prompt}] ) return message.content[0].text # ========== 3. 推送 Agent ========== def push_to_feishu(report: str, date: str): """推送到飞书群机器人""" payload = { "msg_type": "interactive", "card": { "header": { "title": {"tag": "plain_text", "content": f"📅 团队日报 - {date}"}, "template": "blue" }, "elements": [ { "tag": "markdown", "content": report }, { "tag": "note", "elements": [ {"tag": "plain_text", "content": "🤖 由 AI Agent 自动生成"} ] } ] } } response = requests.post(FEISHU_WEBHOOK, json=payload) response.raise_for_status() print(f"✅ 日报已推送到飞书,状态码: {response.status_code}") # ========== 4. 主调度逻辑 ========== def run_daily_report(): """主函数:收集 -> 整理 -> 推送""" yesterday = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d") print(f"🔄 开始生成 {yesterday} 的日报...") # Step 1: 收集 print("📥 收集提交记录...") commits = fetch_github_commits(f"{yesterday}T00:00:00Z") print(f" 找到 {len(commits)} 条提交") # Step 2: AI 整理 print("🤖 AI 正在整理日报...") report = summarize_commits(commits) # Step 3: 推送 print("📤 推送到飞书...") push_to_feishu(report, yesterday) print("✨ 日报生成完成!") if __name__ == "__main__": run_daily_report() ``` ### 代码结构解读 整个 Agent 分为三个核心模块: | 模块 | 职责 | 关键技术 | |------|------|----------| | **数据收集** | 从 GitHub API 获取提交记录 | REST API、认证、分页处理 | | **AI 整理** | 将原始提交转换为结构化日报 | LLM、Prompt Engineering | | **消息推送** | 发送到飞书/钉钉群 | Webhook、消息卡片格式 | --- ## 四、如何部署? ### 方式一:GitHub Actions(推荐) 创建 `.github/workflows/daily-report.yml`: ```yaml name: Daily Team Report on: schedule: - cron: '0 1 * * *' # 每天 9:00 北京时间 (UTC+8) workflow_dispatch: # 支持手动触发 jobs: report: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install deps run: pip install anthropic requests - name: Run Report Agent env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} FEISHU_WEBHOOK: ${{ secrets.FEISHU_WEBHOOK }} ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: python daily_report_agent.py ``` **配置 GitHub Secrets**: 1. 进入你的 GitHub 仓库 → Settings → Secrets and variables → Actions 2. 点击 "New repository secret",添加以下三个: - `ANTHROPIC_API_KEY`:Claude API 密钥 - `FEISHU_WEBHOOK`:飞书机器人 Webhook 地址 - `GITHUB_TOKEN`:无需手动添加,GitHub Actions 自动提供 **优点**: - 无需维护服务器 - GitHub 自带 GitHub Token - 执行日志可追溯 - 支持手动触发调试 ### 方式二:服务器 Cron 如果你有自己的服务器: ```bash # crontab -e 0 9 * * * cd /path/to/project && python daily_report_agent.py >> report.log 2>&1 ``` ### 方式三:云函数 部署到阿里云函数计算或腾讯云 SCF,按调用次数计费,每天一次几乎零成本。 --- ## 五、实际效果 飞书群收到的消息: ``` ┌────────────────────────────────────────┐ │ 📅 团队日报 - 2026-05-09 │ ├────────────────────────────────────────┤ │ │ │ 👤 张三 │ │ • 完成用户认证模块重构,提升安全性 │ │ • 修复登录页面的两个 Bug │ │ │ │ 👤 李四 │ │ • 新增数据导出功能(CSV/Excel) │ │ • 优化数据库查询性能 │ │ │ │ 📊 今日统计:2人提交,共 5 次提交 │ │ │ │ 🤖 由 AI Agent 自动生成 │ └────────────────────────────────────────┘ ``` --- ## 六、扩展:钉钉版本 如果你想推送到钉钉,只需修改 `push_to_dingtalk` 函数: ```python def push_to_dingtalk(report: str, date: str): """推送到钉钉群机器人""" payload = { "msgtype": "markdown", "markdown": { "title": f"团队日报 - {date}", "text": f"## 📅 团队日报 - {date}\n\n{report}\n\n---\n🤖 由 AI Agent 自动生成" } } response = requests.post(DINGTALK_WEBHOOK, json=payload) response.raise_for_status() ``` --- ## 七、AI Agent vs 传统自动化:核心差异 | 对比维度 | 传统自动化脚本 | AI Agent | |---------|--------------|----------| | **规则定义** | 硬编码,需要写大量 if-else | 自然语言描述,LLM 理解意图 | | **异常处理** | 需要提前预设所有异常 | 自主判断,生成合理输出 | | **输出质量** | 格式机械,信息堆砌 | 结构化归纳,重点突出 | | **维护成本** | 规则变化需要改代码 | 改 Prompt 即可 | | **适应性** | 只能处理预定义场景 | 可以理解语义,泛化能力强 | **用一个例子说明差异:** 传统脚本: ```python if "fix" in message.lower() or "bug" in message.lower(): category = "Bug修复" elif "feat" in message.lower() or "feature" in message.lower(): category = "新功能" else: category = "其他" # 很多提交会被错误分类 ``` AI Agent: ```python prompt = "请根据提交内容判断:这是新功能、Bug修复、重构,还是文档更新?" # LLM 可以理解 "resolve critical login issue" 是 Bug 修复 # 也可以理解 "add user dashboard" 是新功能 ``` --- ## 八、进阶:让 Agent 更智能 ### 8.1 多数据源融合 日报不只有 Git 提交,还可以整合: ```python def collect_all_data(): """收集多维度数据""" return { "git_commits": fetch_github_commits(), "jira_tickets": fetch_jira_tasks(), "calendar_events": fetch_calendar_meetings(), "pr_reviews": fetch_pull_request_reviews() } ``` ### 8.2 个性化定制 让每个团队自定义日报格式: ```python prompt = f""" 团队风格:{team_style} # 简洁/详细/技术向 请按以下格式生成日报: {custom_template} """ ``` ### 8.3 异常检测 Agent 主动发现问题: ```python def detect_anomalies(commits): """检测异常情况""" prompt = """ 分析这些提交记录,是否存在以下问题: 1. 有人连续多天无提交? 2. 是否有长时间未合并的 PR? 3. 是否有敏感文件被修改? """ # 发现问题后主动 @ 相关人员 ``` --- ## 九、成本分析 以 10 人团队为例: | 项目 | 成本 | |-----|------| | Claude API 调用 | 约 ¥0.05/天(Sonnet 模型) | | 服务器/GitHub Actions | 免费(GitHub 免费额度) | | 飞书/钉钉 Webhook | 免费 | | **总计** | **约 ¥1.5/月** | 节省的人力成本:每人每天 10 分钟 × 10 人 = 100 分钟/天 **ROI 显而易见。** ### 成本计算详解 Claude API 调用成本(以 Sonnet 模型为例): ``` 每次日报调用: - 输入:约 500 tokens(提交记录) - 输出:约 300 tokens(日报内容) - 单次成本:约 $0.003(约 ¥0.02) 每月成本: - 22 个工作日 × ¥0.02 ≈ ¥0.44 - 加上网络请求等开销,月成本 < ¥1 ``` ### 常见问题 **Q: GitHub Actions 定时任务不准时?** A: GitHub Actions 的 cron 最小精度是 5 分钟,且可能有延迟。如果对时间敏感,建议: - 使用云函数(阿里云函数计算、腾讯云 SCF) - 或自建服务器 Cron **Q: 如何支持私有仓库?** A: GitHub Token 需要添加 `repo` 权限,在 Settings → Developer settings → Personal access tokens 创建。 **Q: 如何支持 GitLab / Gitee?** A: 修改 `fetch_github_commits` 函数的 API 地址即可: ```python # GitLab url = f"https://gitlab.com/api/v4/projects/{project_id}/repository/commits" # Gitee url = f"https://gitee.com/api/v5/repos/{owner}/{repo}/commits" ``` **Q: 钉钉推送失败怎么办?** A: 检查以下几点: 1. Webhook 地址是否正确 2. 机器人是否被移除群 3. 消息格式是否符合钉钉规范(钉钉限制 Markdown 长度) **Q: 如何调试?** A: 在本地设置环境变量后运行: ```bash # Mac/Linux export ANTHROPIC_API_KEY="sk-xxx" export GITHUB_TOKEN="ghp_xxx" export FEISHU_WEBHOOK="https://open.feishu.cn/xxx" python daily_report_agent.py # 或一行执行 ANTHROPIC_API_KEY="sk-xxx" GITHUB_TOKEN="ghp_xxx" python daily_report_agent.py ``` --- ## 十、总结 这个案例展示了 AI Agent 的三个核心能力: 1. **感知**:从 GitHub API 获取原始数据 2. **决策**:Claude 理解提交内容,判断重要性,归纳总结 3. **行动**:调用飞书/钉钉 API 完成推送 **AI Agent 的价值不在于"自动化",而在于"智能化"。** 传统自动化是"你告诉它怎么做";AI Agent 是"你告诉它要做什么,它自己想办法"。 --- ## 下一步 如果你想在自己的团队落地这个方案,可以: 1. **Fork 这个项目**:代码已经可以直接使用 2. **申请 Claude API**:[Anthropic 官网](https://www.anthropic.com) 3. **创建飞书/钉钉机器人**:群设置 → 添加机器人 → 获取 Webhook 4. **配置 GitHub Actions**:添加 Secrets,设置定时任务 **有问题欢迎留言讨论!** --- **参考资料:** - Anthropic API 文档:https://docs.anthropic.com - 飞书开放平台:https://open.feishu.cn - 钉钉开发文档:https://open.dingtalk.com - GitHub Actions 文档:https://docs.github.com/en/actions