基于阿里云百炼构建AI心理健康助手:情绪识别与共情对话实现
背景与问题
世界卫生组织数据显示,全球超3亿人患有抑郁症,而焦虑症患者更多。然而,专业心理咨询资源分布不均,很多人因为病耻感、费用或时间限制无法获得及时支持。AI心理健康助手可以作为一个低门槛的“心理急救”工具,提供情绪安抚、认知疏导和危机提醒,帮助用户度过情绪低谷。
方案设计
本文基于阿里云百炼平台的大模型服务(通义千问 Qwen),设计一个轻量级 AI 心理健康助手。核心能力包括:
- 情绪识别:从用户表述中识别焦虑、抑郁、愤怒、平静等情绪状态。
- 共情回应:用温暖、专业、非评判的语言回应用户。
- 危机预警:当检测到自杀、自残等高风险词语时,立即给出紧急求助指引。
整个方案无需自建 GPU 服务,只需要通过 HTTP 调用百炼 API,成本低、部署快。实现上使用 Python 语言和 requests 库。
实现步骤
- 登录阿里云百炼控制台,开通大模型服务,并创建一个 API Key。将 Key 保存在环境变量
DASHSCOPE_API_KEY中。 - 在本地 Python 环境中安装
requests库:pip install requests。 - 编写通用函数
call_qwen,负责构造请求并解析响应。 - 实现
mental_health_assistant函数,先判断危机关键词,再调用大模型完成情绪识别与回复。 - 运行示例,观察输出结果。
代码实现
以下为完整示例代码(假设环境变量已配置):
import os
import requests
def call_qwen(messages):
'''调用阿里云百炼通义千问模型,返回文本内容'''
api_key = os.environ.get('DASHSCOPE_API_KEY')
if not api_key:
raise ValueError('请设置环境变量 DASHSCOPE_API_KEY')
url = 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation'
headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
}
payload = {
'model': 'qwen-plus',
'input': {
'messages': messages},
'parameters': {
'result_format': 'message'}
}
resp = requests.post(url, headers=headers, json=payload)
resp.raise_for_status()
result = resp.json()
return result['output']['choices'][0]['message']['content']
def mental_health_assistant(user_text):
# 危机关键词快速检测
crisis_keywords = ['自杀', '不想活', '结束生命', '自残']
for word in crisis_keywords:
if word in user_text:
return {
'emotion': 'crisis',
'reply': '我看到你正在经历巨大的痛苦。请立即联系当地心理援助热线(如12355)或你信任的人,不要独自承受。'
}
# 构造提示词,要求模型按指定格式输出
prompt = f'''
你是“治愈心语”,一名专业的 AI 心理咨询助手。你以温暖、共情、不评判的态度陪伴用户。
请完成两件事:
1. 判断用户当前最核心的情绪,可选值:焦虑、抑郁、愤怒、孤独、平静、其他。
2. 以一段话回应用户,内容要体现理解、接纳,并提供适度疏导。
请按以下格式输出(不要输出多余内容):
情绪:<情绪>
回应:<你的回应>
用户说:{user_text}
'''
messages = [{
'role': 'user', 'content': prompt}]
raw_result = call_qwen(messages)
# 解析模型输出:按行读取,匹配“情绪:”和“回应:”前缀
lines = raw_result.strip().splitlines()
emotion = 'unknown'
reply = raw_result
for line in lines:
if line.startswith('情绪:'):
emotion = line[len('情绪:'):].strip()
elif line.startswith('回应:'):
reply = line[len('回应:'):].strip()
return {
'emotion': emotion, 'reply': reply}
if __name__ == '__main__':
user_input = '最近工作压力很大,总是觉得自己很差劲,很沮丧,对未来不抱希望。'
result = mental_health_assistant(user_input)
print('情绪标签:', result['emotion'])
print('助手回复:', result['reply'])
关键代码说明
1. 调用百炼 API
call_qwen 函数通过 POST 请求访问百炼的文生文接口。请求体中的 model 指定使用 qwen-plus,input.messages 用于传递对话上下文。设置 result_format: message 可以拿到结构化的回复,便于后续处理。
2. 提示词与输出解析
我们设计的提示词要求模型输出两行固定格式的内容:情绪:xxx 和 回应:xxx。相比直接让模型输出 JSON,这种格式对初学者更友好,也避免了解析时的转义问题。在解析时,我们使用 splitlines() 按行拆分,再通过 startswith 匹配前缀,从而提取情绪标签和回复文本。
3. 危机干预机制
在调用大模型之前,我们先用关键词列表进行检查。一旦命中,立即返回紧急求助信息。这是为了规避模型响应延迟和可能的不当回复,确保高风险场景下用户能第一时间看到求助指引。当然,关键词检测不能覆盖所有情况,实际产品中需要更完善的安全策略。
注意事项
- 隐私保护:用户的倾诉往往包含敏感个人信息。在生产环境中,应对消息做脱敏处理,日志中不要记录原始对话,并启用阿里云服务的数据加密能力。
- 不替代专业医疗:AI 心理咨询助手不能替代精神科医生或心理咨询师。在回复中应明确说明局限性,建议持续低落或症状严重的用户寻求线下专业帮助。
- 模型幻觉与误判:大模型可能给出不准确或片面的建议,甚至生成过激内容。建议接入内容安全服务,对输出进行过滤,并设置高风险的熔断策略。
- 伦理与合规:对于未成年人或特殊人群,应增加年龄验证和监护人告知机制。同时遵循 AI 伦理,避免诱导用户透露更多隐私。
总结
本文展示了如何借助阿里云百炼快速搭建 AI 心理健康助手。利用通义千问的自然语言理解能力,我们可以实现情绪识别、共情表达和危机预警三大核心功能。整套代码不到 100 行,非常适合作为 AI 应用开发的第一课。未来还可以结合知识库(如百炼的知识检索)为助手补充专业心理科普内容,或通过函数计算实现按需弹性部署。希望这篇文章能给你带来启发,用技术守护更多人的心理健康。