文章摘要
会议多、记录乱、整理累,还老是漏信息。文章带你从头到尾搭建一套“自动写纪要”的完整系统:本地大模型理解内容、LangChain 结构化输出、最后一键同步到飞书。

一、国内企业会议管理的真实痛点

在国内企业日常运营中,会议纪要整理是个让人头疼的问题

  1. 会议频繁,记录混乱:销售周会、项目复盘、客户沟通,每天都有大量会议,手写记录往往零散、不规范
  2. 整理耗时:会后需要人工梳理要点、提取行动项、分配负责人,一场1小时会议可能需要30分钟整理
  3. 信息丢失:口头讨论的决策、临时分配的任务,容易因为记录不及时而遗漏
  4. 归档困难:纪要散落在个人笔记、微信聊天、飞书文档里,后续追溯困难

本文将基于 LangChain v1 框架 + 本地开源大模型 + 飞书文档 API,搭建一套完全可控的会议纪要自动化系统,实现:

1. 将零散的会议记录转化为结构化纪要

2. 自动提取决策事项和行动清单

3. 人工审核后一键同步到飞书文档

全程使用国内可访问的技术栈,数据不出域,成本可控。


二、方案逻辑

整个系统分为三层:

输入层:

● 用户通过简单的 Web 界面粘贴会议原始记录

● 可选填写会议标题、日期、参会人员等元数据

处理层:

● 使用本地部署的开源大模型(如 Qwen、ChatGLM)理解会议内容

● 通过 LangChain v1 的结构化输出功能,强制模型按固定格式返回数据

● 生成包含摘要、决策、行动项的标准化纪要

输出层:

● 在 Web 界面预览生成的 Markdown 格式纪要

● 人工确认无误后,调用飞书文档 API 自动追加到指定团队文档

组件

选择

理由

大模型

Qwen2.5 (本地部署)

开源免费,中文能力强,可私有化部署

应用框架

LangChain v1

提供标准化的 Agent 构建方式和结构化输出

前端界面

Streamlit

Python 原生,无需前端开发经验

文档集成

飞书开放平台 API

国内主流协作工具,API 文档完善


LangChain v1 的关键改进(相比旧版本):

● 统一的 Agent 创建方式:不再有多种混乱的模式,只用 create_agent 一种标准流程

● 结构化输出保证:通过 Pydantic 模型定义数据格式,模型必须按此返回,避免解析失败

● 内容块标准化:无论用哪家模型(通义、文心、豆包),消息格式完全一致

● 中间件机制:可以在模型调用前后插入审批、日志、敏感信息过滤等环节


三、实操流程:从零搭建完整系统

步骤 1 准备本地模型环境

安装 Ollama(本地模型运行工具)

Ollama 是目前最简单的本地大模型部署方案,类似 Docker 的使用体验。

访问 Ollama 官网下载对应系统的安装包(支持 Windows/Mac/Linux):

https://ollama.com/download

安装后在命令行验证:

ollama --version

下载通义千问模型

在命令行执行:

ollama pull qwen2.5:7b

这会自动从 Ollama 官方库下载 Qwen2.5 的 7B 参数版本(约 4GB)。如果网络较慢,可以使用国内镜像源:

export OLLAMA_HOST=https://registry.cn-hangzhou.aliyuncs.com
ollama pull qwen2.5:7b

下载完成后启动模型服务:

ollama serve

服务默认运行在 http://localhost:11434,保持该窗口开启。

测试模型可用性

新开一个命令行窗口,测试模型是否正常响应:

ollama run qwen2.5:7b "你好,请用一句话介绍自己"

如果返回类似“我是通义千问,一个由阿里云开发的大型语言模型”的回复,说明模型已就绪。



步骤 2 配置飞书文档权限

要让程序能自动写入飞书文档,需要完成三个步骤:

  1. 创建飞书企业自建应用
  2. 获取文档写入权限
  3. 生成访问凭证

创建飞书自建应用

