从零做 Agent 02:把会议记录分析完自动在飞书群@你
从零造 Agent 系列第二篇。上一篇做了 demo 跑通这一篇让它真正能用——直接吃飞书/微信聊天记录分析完自动发通知到每个人。上一篇做到哪了上一篇我们做了一个最基础的会议 Agent把一段会议笔记丢给它它能自动输出会议纪要、任务分配表和 PRD 雏形。但用了几次就发现两个问题第一输入太麻烦。现实中谁会把会议讨论整理成一段工工整整的文字大部分情况是飞书群里你一句我一句聊完了或者开完会录了个音转成文字格式乱七八糟。上一版的 Agent 根本处理不了这些。第二输出之后还是要人工搬运。Agent 虽然帮你整理好了任务但你还得自己复制粘贴一个一个发给对应的人。开完会最累的不就是这种杂活吗所以这一版我做了两件事让 Agent 能吃各种格式的输入以及分析完之后自动把任务通知到每个人。以下是更新版本后的飞书效果和Email效果改了什么一共动了三个地方第一刀重写 System Prompt教 Agent 认识聊天记录上一版的 system prompt 只告诉 Agent 你会收到一段会议记录很笼统。Agent 看到飞书聊天记录那种带时间戳、带发言人的格式就懵了。这一版我把 prompt 改成了分格式教学——明确告诉 Agent 你可能收到三种输入格式 A会议文字笔记。就是上一版支持的某个人凭记忆写的会议摘要连续段落没有发言人标记。格式 B聊天记录。这是这次重点支持的。从飞书、微信、钉钉复制出来的群聊记录特征是每条消息前面有发言人姓名可能还带时间戳。我在 prompt 里列了常见的格式比如张明 2026/5/7 14:30、[14:30] 张明这些。格式 C语音转文字稿。比如用 Whisper 转出来的文字标点可能不准没有分段可能有错别字。关键是我还告诉了 Agent 一套处理规则处理要求 - 自动识别发言人和消息内容 - 忽略系统消息如xxx 加入了群聊、xxx 撤回了一条消息 - 忽略纯表情包、纯图片占位符如 [图片]、[表情]、[动画表情] - 合并同一个人连续的多条消息这些规则很重要。如果不写Agent 会把xxx 加入了群聊也当成讨论内容来分析或者把 [表情] 当成一个未知需求。写了之后它就知道这些东西该跳过。而且 Agent 不需要用户告诉它这是聊天记录还是这是会议笔记——它自己判断。这就是 prompt 里最后一句话的作用你需要自动判断输入属于哪种格式无需用户告知。第二刀加了三个新工具打通通知链路上一版只有 2 个工具获取日期、保存文件这一版加到了 5 个get_team_members —— 读取团队成员信息。我创建了一个 team.json 文件里面存了每个人的姓名、角色、邮箱和飞书 ID。Agent 分析完会议内容后会调用这个工具查找每个负责人的联系方式。send_email —— 给指定成员发邮件。Agent 会根据任务分配表给每个有任务的人单独发一封邮件内容只包含这个人的任务、截止时间和优先级。不会把所有人的任务混在一起。send_feishu —— 往飞书群发消息。通过 Webhook 发送一条卡片消息包含会议主题、关键决策和任务概览。而且可以 提到的相关人员让他们收到专门的通知提醒。这三个工具的代码结构跟上一版的工具一样先定义 input_schema 告诉模型参数格式再写一个实现函数。模型根据描述自主决定什么时候调用。比如 send_email 的定义{ name: send_email, description: Send an email to a team member. Use this AFTER generating the task list to notify each person about their assigned tasks., input_schema: { properties: { to_email: {type: string, description: Recipient email address.}, to_name: {type: string, description: Recipient name.}, subject: {type: string, description: Email subject.}, body: {type: string, description: Email body in plain text.}, }, required: [to_email, to_name, subject, body], }, }注意 description 里写了Use this AFTER generating the task list——这句话不是写给人看的是写给模型看的。模型读到这句就知道应该先生成任务表再发邮件。工具描述写得好不好直接决定 Agent 的行为顺序对不对。第三刀升级 UI支持直接粘贴上一版只能上传 txt 文件不太方便。这一版在界面上加了一个文本框 tab可以直接把聊天记录粘贴进去。两种输入方式随便选。Agent 的完整工作流程改完之后Agent 的工作流程变成了这样1. 收到输入自动判断是会议笔记、聊天记录还是语音转写2. 按对应规则预处理过滤表情、系统消息等3. 分析内容生成三份文档会议纪要、任务分配、PRD 雏形4. 查询团队成员联系方式5. 飞书群发一条汇总消息相关人员6. 给每个有任务的人发邮件邮件里只有他自己的任务从粘贴聊天记录到每个人收到自己的任务邮件全自动中间不需要人工干预。踩了两个坑坑 1模型把系统消息当需求分析了最早没在 prompt 里写忽略系统消息的时候我丢了一段飞书聊天记录进去里面有一条xxx 加入了群聊。结果 Agent 在会议纪要里写了一条讨论了新成员加入的流程。这根本不是讨论内容是飞书自动生成的系统消息。解决办法就是在 prompt 里明确列出需要忽略的内容类型。你想让 Agent 忽略什么就得明确告诉它不能假设它能自动区分。坑 2邮件工具的参数是模型自己组装的一开始我很好奇我只是给了模型一个 send_email 工具的参数定义它怎么就能从会议内容里提取出每个人的任务然后自己填好邮件的收件人、标题和正文答案是模型真的会自己组装。它先调 get_team_members 拿到邮箱再根据任务分配表针对每个人生成一封个性化的邮件。你不需要写任何逻辑告诉它张明的任务是这些、邮箱是那个——你只需要定义好工具的参数格式和描述模型会自己搞定剩下的事。这就是 Agent 和传统编程最大的区别你定义能做什么模型自己决定怎么做。通知配置其实很简单有人可能觉得配置邮件和飞书很复杂。其实就是往 .env 文件里加几行邮件去你的邮箱设置里开启 SMTP拿到授权密码填进 .env。飞书在飞书群里添加一个自定义机器人复制 Webhook URL填进 .env。不想配也完全没关系Agent 发现没配置会自动跳过通知步骤继续生成文档不会报错。聊天记录 vs 会议笔记效果对比同一场会议我分别用会议笔记和飞书聊天记录两种格式丢给 Agent输出的会议纪要和任务分配表内容几乎一致。但聊天记录版本有个优势因为每条消息都带发言人Agent 能更准确地把任务分配到具体的人头上。下一步目前还有几个想做的事对话记忆。现在每次分析都是独立的Agent 不记得上次会议讨论了什么。如果能记住上下文就能做到上次会议遗留的三个问题这次解决了两个这种跨会议追踪。多 Agent 协作。让不同的 Agent 分别负责需求分析、技术评估、排期建议最后汇总成一份更完整的文档。下一篇预告我会给 Agent 加上记忆能力让它能记住历史会议的上下文做到跨会议的任务追踪。如果你也在做 Agent 相关的东西关注我别错过。