 这是一套基于FasterWhisper Large v3 turbo, Qwen3-4B-Instruct (Q4_K_M), 以及GPT-SoVITS开发的实时转译系统。这套系统的运行逻辑如下。


用户指定一个输入语言，一个输出语言 > 用户开始说话 > STT 开始识别转换 > 识别可能存在的误听（比如模糊拼音，使用模型自带的逻辑衡量是否为幻觉etc）并自我更正 > 输出内容 > 消除重复内容以及幻觉 > 写入OBS实时字幕 > 继续经过LLM+RAG或者某些提示词或者知识库校正 > 去掉标点的版本写入srt > 带标点的版本写入txt文档 > 继续经过LLM (按理说这里可以用同一个LLM来处理不同的文本，毕竟这玩意算的挺快的)将其翻译到目标语言（同时应用一些语体矫正之类的提示词，以及知识库，rag等） > 去掉标点的版本写入OBS实时字幕 > 另外还要写入SRT > 带有标点的版本写入TXT文档 > 发送给VITS/TTS > TTS进行朗读。

所以总的来说，我们的UI要有这些部分：

    UI分为几个不同板块，我们先将上下一分为二，形成A，B两个板块。A在上，B在下。
        首先是A
            在上面A部分的再进行左右的一分为二，将其分为A1与A2。A1在左A2在右。
            将左侧的A1上下分开，分为A1a与A1b。A1a在上，A1b在下。
            A1a这部分展示实时语音转写的文本全文（逐渐以streaming方式呈现），A1b则展示实时转译完成的文本（逐渐以streaming方式呈现）。这就是A1部分的内容
            A2整个板块中则展示这几个值
                当前GPU使用率（百分比）与 VRAM使用率（量/总量）
                当前语音转实时文本延迟（OBS实时文本，也就是从用户说话开始到字幕出现在OBS那一刻的延迟），单位毫秒
                当前语音转文本延迟（完整文本，也就是被二次修正过的文本，也就是即将等待翻译的那些文本，也就是展示在A1a当中的文本）毫秒
                当前翻译延迟，也就是A1a文本从即将等待翻译的文本经过LLM转译到A1b那些已经被翻译完文本的延迟（毫秒）
                当前文本转语音延迟，也就是A1b文本经过VITS转换为语音的延迟，毫秒。
                当前系统状态：是否加载了某个模型，是否开启了STT，是否开启了OBS实时字幕，当前识别哪种语言，是否启用了LLM转译，当前正转译为哪种语言，以及是否开启了TTS
        然后是B
             这部分将由不同的选项卡组成，分别为
                听写模型
                    一个开关，用于启用/停用STT部分。让用户注意，如果停用了该部分，将无法活得OBS实时字幕。但是我们可以仍旧单独让LLM翻译模块工作，也就是说如果用户往这个A1a那里手动写东西或者复写内容的话，我们要在A1b里展示翻译过的文本。这种情况下整个系统（假设只有LLM工作）就像一个普通的谷歌翻译/Deepl翻译器一样。由于没有时间轴，当单独启用时，不写入txt/srt文档
                    这里使用下拉列表来展示模型文件夹里的不同模型
                    使用一对按钮“加载”与“卸载”来控制模型是否加载。
                    加载/卸载后同步更新A区里模型的状态。一个模型已经加载时，用户必须先点击卸载后才能选择另一个模型然后加载。卸载模型时清理VRAM以及碎片化的缓存等。
                    设置一个下拉菜单，放入中文和英文和auto-detect三个选项，这个菜单用来指定用户说话的语言，也就是识别的语言。当用户选择了某一个选项，立刻更新语言代码或换为auto detect,不需要重复加载模型
                    设置一个“训练”按钮，点击后打开一个新UI页面专门供训练使用（这个页面回头再设计，我还不知道要加什么东西）
                    在模型标签卡里再设置不同的模型调整参数，来控制模型的各个参数，并写明每个参数的用途。这里可以在每个参数的标题（假设有一项是调节‘topk“,则在该词条后面加一个”info“的标志，当用户将鼠标悬停在info标志上可以展示该词条是什么意思，如何调整是最佳状态，以及调高了影响哪些些东西，调低了影响哪些东西）以及一个”重置“按钮以恢复默认值
                输出
                    这里使用不同的复选框让用户来勾选他们想要得到的文件和功能
                        输出OBS实时字幕：勾选后展示一个地址，例如localhost:5123让用户可以在obs里设置
                            是否启用源语言的开关
                            是否启用目标语言的开关
                        输出实时字幕txt文本：将未经二次矫正的OBS实时字幕合为一个txt文档。由于这里本来就没有设定要让实时字幕带上标点符号，所以里面应该是中文字符短语+空格分隔
                        输出源语言完整字幕txt文本：将经过校对的字幕合为一个txt文档，这里应该有正确的标点符号
                        输出源语言完整字幕srt版本：这里应该使用正确的srt格式，并且不带标点以空格分隔，但是应该是校对过后的文本内容。
                        输出一个wav文件，用于重新复查和潜在的训练需求。
                        输出目标语言的完整字幕txt文本：将经过翻译的字幕写入一个txt文档，这里应该有正确的标点符号
                        输出目标语言的完整字幕srt版本：将经过翻译的字幕写入一个srt文档，这里里应该使用正确的srt格式，并且不带标点以空格分隔。
                翻译模型
                    一个开关，用于启用/停用LLM翻译部分。就如同我在听写模型里面第一点写的一样，这东西应该可以独立开启，然后作为手动打字输入/输出的翻译引擎使用。当单独启用时，不写入txt/srt文档。
                    一个下拉菜单选择输入源语言是何种语言，提示用户这里要和听写模型那里一样。给的选项也是三个，中文，英文以及自动检测。这里也要做到用户选完不需要点确定就立刻应用。
                    一个下拉菜单选择翻译至何种目标语言，中文或者英语。这里也要做到用户选完不需要点确定就立刻应用。另外提示VITS参考音源应该优先使用这种目标语言的音频。
                    一个编辑提示词的地方
                    一个让翻译模型挂载知识库的地方（例如RAG,等等）
                    一个调整翻译模型本身数值的地方（参考听写模型的第六点）
                VITS
                    两个开关，一个用于启用/停用源文本（也就是纠正过的TXT那块输出内容的TTS。启用源文本时，这玩意就是个变声器(在STT运行情况下)或者纯TTS（在STT不运行时）；另一个用于启用/停用目标语文本。两项可以同时启用，但是要提醒用户安排虚拟声卡来接入不同的内容，这样就可以达成多语言同传的效果，当然我们也要将其加上输出至不同声音设备的选项。如同源文本TTS一样，如果此时STT未启用则就是一个纯TTS，如果STT启用就是一个实时同传系统。
                    一个可以让用户轻松打开参考音源文件夹的按钮以及音源文本的按钮。（按说这俩应该在几乎同一个地方，所以可以用一个按钮）
                    一些参数调整（我还没研究到这，不知道有啥参数可以调整，总之到时候再加）。
                OBS实时字幕效果。
                    这里给一些控制选项来调整基于html/css的obs字幕控制效果，让两种语言分别应用效果。
                        源语言应该在OBS字幕里的上面一行（假设二者都启用）
                        目标语言应该在OBS字幕里的下面一行（假设二者都启用）
                        假设只有2选1启用，则放在两行字幕原有的中间位置。
                    一个预览窗口，可以让用户在输入框里打几个字之后在底下看到相应字符的预览样式。（当然源语言和目标语言都要有）
                    源语言和目标语言分别可调字体样式。可以让用户自行选择字体并放入一个资源文件夹，或者使用google的字体。
                    源语言和目标语言分别可选字体大小。
                单独的训练页面。这里我还没有任何想法，但我们可以留出来这一个功能。


