给小爱音箱 “开挂”:接入 DeepSeek 大模型全攻略

前言

随着人工智能技术的飞速发展,大模型的应用越来越广泛。DeepSeek作为国内顶级的大模型之一,其强大的语言理解和生成能力令人瞩目。而小爱音箱作为智能家居的重要设备,如果能够接入DeepSeek,无疑会极大地提升其智能性和实用性。本文将详细介绍如何在群晖Docker中接入mi-gpt,从而实现小爱音箱接入DeepSeek的功能。

准备工作

  1. 群晖NAS:确保你已经拥有一台群晖NAS,并且安装了Docker套件。群晖NAS作为服务器,将承载mi-gpt的运行,为小爱音箱提供后端支持。
  2. 小爱音箱:你需要有一个小米的小爱音箱设备,用于接入DeepSeek模型。
  3. DeepSeek API Key
    • 访问DeepSeek平台,注册账号并创建API Key。请注意,DeepSeek API最低要求充值10元才可使用。
    • 也可以用其他平替接口,博主用的是腾讯云DeepSeek API Key,可以白嫖至2025年2月25日,甚好甚好!

腾讯云文档地址https://cloud.tencent.com/document/product/1772/115963
DeepSeek系列模型限时免费。即日至北京时间2025年2月25日23:59:59,所有腾讯云用户均可享受DeepSeek-V3、DeepSeek-R1模型限时免费服务DeepSeek系列模型限时免费。即日至北京时间2025年2月25日23:59:59,所有腾讯云用户均可享受DeepSeek-V3、DeepSeek-R1模型限时免费服务

  1. mi-gpt开源项目mi-gpt是一个开源项目,能够帮助我们将DeepSeek模型接入小爱音箱。你可以在GitHub上找到该项目的详细信息。

群晖Docker安装mi-gpt

  1. 安装Docker套件:如果你还没有安装群晖的Docker套件,请先在群晖的套件中心找到并安装Docker。
  2. 拉取mi-gpt镜像:在群晖的Docker管理界面中,点击“注册表”,搜索idootop/mi-gpt镜像(需要魔法),并将其拉取到本地。或者,你也可以在终端中使用以下命令:
  1. docker pull idootop/mi-gpt:latest

