语音实时客服agent(ai编程prompt版)
目标
请帮我实现一个ai语音客服系统。
任务描述
ai语音客服系统由agent客服和人工客服组成,能够通过语音与用户进行交互,理解用户的语音指令,并根据指令提供相应的服务,从而让agent客服尽可能代替人工客服。
一、业务需求
- 支持机票预定,
- 支持机票退票,
- 支持机人工客服通道,
二、整体流程
- 用户输入语音后用vad进行语音活动检测。
- vad检测后,用轮次模型检测用户是否说完一句话。
- 轮次检测完成后,可以对语音实时转文本。
- 对识别的文本进行意图识别、命名实体识别、情绪识别、骂人识别。
- 统计连续呼叫人工客服次数,连续重复问题次数,实时记录对话状态信息。
- 根据人工客服触发条件选择人工客服或agent客服。
- agent客服
- 对用户意图进行槽位填充,和用户多轮交互,直到意图槽位填充完成。
- 调用系统工具,根据工具调用结果、意图等生成最终回答文本。
- 对回答的文本进行语音合成。
- 回答的语音需要实时播放给用户。
- 人工客服
- 人工处理后,记录对话结束时间(可以用于意图结束时间)。
- 异常情况
- agent客服任意步骤失败,需要提供N(默认3)次重试机制。如果还失败,则需要人工客服处理。
- 用户等待客服时间超过N(默认10)秒,需要系统话术安慰用户,比如:正在处理中,请耐心等待。
三、要记录的对话状态信息
- 意图和槽位信息。
- 当前意图已经识别的命名实体。
- 意图完成标识和完成的时间。
- 骂人的次数。
- 负面情绪和置信度分值。
- 连续呼叫人工客服的次数。
- 连续用户重复问题的次数。
- 其他你需要的信息。
四、人工客服触发条件:
- 意图符合系统库意图,用户重复问题N(默认3)次以上。
- 意图符合系统库意图,用户负面情绪置信度大于0.9。
- 意图符合系统库意图,用户出现骂人N(默认3)次以上。
- 主动要求人工客服N(默认3)次以上。
- agent客服步骤失败,重试N(默认3)次以上。
五、系统架构
- 后端请使用python实现。
- 请使用agentscope框架实现智能体。
- 请使用SQLite数据库持久化智能体记忆等。
- 请使用tortoise实现orm。
- 请使用fastapi实现后端接口。
- 请使用websocket实现语音流式传输。
- 请使用docker-compose实现部署。
六、功能需求
功能模块
vad检测
主要对用户输入的语音进行活动检测,判断是否有用户在说话(可以使用TEN VAD)。
轮次检测
主要对用户输入的语音进行轮次检测,判断用户是否说完一句话(可以使用TEN Turn Detection)。
语音识别
主要对用户输入的语音进行实时转换为文本,使用第三方接口,参考:https://help.aliyun.com/zh/model-studio/websocket-for-paraformer-real-time-service。
语音合成
主要对agent客服回答文本进行语音合成,使用第三方接口,参考:https://help.aliyun.com/zh/model-studio/cosyvoice-websocket-api?spm=a2c4g.11186623.help-menu-2400256.d_2_6_0_2.64ba7c98ZIlDIO。
agent客服
agent客服是一个多智能体系统,每个智能体负责不同的任务,介绍如下:
- 意图识别agent
主要负责识别用户的意图,可以识别多意图和层级意图,遍历所有意图并从意图库中匹配意图和槽位。
输入:同一个意图内的聊天历史,用户输入的语音文本。
输出:意图和槽位。 - 命名实体识别agent
主要负责识别用户输入的命名实体,如姓名、日期、时间、地点等。
输入:用户输入的语音文本。
输出:命名实体。 - 槽位填充agent
根据意图、槽位、命名实体,不断填充槽位,和用户多轮交互,直到意图所有槽位都被填充。
输入:命名实体识别agent输出的命名实体,意图识别agent识别的意图和槽位。
输出:需要用户提供的槽位话术、槽位是否填充完成标识。 - 情绪识别agent
识别用户的情绪,判断用户负面情绪以及负面情绪的置信度。
输入:用户输入的语音文本。
输出:负面情绪、负面情绪置信度。 - 骂人识别agent
识别用户是否骂人。
输入:用户输入的语音文本。
输出:骂人标识、骂人置信度。 - 最终回答agent
根据意图、工具调用结果、骂人识别结果,生成最终回答。
输入:用户输入的语音文本,工具调用结果、意图、是否骂人。
输出:模型回答或者系统话术回答。
内部tools
- 机票预定
输入:起始地,目的地,出发日期,姓名等。
输出:订单完成标识。 - 机票退票.
输入:订单id、订单日期、姓名等。
输出:退票完成标识。
意图检索
主要负责从系统库中检索意图,判断用户意图是否符合系统库意图,意图库直接存文件。
输入:意图识别agent识别的意图。
输出:系统库中符合意图的意图以及槽位。
前端模块
主要负责与用户进行交互,接收麦克风输入的语音,将语音发送给后端,接收后端返回的回答,将回答播放给用户。
七、代码目录层级
agents: 存放智能体代码。里面有tools目录(存放智能体代码),prompts目录(存放智能体的prompt代码),skill目录(存放智能体的技能代码),retrieves目录(存放rag检索代码)等。
vads: 存放vad检测代码。
turn_dets: 存放轮次检测代码。
conf: 存放配置文件,比如mysql配置。
orms: 存放数据库orm模型代码。
dbs: 存放基于orms的数据库操作代码。
logs: 存放logging初始化模块。
requirements.txt: 存放项目依赖的python包。
main.py: 项目入口文件。
audio_stream_client.py: 实现语音流式传输的客户端。
其他: 根据你的需要自己创建目录。
总结
我尝试了很多次,耗时比开发时间还久,但是对长期做项目还是有帮助的,因为很多事人在重复性做,有下面几条经验分享:
自己充当产品经理、架构师。把产品文档、边界问题、业务流程、工程模块尽可能想清楚。
prompt让agent按模块实现(方便程序员修改,比如数据库操作),分步骤,每个步骤结束人工确认下,再整体实现业务流程(prompt可以按模块实现)。
让agent给模块提供使用样例(给agent提供教程),单元测试校验(保证模块稳定性),输入输出。
prompt定义好项目规范和模块文件名。
prompt定义好程序员熟悉的第三方工具包。
使用第三方模块可以给agent提供api文档的skill。
前后端解耦实现,让agent输出后端接口。
更多推荐
所有评论(0)