进阶 11 分钟健康

医疗:转录 consultations

直接回答

是:Whisper(faster-whisper)实现音频转录,本地LLM生成会议纪要,所有数据均不离开医生的工作站。本地模型不会清除相关框架:专业保密、告知患者并尊重其反对权、语音录制同意、第三方存储时由HDS托管、以及由医生本人进行的复核。

晚上撰写诊疗报告的医生,可以借助本地运行的“音频—转录—结构化报告”处理流程节省时间。您将学会搭建这一流程,了解其局限(幻觉、上下文截断),并遵守 HAS、CNIL 和法国医师公会规定的框架,同时纠正一些常见误解。

作者: Mohamed Meguedmi·更新于 2026-09-30·已在 Windows、macOS 和 Linux 上测试

#在本地转录诊疗咨询:哪些操作允许进行,需要满足哪些条件

是的,医生可以使用人工智能在不将音频传出工作台的情况下完成病历转录:Whisper负责语音转写,一个本地大语言模型(通过 Ollama)生成结构化的病历记录,专业人员随后进行审阅和确认。这并不会免除法律义务。2026年法国卫生局(HAS)和法国数据保护机构(CNIL)发布的指南明确指出,引入人工智能系统并不会改变《公共卫生法》第L.1110-4条规定的专业保密义务。同时,必须向患者告知情况并尊重其反对权。若将数据交由第三方托管,则托管方必须具备HDS认证。本地化处理恰恰避免了这种数据传输及其潜在风险。本指南首先构建了完整流程,随后详细说明了法律框架和必须执行的验证步骤,并纠正了一些常见误解。

根据同一指南,诊疗过程的自动转录是生成式 AI 在医疗场景中最常见的用途。因此,关键不在于能否做到,而在于如何妥善完成。

!
本指南不构成法律意见
这里涉及的法律要点来自法国高等卫生管理局(HAS)、法国国家信息与自由委员会(CNIL)和法国医师协会全国理事会发布的指南。请根据您的具体情况(单独执业、多专业医疗中心或医疗机构),让您的数据保护官(DPO)或所属医师协会的相关机构审核确认该方案。

#法国框架:官方指南中的内容

本地 AI 套件

只需 1 小时,即可在您的电脑上拥有专属的免费 ChatGPT — LM Studio、Ollama、Open WebUI、您的文档,无需云端。

  • 在线空间,终身可用
  • PDF + 文件
  • 终身更新

该表格列出了各项要求及其对本地管道的具体影响,同时纠正了两个普遍误解:患者同意并非数据处理的法律基础,且HDS并非原则性要求,仅在第三方托管数据时才需遵守。

本地处理流程的要求及其影响
主题指南中的说明实际影响
职业保密义务人工智能不会改变 CSP 第 L. 1110-4 条所规定的规则报告仍需保密;限制对设备的访问权限
托管托管健康数据(云服务)的第三方必须获得健康数据托管认证在医生的本地设备上处理:数据流中不涉及第三方托管服务
法律依据法国数据保护局(CNIL)认为,同意既不是此类处理的法律基础,也不是例外情况请与您的 DPO 一起记录所采用的法律依据;不要以为勾选一个复选框就足够了
信息在大多数情况下,只需提供如实、易于获取的告知信息,并保障当事人的反对权通过展示告知信息或口头说明,让对方知道本次问诊会被转录;尊重对方拒绝转录的意愿。
语音录制根据《民法典》,使用能够识别个人身份的语音录音须取得同意在录制语音前必须获得患者的同意
诊疗记录审核不应由未在场参与诊疗的第三方(如秘书)审核确认接诊过该患者的医生亲自复核
保留在没有专门针对独立执业的法规条文时,医师协会理事会建议期限为最后一次就诊后的 20 年记录的保留也遵循这一期限;原始音频没有保留的必要

#需摒弃的两个常见误解