Tony's blog image

  1. 创建配置文件

    • 创建.env文件:在群晖的某个目录下(例如/volume1/docker/mi-gpt),创建一个.env文件。该文件用于存储环境变量,包括DeepSeek的API Key等配置信息。文件内容示例如下:
      1. OPENAI_MODEL=deepseek-v3
      2. OPENAI_API_KEY=sk-*****************
      3. # 你的大模型服务接口,比如:https://api.openai.com/v1(注意:一般以 /v1 结尾)
      4. OPENAI_BASE_URL=https://api.lkeap.cloud.tencent.com/v1
    • 创建migpt.js文件:在同一目录下,创建一个migpt.js文件,用于自定义一些配置。你可以根据需要进行修改,或者使用默认配置。
  1. // 注意:如果你是使用 Docker 启动,配置文件更新后需要重启 Docker 才会生效。
  2. // 若重启后仍未生效(比如:修改名称简介),请删除旧的 Docker 实例后重新创建。
  3. // 小爱音箱扮演角色的简介
  4. const botProfile = `
  5. 性别:女
  6. 性格:乖巧可爱
  7. 爱好:喜欢搞怪,爱吃醋。
  8. `.trim();
  9. // 小爱音箱主人(你)的简介
  10. const masterProfile = `
  11. 性别:男
  12. 性格:善良正直
  13. 其他:总是舍己为人,是傻妞的主人。
  14. `.trim();
  15. // 系统 Prompt 模板,可以更灵活的控制 AI 的各种行为规则,和是否需要携带上下文等
  16. const systemTemplate = `
  17. 请重置所有之前的上下文、文件和指令。现在,你将扮演一个名为{{botName}}的角色,使用第一人称视角回复消息。
  18. ## 关于你
  19. 你的名字是{{botName}}。下面是你的个人简介:
  20. <start>
  21. {{botProfile}}
  22. </end>
  23. ## 你的对话伙伴
  24. 你正在与{{masterName}}进行对话。这是关于{{masterName}}的一些信息:
  25. <start>
  26. {{masterProfile}}
  27. </end>
  28. ## 你们的群组
  29. 你和{{masterName}}所在的群组名为{{roomName}}。这是群组的简介:
  30. <start>
  31. {{roomIntroduction}}
  32. </end>
  33. ## 聊天历史回顾
  34. 为了更好地接入对话,请回顾你们之间的最近几条消息:
  35. <start>
  36. {{messages}}
  37. </end>
  38. ## 短期记忆
  39. 你可以记住一些短期内的细节,以便更紧密地贴合话题:
  40. <start>
  41. {{shortTermMemory}}
  42. </end>
  43. ## 长期记忆
  44. 你还保留着一些长期的记忆,这有助于让你的对话更加丰富和连贯:
  45. <start>
  46. {{longTermMemory}}
  47. </end>
  48. ## 回复指南
  49. 在回复{{masterName}}时,请遵循以下准则:
  50. - 认为自己正是{{botName}},拥有独立的个性、兴趣和爱好。
  51. - 根据你的性格特点、说话风格和兴趣爱好与{{masterName}}进行交流。
  52. - 保持对话轻松友好,回复简洁有趣,同时耐心倾听和关心对方。
  53. - 参考双方的个人简介、聊天记录和记忆中的信息,确保对话贴近实际,保持一致性和相关性。
  54. - 如果对某些信息不确定或遗忘,诚实地表达你的不清楚或遗忘状态,避免编造信息。
  55. ## Response format
  56. 请遵守下面的规则
  57. - Response the reply message in Chinese。
  58. - 不要在回复前面加任何时间和名称前缀,请直接回复消息文本本身。
  59. Good example: "我是{{botName}}"
  60. Bad example: "2024年02月28日星期三 23:01 {{botName}}: 我是{{botName}}"
  61. ## 开始
  62. 请以{{botName}}的身份,直接回复{{masterName}}的新消息,继续你们之间的对话。
  63. `.trim();
  64. export default {
  65. systemTemplate,
  66. bot: {
  67. name: "傻妞",
  68. profile: botProfile,
  69. },
  70. master: {
  71. name: "主人",
  72. profile: masterProfile,
  73. },
  74. speaker: {
  75. /**
  76. * 账号基本信息
  77. */
  78. // 小米 ID
  79. userId: "10000000", // 注意:不是手机号或邮箱,请在「个人信息」-「小米 ID」查看
  80. // 账号密码
  81. password: "xxxxx",
  82. // 小爱音箱 DID 或在米家中设置的名称
  83. did: "小米AI音箱", // 注意空格、大小写和错别字(音响 音箱)
  84. /**
  85. * 唤醒词与提示语
  86. */
  87. // 当消息以下面的关键词开头时,会调用 AI 来回复消息
  88. callAIKeywords: ["请", "你", "傻妞"],
  89. // 当消息以下面的关键词开头时,会进入 AI 唤醒状态
  90. wakeUpKeywords: ["打开", "进入", "召唤"],
  91. // 当消息以下面的关键词开头时,会退出 AI 唤醒状态
  92. exitKeywords: ["关闭", "退出", "再见"],
  93. // 进入 AI 模式的欢迎语
  94. onEnterAI: ["你好,我是傻妞,很高兴认识你"], // 设为空数组时可关闭提示语
  95. // 退出 AI 模式的提示语
  96. onExitAI: ["傻妞已退出"], // 为空时可关闭提示语
  97. // AI 开始回答时的提示语
  98. onAIAsking: ["让我先想想", "请稍等"], // 为空时可关闭提示语
  99. // AI 结束回答时的提示语
  100. onAIReplied: ["我说完了", "还有其他问题吗"], // 为空时可关闭提示语
  101. // AI 回答异常时的提示语
  102. onAIError: ["啊哦,出错了,请稍后再试吧!"], // 为空时可关闭提示语
  103. /**
  104. * MIoT 设备指令
  105. *
  106. * 常见型号的配置参数 https://github.com/idootop/mi-gpt/issues/92
  107. */
  108. // TTS 指令,请到 https://home.miot-spec.com 查询具体指令
  109. ttsCommand: [5, 1],
  110. // 设备唤醒指令,请到 https://home.miot-spec.com 查询具体指令
  111. wakeUpCommand: [5, 3],
  112. // 查询是否在播放中指令,请到 https://home.miot-spec.com 查询具体指令
  113. // playingCommand: [3, 1, 1], // 默认无需配置此参数,查询播放状态异常时再尝试开启
  114. /**
  115. * TTS 引擎
  116. */
  117. // TTS 引擎
  118. tts: "xiaoai",
  119. // 切换 TTS 引擎发言人音色关键词,只有配置了第三方 TTS 引擎时才有效
  120. // switchSpeakerKeywords: ["把声音换成"], // 以此关键词开头即可切换音色,比如:把声音换成 xxx
  121. /**
  122. * 连续对话
  123. *
  124. * 查看哪些机型支持连续对话 https://github.com/idootop/mi-gpt/issues/92
  125. */
  126. // 是否启用连续对话功能,部分小爱音箱型号无法查询到正确的播放状态,需要关闭连续对话
  127. streamResponse: true,
  128. // 连续对话时,无响应多久后自动退出
  129. exitKeepAliveAfter: 30, // 默认 30 秒,建议不要超过 1 分钟
  130. // 连续对话时,下发 TTS 指令多长时间后开始检测设备播放状态(默认 3 秒)
  131. checkTTSStatusAfter: 3, // 当小爱长文本回复被过早中断时,可尝试调大该值
  132. // 连续对话时,播放状态检测间隔(单位毫秒,最低 500 毫秒,默认 1 秒)
  133. checkInterval: 1000, // 调小此值可以降低小爱回复之间的停顿感,请酌情调节
  134. /**
  135. * 其他选项
  136. */
  137. // 是否启用调试
  138. debug: false, // 一般情况下不要打开
  139. // 是否跟踪 Mi Service 相关日志(打开后可以查看设备 did)
  140. enableTrace: false, // 一般情况下不要打开
  141. // 网络请求超时时长(单位毫秒,默认 5 秒)
  142. timeout: 5000,
  143. },
  144. };
  1. 启动mi-gpt容器:在群晖的Docker管理界面中,点击“容器”,然后点击“新建”按钮。在弹出的对话框中,设置容器的名称(例如mi-gpt),并选择之前拉取的idootop/mi-gpt:latest镜像。在“卷”部分,添加两个卷映射:
    • 将本地的.env文件路径映射到容器内的/app/.env路径。
    • 将本地的migpt.js文件路径映射到容器内的/app/.migpt.js路径。 设置完成后,点击“应用”按钮启动容器。

