顶顶通呼叫中心中间件(mod_cti基于FreeSWITCH)-大模型电话机器人

语音流直接对接Realtime API 多模态大模型

直接把音频流输出给大模型,大模型返回音频流。

顶顶通CTI对Realtime API 的支持

提供了以下2个APP可对接任意

•cti_audio_stream 通过TCP推流和播放流,适合用于人机对话场景。

•cti_unicast_start 通过旁路的方式UDP或者TCP推流和播放流,对接Realtime API 的同时还支持对通道进行放音操作。 适合于质检,机器人辅助场景。

通过TCP推流和播放流,适合用于人机对话场景

app: cti_audio_stream

参数 remote-ip:remote-port <native> <param>

  • native 可选参数 如果不设置,流格式为 8000hz 16位,如果设置了,就是原始的音频格式
  • param 自定义参数

推流协议

  1. 前面4字节 引导数据长度 网络字节顺序
  2. 时间戳 8字节
  3. 引导数据 {"uuid":"","codec":"","param":"自定义参数"}
  4. 数据流

连接断开后会自动重连,并且重发引导数据。

返回的放音流需要和推流的编码一样,不需要引导数据。

旁路的方式UDP或者TCP推流和播放流,适合于质检,机器人辅助场景

app: cti_unicast_start 启动推流

参数 tcp|udp remote-ip remote-port <local-ip> <local-port> <play|mix>

  • tcp|udp 使用tcp还是udp协议推流
  • remote-ip 远端 ip
  • remote-port 远端端口,不设置用0.0.0.0
  • local-ip 本地端口,不设置好用0,随机端口
  • play|mix
    • play 支持播放远端返回的流,发送方必须是远端IP和远端端口
    • mix 把远端的流和本地放音混音

api: uuid_cti_unicast_start 启动推流

参数 uuid tcp|udp remote-ip remote-port <local-ip> <remote-ip> <play|mix>

api: uuid_cti_unicast_stop 停止推流

参数 uuid

文字方式对接文本大模型

mod_cti先把声音转换成文字,然后把文字提交给大模型,根据大模型返回执行放音,顶顶通mod_cti话术引擎用的就是这种方式。

顶顶通话术引擎对接大模型原理和用法说明

顶顶通话术引擎充分发挥大模型prompt的强大功能,把关联节点和知识库可以自动带入prompt。

如果节点开启了大模型匹配,会根据大模型匹配设置生成 ${playtext}${prompttext}
${playtext} 所有关联节点的放音内容。

${prompttext} 所有关联节点的意向Prompt,也就是节点的进入规则。

如果大模型匹配包含了子流程,就会把关联的子流程 的文本放音加入${playtext},意向Prompt加入${prompttext}

如果大模型匹配包含了知识库,就会把关联的知识库 的文本放音加入${playtext},意向Prompt加入${prompttext}

如果大模型匹配包含了全局流程,就会把关联的全局流程的子流程 的文本放音加入${playtext},意向Prompt加入${prompttext}

用大模型判断意向选择分支,代替关键词匹配

适合场景:需要严格按流程执行,比如电话回访,电话调查。

复制代码
## 任务描述 ## 
根据给定的对话上下文及产品信息,从候选回答中选择最合适的回答。
如果存在完全符合情境的候选回答,输出其ID,不要输出其他信息;
若没有合适的候选回答,输出"unmatch"。 

## 产品信息 ##
请在这里输入产品信息

## 候选回答列表 ## 
${playtext}

## 选择规则 ## 
${prompttext}

如果有匹配的回答分支,大模型会输出回答ID,话术引擎切换到流程节点,播放节点预先设置的放音;

如果没有匹配的回答分支,大模型会输出unmatch,话术引擎会忽略模型返回,继续执行兜底(any)匹配,如果设置了兜底流程就会进入兜底流程节点。

用大模型判断意向选择分支和兜底回答

适合场景:大部分场景都合适