Summarize:
Phase 1: Project Foundation & Global State Management

目的： 建立主窗口框架、多线程逻辑以及跨模块的状态共享机制。

    Prompt to Copilot:

    I am building an integrated real-time translation system using FasterWhisper (Large v3 turbo), Qwen-3-4B-Instruct, and GPT-SoVITS.

    Task 1: Project Structure & UI Layout Create a Python GUI application using PyQt6. The UI should be divided vertically into Section A (Top) and Section B (Bottom).

        Section A (Monitoring): > - Split into A1 (Left) and A2 (Right).

            A1 is split into A1a (Live Source Text Stream) and A1b (Live Translated Text Stream).

            A2 displays system metrics: GPU Usage %, VRAM Usage (Current/Total), and Latency Metrics (STT latency, Translation latency, TTS latency). It also shows the current status of each module (Loaded/Started/Language).

        Section B (Settings):

            A QTabWidget containing tabs: "STT Model", "Translation Engine", "TTS (VITS)", "Output Settings", and "Training".

    Task 2: Global State Controller Implement a SystemState class to manage shared variables (e.g., current language, model status, toggle switches) to ensure thread-safe communication between the UI and backend processing.

Phase 2: FasterWhisper STT Module Integration

目的： 实现语音识别、幻觉过滤和实时流式输出。

    Prompt to Copilot:

    Task: Implement the STT Module (FasterWhisper Large v3 turbo)

        Backend Logic: > - Implement a streaming audio listener.

            Apply a logic to filter "hallucinations" (repeated characters or nonsensical output).

            Sub-1.5s latency target for subtitles.

        UI Integration (STT Tab):

            A toggle switch for STT. If OFF, allow manual text input in A1a for standalone translation.

            Model Management: A dropdown to select models from a local folder, with "Load" and "Unload" buttons. Ensure VRAM is cleared upon unloading.

            Language Selection: Dropdown with "Chinese", "English", and "Auto-detect". Switching language should update the config immediately without reloading the model.

            Parameter Tuning: Sliders/Inputs for top_k, temperature, etc. Add an "info" icon next to each that shows a tooltip explanation on hover. Include a "Reset" button.