第一个常见误解:「ChatGPT被明确禁止使用」。相关规定并不针对任何特定工具。问题是结构性的:将健康数据发送到在线服务,会使数据离开您的电脑,因此需要经认证的托管服务商、数据处理委托合同以及适当的信息告知。此外,HAS和CNIL的指南指出,将敏感数据纳入发送给在线对话智能体的请求,会带来违反医疗保密义务的风险。

第二个误解:“本地就意味着合规”。本地处理免去了数据传输,却没有免除维护记录、告知患者、保障工作站安全,以及考虑是否需要进行影响评估的义务。指南将 AIPD 列为部署方在适用情况下的义务:请寻求协助,确定是否需要开展这项评估,以及您的工具是否可能被认定为医疗器械。

#技术栈:Whisper、本地 LLM,以及可选的说话人分段功能

管道的组成部分
模块角色须知
faster-whisper音频转文字(基于 CTranslate2 的 Whisper 实现)据称,在精度相同的情况下,速度最高可达原始实现的四倍
large-v3 模型Whisper 系列多语言模型,包含法语首次使用时下载;需用您自己的录音进行验证
Ollama + qwen3.5:9b撰写结构化报告90 亿参数模型;据 Ollama 模型库所列,大小为 6.6 GB
pyannote(可选)说话人分段:谁在何时说话接受模型的使用条款后,需使用 Hugging Face 访问令牌下载该模型

在吞吐量方面,faster-whisper 的文档提供了一组特定时期的参考数据:在配备 8 GB 显存的 RTX 3070 Ti 上,使用 large-v2 模型和 fp16,转录 13 分钟音频耗时 1 分 03 秒,占用 4,525 MB 显存(维护者的基准测试,CUDA 12.4)。同一批维护者测得,使用 int8 时耗时 59 秒,占用 2,926 MB 显存。这些是他们在自己机器上的测量结果,并非我们的测量:这些数据表明,一块性能不算强的显卡也能以快于实时的速度转录,但并不保证您的电脑也能达到这一表现。

i
在 Mac 上不支持 CUDA
faster-whisper 的官方示例展示了如何在 CPU 上以 int8 运行。在 Mac 上应采用这一配置:虽然比 NVIDIA GPU 慢,但足以在诊疗结束后进行非实时转录。

#安装

终端
python3 -m venv venv
source venv/bin/activate

pip install faster-whisper ollama
# Optionnel pour la diarisation :
pip install pyannote.audio
终端
# Le modèle Whisper se télécharge au premier usage.
# Modèle de rédaction via Ollama :
ollama pull qwen3.5:9b

使用 NVIDIA GPU 时,faster-whisper 需要适用于 CUDA 12 的 cuBLAS 和 cuDNN 9 库。缺少这些库,程序就会在加载模型时失败:请先安装这些库再测试,或切换到 CPU 模式。

#音频转写

以下脚本会固定语言、启用静音过滤(VAD),并为每个片段添加时间戳。请按实际情况修改第一行:使用 NVIDIA GPU 时,将 device 设为 cuda,并使用 float16;使用 Mac 或没有兼容显卡的 PC 时,将 device 设为 cpu,并使用 int8。

Python
from faster_whisper import WhisperModel

# GPU NVIDIA : device="cuda", compute_type="float16"
# Sans GPU compatible : device="cpu", compute_type="int8"
model = WhisperModel("large-v3", device="cuda", compute_type="float16")

MOTS_CLES = "amoxicilline, paracétamol, HbA1c, tension artérielle"

def transcribe(audio_path):
    segments, info = model.transcribe(
        audio_path,
        language="fr",
        beam_size=5,
        vad_filter=True,        # coupe les silences
        hotwords=MOTS_CLES,     # vocabulaire attendu
        word_timestamps=False,
    )
    lines = []
    for s in segments:
        ts = f"[{int(s.start // 60):02d}:{int(s.start % 60):02d}]"
        lines.append(f"{ts} {s.text.strip()}")
    return "\n".join(lines)

if __name__ == "__main__":
    import sys
    print(transcribe(sys.argv[1]))

