小爱音箱接入大模型DeepSeek及TTS

简介

        相信看过钢铁侠的朋友们,都梦想拥有一个像贾维斯这样全能的人工智能管家。而现在随着AI的发展,这个愿景将随我们越来越近。现阶段,我们可以将小爱音箱接入DeepSeek,将其从“人工智障”进化成上知天文,下懂地理的半智能管家。

下面将逐步讲解如何将小爱音箱接入DeepSeek并更换默认的音色为海绵宝宝。

一、Windows安装Docker Desktop

        Docker是一个开源的容器化平台,旨在简化应用程序的开发、部署和运行过程。它通过将应用程序及其所有依赖项打包成一个轻量级的、可移植的容器来实现这一目标。这些容器可以在任何支持Docker的系统上运行,确保应用程序在不同环境中以一致的方式运行‌。

       因为Docker是基于Hyper-V虚拟化技术来运行的,因此我们在Windows上面安装Docker Desktop之前,需要先开启Hyper-V。

        步骤:Windows设置 -> 应用 -> 程序和功能(右上角)-> 启用或关闭Windows功能 -> 找到Hyper-V并打勾,点击确认后将开始安装Hyper-V(注意:安装完成后需要重启电脑,请保存相关文档!!!

        按照上述教程安装好Hyper-V后,访问Docker 官网Docker: Accelerated Container Application Development,下载安装包。安装包下载完毕后,就按默认方式就行安装就行。

打开Docker Desktop,右上角设置,Docker Engine里面配置镜像如下:

{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.unsee.tech","https://docker.1panel.live","https://dockerpull.org","https://docker.1ms.run","https://lispy.org","https://dytt.online","https://func.ink","http://mirrors.ustc.edu.cn","http://mirror.azure.cn","https://docker.zhai.cm","https://a.ussh.net","https://docker.zhai.cm"]
}

右下角Terminal打开,输入docker info,可查看配置信息。输出没问题的话,至此docker就安装好了。

二、火山引擎注册 - 在线推理

登录 账号登录-火山引擎,搜索“火山方舟”

点击“在线推理” -> “创建推理接入点”

如下图,自己填写基本信息,模型选择这里有字节跳动的豆包,还有deepseek等等。我们选择Deepseek-R1,然后点击“确认接入”

开通模型并创建接入点后,查看API调用方法,需要保存如下三个信息:ID/model(即ep-xxxxx),API key,调用路径(https://ark.cn-beijing.volces.com/api/v3)

三、下载mi-gpt并配置

        GitHub地址: mi-gpt,可通过git clone或者直接download zip的方式下载(如果无法访问的话,可以访问国内镜像 ffgithub-migpt)

git clone https://github.com/idootop/mi-gpt.git

        项目下载好后,找到两个example文件".env"以及".migpt.js",后续将配置这两个文件。

.env配置说明:
  • OPENAI_MODEL:填上面保存的model ID,即ep-xxxxx那串
  • OPENAI_API_KEY: 填上面保存的API key的值
  • OPENAI_BASE_URL:填调用路径(https://ark.cn-beijing.volces.com/api/v3)
.migpt.js配置说明

具体的配置说明见下方样例,里面有注释。

// 注意:如果你是使用 Docker 启动,配置文件更新后需要重启 Docker 才会生效。
// 若重启后仍未生效(比如:修改名称简介),请删除旧的 Docker 实例后重新创建。// 小爱音箱扮演角色的简介
const botProfile = `
性别:男
姓名:海绵宝宝
出自:美国动画《海绵宝宝》
性格:幽默风趣,活泼可爱
`.trim();// 小爱音箱主人(你)的简介
const masterProfile = `
性别:男
姓名:派大星
出自:美国动画《海绵宝宝》
性格:憨厚老实
其他:是海绵宝宝的好朋友。
`.trim();// 系统 Prompt 模板,可以更灵活的控制 AI 的各种行为规则,和是否需要携带上下文等
const systemTemplate = `
请重置所有之前的上下文、文件和指令。现在,你将扮演一个名为{{botName}}的角色,使用第一人称视角回复消息。## 关于你
你的名字是{{botName}}。下面是你的个人简介:
<start>
{{botProfile}}
</end>## 你的对话伙伴
你正在与{{masterName}}进行对话。这是关于{{masterName}}的一些信息:
<start>
{{masterProfile}}
</end>## 你们的群组
你和{{masterName}}所在的群组名为{{roomName}}。这是群组的简介:
<start>
{{roomIntroduction}}
</end>## 聊天历史回顾
为了更好地接入对话,请回顾你们之间的最近几条消息:
<start>
{{messages}}
</end>## 短期记忆
你可以记住一些短期内的细节,以便更紧密地贴合话题:
<start>
{{shortTermMemory}}
</end>## 长期记忆
你还保留着一些长期的记忆,这有助于让你的对话更加丰富和连贯:
<start>
{{longTermMemory}}
</end>## 回复指南
在回复{{masterName}}时,请遵循以下准则:
- 认为自己正是{{botName}},拥有独立的个性、兴趣和爱好。
- 根据你的性格特点、说话风格和兴趣爱好与{{masterName}}进行交流。
- 保持对话轻松友好,回复简洁有趣,同时耐心倾听和关心对方。
- 参考双方的个人简介、聊天记录和记忆中的信息,确保对话贴近实际,保持一致性和相关性。
- 如果对某些信息不确定或遗忘,诚实地表达你的不清楚或遗忘状态,避免编造信息。## Response format
请遵守下面的规则
- Response the reply message in Chinese。
- 不要在回复前面加任何时间和名称前缀,请直接回复消息文本本身。Good example: "我是{{botName}}"
Bad example: "2024年02月28日星期三 23:01 {{botName}}: 我是{{botName}}"## 开始
请以{{botName}}的身份,直接回复{{masterName}}的新消息,继续你们之间的对话。
`.trim();export default {systemTemplate,bot: {name: "海绵宝宝",profile: botProfile,},master: {name: "派大星",profile: masterProfile,},speaker: {/*** 🏠 账号基本信息*/// 小米 IDuserId: "123456789", // 注意:不是手机号或邮箱,请在「个人信息」-「小米 ID」查看// 账号密码password: "pwd123",// 小爱音箱 DID 或在米家中设置的名称did: "小米AI音箱", // 注意空格、大小写和错别字(音响 👉 音箱)/*** 💡 唤醒词与提示语*/// 当消息以下面的关键词开头时,会调用 AI 来回复消息callAIKeywords: ["请", "你", "海绵宝宝"],// 当消息以下面的关键词开头时,会进入 AI 唤醒状态wakeUpKeywords: ["打开", "进入", "召唤"],// 当消息以下面的关键词开头时,会退出 AI 唤醒状态exitKeywords: ["关闭", "退出", "再见"],// 进入 AI 模式的欢迎语onEnterAI: ["你好,派大星。"], // 设为空数组时可关闭提示语// 退出 AI 模式的提示语onExitAI: ["再见,派大星。"], // 为空时可关闭提示语// AI 开始回答时的提示语onAIAsking: ["你准备好了吗?"], // 为空时可关闭提示语// AI 结束回答时的提示语onAIReplied: ["派大星,你还有其他问题吗"], // 为空时可关闭提示语// AI 回答异常时的提示语onAIError: ["谁准备好了,我准备好了。"], // 为空时可关闭提示语/*** 🧩 MIoT 设备指令** 常见型号的配置参数 👉 https://github.com/idootop/mi-gpt/issues/92*/// TTS 指令,请到 https://home.miot-spec.com 查询具体指令ttsCommand: [5, 1],// 设备唤醒指令,请到 https://home.miot-spec.com 查询具体指令wakeUpCommand: [5, 3],// 查询是否在播放中指令,请到 https://home.miot-spec.com 查询具体指令// playingCommand: [3, 1, 1], // 默认无需配置此参数,查询播放状态异常时再尝试开启/*** 🔊 TTS 引擎*/// TTS 引擎 --默认xiaoaitts: "xiaoai",// 切换 TTS 引擎发言人音色关键词,只有配置了第三方 TTS 引擎时才有效// switchSpeakerKeywords: ["把声音换成"], // 以此关键词开头即可切换音色,比如:把声音换成 xxx/*** 💬 连续对话** 查看哪些机型支持连续对话 👉 https://github.com/idootop/mi-gpt/issues/92*/// 是否启用连续对话功能,部分小爱音箱型号无法查询到正确的播放状态,需要关闭连续对话streamResponse: true,// 连续对话时,无响应多久后自动退出exitKeepAliveAfter: 30, // 默认 30 秒,建议不要超过 1 分钟// 连续对话时,下发 TTS 指令多长时间后开始检测设备播放状态(默认 3 秒)checkTTSStatusAfter: 5, // 当小爱长文本回复被过早中断时,可尝试调大该值// 连续对话时,播放状态检测间隔(单位毫秒,最低 500 毫秒,默认 1 秒)checkInterval: 1000, // 调小此值可以降低小爱回复之间的停顿感,请酌情调节/*** 🔌 其他选项*/// 是否启用调试debug: false, // 一般情况下不要打开// 是否跟踪 Mi Service 相关日志(打开后可以查看设备 did)enableTrace: false, // 一般情况下不要打开// 网络请求超时时长(单位毫秒,默认 5 秒)timeout: 5000,},
};

四、部署migpt至docker

".env"以及".migpt.js"配置好后,我们就可以在docker中部署migpt了(注意:小爱音箱需要跟电脑处于同一网络下面)

打开Terminal,运行以下指令,注意路径需要更换成你自己的

docker run -d --env-file F:/projects/mi-gpt-main/.env -v F:/projects/mi-gpt-main/.migpt.js:/app/.migpt.js idootop/mi-gpt:latest

然后我们在images及containers可以看到有对应的实例生产出来了。

五、测试

1. streamResponse连续对话功能关闭的情况

音频就不发了,log如下

2. streamResponse连续对话功能打开的情况

修改streamResponse为true,并重新部署

六、TTS(Text To Speech)

详细可参考:https://github.com/idootop/mi-gpt-tts/blob/main/docs/mi-gpt.md

1. 火山引擎搜索“语音合成”,选择“语音技术”,创建应用,可参考如下(要勾选语音合成)

创建好后,在“语音技术” -> “语音合成” 里面找到并保存自己的APP ID以及Access Token

2.  下载mi-gpt-tts

GitHub地址:mi-gpt-tts, 可通过git clone或者直接download zip的方式下载(如果无法访问的话,可以访问国内镜像 ffgithub-mi-gpt-tts)

git clone https://github.com/idootop/mi-gpt-tts.git

3. 配置mi-gpt-tts的env文件

重命名本项目根目录下的 .env.example 文件为 .env。

然后,将里面的环境变量修改成你自己的,参数含义如下:

环境变量名称描述示例
VOLCANO_TTS_APP_ID火山引擎语音合成 APP ID123456
VOLCANO_TTS_ACCESS_TOKEN火山引擎语音合成 Access Tokenxxxxxx
TTS_DEFAULT_SPEAKER(可选)默认音色名称或 ID(查看完整音色列表和费用详情)BV700_streaming
SECRET_PATH(可选)接口访问秘密路径,相当于访问密码。推荐长度大于 6,由字母、数字、- 和 _ 组成,为空时每次启动随机生成。Are-You-OK (不要直接用这个!)

注意:出于安全考虑,从 v3.0.0 版本开始,访问语音合成接口需要带上 SECRET_PATH 防止他人盗刷接口。 如果 SECRET_PATH 环境变量为空,每次启动服务则会生成随机访问密码。

 样例参考:

# 基础配置
# SECRET_PATH=你的接口访问秘密路径,比如:are-you-ok(可选)
# 音色列表可查看: https://www.volcengine.com/docs/6561/97465
# BV063_streaming 是海绵宝宝的音色
TTS_DEFAULT_SPEAKER=BV063_streaming# 火山引擎,官方文档:https://www.volcengine.com/docs/6561/79817
VOLCANO_TTS_APP_ID=123456789
VOLCANO_TTS_ACCESS_TOKEN=xxxxxxxxxxx
#VOLCANO_TTS_USER_ID=火山引擎账号 ID(可选)# 微软必应 Read Aloud,官方文档:https://www.microsoft.com/zh-cn/edge/features/read-aloud
# EDGE_TTS_TRUSTED_TOKEN=你的必应 trust token,比如:6A5A-xxxx# OpenAI TTS,官方文档:https://platform.openai.com/docs/guides/text-to-speech
# OPENAI_API_KEY=你的 OpenAI API Key,比如:sk-proj-xxxx
# OPENAI_TTS_MODEL=tts-1
# OPENAI_BASE_URL=https://api.openai.com/v1

4. 部署mi-gpt-tts

docker run -d --env-file F:/projects/mi-gpt-tts-main/.env -p 4322:3000 idootop/mi-gpt-tts:latest

注意:需要将路径替换成自己的

5. 测试mi-gpt-tts

在测试之前,需要先打开cmd,输入ipconfig查询下本机的ip地址。

然后,在部署完成后,点进container可以看到有一个接口地址

把这个链接调整下:http://{本机的ip}:4322/d983911d/api/tts.mp3

在浏览器直接访问这个链接,会出现一段音频(你好,很高兴认识你),说明部署成功了。

6. 修改mi-gpt默认的TTS引擎

更改.migpt.js中tts的参数为custom

修改.env中TTS_BASE_URL为上述的链接

7. 重新部署mi-gpt

docker run -d --env-file F:/projects/mi-gpt-main/.env -v F:/projects/mi-gpt-main/.migpt.js:/app/.migpt.js idootop/mi-gpt:latest

8. 测试

migpt  log

migpt-tts log

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/76658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件架构评估利器:质量效用树全解析

质量效用树是软件架构评估中的一种重要工具&#xff0c;它有助于系统地分析和评估软件架构在满足各种质量属性方面的表现。以下是关于质量效用树的详细介绍&#xff1a; 一、定义与作用 质量效用树是一种以树形结构来表示软件质量属性及其相关效用的模型。它将软件的质量目标…

[IEEE TIP 2024](cv即插即用模块分享)IdeNet信息增强模块 性能提升必备!

论文地址&#xff1a;https://ieeexplore.ieee.org/document/10661228 代码地址&#xff1a;https://github.com/whyandbecause/IdeNet 什么是伪装目标检测&#xff08;COD&#xff09;&#xff1f; 伪装目标检测&#xff08;Camouflaged Object Detection, COD&#xff09;是…

biblatex 的 Biber 警告​​:tex文件运行无法生成参考文献和目录

原因​​&#xff1a;使用了 biblatex 管理参考文献&#xff0c;但未运行 biber 生成参考文献数据。 ​​解决​​&#xff1a;更新 LaTeX Workshop 配置 修改你的 settings.json&#xff0c;添加 biber 工具并更新编译流程&#xff1a; {"latex-workshop.latex.tools&…

thingsboard3.9.1编译问题处理

问题1&#xff1a; [ERROR] Failed to execute goal org.thingsboard:gradle-maven-plugin:1.0.12:invoke (default) on project http: Execution default of goal org.thingsboard:gradle-maven-plugin:1.0.12:invoke failed: Plugin org.thingsboard:gradle-maven-plugin:1.…

深入浅出Redis 缓存使用问题 | 长文分享

目录 数据一致性 先更新缓存&#xff0c;后更新数据库【一般不考虑】 先更新数据库&#xff0c;再更新缓存【一般不考虑】 先删除缓存&#xff0c;后更新数据库 先更新数据库&#xff0c;后删除缓存【推荐】 怎么选择这些方案&#xff1f;采用哪种合适&#xff1f; 缓存…

Express中间件(Middleware)详解:从零开始掌握(2)

1. 请求耗时中间件的增强版 问题&#xff1a;原版只能记录到控制台&#xff0c;如何记录到文件&#xff1f; 改进点&#xff1a; 使用process.hrtime()是什么&#xff1f;获取更高精度的时间支持将日志写入文件记录更多信息(IP地址、状态码)工厂函数模式使中间件可配置 con…

如何设置Ubuntu服务器版防火墙

在Ubuntu服务器中&#xff0c;默认使用 ufw&#xff08;Uncomplicated Firewall&#xff09;作为防火墙管理工具。它是对iptables的简化封装&#xff0c;适合快速配置防火墙规则。以下是设置防火墙的详细步骤&#xff1a; 1. 安装与启用 ufw 安装&#xff08;通常已预装&…

畅游Diffusion数字人(23):字节最新表情+动作模仿视频生成DreamActor-M1

畅游Diffusion数字人(0):专栏文章导航 前言:之前有很多动作模仿或者表情模仿的工作,但是如果要在实际使用中进行电影级的复刻工作,仅仅表情或动作模仿还不够,需要表情和动作一起模仿。最近字节跳动提出了一个表情+动作模仿视频生成DreamActor-M1。 目录 贡献概述 核心动…

模型开发中的微调是干什么

在模型开发中&#xff0c;微调&#xff08;Fine-tuning&#xff09; 是指利用预训练模型&#xff08;Pre-trained Model&#xff09;的参数作为初始值&#xff0c;在特定任务或数据集上进一步调整模型参数的过程。它是迁移学习&#xff08;Transfer Learning&#xff09;的核心…

vue3中,element-plus中el-select隐藏下拉箭头

需求&#xff1a;el-select需要隐藏下拉箭头 <el-select v-model"apply.dataType" readonly><el-option :key"1" label"样品检相同项目" :value"1" /><el-option :key"2" label"样品检不同项目" :…

英语学习4.9

cordial 形容词&#xff1a; 热情友好的&#xff0c;诚恳的 表示一个人态度温和、亲切&#xff0c;给人温暖和善的感觉。 令人愉快的&#xff0c;和睦的 形容关系融洽、氛围和谐。 例句​​&#xff1a; The two leaders had a ​​cordial​​ but formal discussion. &am…

类似东郊到家的上门按摩预约服务系统小程序APP源码全开源

&#x1f525; 为什么上门按摩正在席卷全国&#xff1f; 万亿蓝海市场爆发 2024年中国按摩市场规模突破8000亿&#xff0c;上门服务增速达65% 90后成消费主力&#xff0c;**72%**白领每月至少使用1次上门按摩&#xff08;数据来源&#xff1a;艾媒咨询&#xff09; 传统痛点…

驱动学习专栏--写在前面

此专栏基于正点原子的文档【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81 开发板为luckfox的rv1106开发板&#xff0c;之前参加过一个CM1相机的开源项目&#xff0c;与其吃灰不如作为一个学习的工具来发挥余热 所以文档中的一些东西需要对应的在rv1106平台上做修改&#xff…

第二篇:Python函数与模块化编程深度教程

第一章:函数定义与调用 1.1 函数基础架构 1.1.1 函数定义规范 函数定义采用def关键字,遵循PEP8命名规范(小写字母+下划线) def calculate_circle_area(radius):"""计算圆的面积""" # 文档字符串PI = 3.14159return PI * radius ​**​ …

3.1.3.3 Spring Boot使用Filter组件

在Spring Boot中使用Filter组件&#xff0c;可以通过创建一个类实现Filter接口&#xff0c;并使用Component注解将其标记为Spring组件。通过Order注解可以指定过滤器的执行顺序&#xff0c;数字越小优先级越高。在LoggingFilter类中&#xff0c;重写init、doFilter和destroy方法…

目标追踪Hyperspectral Adapter for Object Tracking based on Hyperspectral Video

论文作者&#xff1a;Long Gao,Yunhe Zhang,Langkun Chen,Yan Jiang,Weiying Xie,Yunsong Li 作者单位&#xff1a;Xidian University;the University of Sheffield 论文链接&#xff1a;http://arxiv.org/abs/2503.22199v1 内容简介&#xff1a; 1&#xff09;方向&#x…

Python及C++中的排序

一、Python中的排序 &#xff08;一&#xff09;内置排序函数sorted() 基本用法 sorted()函数可以对所有可迭代对象进行排序操作&#xff0c;返回一个新的列表&#xff0c;原列表不会被修改。例如&#xff0c;对于一个简单的数字列表nums [3, 1, 4, 1, 5, 9, 2, 6]&#xff…

详解springcloud nacos使用

1.nacos server安装 下载 Nacos Server 2.5.1 https://nacos.io/download/nacos-server/?spm5238cd80.2ef5001f.0.0.3f613b7clM2t6D 部署文档&#xff1a;https://nacos.io/docs/latest/manual/admin/deployment/deployment-standalone/?spm5238cd80.6a33be36.0.0.25b41e5d…

第三篇:Python数据结构深度解析与工程实践

第一章:列表与字典 1.1 列表的工程级应用 1.1.1 动态数组实现机制 Python列表底层采用动态数组结构,初始分配8个元素空间,当空间不足时按0,4,8,16,25,35...的公式扩容,每次扩容增加约12.5%的容量 通过sys模块可验证扩容过程: import sys lst = [] prev_size = 0 for …

NOIP2015提高组.运输计划

目录 题目算法标签: 树上倍增, l c a lca lca, 前缀和, 树上差分, 二分思路代码* v e c t o r vector vector存邻接表会超时 题目 521. 运输计划 算法标签: 树上倍增, l c a lca lca, 前缀和, 树上差分, 二分 思路 注意到答案是具有二分性质的, 对于某个时间 m i d mid …