首页 > 其他分享 >GPT-SoVITS教程,接入酒馆AI,SillyTavern-1.11.5,让AI女友声若幽兰

GPT-SoVITS教程,接入酒馆AI,SillyTavern-1.11.5,让AI女友声若幽兰

时间:2024-03-26 14:13:45浏览次数:26  
标签:1.11 AI text get SillyTavern json GPT post

本次分享一下如何将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的官方项目:

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

直接运行启动脚本即可:

shell start.sh

如果是windows平台,运行bat:

start.bat

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

async fetchTtsGeneration(inputText, voiceId) {  
        console.info(`Generating new TTS for voice_id ${voiceId}`);  
  
        if (this.settings.streaming) {  
            const params = new URLSearchParams();  
            params.append('text', inputText);  
            params.append('speaker_wav', voiceId);  
            params.append('language', this.settings.language);  
            return `${this.settings.provider_endpoint}/tts_stream/?${params.toString()}`;  
        }  
  
        const response = await doExtrasFetch(  
            `${this.settings.provider_endpoint}/tts_to_audio/`,  
            {  
                method: 'POST',  
                headers: {  
                    'Content-Type': 'application/json',  
                    'Cache-Control': 'no-cache',  // Added this line to disable caching of file so new files are always played - Rolyat 7/7/23  
                },  
                body: JSON.stringify({  
                    'text': inputText,  
                    'speaker_wav': voiceId,  
                    'language': this.settings.language,  
                }),  
            },  
        );  
        if (!response.ok) {  
            toastr.error(response.statusText, 'TTS Generation Failed');  
            throw new Error(`HTTP ${response.status}: ${await response.text()}`);  
        }  
        return response;  
    }

部署Koboldcpp

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

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

输入编译命令

windows平台:

make

Mac平台:

make LLAMA_METAL=1

安装依赖:

pip install -r requirements.txt

启动服务:

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项目:

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

安装依赖:

pip3 install -r requirements.txt

修改一下api接口逻辑:

@app.post("/")  
async def tts_endpoint(request: Request):  
    json_post_raw = await request.json()  
    return handle(  
        json_post_raw.get("refer_wav_path"),  
        json_post_raw.get("prompt_text"),  
        json_post_raw.get("prompt_language"),  
        json_post_raw.get("text"),  
        json_post_raw.get("text_language"),  
        json_post_raw.get("sweight"),  
        json_post_raw.get("gweight"),  
    )  
  
  
@app.get("/")  
async def tts_endpoint(  
        refer_wav_path: str = None,  
        prompt_text: str = None,  
        prompt_language: str = None,  
        text: str = None,  
        text_language: str = None,  
        sweight: str = None,  
        gweight: str = None,  
):  
    return handle(refer_wav_path, prompt_text, prompt_language, text, text_language,sweight,gweight)  
  
  
def speaker_handle():  
  
    return JSONResponse(["female_calm","female","male"], status_code=200)  
  
  
@app.get("/speakers_list")  
async def speakerlist_endpoint():  
    return speaker_handle()  
  
  
def tts_to_audio_handle(text):  
  
    return handle(llama_audio,llama_text,llama_lang,text,"中英混合")  
  
  
@app.post("/tts_to_audio/")  
async def tts_to_audio(request: Request):  
    json_post_raw = await request.json()  
    return tts_to_audio_handle(json_post_raw.get("text"))  
  
  
if __name__ == "__main__":  
    uvicorn.run(app, host="0.0.0.0", port=port, workers=1)

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

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

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

标签:1.11,AI,text,get,SillyTavern,json,GPT,post
From: https://www.cnblogs.com/v3ucn/p/18096540

