songjongdevsecops/dsh-plugin-voz-copilot ↗★ 0

dsh-plugin-voz-copilot

提供一键语音通话及实时语音对话循环 适合需要与AI进行实时语音交流、使用麦克风输入和语音合成的用户。

套件
dsh-plugin-voz-copilot
相容性
待驗證
版本
0.6.1
授權
MIT
最近更新
2026年10月18日

安裝

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:songjongdevsecops/dsh-plugin-voz-copilot

Configuration

The defaults come from the package bundle patch and boot on any machine. To use your own workspace and voice, edit the profile patch (~/.dsh/profiles/web/cordis.patch.yml). A patch under the same id replaces the whole config of the line, so restate every key you want to keep.

- id: voz-copilot
  config:
    mode: 'attach'
    workspace: '/path/to/your/workspace'
    title: 'conversa_copilot'
    statePath: '~/.dsh/voz-copilot.json'
    pollMs: 3000
    whisperUrl: 'http://127.0.0.1:8178'
    whisperFastUrl: 'http://127.0.0.1:8179'
    voz:
      persona: 'Answer in short, plain sentences that sound natural when spoken aloud.'
      maxChars: 220
    tts:
      bin: 'edge-tts'
      voice: 'en-US-AriaNeural'
      rate: '+0%'
      volume: '+0%'
      lexicon: '/path/to/tts_lexicon.py'
      python: 'python3'
      servidorQuente: 'http://127.0.0.1:8180'
      servidorQuenteScript: '/path/to/tts-servidor.py'
      servidorQuentePython: 'python3'
    orador:
      limiar: 0.5
      perfilPath: '~/.dsh/voz-perfil.json'

~ is expanded in workspace, statePath and the other paths below.

KeyDefaultPurpose
modeattach (bundle line); code default is titleattach for the web profile; title for the acp profile
workspace. (the process working directory)workspace that owns the voice session; set it to your workspace path
titleconversa_copilottitle pinned on the push-to-talk session
markernone, required in title modefirst-line marker the bridge sends, e.g. [conversa_copilot]
statePath~/.dsh/voz-copilot.jsondurable link between the bridge and the session id
pollMs3000how often attach mode checks the link
whisperUrlhttp://127.0.0.1:8178whisper-server used by dictation and by the slow path
whisperFastUrlsame as whisperUrlfaster whisper-server for conversation segments
voz.personaa short spoken-answer instructionprefix prepended to each spoken turn
voz.maxChars220cap per spoken phrase (60 to 600)
tts.binrequired with ttsedge-tts executable, or a compatible wrapper
tts.voicerequired with ttsvoice name passed to edge-tts
tts.rate, tts.volume, tts.pitchunsetpassed through when set
tts.lexiconunsetpronunciation lexicon script (text in, text out)
tts.pythonpython3interpreter for the lexicon
tts.servidorQuenteunsetwarm TTS HTTP server base URL
tts.servidorQuenteScriptunsetscript the plugin starts for the warm server
tts.servidorQuentePythonpython3interpreter for that script
orador.limiar0.5cosine threshold for "this is my voice" (0.1 to 0.95)
orador.perfilPath~/.dsh/voz-perfil.jsonvoice profile, mode 0600, vectors only
orador.urlhttp://127.0.0.1:8181speaker embedding server
orador.pythonvenv/bin/python in the package (venv\Scripts\python.exe on Windows)interpreter for the speaker server
orador.scriptspeaker-servidor.py in the packagespeaker server script
orador.modelomodels/orador_eres2net.onnx in the packagespeaker embedding model

Text-to-speech

tts.bin is spawned once per phrase with --voice, --text, and the optional --rate=, --volume=, --pitch=, and must write MP3 to stdout. With tts.servidorQuente set, the plugin first tries GET /fala?texto=...&voz=... on that server and starts tts.servidorQuenteScript when it is down, falling back to the CLI. The warm server is what makes the first byte fast; the CLI works without it.

Speaker verification

The default paths assume a checkout of this repository with a venv inside it:

git clone https://github.com/songjongdevsecops/dsh-plugin-voz-copilot.git
cd dsh-plugin-voz-copilot
python3 -m venv venv
venv/bin/pip install -r requirements.txt

Then install the plugin from the checkout (dsh plugin --profile web add /path/to/dsh-plugin-voz-copilot) so the bundled paths resolve, or point orador.python, orador.script and orador.modelo at that checkout. The Python server is optional: without it the conversation mode still works, just without speaker filtering.