用阿里云AI服务构建基层卫生语音随访系统
背景与问题
基层医疗卫生机构承担着大量随访任务,比如高血压和糖尿病患者的定期随访、老年人健康管理、产后访视等。传统的人工电话随访需要村医或护士逐个拨打电话,询问用药情况、记录症状并提醒复查,耗时长、工作量大,而且话术和记录质量容易参差不齐。尤其在人手不足的乡镇卫生院,随访完成率常常不理想。
AI语音随访系统可以自动拨打患者电话,通过语音识别理解患者回答,结合大模型生成个性化追问和健康指导,最后自动生成结构化随访记录。这样不仅能够提升效率,还可以使随访过程更加规范,缓解基层医务人员压力。
方案设计
系统架构
系统分为接入层、AI能力层、业务逻辑层和数据层。
- 接入层:负责电话呼入呼出、音频流控制,可以使用运营商语音网关或SIP呼叫平台。
- AI能力层:语音识别、大模型对话、语音合成。在阿里云上分别使用DashScope中的Paraformer、qwen系列和CosyVoice/Sambert。
- 业务逻辑层:使用函数计算或ECS上的Python服务处理对话状态,维护多轮会话,并调用数据层读写随访记录。
- 数据层:使用云数据库RDS存储患者档案、随访计划和结果,使用对象存储OSS保存通话录音和转写文本。
核心流程
- 系统在预定时间发起外呼,接通后播放开场白。
- 患者说话,音频实时上传,通过ASR转换为文本。
- 业务逻辑把患者文本和档案信息组装为提示词,调用qwen大模型生成回应。
- TTS把回应配音并播放给患者。
- 重复第2到第4步直到随访结束,系统自动生成随访报告。
实现步骤
- 开通阿里云百炼或模型服务灵积(DashScope),获取API Key。
- 安装SDK:
pip install dashscope。 - 准备一个测试音频文件,建议使用16kHz、16bit、单声道wav格式。
- 编写代码,先跑通“语音识别—大模型—语音合成”链路。
- 把代码部署到函数计算,并提供HTTP接口给呼叫网关调用。
在模型选择上,推荐如下组合:
- ASR:
paraformer-v2(离线文件转写)或paraformer-realtime-v2(实时流式识别) - 对话:
qwen-plus,适合复杂多轮对话;预算有限时可以换qwen-turbo - TTS:
cosyvoice-v1,音色自然;也可以用sambert-zhichu-v1
模块对照表
| 模块 | 推荐服务/模型 | 说明 |
|---|---|---|
| 语音识别 | Paraformer | 中文识别效果好,支持实时和离线 |
| 对话生成 | qwen-plus | 负责多轮问答与健康指导 |
| 语音合成 | CosyVoice | 把文本转成自然语音 |
| 业务运行 | 函数计算 | 免运维,按调用次数计费 |
| 数据存储 | 云数据库RDS + OSS | 保存档案、随访记录和录音 |
代码示例与关键说明
下面给出一段可运行的Python核心代码,演示智能随访助手的对话生成能力。为了简单起见,这里用命令行输入替代ASR输出;实际系统中,患者语音会先经Paraformer识别成文本,再调用这段对话逻辑。代码需要设置环境变量DASHSCOPE_API_KEY。
import os
import dashscope
from dashscope import Generation
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')
def generate_followup(user_text, patient_profile):
system_prompt = (
'你是一名基层医疗卫生随访助手,请用专业、亲切的口吻和患者继续对话。'
'根据患者回答和档案信息,输出下一句提问或健康建议,不超过五十字。'
)
user_prompt = f'患者档案:{patient_profile};患者刚才说:{user_text}'
resp = Generation.call(
model='qwen-plus',
messages=[
{
'role': 'system', 'content': system_prompt},
{
'role': 'user', 'content': user_prompt}
],
result_format='message',
temperature=0.6
)
return resp.output.choices[0].message.content
if __name__ == '__main__':
profile = '男,58岁,高血压病史5年,近期随访'
print('请输入患者回答(模拟ASR文本):')
user_input = input()
reply = generate_followup(user_input, profile)
print('AI随访助手:' + reply)
关键步骤解释
- 对话提示词设计:
system_prompt把模型约束为“基层医疗卫生随访助手”,同时要求输出不超过五十字,避免生成过于冗长的回答。这是控制医疗话术质量的关键。 - 患者档案拼接:
user_prompt把患者档案和当前ASR文本组合在一起。生产环境中,档案要从RDS读取,也可以把历史血压、用药记录等作为上下文传入,让回答更个性化。 - 模型参数:使用
qwen-plus,temperature=0.6可以平衡确定性和多样性。医疗场景建议温度不要太高。 - 语音扩展:在真实语音系统中,ASR接口的文本就是这里的
user_input,而reply会被送到TTS服务合成语音并播放。Paraformer和CosyVoice的接入方式与上述Generation调用类似,均为传入参数后获得结果。
注意事项
- 医疗合规:AI生成内容只能作为健康建议,不能替代医生诊断。提示词中要加入免责声明,遇到紧急症状时引导患者尽快就医。
- 隐私保护:患者语音和健康信息非常敏感,需要使用HTTPS传输、数据库加密和访问控制。录音文件建议放在OSS私有Bucket,并按需设置生命周期策略。
- 外呼规范:避免在休息时间打扰患者,建议工作日上午9点到晚上8点之间外呼。连续未接通时,要安排人工回访。
- 音频格式:ASR模型对采样率有要求,建议在接入层统一转码为16kHz、16bit、单声道PCM,减少识别错误。
- 异常处理:如果ASR置信度较低,可以设计澄清话术,让患者再说一遍;超过两次失败则转人工。
- 成本控制:大模型按token计费,TTS按字数计费。可以通过限制输出长度、批量处理或使用小模型降低成本。
总结
基层卫生AI语音随访系统并不是一个遥不可及的智能应用。借助阿里云DashScope提供的语音识别、大模型对话和语音合成能力,我们可以快速搭建一条完整的语音交互链路。本文给出的代码示例聚焦于对话生成模块,这是整个随访系统的核心;实际部署时,再接入电话网关、实时语音流、数据库和合规机制,就能形成一个面向基层医疗场景、可落地的AI随访系统。