登录飞书开放平台(https://open.feishu.cn/):

点击右上角开发者后台,接着创建企业自建应用

填写应用名称(如会议纪要助手)

选择应用图标,点击创建


添加文档权限范围

在应用管理页面:

进入“权限管理”标签

搜索并开通以下权限:

docx:document (查看、编辑文档)

docx:document:readonly (查看文档)


在“版本管理和发布”创建1.0.0版本

获取访问凭证

在"凭证与基础信息"页面,记录以下两个值:

App ID(应用唯一标识)

App Secret(应用密钥)


创建目标飞书文档并获取 ID

在飞书中新建一个空白文档(云文档类型):

命名为"团队会议纪要汇总"

打开文档,查看浏览器地址栏

地址格式为:https://xxx.feishu.cn/wiki/xxxxxxxxxxxxxx

复制 /wiki/ 后面的长字符串,这就是文档 ID

将该文档分享给应用机器人(在文档设置中添加机器人为协作成员)。


步骤 3 安装项目依赖

创建项目文件夹并进入

mkdir meeting-recap-assistant
cd meeting-recap-assistant

创建虚拟环境

python -m venv venv
source venv/bin/activate # Windows 用 venv\Scripts\activate

安装核心依赖包

pip install streamlit==1.32.0
pip install langchain==0.1.0
pip install langchain-community==0.0.20
pip install pydantic==2.6.0
pip install python-dotenv==1.0.1
pip install requests==2.31.0

各依赖包作用说明:

streamlit:提供 Web 用户界面。

langchain 系列:作为 Agent 框架和模型封装。

pydantic:用于定义数据结构模型。

python-dotenv:管理环境变量(用于存放飞书密钥)。

requests:用于调用飞书 API。


步骤 4 定义会议纪要的数据结构

在项目文件夹创建 models.py 文件,定义标准化的输出格式,通过 Pydantic 模型强制模型按此结构返回数据。

核心数据结构

ActionItem 模型 (行动项):

  1. 责任人 (owner): 谁来做 (必填)。
  2. 具体任务 (task): 做什么 (必填)。
  3. 截止日期 (due_date): 什么时候完成 (必填)。

RecapDoc 模型 (完整纪要):

  1. 包含会议元信息 (标题、日期、参会人)。
  2. 内容摘要。
  3. 决策事项列表。
  4. 行动项列表 (List[ActionItem])。

设计优势: 结构化输出取代传统正则提取,大幅降低信息提取失败率。


步骤 5 编写模型调用逻辑

创建 llm_service.py 文件,实现与本地模型的交互。

核心流程

1.初始化模型连接:

使用 LangChain init_chat_model() 作为统一入口。

指定 model="ollama/qwen2.5:7b" 和本地 base_url。

2.绑定输出格式:

使用 withstructuredoutput(RecapDoc) 强制模型返回符合 RecapDoc 结构的 JSON。

3.构造提示词:

系统提示 (SystemMessage): 设定模型角色(会议纪要助手)和提取决策/行动项的规则。

用户提示 (HumanMessage): 包含实际会议内容和元数据。

4.调用模型生成:

invoke(messages) 发送请求。

返回结果是已验证的 Python 对象。

5.异常处理: 捕获格式错误或服务不可用异常,返回默认结构,避免程序崩溃。

避坑提示:确保 Ollama 服务在运行,首次调用需等待模型加载(10-30 秒)。


步骤 6 实现飞书文档写入

创建 feishu_service.py 文件,处理飞书 API 调用。

核心逻辑

1.获取访问令牌 (Access Token):

基于 App ID 和 App Secret 换取 Tenant Access Token。

Token 有效期 2 小时,需缓存复用。

调用 /auth/v3/tenantaccesstoken/internal/ 接口。

2.追加内容到文档:

获取文档当前内容,确定末尾位置索引 (end_index)。

构造插入请求,在 end_index - 1 位置插入文本。

调用 /docx/v1/documents/{documentid}/blocks/batchcreate 接口。

3.转换为飞书 Markdown:

将 RecapDoc 对象格式化为 Markdown 文本。

格式: 一级标题(会议名称 + 日期),列表展示决策和行动项。

行动项格式: 责任人 — 任务描述 (截止日期)。

关键参数:

插入位置是 end_index - 1,避开文档结束符。


步骤 7 搭建 Streamlit 交互界面

创建 app.py 文件,作为用户使用的 Web 应用。

界面布局

输入区 (左右分栏):

左侧大文本框:粘贴会议原始记录。

右侧元数据:会议标题、日期选择器、参会人员(逗号分隔)。

操作按钮:

"生成纪要":调用模型生成结构化纪要。

"同步到飞书":将纪要追加到飞书文档 (生成后可用)。

预览区: 实时显示 Markdown 格式的纪要预览。

核心交互逻辑

状态管理: 使用 Streamlit session_state 存储 recap 对象和 markdown_text,保持数据不丢失。

生成纪要流程: 验证输入 → 调用 generate_recap() → 转换为 Markdown → 存入 session_state。

同步飞书流程: 检查纪要是否存在 → 添加分隔标题 → 调用 append_to_feishu_doc() → 显示成功提示。

环境变量加载: 从 .env 文件加载飞书密钥和文档 ID。

避坑提示:

第一次点击"生成纪要"因模型加载会较慢(显示"正在处理...")。

检查 .env 文件确保飞书密钥正确。


步骤 8 配置环境变量

在项目根目录创建 .env 文件,用于存储密钥和配置。

# 飞书应用凭证
FEISHU_APP_ID=cli_a5xxxxxxxxxxxx
FEISHU_APP_SECRET=xxxxxxxxxxxxxxxxxxxxxx

# 飞书文档 ID
FEISHU_DOC_ID=xxxxxxxxxxxxxxxxxxxxxx

# 本地模型配置
OLLAMA_BASE_URL=http://localhost:11434
MODEL_NAME=qwen2.5:7b参数说明:

前三个是飞书相关配置,从步骤 2 获取

OLLAMA_BASE_URL:本地模型服务地址,默认端口 11434

MODEL_NAME:使用的具体模型版本

安全提示:

不要将 .env 文件上传到 Git 仓库

在项目根目录创建 .gitignore 文件,添加一行 .env


步骤 9 启动应用并测试

确认前置条件

运行前检查清单:

●  Ollama 服务正在运行(ollama serve 窗口开启)

●  已下载 qwen2.5:7b 模型

●  .env 文件已正确配置

●  飞书文档已分享给应用机器人

启动 Streamlit 应用

在项目目录执行:

streamlit run app.py
```
浏览器会自动打开 `http://localhost:8501`,显示应用界面。

测试流程

准备测试数据:

复制以下示例会议记录:今天讨论了 Q1 营销计划,张三提出要加大短视频投放,预算提升到 50 万。李四建议先做 A/B 测试,小范围验证转化率。最终决定周一前完成测试方案,由王五负责对接抖音渠道。另外产品侧反馈落地页加载慢,技术部承诺本周五优化完成。

操作步骤:

  1. 粘贴上述文本到左侧大文本框
  2. 填写标题:"Q1 营销计划讨论会"
  3. 选择日期:今天
  4. 填写参会人:"张三,李四,王五,技术部代表"
  5. 点击"生成纪要"按钮
  6. 确认内容无误后,点击"同步到飞书"
  7. 看到"同步成功"提示


四、场景延伸:还能用在哪些地方?

基于同样的技术架构,可以快速衍生出以下实用工具:

1.客户沟通记录整理

场景:销售、客服团队每天有大量客户对话(电话、微信)

改造方案:

输入:客户对话记录 + 客户基本信息

输出结构调整为:

class CustomerRecap(BaseModel):
      customer_name: str
      communication_date: str
      key_demands: List[str]  # 客户核心诉求
      promised_actions: List[ActionItem]  # 我方承诺事项
      next: str  # 下次跟进时间

存储到:企业 CRM 系统(通过 API)或飞书多维表格


2.项目周报自动生成

场景:项目经理需要每周汇总团队工作进展

改造方案:

输入:本周各成员的日报/周报文本

输出结构:

class WeeklyReport(BaseModel):
      week_range: str  # 如"2024-03-11 至 03-15"
      completed_tasks: List[str]
      in_progress_tasks: List[str]
      blockers: List[str]  # 遇到的问题
      nextan: List[str]

存储到:飞书项目看板或企业微信群公告


3.培训课程知识提炼

场景:企业内训、行业讲座后需要整理课程要点

改造方案:

输入:讲师 PPT 文字 + 学员笔记

输出结构:

class CourseDigest(BaseModel):
      course_title: str
      key_concepts: List[str]  # 核心概念
      practical_tips: List[str]  # 实操建议
      qa_summary: List[str]  # 问答环节整理
      reference_materials: List[str]  # 推荐资

存储到:企业知识库(如语雀、Notion 国内版)


以上内容不代表本平台立场,仅供读者参考