复制代码
## 任务描述 ## 
根据给定的对话上下文及产品信息,从候选回答中选择最合适的回复。
如果存在完全符合情境的候选回答,只输出其ID,不要输出其他信息;
若没有合适的候选回答,基于对话上下文和产品信息模仿真人说话口吻编写一条简短且恰当的新回复。 

## 候选回答列表 ## 
${playtext}

## 选择规则 ## 
${prompttext}

如果有匹配的回答分支,大模型会输出回答ID,话术引擎切换到流程节点,播放节点预先设置的放音;

如果没有匹配的回答分支,大模型会生成一个回答,话术引擎调用流TTS播放这个回答,不会切换流程。

用大模型判断意向选择分支和兜底回答以及优化话术设置的回答内容

适合场景:既要按预先设置的流程步骤执行,又要充分利用大模型生成合适的回答。

复制代码
## 任务描述 ## 
根据给定的对话上下文及产品信息,从候选回答中选择最合适的回复。
如果存在完全符合情境的候选回答,输出其ID,回答内容输出空;
如果有接近但不完全合适的候选回答,输出该候选回答ID,并提供一个优化后的回答内容,优化后的回答必须和候选回答类似含义;
若没有合适的候选回答,候选回复id设置为null,并基于对话上下文和产品信息模仿真人说话口吻编写一条简短且恰当的新回复。 

## 候选回答列表 ## 
${playtext}

## 选择规则 ## 
${prompttext}

 ## 输出格式要求 ## 
id:候选回答ID  content: 回答内容

注意输出格式要求: 必须要求大模型输出"id:候选回答ID content: 回答内容" 这样的格式,不然输出格式要求不对,话术引擎解析不了。

如果有完全符合情境的回答分支,大模型会输出回答ID,不会优化回答内容,话术引擎切换到流程节点,播放节点预先设置的放音;

如果有接近但不完全合适回答分支,大模型会输出回答ID,和输出优化后的回答内容,话术引擎切换到流程节点,播放大模型优化后的回答内容;

如果没有匹配的回答分支,大模型会生成一个回答,话术引擎调用流TTS播放这个回答,不会切换流程。

让大模型来确定回答内容

比如有这样一个流程

机器人:你的电话号码是多少?

用户:我的电话是XXXXX。

机器人:确定一下,你的电话号码是 XXXXX 对吧。

复制代码
## 任务描述 ## 
获取输入中的电话号码。
如果输入中有电话号码输出:你的电话号码是 "电话号码" 吗
如果输入中没有电话号码输出:请问你的电话号码是多少呢

## 输出示例 ##
1. 你的电话号码是 13100000000 吗
2. 请问你的电话号码是多少呢

可以通过输出示例,输出格式,等约束让大模型让要求输出。

可以多次重复测试prompt或者使用prompt优化工具来优化prompt, 在大模型时代,能写出高质量的prompt才可以用好大模型。

相关推荐
爱的叹息6 小时前
数据库分库分表中间件及对比
数据库·中间件
和尚用0飘柔09 小时前
【中间件】使用ElasticSearch提供的RestClientAPI操作ES
大数据·elasticsearch·中间件
青花瓷11 小时前
VSCode中结合DeepSeek使用Cline插件的感受
ide·人工智能·vscode·大模型·编辑器·deepseek
还是鼠鼠15 小时前
Node.js自定义中间件
javascript·vscode·中间件·node.js·json·express
张高兴1 天前
张高兴的大模型开发实战:(四)使用 LangGraph 实现多智能体应用
python·langchain·大模型
黎明鱼儿1 天前
LLaMA-Factory大模型微调全流程指南
人工智能·语言模型·大模型·llama-factory
ejinxian2 天前
大模型应用初学指南
人工智能·大模型·向量数据库
视觉&物联智能2 天前
【杂谈】-大型语言模型对具身人工智能发展的推动与挑战
人工智能·搜索引擎·语言模型·大模型·llm·具身人工智能
未来之窗软件服务2 天前
llama-本地推理大模型多模型同时运行
大模型·llama
还是鼠鼠2 天前
Node.js中间件的5个注意事项
javascript·vscode·中间件·node.js·json·express