首頁 >科技週邊 >人工智慧 >在您的CPU筆記本電腦上建立LLM和神經網絡的本地語音助手

在您的CPU筆記本電腦上建立LLM和神經網絡的本地語音助手

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB原創
2025-02-25 17:10:11258瀏覽

>解鎖本地語音助手的力量:逐步指南

>

多模式大語言模型(LLM)的興起徹底改變了我們與AI的互動方式,從而促進了基於語音的互動。雖然OpenAI的語音啟用ChatGpt提供了方便的解決方案,但構建本地語音助手提供了增強的數據隱私,無限的API呼叫,以及可以針對特定需求進行微調模型的能力。 本指南詳細介紹了基於標準CPU的機器上這種助手的構造。

為什麼選擇本地語音助手?

>

>三個關鍵優勢推動了當地語音助手的吸引力:

  1. 數據隱私:避免將敏感信息傳輸到外部服務器。
  2. >
  3. 無限制的API調用:專有APIS施加的旁路限制。
  4. >可自定義的模型:>微調llms在特定域內進行最佳性能。
構建您的本地語音助手

這個項目包括四個核心組件:

    >
  1. 語音記錄:從設備的麥克風中捕獲音頻輸入。 庫促進了此過程,將音頻保存為WAV文件。 下面的代碼段說明了以下內容:sounddevice>
<code class="language-python">import sounddevice as sd
import wave
import numpy as np

sampling_rate = 16000  # Matches Whisper.cpp model

recorded_audio = sd.rec(int(duration * sampling_rate), samplerate=sampling_rate, channels=1, dtype=np.int16)
sd.wait()

audio_file = "<path>/recorded_audio.wav"
with wave.open(audio_file, "w") as wf:
    wf.setnchannels(1)
    wf.setsampwidth(2)
    wf.setframerate(sampling_rate)
    wf.writeframes(recorded_audio.tobytes())</path></code>
  1. >語音到文本轉換:將錄製的音頻轉錄為文本。 Openai的耳語模型(特別是)用於此目的。 ggml-base.en.bin
基於文本的響應生成:
<code class="language-python">import subprocess

WHISPER_BINARY_PATH = "/<path>/whisper.cpp/main"
MODEL_PATH = "/<path>/whisper.cpp/models/ggml-base.en.bin"

try:
    result = subprocess.run([WHISPER_BINARY_PATH, "-m", MODEL_PATH, "-f", audio_file, "-l", "en", "-otxt"], capture_output=True, text=True)
    transcription = result.stdout.strip()
except FileNotFoundError:
    print("Whisper.cpp binary not found. Check the path.")</path></path></code>
    使用輕型LLM(例如,Ollama的
  1. )來生成對轉錄輸入的文本響應。 實用程序功能,,處理LLM相互作用。 > qwen:0.5b run_ollama_command
>
<code class="language-python">import subprocess
import re

def run_ollama_command(model, prompt):
    try:
        result = subprocess.run(["ollama", "run", model], input=prompt, text=True, capture_output=True, check=True)
        return result.stdout
    except subprocess.CalledProcessError as e:
        print(f"Ollama error: {e.stderr}")
        return None

matches = re.findall(r"] *(.*)", transcription)
concatenated_text = " ".join(matches)
prompt = f"""Please ignore [BLANK_AUDIO]. Given: "{concatenated_text}", answer in under 15 words."""
answer = run_ollama_command(model="qwen:0.5b", prompt=prompt)</code>
文本到語音轉換:
    使用NVIDIA的NEMO TOOLKIT(FastPitch和Hifi-GAN模型)將生成的文本響應轉換回音頻。
  1. 系統集成和未來改進
一個簡化的應用程序集成了這些組件,提供了一個用戶友好的接口。 進一步的增強可能包括對話歷史管理,多語言支持以及響應的來源歸因。 考慮探索開放的WebUI以獲取其他音頻模型集成功能。 記住要始終批判性地評估AI生成的響應。
<code class="language-python">import nemo_tts
import torchaudio
from io import BytesIO

try:
    fastpitch_model = nemo_tts.models.FastPitchModel.from_pretrained("tts_en_fastpitch")
    hifigan_model = nemo_tts.models.HifiGanModel.from_pretrained("tts_en_lj_hifigan_ft_mixerttsx")
    fastpitch_model.eval()
    parsed_text = fastpitch_model.parse(answer)
    spectrogram = fastpitch_model.generate_spectrogram(tokens=parsed_text)
    hifigan_model.eval()
    audio = hifigan_model.convert_spectrogram_to_audio(spec=spectrogram)
    audio_buffer = BytesIO()
    torchaudio.save(audio_buffer, audio.cpu(), sample_rate=22050, format="wav")
    audio_buffer.seek(0)
except Exception as e:
    print(f"TTS error: {e}")</code>

>該修訂後的響應維護核心信息,同時顯著提高了清晰度,結構和代碼格式。 它也可以去除YouTube嵌入,因為它不直接可重複。

>

以上是在您的CPU筆記本電腦上建立LLM和神經網絡的本地語音助手的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn