.. _py_voice_ollama: 20. 使用 Ollama 进行本地语音对话 ========================================== 本示例将基于云的 GPT API 替换为本地运行的 **Ollama** LLM。 所有 AI 处理都在您自己的机器上完成 — 无需网络,无需管理 API 密钥。 这是一个完全离线的语音交互机器人。 **运行代码** .. raw:: html .. code-block:: cd ~/picrawler/examples sudo python3 20_voice_active_crawler_ollama.py **代码** .. note:: 您可以**修改/重置/复制/运行/停止**\ 以下代码。但在此之前,您需要进入源代码 路径,如 ``picrawler\examples``。修改代码后,可以直接运行以查看效果。 .. raw:: html .. code-block:: python from picrawler.llm import Ollama as LLM from voice_active_crawler import VoiceActiveCrawler # 如果 Ollama 在同一台树莓派上运行,使用 "localhost" # 如果在局域网其他电脑上运行,替换为那台电脑的 IP llm = LLM( ip="localhost", model="llama3.2:3b" # 可以使用任何模型 ) NAME = "Buddy" WITH_IMAGE = False TTS_MODEL = "en_US-ryan-low" STT_LANGUAGE = "en-us" KEYBOARD_ENABLE = True WAKE_ENABLE = True WAKE_WORD = ["hey buddy"] ANSWER_ON_WAKE = "Hi there" WELCOME = f"Hi, I'm {NAME}. Wake me up with: " + ", ".join(WAKE_WORD) INSTRUCTIONS = """ You are a Raspberry Pi-based robotic spider developed by SunFounder, named Picrawler... ## Actions You Can Perform: ["forward", "backward", "turn left", "turn right", "sit", "stand", "wave", "push up", "dance", "look left", "look right", "look up", "look down"] """ vad = VoiceActiveCrawler( llm, name=NAME, with_image=WITH_IMAGE, stt_language=STT_LANGUAGE, tts_model=TTS_MODEL, keyboard_enable=KEYBOARD_ENABLE, wake_enable=WAKE_ENABLE, wake_word=WAKE_WORD, answer_on_wake=ANSWER_ON_WAKE, welcome=WELCOME, instructions=INSTRUCTIONS, disable_think=True, ) if __name__ == '__main__': vad.run() **工作原理** #. 什么是 Ollama? `Ollama `_ 是一个在本地硬件上运行大语言模型的工具。 与调用云 API 的 GPT 课程不同,本示例在设备上运行一切 — 对话永远不会离开 树莓派(或本地网络)。 .. code-block:: # 安装 Ollama,然后拉取模型: ollama pull llama3.2:3b #. 本地 LLM 连接 .. code-block:: python from picrawler.llm import Ollama as LLM llm = LLM(ip="localhost", model="llama3.2:3b") 关键区别: - **无需 API 密钥** — 本地服务器不需要认证 - **IP 地址** — 同一台 Pi 上用 ``"localhost"``,其他电脑用 LAN IP - **模型** — 任何已拉取的 Ollama 模型都可以使用 #. 禁用视觉 .. code-block:: python WITH_IMAGE = False 大多数 Ollama 模型不支持多模态(图像)输入。如果拉取了支持视觉的模型 (如 ``llava``),可以将其设为 ``True``。 #. 禁用 Think .. code-block:: python disable_think=True 某些 Ollama 模型(特别是推理模型如 ``qwen2.5``)输出 ```` 标签。 ``disable_think=True`` 会去除这些标签,只朗读最终答案。 #. 同一个管道,离线运行 对话管道与 :ref:`py_voice_active_gpt` 相同,但**第 3 步在您自己的硬件上 运行**,无需云依赖、无速率限制、完全隐私。 #. 硬件注意事项 在树莓派上本地运行 LLM: - **小模型**\ (3B 参数,如 ``llama3.2:3b``)较慢但可运行 - **大模型**\ (7B+)对交互使用来说太慢 - 建议在局域网内的独立电脑上运行 Ollama,用 ``ip`` 参数指向它