Phase 3: LLM Translation & RAG Module

目的： 处理文本校准、翻译逻辑以及知识库挂载。

    Prompt to Copilot:

    Task: Implement the LLM Translation Module (Qwen-3)

        Logic: > - Input: Text from A1a (Source). Output: Translated text to A1b (Target).

            The LLM should handle two tasks: 1. Correct punctuation and RAG-based term correction for the source text. 2. Translate the corrected text to the target language.

            Support RAG (Retrieval-Augmented Generation) integration for domain-specific knowledge.

        UI Integration (Translation Tab):

            Toggle switch for LLM. When standalone, it acts like a standard translator.

            Source/Target language dropdowns (Chinese/English).

            A QPlainTextEdit for System Prompt editing.

            A section to mount local knowledge base folders (RAG).

            Advanced parameter tuning (same tooltip/info style as STT).

Phase 4: GPT-SoVITS TTS Module

目的： 语音合成输出及多声道管理。

    Prompt to Copilot:

    Task: Implement the TTS Module (GPT-SoVITS)

        Logic: > - Convert A1b (Translated Text) into speech with a < 3.0s total system latency (Speech-to-Speech).

            Support dual-stream TTS: Option to speak the Source text (acting as a voice changer) and the Target text (simultaneous interpretation).

        UI Integration (TTS Tab):

            Separate toggles for "Source TTS" and "Target TTS".

            Audio Output Device selection (to allow routing source/target audio to different virtual cables).

            A button to open the "Reference Audio" folder and a text box for the reference prompt text.

Phase 5: OBS Integration & File Outputs

目的： 处理外部输出、HTML 字幕和文件保存。

    Prompt to Copilot:

    Task: OBS Integration & File Management

        OBS Subtitles: > - Create a local HTTP server (e.g., localhost:5123) that serves an HTML/CSS page for OBS Browser Sources.

            Layout: Source text on the top line, Target text on the bottom line. If only one is enabled, center it.

            UI settings for Font Family (Local font/Google fonts), Font Size, and CSS styling.

        File I/O:

            Implement checkboxes for:

                Raw OBS Subtitles (.txt - no punctuation).

                Corrected Source (.txt with punctuation, .srt without punctuation).

                Translated Target (.txt with punctuation, .srt without punctuation).

                Raw Audio (.wav) for training data collection.

        Ensure file writing is asynchronous to prevent UI freezing.