hotwords 参数由 faster-whisper 的转录函数提供,可向模型建议预期术语:药物名称、缩写、检查项目。该功能可提供帮助,但不能保证准确:请始终重新检查专有名词和剂量。

#Whisper 可能写出根本没人说过的话

large-v3 的模型卡提醒,预测结果可能包含音频中没有出现的文本,模型卡将这种现象称为“幻觉”。在诊疗过程中,这可能表现为在静音片段中编造一句看似合理的话、改变一个数字,或生成一个相近但错误的药物名称。VAD 过滤器可以降低静音片段中的风险,但不能替代人工复核。

#撰写结构化报告

第二个脚本通过 Ollama 的 API 将转录文本发送给本地模型。两个设置很重要:较低的温度,以减少编造内容;以及足够大的上下文窗口。Ollama 文档说明,显存低于 24 GiB 时,默认上下文窗口约为 4,000 个 token。一次二十分钟的问诊约有 3,000 个词,即数千个 token(估算值,随语速而变化):如果没有明确设置 num_ctx,转录文本的末尾可能会被截断。因此,示例将上下文窗口设为 16,384 个 token。

Python
import requests

SYSTEM_CR = """Tu es un assistant pour médecin généraliste français.
À partir d'une TRANSCRIPTION BRUTE d'une consultation, tu produis un
compte-rendu médical structuré.

FORMAT DE SORTIE :
## Motif de consultation
## Antécédents (mentionnés)
## Examen clinique
## Diagnostic / Hypothèses
## Traitement / Prescriptions
## Suivi

RÈGLES :
- Reste TEXTUEL : n'ajoute aucun élément non mentionné dans la transcription.
- Reformule en vocabulaire médical standard.
- Si une section n'est pas abordée, écris "Non mentionné".
- Ne complète jamais une posologie ou un diagnostic absent.
"""

def summarize(transcription):
    r = requests.post("http://localhost:11434/api/chat", json={
        "model": "qwen3.5:9b",
        "messages": [
            {"role": "system", "content": SYSTEM_CR},
            {"role": "user",   "content": transcription},
        ],
        "stream": False,
        "options": {"temperature": 0.2, "num_ctx": 16384},
    })
    return r.json()["message"]["content"]

这个提示词运用了系统提示词指南中的原则:可验证的规则、明确的输出格式,以及信息缺失时应采取的行为。“未提及”这一指令很重要:它能防止模型用看似合理的假设填补空白章节。

#说话人分离:区分医生与患者

说话人分离会将每个片段归属到一个说话人(SPEAKER_00、SPEAKER_01)。它主要用于录制双人对话的诊疗过程本身;如果只是医生单人口述,则无需使用。pyannote 的代码仓库目前推荐 community-1 流水线:下载前需要在 Hugging Face 上接受其使用条款,并创建访问令牌。随后,推理在本地执行。

Python
import torch
from pyannote.audio import Pipeline

pipeline = Pipeline.from_pretrained(
    "pyannote/speaker-diarization-community-1",
    token="HUGGINGFACE_ACCESS_TOKEN",
)
pipeline.to(torch.device("cuda"))  # si un GPU est disponible

output = pipeline("consultation.wav")
for turn, speaker in output.speaker_diarization:
    print(f"{turn.start:.1f}s - {turn.end:.1f}s : {speaker}")
→
合并两个结果
对于涉及两位说话者的记录,请先根据时间戳对齐 Whisper 和 pyannote 的片段,再将文本发送给 LLM。关于 WhisperX 的指南介绍了一种能逐词完成这种对齐的工具。