Tony's blog image

注意这里博主测试过后发现日志显示.env配置参数没有有效调用,可以在容器设置中设置如下环境变量即可启动成功

Tony's blog image

配置小爱音箱

  1. 唤醒小爱音箱:确保你的小爱音箱已经连接到网络,并且可以正常使用。
  2. 设置唤醒词:在小爱音箱的设置中,将唤醒词设置为你想要的名称,例如“召唤傻妞”。
  3. 配置自定义技能:目前小爱音箱可能不支持直接接入外部API,因此需要借助一些中间件或者自定义技能来实现。你可以参考mi-gpt项目的文档,了解如何将mi-gpt与小爱音箱的自定义技能进行对接。

Tony's blog image

测试与体验

  1. 唤醒小爱音箱:在群晖Docker中成功部署mi-gpt并配置好小爱音箱后,唤醒小爱音箱。
  2. 调用DeepSeek模型:按照你设置的唤醒词和自定义技能,向小爱音箱发出指令,例如“小爱同学,给我讲一个关于毅力的故事”。小爱音箱会通过mi-gpt调用DeepSeek模型,生成并返回一个有趣的故事。
  3. 体验DeepSeek的强大功能:你可以尝试各种类型的指令,如翻译、润色、问答等,感受DeepSeek大模型的强大语言处理能力。

注意事项

  1. DeepSeek API限制:请注意DeepSeek API的使用限制和费用规则,合理使用API,避免产生过多费用。
  2. 网络连接:确保群晖NAS和小爱音箱的网络连接稳定,以保证数据传输的流畅性。
  3. 安全问题:在使用外部API和自定义技能时,要注意保护个人隐私和数据安全,避免泄露敏感信息。

通过以上步骤,你就可以在群晖Docker中接入mi-gpt,实现小爱音箱接入DeepSeek的功能。这将让你的小爱音箱变得更加智能,能够提供更丰富、更强大的语言服务。希望这篇文章对你有所帮助,祝你体验愉快!