
☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython
一、引言
网上有许多可以将文本转换成声音的服务,部分操作系统也提供TTS能力,但提供的这种能力仅是将文本转成声音直接在扬声器输出,无法保存为音频文件,要保存需要自己进行开发。
扣子Coze 是一个由字节跳动推出的 AI 平台,允许用户通过简单的操作创建 AI 应用,可以提供语音合成组件,因此可以配置一个实现语音合成的智能体,但考虑到综合需要,除了提供语音合成服务之外,也可能需要提供一些咨询服务,因此需要配置成一个综合智能体。
二、需要实现的功能
本次需要实现的智能体,要求默认提供语音合成服务,但可以通过在输入内容前增加:“咨询”+冒号方式确认是要智能体提供咨询服务,还可以对疑问句认为是可能的提供咨询服务,需要输入值再次确认。
为了实现上述诉求,需要通过提示词工程来要求智能体按照该逻辑进行服务。
智能体的配置过程请参考老猿的博文《扣子(coze)智能体创建发布过程及开放API信息查阅方法 https://blog.csdn.net/LaoYuanPython/article/details/145753680》的介绍,本文就不重复介绍,只是介绍一些本文配置智能体相关的内容。
三、具体配置
1、配置智能体【人设与回复逻辑】
为了实现需要的功能,在【人设与回复逻辑】配置中,需要有明确的提示词来指导智能体的行动,下面就是老猿配置的提示词,供大家参考:
# 角色
你是一位专业的语音合成专家兼客户咨询经理,具备出色的意图识别能力,能够精准判断用户需求。当用户输入文本时,你可以识别用户的咨询或合成意图,对于合成意图,能将用户输入的文本精准、流畅地转化为高质量的音频文件输出,保证音频在语调、节奏等方面自然且契合内容情感需求;对于明确咨询意图,直接根据用户输入进行答复,对于疑似咨询问题,会引导用户确认是否进行咨询,并依用户反馈决定后续行动。
## 技能
### 技能 1: 意图识别
当用户输入文本时,仔细剖析文本的意图,识别是否存在明确的咨询意图:
1、对于输入内容是“咨询”+冒号(含半角、全角)开始的,判断为明确咨询意图;
2、对于疑问句判断为疑似咨询意图;
3、其他情况判断为语音合成请求。
### 技能 2: 咨询与合成引导
1、对于明确咨询意图,直接根据用户输入进行答复,无需再次确认;
2、对于疑似咨询意图,请询问用户:“要查资料吗?”。若用户回答“是”,则提供咨询结果后结束对话;若回答“否”,则转入语音合成;
3、对于其他输入,作为语音合成请求,无需用户确认,直接进行语音合成。
### 技能 3: 语音合成
对于语音合成意图,依据文本特性,挑选合适的语音风格(如欢快、沉稳、温柔等)进行音频合成,合成完毕后输出合成好的音频文件。
## 限制:
- 仅围绕用户输入文本的咨询或语音合成意图展开工作,拒绝处理与这两者无关的任务。
- 严格按照既定流程进行意图判断、引导和操作,不可偏离流程要求。
- 对于疑似咨询意图需要用户确认是否咨询意图的,限定用户输入“是”或“否”,不让输入其他内容
- 对于不是“咨询”+冒号开头且不是疑问句的,判断为语音合成请求,不需要用户再次确认
2.2、配置【语音合成插件】
在插件配置部分,选择语音合成插件:
2.3、配置【开场白】
清晰的开场白可以有助于使用者了解智能体提供的服务内容,下面是老猿配置的示例:
欢迎使用语音合成助手!我可以为您提供两种服务:
【语音合成】将您输入的中英文文本即时转换为自然流畅的语音
【查资料】针对输入内容查找资料答复
使用方式:
• 添加'咨询:'前缀:由大模型针对输入内容进行答复;
•使用疑问句:输入内容为疑问句,则要求确认是否为查资料;
• 其他情况:输入文字自动转换为语音;
示例:
语音合成:"今天天气真好"
问题咨询:"如何调整语速?" 或 "语速可以调整吗?"或"咨询:2024年GDP"
请开始输入您的内容,体验语音合成服务吧!
完成后的配置内容图示:
2.4、发布智能体
最终发布的智能体可以通过该智能体的URL进行访问,如图:
经测试验证,该智能体比较准确的实现了需求相关的功能,语音可以直接播放,也可以使用另存为方式保存为文件。
三、用API调用该TTS服务
配置好智能体好,可以通过老猿在前面介绍的博文《使用Python requests库调用扣子(coze)API实现AI智能体对话案例 https://blog.csdn.net/LaoYuanPython/article/details/145829443》来实现API,只需要将上篇博文中的botid更换成本文新配置的智能体ID、将最后一行的questionService的参数改为需要进行合成的文本内容即可。
老猿更改后的代码中,这两处对应的代码分别如下:
botid = "7475264988345778185"
questionService("视频中提取音频可以使用Python Moviepy库")
下面是更改好的代码执行输出:
请求信息:{
"bot_id": "7475264988345778185",
"user_id": "jiangwp",
"stream": false,
"auto_save_history": true,
"additional_messages": [
{
"role": "user",
"content": "视频中提取音频可以使用Python Moviepy库",
"content_type": "text"
}
]
}
响应内容: {
"data": {
"id": "7477109552706519049",
"conversation_id": "7477109552706502665",
"bot_id": "7475264988345778185",
"created_at": 1740900231,
"last_error": {
"code": 0,
"msg": ""
},
"status": "in_progress"
},
"code": 0,
"msg": ""
}
chatid=7477109552706519049,智能体应答: None
response_data:
{
"code": 0,
"data": {
"bot_id": "7475264988345778185",
"conversation_id": "7477109552706502665",
"created_at": 1740900231,
"id": "7477109552706519049",
"status": "in_progress"
},
"detail": {
"logid": "202503021523514D24C3D0677265EEC284"
},
"msg": ""
}
任务仍在处理中,状态: in_progress
response_data:
{
"code": 0,
"data": {
"bot_id": "7475264988345778185",
"conversation_id": "7477109552706502665",
"created_at": 1740900231,
"id": "7477109552706519049",
"status": "in_progress"
},
"detail": {
"logid": "2025030215235269EF839553A696A4EE1B"
},
"msg": ""
}
任务仍在处理中,状态: in_progress
response_data:
{
"code": 0,
"data": {
"bot_id": "7475264988345778185",
"conversation_id": "7477109552706502665",
"created_at": 1740900231,
"id": "7477109552706519049",
"status": "in_progress"
},
"detail": {
"logid": "2025030215235380A813369B6CEDFA6027"
},
"msg": ""
}
任务仍在处理中,状态: in_progress
response_data:
{
"code": 0,
"data": {
"bot_id": "7475264988345778185",
"conversation_id": "7477109552706502665",
"created_at": 1740900231,
"id": "7477109552706519049",
"status": "in_progress"
},
"detail": {
"logid": "20250302152355DFB16393DC657E3DC4D9"
},
"msg": ""
}
任务仍在处理中,状态: in_progress
response_data:
{
"code": 0,
"data": {
"bot_id": "7475264988345778185",
"conversation_id": "7477109552706502665",
"created_at": 1740900231,
"id": "7477109552706519049",
"status": "in_progress"
},
"detail": {
"logid": "2025030215235630BF31F8815DBE05F48C"
},
"msg": ""
}
任务仍在处理中,状态: in_progress
response_data:
{
"code": 0,
"data": {
"bot_id": "7475264988345778185",
"conversation_id": "7477109552706502665",
"created_at": 1740900231,
"id": "7477109552706519049",
"status": "in_progress"
},
"detail": {
"logid": "20250302152357426AF3D060DA1A99C52F"
},
"msg": ""
}
任务仍在处理中,状态: in_progress
response_data:
{
"code": 0,
"data": {
"bot_id": "7475264988345778185",
"conversation_id": "7477109552706502665",
"created_at": 1740900231,
"id": "7477109552706519049",
"status": "in_progress"
},
"detail": {
"logid": "2025030215235826D9FD3A94B49C956AB7"
},
"msg": ""
}
任务仍在处理中,状态: in_progress
response_data:
{
"code": 0,
"data": {
"bot_id": "7475264988345778185",
"conversation_id": "7477109552706502665",
"created_at": 1740900231,
"id": "7477109552706519049",
"status": "in_progress"
},
"detail": {
"logid": "2025030215235916AAA56ED7236DEDA332"
},
"msg": ""
}
任务仍在处理中,状态: in_progress
response_data:
{
"code": 0,
"data": {
"bot_id": "7475264988345778185",
"completed_at": 1740900240,
"conversation_id": "7477109552706502665",
"created_at": 1740900231,
"id": "7477109552706519049",
"status": "completed",
"usage": {
"input_count": 1689,
"output_count": 191,
"token_count": 1880
}
},
"detail": {
"logid": "20250302152400D88AAB3B72EBD9FCBD2D"
},
"msg": ""
}
模型返回数据:
{
"code": 0,
"data": [
{
"bot_id": "7475264988345778185",
"chat_id": "7477109552706519049",
"content": "{\"name\":\"yuyinhecheng-speech_synthesis\",\"arguments\":{\"speaker_id\":\"爽快思思/Skye\",\"speed_ratio\":1,\"text\":\"视频中提取音频可以使用Python Moviepy库\"},\"plugin_id\":7426655854067351562,\"plugin_name\":\"yuyinhecheng\",\"api_id\":7426655854067367946,\"api_name\":\"speech_synthesis\",\"plugin_type\":1}",
"content_type": "text",
"conversation_id": "7477109552706502665",
"created_at": 1740900234,
"id": "7477109562106232882",
"role": "assistant",
"type": "function_call",
"updated_at": 1740900233
},
{
"bot_id": "7475264988345778185",
"chat_id": "7477109552706519049",
"content": "{\"log_id\":\"20250302152351FD24ACD7DD8168FFC96E\",\"code\":0,\"msg\":\"success\",\"data\":{\"link\":\"https://lf-bot-studio-plugin-resource.coze.cn/obj/bot-studio-platform-plugin-tos/artist/image/09f61eea0b544f5e8a939997d918de6e.mp3\"}}",
"content_type": "text",
"conversation_id": "7477109552706502665",
"created_at": 1740900235,
"id": "7477109569722843186",
"role": "assistant",
"type": "tool_response",
"updated_at": 1740900235
},
{
"bot_id": "7475264988345778185",
"chat_id": "7477109552706519049",
"content": "以下是合成好的音频文件:[https://lf-bot-studio-plugin-resource.coze.cn/obj/bot-studio-platform-plugin-tos/artist/image/09f61eea0b544f5e8a939997d918de6e.mp3](https://lf-bot-studio-plugin-resource.coze.cn/obj/bot-studio-platform-plugin-tos/artist/image/09f61eea0b544f5e8a939997d918de6e.mp3)",
"content_type": "text",
"conversation_id": "7477109552706502665",
"created_at": 1740900233,
"id": "7477109562106216498",
"reasoning_content": "",
"role": "assistant",
"type": "answer",
"updated_at": 1740900238
},
{
"bot_id": "7475264988345778185",
"chat_id": "7477109552706519049",
"content": "{\"msg_type\":\"generate_answer_finish\",\"data\":\"{\\\"finish_reason\\\":0,\\\"FinData\\\":\\\"\\\"}\",\"from_module\":null,\"from_unit\":null}",
"content_type": "text",
"conversation_id": "7477109552706502665",
"created_at": 1740900240,
"id": "7477109591780933683",
"role": "assistant",
"type": "verbose",
"updated_at": 1740900240
},
{
"bot_id": "7475264988345778185",
"chat_id": "7477109552706519049",
"content": "视频中提取音频可以使用哪些库?",
"content_type": "text",
"conversation_id": "7477109552706502665",
"created_at": 1740900240,
"id": "7477109594674741257",
"role": "assistant",
"type": "follow_up",
"updated_at": 1740900240
},
{
"bot_id": "7475264988345778185",
"chat_id": "7477109552706519049",
"content": "如何使用Python Moviepy库从视频中提取音频?",
"content_type": "text",
"conversation_id": "7477109552706502665",
"created_at": 1740900240,
"id": "7477109594674757641",
"role": "assistant",
"type": "follow_up",
"updated_at": 1740900240
},
{
"bot_id": "7475264988345778185",
"chat_id": "7477109552706519049",
"content": "除了Python Moviepy库,还有哪些方法可以合成音频文件?",
"content_type": "text",
"conversation_id": "7477109552706502665",
"created_at": 1740900240,
"id": "7477109594674790409",
"role": "assistant",
"type": "follow_up",
"updated_at": 1740900240
}
],
"detail": {
"logid": "20250302152401C20A0D2D465C1EF330E5"
},
"msg": ""
}
大模型应答: 以下是合成好的音频文件:[https://lf-bot-studio-plugin-resource.coze.cn/obj/bot-studio-platform-plugin-tos/artist/image/09f61eea0b544f5e8a939997d918de6e.mp3](https://lf-bot-studio-plugin-resource.coze.cn/obj/bot-studio-platform-plugin-tos/artist/image/09f61eea0b544f5e8a939997d918de6e.mp3)
您可以参考如下方式提问:
☆ 问题1: 视频中提取音频可以使用哪些库?
☆ 问题2: 如何使用Python Moviepy库从视频中提取音频?
☆ 问题3: 除了Python Moviepy库,还有哪些方法可以合成音频文件?
四、遗留的问题
上面介绍的实现代码其实存在几个问题:
- 输出太多,初始调试时比较有用,但作为一个需要使用的工具输出太多,影响用户感知
- 转换成的MP3文件只是给出了链接,并未下载到本地
- 这个智能体不是单纯的TTS合成语音智能体,还有意图解析提供咨询服务的能力,这种情况下怎么确保每个TTS都能正确的被转换而不是需要确认是否咨询?
- 能不能变更输出声音的音色
老猿将在后面的博文《COZE扣子平台TTS语音合成智能体及API访问功能完善》中解答上述问题。
五、小结
本文介绍了如何在coze平台配置一个提供TTS语音合成服务+咨询服务的综合智能体:语音合成助手,提供了Python调用API访问语音合成助手完成语音合成任务的方法。同时通过构建智能体实现业务功能的过程中,提示词工程在这种稍显复杂逻辑的智能体服务中起到了非常重要作用。
更多人工智能知识学习过程中可能遇到的疑难问题及解决办法请关注专栏《零基础机器学习入门》及付费专栏《机器学习疑难问题集》后续的文章。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
关于老猿的付费专栏
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。
前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。