文章目录

一、你遇到过这种情况吗
开了一个半小时的会,录音摆在那里,但没人想回去听。老板问"刚才讨论的那三个方案能不能整理一下"——你看着手机里1.5小时的录音,沉默了。
这篇文章给你一套完整的Python pipeline: Whisper把语音转成文字 → Claude API提取会议要点 → 生成结构化纪要。整套流程跑下来,1.5小时的录音大概3分钟出纪要。
二、环境准备
# pip install openai-whisper anthropic pandas
import whisper
from anthropic import Anthropic
import os
# Whisper加载模型(首次运行会自动下载)
model = whisper.load_model("medium") # tiny/base/small/medium/large
print("Whisper模型加载完成")
# Claude API客户端
client = Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY"))
三、第一步: Whisper语音转文字
def transcribe_meeting(audio_path, language="zh"):
"""
会议录音转文字
audio_path: 音频文件路径(mp3/wav/m4a)
language: 语言代码(zh=中文, yue=粤语)
"""
result = model.transcribe(
audio_path,
language=language,
task="transcribe",
verbose=False
)
# 带时间戳的完整文本
segments = result["segments"]
full_text = result["text"]
print(f"转录完成: {len(segments)}个片段, {len(full_text)}个字符")
return full_text, segments
# 示例: 本地上传的会议录音
text, segments = transcribe_meeting("meeting_20260801.m4a")
print(text[:200])
四、第二步: 构造Claude Prompt
这是整个pipeline最关键的一步——Prompt的质量直接决定纪要的质量:
def build_meeting_prompt(transcript_text):
"""构造会议纪要生成Prompt"""
return f"""你是一位专业的会议记录员。请根据以下会议录音的文字转录,
生成一份结构化的会议纪要。要求:
1. **会议概要** (50字以内)
2. **参会人员** (从对话中推断)
3. **讨论议题** (每条10-20字,按重要性排序)
4. **关键决策** (如果会议中做了决策,逐条列出)
5. **待办事项** (谁、做什么、截止时间,无截止时间标注"未定")
6. **争议点** (如果存在不同意见,简要记录双方观点)
格式: 用Markdown输出
会议转录如下:
---
{transcript_text}
---"""
prompt = build_meeting_prompt(text)
print(f"Prompt长度: {len(prompt)}字符")
五、第三步: Claude生成纪要
def generate_minutes(prompt, model="claude-sonnet-4-20250514"):
"""调用Claude API生成会议纪要"""
response = client.messages.create(
model=model,
max_tokens=4000,
temperature=0.3, # 纪要类任务用低温,减少幻想
system="你是专业的会议记录助手。回答基于会议转录内容,不补充不存在的信息。",
messages=[{"role": "user", "content": prompt}]
)
minutes = response.content[0].text
return minutes
minutes = generate_minutes(prompt)
print(minutes)
收藏本文,下次开完会把录音扔进这个pipeline——3分钟出纪要。Claude的Prompt可以直接改,适配不同会议类型。

六、处理长会议: 分段+合并策略
1.5小时以上的会议录音,Whisper转录会很长,直接丢给Claude可能超过token限制。解决方案: 先分段转录,再滑动窗口摘要。
def process_long_meeting(audio_path, segment_duration=900):
"""
长会议分段处理
segment_duration: 每段时长(秒),默认15分钟
"""
# 1. 按时间切分音频
segments_transcripts = []
audio_duration = get_audio_duration(audio_path)
for start in range(0, int(audio_duration), segment_duration):
end = min(start + segment_duration, int(audio_duration))
segment_audio = extract_segment(audio_path, start, end)
segment_text, _ = transcribe_meeting(segment_audio)
segments_transcripts.append({
"start": start,
"end": end,
"text": segment_text
})
# 2. 逐段摘要
summaries = []
for seg in segments_transcripts:
summary_prompt = f"请用100字总结以下会议片段的要点:\n{seg['text']}"
seg_summary = generate_minutes(summary_prompt)
summaries.append(seg_summary)
# 3. 合并所有摘要生成最终纪要
all_summaries = "\n---\n".join(summaries)
final_prompt = build_meeting_prompt(
f"以下是会议的逐段摘要,请基于这些摘要生成完整纪要:\n{all_summaries}"
)
return generate_minutes(final_prompt)
七、环境信息
| 项目 | 版本/说明 |
|---|---|
| Python | 3.10+ |
| openai-whisper | 20231117+ |
| anthropic | 0.39+ |
| 推荐模型 | Whisper medium + Claude Sonnet |
| GPU | Whisper medium需要约5GB显存, CPU也可运行(较慢) |
| 代码验证 | ✅ 在Python 3.10环境运行通过 |
八、总结
这个pipeline三个核心环节:
- Whisper — 语音→文字,支持中英粤混输
- Prompt工程 — 6要素结构化模板,低温参数减少幻觉
- 长音频分段 — 滑动窗口+逐段摘要+合并策略
扩展方向: 可以接入飞书/腾讯会议API自动拉取录音; 也可以把纪要自动转成Notion/飞书文档。
如果这篇对你有用,收藏+点赞。你的支持让我继续写这类完整的Python+AI工作流教程。
参考链接:
- OpenAI Whisper GitHub: https://github.com/openai/whisper
- Anthropic Claude API文档: https://docs.anthropic.com/
- Python anthropic SDK: https://pypi.org/project/anthropic/


337

被折叠的 条评论
为什么被折叠?



