meeting_summury/README.md

3.3 KiB
Raw Permalink Blame History

Meeting Summary Lab

这是从 Meetily 提取出的纯 Python 长会议总结测试项目。输入是已经得到的会议文字稿;不含 ASR、音频、数据库、录音或界面。

它严格复现原项目的核心路线:

完整文字稿
  -> 估算 token 数
  -> 超过阈值则按窗口切块(相邻块重叠 100 tokens
  -> 每个块提取关键点、决策、行动项、人员
  -> 一次性合并各块摘要
  -> 按 Markdown 模板生成最终会议纪要

默认采用与原项目一致的粗略估算:字符数 * 0.35。块切分优先在句末(. )或空格处断开。

安装

项目依赖 PyYAML用于加载可编辑的 YAML 提示词配置。可直接用源码运行:

cd meeting-summary-lab
$env:PYTHONPATH = "src"
python -m meeting_summary_lab chunk --input .\examples\meeting.txt --context-tokens 4096
python -m meeting_summary_lab summarize --input .\examples\meeting.txt --fake --output .\report.md

也可以安装为本地命令:

python -m pip install -e .
meeting-summary-lab summarize --input .\examples\meeting.txt --fake

可独立测试的功能单元

单元 命令 / API 用途
Token 估算 rough_token_count(text) 验证触发分块的阈值
切块 chunk_text(text, size, overlap)chunk 验证块尺寸、重叠与边界
单块摘要 SummarizationPipeline.summarize_chunk() 验证 map prompt
摘要合并 combine_chunk_summaries() 验证 reduce prompt
模板报告 render_final_report() 验证 Markdown 模板化
全链路 summarize 验证单次/分块两种路径

调整提示词

默认中文提示词位于 prompt/zh/base.yaml。其中 system 管理各阶段系统提示词,prompts 管理 map、reduce 和最终报告的用户提示词模板,templates.final_output 管理默认 Markdown 结构。修改 YAML 后,下次启动程序即可生效,无需改动 Python 代码。

使用真实本地模型Ollama

先启动 Ollama 并准备模型,例如:

ollama pull qwen3:4b
$env:PYTHONPATH = "src"
python -m meeting_summary_lab summarize `
  --input .\examples\meeting.txt `
  --endpoint http://localhost:11434/v1 `
  --model qwen3:4b `
  --context-tokens 8192 `
  --output .\report.md

客户端使用 OpenAI 兼容的 /chat/completions 协议,因此也可以指向 vLLM、LM Studio 或企业内部兼容网关。--api-key 是可选的;默认从 OPENAI_API_KEY 读取。

离线全流程测试

加入 --fake 可使用确定性测试模型:它不会调用任何网络,而是记录每一步 prompt 并生成可检查的占位结果。这适合验证切块、调用次数和模板结构;不代表真实模型质量。

$env:PYTHONPATH = "src"
python -m unittest discover -s tests -v
python -m meeting_summary_lab summarize --input .\examples\meeting.txt --fake --context-tokens 500

与 Meetily 原实现一致的限制

这是单层 Map-Reduce:块摘要会在一次请求中统一合并,随后再执行一次模板化请求。极端长会议可能使“摘要合并”或“最终模板化”仍超出上下文;该项目刻意保留这一行为,方便复现和测试。若你要消除该限制,可在 combine_chunk_summaries() 外再套递归分组归并。