#诊所中的典型工作流程

  1. 01
    告知患者
    录音前,请告知患者,问诊或口述内容将由本地工具转录,患者可以提出反对。如果要录下患者的声音,请征得其同意。将告知情况记录在病历中。
  2. 02
    录音
    有两种选择:诊疗结束后口述1到2分钟的笔记(此时不再录制患者的声音),或录制诊疗对话(必须取得口头同意,说话人分离也有帮助)。口述笔记可以尽量减少收集的数据。
  3. 03
    将文件放到工作站上
    将音频文件(WAV、MP3、M4A)传输到一个专用且加密的文件夹中。一个简单的脚本会监控该文件夹,并触发处理流程。
  4. 04
    启动处理流程
    脚本会转录音频、生成摘要,将记录以文本文件形式保存在音频文件旁,并将操作写入日志,但不在日志中写入医疗内容。
  5. 05
    亲自复核并确认
    看过患者的医生会重新阅读病历记录,进行修改,然后将其导入到自己的诊所管理软件中。咨询过程中未在场的第三方无法识别幻觉。
  6. 06
    删除原始音频
    报告审核通过后,请删除音频和中间转录文本:这些数据已不再有处理用途,而报告则随病历一同保存。

#复核时需要检查哪些内容

生成报告的审阅检查表
元素风险验证
药品及剂量名称相近,单位或用药方案被改动与实际处方进行对比
既往病史捏造病史,或将病史归到错误的患者名下与病历核对
否定表述« 无发热 » 被错误识别为 « 发热 »复核否定句
空白章节用看似合理的假设代替“未提及”检查是否有任何内容被补写
日期和时长疗程时长或随访间隔有误与实际说过的内容交叉核对
数据处理活动登记册
CNIL 与法国医师公会的指南要求维护一份数据处理活动登记册;请在其中添加一条记录,描述这套本地处理流程及其用途。
数据保留时长
报告的保存期限与医疗档案一致(按照医师协会的建议,在最后一次就诊后保存 20 年)。报告确认无误后,原始音频不再需要,应予删除。
加密与备份
对磁盘进行加密(FileVault、BitLocker、LUKS),并定期备份到保存在诊所之外的加密存储介质上。计算机被盗时,若其中存有明文健康数据,就构成数据泄露。
可追溯性
保留告知患者的记录、工具版本记录以及医生审核确认的记录:这些是在接受检查时用于举证的材料。
FAQ
可以用 AI 转录医疗问诊吗?+
是的,但需符合以下条件:专业保密义务依然适用,患者必须被告知并有权拒绝,录音需获得其同意,病历必须由医生审核。本地处理可避免数据传输至第三方托管服务,但并不免除其他义务。
转录患者的就诊过程需要患者同意吗?+
在数据处理方面,CNIL 认为,同意既不是法律依据,也不是例外情形:原则上,告知当事人并保障其反对权就足够了。不过,根据《民法典》,录制可识别身份的个人的声音需要获得其同意。在诊疗结束后口述自己的笔记,可以避开这个问题。
本地处理流程是否必须使用 HDS 托管服务商?+
该义务针对委托给第三方进行存储的健康数据,例如存储在云服务上。如果在医生的本地设备上进行处理且不发生数据传输,则不会涉及第三方托管服务。如果您添加了远程备份或在线服务,该问题将再次出现。
Whisper在处理法语医学词汇方面是否可靠?+
Whisper large-v3 是该系列的标杆模型,但其模型说明指出,它可能生成音频中不存在的文本。药品名称、缩写和剂量是容易出错的部分。hotwords 参数有所帮助,但人工复核仍然必不可少,而且任何人都不应代替医生作出最终确认。
医疗秘书能否审核确认生成的诊疗记录?+
HAS 和 CNIL 指南建议,病历报告不应由未参与诊疗的第三方审核,因为其无法识别幻觉。由实际接诊的医生负责审阅和确认,秘书可随后对文档进行分类或整合。
要运行这个流程需要什么样的配置?+
根据 faster-whisper 的测量,配备 8 GB 显存的 NVIDIA GPU 转录速度快于实时;根据 Ollama 模型库,一个拥有 90 亿参数的写作模型需要 6.6 GB 内存。没有 GPU 时,也可以使用 int8 CPU 模式,但速度更慢:请安排非实时处理。
这份指南对您有帮助吗?

有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。