|
|
||
|---|---|---|
| examples | ||
| prompt | ||
| src/meeting_summary_lab | ||
| tests | ||
| .env.example | ||
| .gitignore | ||
| README.md | ||
| prompt_loader.py | ||
| pyproject.toml | ||
README.md
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() 外再套递归分组归并。