jarvis
唤醒词驱动的本地语音 AI 助手,Ollama+Qwen3 模型 + LangChain 工具型 A
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
唤醒词驱动的本地语音 AI 助手,Ollama+Qwen3 模型 + LangChain 工具型 A
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
一句话评价:唤醒词驱动的本地语音助手,用 Ollama + Qwen3 大模型实现"Jarvis,给我查一下东京现在几点"这样的自然语言交互。
想象一下:清晨你刚坐到工位,随口说一句「Jarvis,今天天气怎么样」,桌上的 AI 助手立刻用语音回应你——无需打开浏览器,无需切换窗口,整个过程就像在指挥一个贴身的智能管家。
这不是科幻电影,这是 llm-guy/jarvis 正在做的事。
Jarvis 由独立开发者 llm-guy 于 2025 年 7 月创建,是一个实验性质的个人项目。它将大语言模型的 Agent 能力与语音交互结合,让本地部署的 Qwen3 模型"开口说话"并执行真实任务。
这个项目的核心价值不在于技术突破,而在于集成度——它把 Ollama 本地推理、LangChain 工具调用、语音识别(ASR)、语音合成(TTS)四个模块串联起来,形成一个开箱即用的语音交互闭环。
作者在 README 中明确提到,项目最初受到了「钢铁侠的 JARVIS」启发,希望在个人电脑上复现类似的语音助手体验。
从源码分析来看,Jarvis 的架构分为四个层次:
项目使用 SpeechRecognition 库持续监听麦克风输入,通过 Google 的云端 ASR 服务将音频转文字,然后检测是否包含唤醒词「jarvis」。检测到唤醒词后,系统切换到"对话模式",这是整个交互的入口设计。
核心代码位于 main.py 的主循环:
唤醒后,用户的声音命令被发送给本地运行的 qwen3:1.7b 模型。项目使用 langchain-ollama 库中的 ChatOllama 接口与 Ollama 通信,支持流式响应(虽然当前代码未启用)。
这里的关键设计是本地推理:所有对话内容不会上传到云端,隐私性较好。但 qwen3:1.7b 属于较小参数的模型,在复杂推理任务上能力有限。
这是 Jarvis 最具技术含量的部分。项目使用 LangChain 的 create_tool_calling_agent 构建了一个工具型 Agent,系统提示词定义其角色为"Jarvis 智能助手",用户指令通过 Agent executor 分发给可用工具。
当前注册了 6 个工具:
| 工具名 | 功能 | 实现 |
|---|---|---|
get_time | 查询任意城市当前时间 | pytz 时区库,直接计算 |
duckduckgo_search | 网络搜索 | duckduckgo-search 库,无需 API Key |
arp_scan_terminal | 扫描局域网设备 | 执行系统 arp -a 命令 |
capture_screenshot | 截取屏幕 | mss 库全屏截图 |
read_latest_screenshot | OCR 识别图片文字 | pytesseract + PIL |
matrix_mode | 启动黑客帝国动画 | 调用系统 cmatrix |
这套工具集的设计思路非常实用:涵盖了"查信息→搜网页→扫网络→看屏幕→读内容→娱乐"六个日常场景,且全部通过 LangChain 的 @tool 装饰器注册,扩展新工具的门槛很低。
Agent 的文字回复通过 pyttsx3 转为语音输出。代码中预设了优先选择名为 "jamie" 的语音引擎(需系统安装),语速设为 180 字/分钟。
架构总览:
┌─────────────────────────────────────────────┐
│ 用户语音输入 (麦克风) │
└──────────────┬──────────────────────────────┘
│ SpeechRecognition + Google ASR
▼
┌─────────────────────────────────────────────┐
│ Wake Word 检测 ("jarvis?") │
│ (非唤醒词模式: 低功耗监听) │
└──────────────┬──────────────────────────────┘
│ 唤醒成功后进入对话模式
▼
┌─────────────────────────────────────────────┐
│ LangChain Agent (qwen3:1.7b via Ollama) │
│ ┌──────────────────────────────────────┐ │
│ │ 工具池: 时间查询 | DDG搜索 | 截图 │ │
│ │ ARP扫描 | OCR识别 | 黑客帝国动画 │ │
│ └──────────────────────────────────────┘ │
└──────────────┬──────────────────────────────┘
│ Agent 回复 (文字)
▼
┌─────────────────────────────────────────────┐
│ TTS 语音输出 (pyttsx3 → 系统语音引擎) │
└─────────────────────────────────────────────┘
所有 LLM 推理都在本地 Ollama 运行时内完成,不依赖 OpenAI 或任何云端 API。用户对话内容完全保留在本地,适合对隐私有要求的场景(如处理公司内部信息)。
不同于普通的问答机器人,Jarvis 是一个真正的 Agent 系统——它能根据用户意图自主选择调用哪些工具。比如用户说「帮我看看屏幕上的文字」,它会自动调用 OCR 工具;说「现在几点了」,它调用时间工具。这种"思考后行动"的能力来自 LangChain 的 agent 框架。
虽然默认使用 Ollama 本地模型,但 main.py 中保留了对 ChatOpenAI 的注释掉的支持代码,只需取消注释即可切换到 GPT-4o-mini。这种双模式设计让项目在 Ollama 环境不可用时仍有降级方案。
使用 DuckDuckGo 搜索而非 Google/Bing,不需要任何付费 API key,降低了使用门槛。
Jarvis 代表了本地 AI 助手的一个细分方向:工具型语音 Agent。与纯聊天的本地 LLM 不同,它强调"能用"——通过工具调用真正执行任务(查时间、搜网页、扫网络)。
这类项目的兴起有几个背景:
ollama pull qwen3 即可create_tool_calling_agent 提供了标准化的 Agent 构建范式然而,这类项目的局限性也很明显:语音交互(麦克风+TTS)的系统依赖复杂,远不如 Web UI 友好;小参数模型的能力上限限制了复杂任务的处理。短期内,这类项目更适合作为个人辅助工具,而非生产级解决方案。
# 1. 安装依赖
pip install -r requirements.txt
# 2. 安装并启动 Ollama
# 3. 下载 qwen3:1.7b 模型
ollama pull qwen3:1.7b
# 4. 运行 Jarvis
python main.py
# 5. 对着麦克风说 "jarvis" 触发助手
| 指标 | 数值 |
|---|---|
| GitHub Stars | 321 |
| Forks | 108 |
| 主要语言 | Python |
| 核心依赖 | langchain, langchain-ollama, pyttsx3, SpeechRecognition |
| 默认模型 | Qwen3 1.7B(Ollama) |
| 工具数量 | 6 个(时间/搜索/截图/OCR/ARP扫描/黑客帝国) |
| 创建时间 | 2025-07-23 |
| 最近更新 | 2025-09-08 |
| License | 未声明 |
Jarvis 是一个技术思路清晰、代码结构简洁的本地语音 AI 助手原型。它用 LangChain 将本地大模型与实用工具连接起来,实现了"听到→思考→行动→回应"的完整语音交互闭环。虽然在麦克风兼容性、离线 ASR 等方面还有改进空间,但它为本地 AI 助手开发提供了一个可参考的工程模板。如果你正在探索"如何在本地跑一个能真正做事的 AI 助手",这个项目值得 clone 下来研究。