相关文章

  • 从0到1:基于SD的AI数字模特探索之路
    一、背景介绍传统的电商平台通常依靠人工拍摄和编辑产品图片,这需要大量的时间和资源。AI数字模特可以根据需要调整模特的外貌、体型和风格。这样,电商平台可以快速、高效地生成大量的产品展示图片,同时可以根据消费者的需求和喜好进行个性化定制。1.1初始想法最初我们主要聚焦到......
  • 大模型落地实战指南:从选择到训练,深度解析显卡选型、模型训练技、模型选择巧及AI未来展
    https://www.cnblogs.com/ting1/p/18096103 0.前言大模型发展史早期阶段(1950s~1980s)在1950年代初期,人们开始尝试使用计算机处理自然语言文本。然而,由于当时的计算机处理能力非常有限,很难处理自然语言中的复杂语法和语义。随着技术的发展,自然语言处理领域在20世纪60年代和70......
  • 淘宝item_sku-获取sku详细信息AIP接口(taobao.item_sku)布局技巧:3个技巧教你凸显商品sku
    淘宝的taobao.item_sku API接口是用于获取淘宝商品中SKU(StockKeepingUnit,库存量单位)的详细信息的。SKU通常代表一个商品的不同属性组合,比如颜色、尺码等。对于商家和消费者来说,了解SKU的详细信息是非常重要的,因为它可以帮助他们更准确地了解商品的具体属性和库存情况。通......
  • Springboot项目的main函数入口,如何像jar包一样接受参数
    一般来说,springboot项目是提供服务的,但是也可以用到导出jar来启动,那么如何介绍参数呢:packagecom.example.TestDemo;importcom.example.jmeter.bean.TestCaseResult;importcom.example.jmeter.controller.JmeterController;importlombok.extern.slf4j.Slf4j;importorg.......
  • 在Flink 1.11中,assignTimestampsAndWatermarks方法已经被新的方法assignTimestamps和a
    在Flink1.11中,assignTimestampsAndWatermarks方法已经被新的方法assignTimestamps和assignWatermarks所替代。这是为了更好地将时间戳和水位线的定义分离开来以下是使用新API的示例代码:importorg.apache.flink.api.common.eventtime.WatermarkStrategy;importorg.apache.fli......
  • OpenAI创始人Sam独家专访!GPT5升级时间确定!揭秘OpenAI内幕
    原文链接:OpenAI创始人Sam独家专访!GPT5升级时间确定!揭秘OpenAI内幕3月25日,LexFridman与SamAltman进行了一场深度对话,这次采访持续了近两个小时,可以说是一次全面而深入的交流。在这次对话中,他们几乎触及了当前科技界最为关注的几个热点话题。SamAltman针对GPT-5、Sora......
  • 大模型落地实战指南:从选择到训练,深度解析显卡选型、模型训练技、模型选择巧及AI未来展
    大模型落地实战指南:从选择到训练,深度解析显卡选型、模型训练技、模型选择巧及AI未来展望---打造AI应用新篇章0.前言大模型发展史早期阶段(1950s~1980s)在1950年代初期,人们开始尝试使用计算机处理自然语言文本。然而,由于当时的计算机处理能力非常有限,很难处理自然语言中的复杂语......
  • 论文解读(UDA-GCN)《Unsupervised Domain Adaptive Graph Convolutional Networks》
    Note:[wechat:Y466551|可加勿骚扰,付费咨询]论文信息论文标题:UnsupervisedDomainAdaptiveGraphConvolutionalNetworks论文作者:论文来源:2020aRxiv论文地址:download 论文代码:download视屏讲解:click1-摘要图卷积网络(GCNs)在许多与图相关的分析任务中都取得了令人印......
  • OpenAI 的下一步:GPT-5 及未来技术展望
    近期有消息称,随着Gemini1.5、MistralLarge和Claude3的推出,OpenAI的新一代人工智能语言模型GPT-5预计将在今年夏季亮相。根据《商业内幕》援引知情人士的报道,一些外部公司已经得到了GPT-5的初步演示,尽管该模型目前还在开发阶段,未经最终确定。GPT-5的预期高涨,当前已有不少......
  • Elasticsearch:使用在本地计算机上运行的 LLM 以及 Ollama 和 Langchain 构建 RAG 应用
    无需GPU的隐私保护LLM。在本博客中,我将演示使用不同的工具Ollama构建的RAG应用程序。与本文相关的所有源代码均已发布在github上。请克隆存储库以跟随文章操作。我们可以通过如下的方式来克隆:gitclonehttps://github.com/liu-xiao-guo/ollama_es什么是 Ollam......