使用llama.cpp在GStreamer中进行本地LLM文本翻译或转换

Reddit r/LocalLLaMA 工具

摘要

一个新的GStreamer元素集成了llama.cpp,使得在多媒体管道中能够基于本地LLM进行文本翻译和转换,从而实现实时字幕生成和改写。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/07/20 19:37

# 在 GStreamer 中使用 llama.cpp 进行本地 LLM 文本翻译或转换 · Devlog · Centricular 来源:https://centricular.com/devlog/2026-07/llama-cpp/ 几天前,我编写了一个新的 GStreamer 元素(https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/3119),它基于 llama.cpp(https://github.com/ggml-org/llama.cpp)。该元素将文本流作为输入,连同可配置的系统提示词一起传递给本地运行的 LLM,然后转发 LLM 的输出。它还可以保留过去输入和输出的历史记录,以获得更一致的结果。有关该元素的所有可配置项,请查看文档(https://gstreamer.freedesktop.org/documentation/llamacpp/)。 这一功能可用于各种涉及文本的场景。最明显的两个用途可能是翻译成不同语言以及改写文本。 编译插件时,请确保选择正确的后端。默认情况下只编译 CPU 后端,但根据你的 GPU,Vulkan、ROCm 或 CUDA 后端将提供更好的性能。例如,要使用 Vulkan 后端编译,请使用: `` $ cargo build --release --features vulkan `` ## 翻译 结合 whisper(https://gstreamer.freedesktop.org/documentation/whisper/)语音转文本元素,你可以实现例如观看带有英语音频的电影,实时转录文本,然后将文本从英语翻译成德语,并在视频上渲染德语字幕。 一个示例管道如下: `` $ gst-launch-1.0 filesrc location=movie.mp4 ! decodebin3 name=dbin \ dbin. ! audio/x-raw ! tee name=audio-tee audio-tee. ! queue max-size-time=10000000000 max-size-buffers=0 max-size-bytes=0 ! audioconvert ! audioresample ! \ whispertranscriber model-path=whisper-ggml-large-v3.bin model-preset=large-v3 chunk-duration=4000 ! \ textaccumulate latency=0 ! queue max-size-time=10000000000 max-size-buffers=0 max-size-bytes=0 ! \ llamacpp-texttransform model-path=Hunyuan-MT-7B.Q4_K_M.gguf system-prompt="将以下片段翻译成德语,无需额外解释。" history-size=5 ! \ textwrap columns=72 ! overlay.text_sink \ dbin. ! queue max-size-time=10000000000 max-size-buffers=0 max-size-bytes=0 ! videoconvert ! \ textoverlay name=overlay ! videoconvert ! autovideosink audio-tee. ! queue max-size-time=10000000000 max-size-buffers=0 max-size-bytes=0 ! audioconvert ! autoaudiosink `` 在电影《大独裁者》(https://en.wikipedia.org/wiki/The_Great_Dictator)结尾的著名演讲上运行该管道会产生如下输出: charlie-english-german(https://centricular.com/devlog/img/WHOe5zcBT6-1278.jpeg) 请注意,顶部显示的是纯转录文本,底部是相应的翻译。 此示例还使用了 `textaccumulate` 元素来收集完整的句子或从句,以及 `textwrap` 元素来换行长行,使其适合视频帧的顶部。 在文本转换之前收集完整的句子或从句,有助于模型获得更多上下文并提供更好的输出,但代价是增加了实时管道中的延迟以及非实时管道中的额外缓冲需求。 ## 改写 同样的方法也可用于改写文本。以下示例来自同一部电影,系统提示词现在包含将英语演讲改写为“鸭子英语”的指令。 charlie-english-duck(https://centricular.com/devlog/img/qplJ6_B7J3-1278.jpeg) 尽管除了喜剧效果外,这个示例并没有太大用处,但其有价值的应用可以是例如改写成更简单、更短的英语,或去除术语的使用。 ## 模型 一般来说,任何 llama.cpp 支持且支持文本输入和输出的模型都可以用于此元素。使用巨大的模型意义不大,而 1-10B 的模型通常足以提供有用的结果,同时也不会占用太多资源。 可以通过 `model-path` 属性选择要使用的模型。它需要一个本地的 GGUF 文件,可以从例如 Hugging Face(https://huggingface.co/)下载。已知效果较好的模型有: - Gemma 4 E4B(https://huggingface.co/google/gemma-4-E4B-it)(量化(https://huggingface.co/unsloth/gemma-4-E4B-it-GGUF))或 Gemma 4 E2B(https://huggingface.co/google/gemma-4-E2B-it)(量化(https://huggingface.co/unsloth/gemma-4-E2B-it-GGUF)), - Qwen 3.5 9B(https://huggingface.co/Qwen/Qwen3.5-9B)(量化(https://huggingface.co/unsloth/Qwen3.5-9B-GGUF))或 Qwen 3.5 4B(https://huggingface.co/Qwen/Qwen3.5-4B)(量化(https://huggingface.co/unsloth/Qwen3.5-4B-GGUF)), - Ministral 3 14B Instruct(https://huggingface.co/mistralai/Ministral-3-14B-Instruct-2512)(量化(https://huggingface.co/unsloth/Ministral-3-14B-Instruct-2512-GGUF))或 Ministral 3 8B Instruct(https://huggingface.co/mistralai/Ministral-3-8B-Instruct-2512)(量化(https://huggingface.co/unsloth/Ministral-3-8B-Instruct-2512-GGUF))或 Ministral 3 3B Instruct(https://huggingface.co/mistralai/Ministral-3-3B-Instruct-2512)(量化(https://huggingface.co/unsloth/Ministral-3-3B-Instruct-2512-GGUF)), - Hunyuan MT 7B(https://huggingface.co/tencent/Hunyuan-MT-7B)(量化(https://huggingface.co/mradermacher/Hunyuan-MT-7B-GGUF))。该模型专门针对翻译训练,需要按照 Hugging Face 页面上描述的特定格式提供系统提示词。 上面的示例都是使用 Hunyuan MT 7B 或 Qwen 3.5 9B 在 Q4_K_M(4 位)量化下创建的,在我的系统上通过 Vulkan 在 AMD Radeon RX 9070 XT 上运行时,实时处理没有消耗可观的算力资源,显存占用仅相当于权重大小加上一个小型 KV 缓存。 ## 审查与安全机制 这一切在一定范围内运行良好。不幸的是,大多数开源权重 LLM 将安全机制直接内置到模型权重中,而不是留给部署层处理。根据你的输入,可能会触发以下情况: charlie-english-censored(https://centricular.com/devlog/img/7OUHlpNp9A-1278.jpeg) 翻译 R 级电影的字幕,或关于某些历史事件的纪录片,很容易触发这些安全机制。显然,这对于更严肃的用途(例如瑞士联邦最高法院(https://arxiv.org/abs/2606.23375)的法庭文件翻译和摘要)也是一个问题。为了解决这个问题,可以使用非审查 / abliterated 模型,这些模型可以借助例如 Heretic(https://heretic-project.org/)创建,或直接从 Hugging Face 下载(例如这个 Qwen 3.5 9B 变体(https://huggingface.co/llmfan46/Qwen3.5-9B-ultra-uncensored-heretic-v2-GGUF))。另一种绕过此类审查的方法是提示注入模式,例如 Prompt Injection as Role Confusion(https://arxiv.org/abs/2603.12277),但可靠性较低。 ## 未来工作 该元素目前处于良好状态,可直接使用,但我希望进行一些未来的扩展: - 优化在同一进程内多次使用同一模型时的内存使用。理论上权重可以只在内存中保留一份,但目前每个实例都有一份副本。 - 优化 KV 缓存利用率。当过去输入/输出的历史记录满时,目前会丢弃整个 KV 缓存。随着这个 PR(https://github.com/utilityai/llama-cpp-rs/pull/1050)现已合并,应该可以显著改进这一点,使得无需在每个新输入时重新处理整个提示词。 - 支持其他 llama.cpp 元素,这些元素可以处理不同的模态,例如图像或音频输入,并可能结合文本输入。例如,可用于根据低帧率视频流自动生成场景描述,并在场景变化时触发。 如果这些扩展中的任何一项对您有用,或者您有任何疑问,或者对其他用例感兴趣,请随时联系我们(https://www.centricular.com/contact/)。

相似文章

基于SpeechLLM的流式语音转文本翻译

arXiv cs.CL

提出了一种用于流式语音转文本翻译的SpeechLLM架构,该架构根据音频自适应决定何时输出令牌,实现了1-2秒的延迟,且质量接近非流式基线。

ggml-org/llama.cpp

GitHub Trending (daily)

llama.cpp 是一个开源 C/C++ 库,用于在本地硬件上高效运行 LLM 推理,支持多种量化方法和多后端(CPU、GPU 等)。

llama.cpp

Hacker News Top

本文介绍了 llama.cpp 的官方主页,这是一个开源的本地 LLM 推理引擎,重点介绍了通过 pi-llama 插件与 Pi 编码代理的集成以及广泛的硬件优化。