经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » 人工智能基础 » 查看文章
GPT-SoVITS教程,接入酒馆AI,SillyTavern-1.11.5,让AI女友声若幽兰
来源:cnblogs  作者:刘悦的技术博客  时间:2024/3/27 8:43:36  对本文有异议

本次分享一下如何将GPT-SoVITS接入SillyTavern-1.11.5项目,让让AI女友声若幽兰,首先明确一下,SillyTavern-1.11.5只是一个前端项目,它没有任何大模型文本生成能力,所以后端必须有一个api服务来流式生成对话文本,这里选择koboldcpp。

首先看一下简单的项目运行架构图:

这里SillyTavern作为前端负责向后端的Koboldcpp发起请求,Koboldcpp流式返回文本,SillyTavern接受聊天文本进行展示,当文本接受完毕后,SillyTavern再次向后端的GPT-SoVITS发起请求,将全量文本传递给后端GPT-SoVITS,GPT-SoVITS根据文字来生成语音,并将语音的二进制文件返回给SillyTavern,最后SillyTavern播放音频,至此,一个完整的流程就走完了。

部署SillyTavern

首先克隆SillyTavern的官方项目:

  1. git clone https://github.com/SillyTavern/SillyTavern.git

直接运行启动脚本即可:

  1. shell start.sh

如果是windows平台,运行bat:

  1. start.bat

由于SillyTavern没有预留GPT-SoVITS的位置,所有将原本的XTTS改为GPT-SoVITS:

  1. async fetchTtsGeneration(inputText, voiceId) {
  2. console.info(`Generating new TTS for voice_id ${voiceId}`);
  3. if (this.settings.streaming) {
  4. const params = new URLSearchParams();
  5. params.append('text', inputText);
  6. params.append('speaker_wav', voiceId);
  7. params.append('language', this.settings.language);
  8. return `${this.settings.provider_endpoint}/tts_stream/?${params.toString()}`;
  9. }
  10. const response = await doExtrasFetch(
  11. `${this.settings.provider_endpoint}/tts_to_audio/`,
  12. {
  13. method: 'POST',
  14. headers: {
  15. 'Content-Type': 'application/json',
  16. 'Cache-Control': 'no-cache', // Added this line to disable caching of file so new files are always played - Rolyat 7/7/23
  17. },
  18. body: JSON.stringify({
  19. 'text': inputText,
  20. 'speaker_wav': voiceId,
  21. 'language': this.settings.language,
  22. }),
  23. },
  24. );
  25. if (!response.ok) {
  26. toastr.error(response.statusText, 'TTS Generation Failed');
  27. throw new Error(`HTTP ${response.status}: ${await response.text()}`);
  28. }
  29. return response;
  30. }

部署Koboldcpp

随后部署后端的大模型api:

  1. git clone https://github.com/LostRuins/koboldcpp.git

输入编译命令

windows平台:

  1. make

Mac平台:

  1. make LLAMA_METAL=1

安装依赖:

  1. pip install -r requirements.txt

启动服务:

  1. Python3 koboldcpp.py --model /Users/liuyue/Downloads/causallm_7b-dpo-alpha.Q5_K_M.gguf --gpulayers 40 --highpriority --threads 300

此时接口运行在http://localhost:5001

部署GPT-SoVITS

最后,部署GPT-SoVITS项目:

  1. git clone https://github.com/RVC-Boss/GPT-SoVITS.git

安装依赖:

  1. pip3 install -r requirements.txt

修改一下api接口逻辑:

  1. @app.post("/")
  2. async def tts_endpoint(request: Request):
  3. json_post_raw = await request.json()
  4. return handle(
  5. json_post_raw.get("refer_wav_path"),
  6. json_post_raw.get("prompt_text"),
  7. json_post_raw.get("prompt_language"),
  8. json_post_raw.get("text"),
  9. json_post_raw.get("text_language"),
  10. json_post_raw.get("sweight"),
  11. json_post_raw.get("gweight"),
  12. )
  13. @app.get("/")
  14. async def tts_endpoint(
  15. refer_wav_path: str = None,
  16. prompt_text: str = None,
  17. prompt_language: str = None,
  18. text: str = None,
  19. text_language: str = None,
  20. sweight: str = None,
  21. gweight: str = None,
  22. ):
  23. return handle(refer_wav_path, prompt_text, prompt_language, text, text_language,sweight,gweight)
  24. def speaker_handle():
  25. return JSONResponse(["female_calm","female","male"], status_code=200)
  26. @app.get("/speakers_list")
  27. async def speakerlist_endpoint():
  28. return speaker_handle()
  29. def tts_to_audio_handle(text):
  30. return handle(llama_audio,llama_text,llama_lang,text,"中英混合")
  31. @app.post("/tts_to_audio/")
  32. async def tts_to_audio(request: Request):
  33. json_post_raw = await request.json()
  34. return tts_to_audio_handle(json_post_raw.get("text"))
  35. if __name__ == "__main__":
  36. uvicorn.run(app, host="0.0.0.0", port=port, workers=1)

这里添加新的基于get方法的speakers_list,是为了配合xtts接口的格式,同时基于post方法的tts_to_audio方法用来生成语音,它只接受一个参数text,也就是需要转为语音的文本。

至此,三个服务就都配置好了,最后奉上视频教程:

  1. https://www.bilibili.com/video/BV1uJ4m1a7L4/

原文链接:https://www.cnblogs.com/v3ucn/p/18096540

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号