第 1 课

装好 DeepTutor,接上本地模型跑第一次问答

用 llama serve 起本地 OpenAI 兼容模型,在虚拟环境里安装 deeptutor[full]==1.7.0,用 init --non-interactive 初始化运行目录、module list 查看模块,写 setup.json 接上 llama_cpp 并用 config apply --check 校验,再用 doctor --online 体检、run chat 跑通第一次问答,看清小模型的错误。

图文20 分钟

课程目录第 1 / 3 课

学习位置仅保存在当前浏览器,有效期 180 天。

01 / 图文教材

图文教材

本课对照的官方页面:从 PyPI 安装、仅 CLI 安装、Provider 配置、AGENT_SETUP.md。命令与输出均在 Linux(Python 3.13、DeepTutor 1.7.0)上实测,输出为节选。

这一课把 DeepTutor 1.7.0 装进独立的虚拟环境,用 --non-interactive 方式初始化,再通过一份 setup.json 接上本机 llama.cpp 跑的小模型。全程不需要任何云端 API Key。如果你已有 OpenAI、DeepSeek 等 Key,第 4 步写明了换成云端模型要改哪几行。

第 1 步:准备一个本地 OpenAI 兼容模型

DeepTutor 自己不带模型,它调用的是任意 OpenAI 兼容接口。本课使用 llama.cpp 官方的 llama serve(安装方法见 llama.cpp README),加载 Gemma 4 E2B 的 4-bit 量化版本:

llama serve -hf unsloth/gemma-4-E2B-it-GGUF:Q4_K_M \
  --port 8080 -c 32768 --alias gemma-4-e2b --jinja

另开一个终端确认服务已就绪:

curl -s http://localhost:8080/v1/models

返回的 JSON 里能看到 gemma-4-e2b 就可以了。--alias 决定了接口里的模型名,后面写配置时要和它一致。

实测说明:本课使用的就是这个模型文件(本机已缓存,用 -m 直接指向 GGUF 文件启动)。2B 级小模型足够跑通流程,但第 3 课会看到它在复杂智能体任务上的局限。

第 2 步:安装 DeepTutor 1.7.0

官方要求 Python 3.11–3.14。1.7.0 起改成模块化分发:deeptutor 只含核心 CLI/SDK,deeptutor[full] 才包含 Web 应用和全部功能模块。本课装完整版:

mkdir -p my-deeptutor && cd my-deeptutor
python3 -m venv .venv
source .venv/bin/activate
python -m pip install "deeptutor[full]==1.7.0"
pip show deeptutor | head -n 2

对照结果:

Name: deeptutor
Version: 1.7.0

实测在普通云主机上安装耗时约 1 分钟。注意 1.7.0 没有 deeptutor --version 选项,查版本请用 pip show。

第 3 步:非交互初始化运行目录

DeepTutor 把所有设置和数据放在「运行目录」(runtime home)里。官方默认是你启动命令的当前目录,也可以用环境变量 DEEPTUTOR_HOME 显式指定。这里用显式写法,免得在别的目录执行命令时找不到配置:

export DEEPTUTOR_HOME="$PWD"
deeptutor init --non-interactive

对照结果(节选):

Seeded default personas: peer, research-assistant, teacher
{
  "ok": true,
  "status": "initialized",
  "next_step": "deeptutor config apply setup.json"
}

不加 --non-interactive 时,deeptutor init 会逐项询问端口、LLM、Embedding 和搜索服务。下面改用配置文件的方式,便于复制和复现。

先看看装了哪些功能模块:

deeptutor module list

实测 [full] 安装后,chat、knowledge、questions、solve、research、memory、notebook 等模块都显示为 installed 且 ready。parser-docling、parser-markitdown 等文档解析扩展和 renderer-manim 默认不安装,要用时再按官方文档另行安装。

第 4 步:用 setup.json 接上本地模型

列出 DeepTutor 认识的 Provider:

deeptutor config providers

在 llm 一栏里能找到 llama_cpp,它的默认地址是 http://localhost:8080/v1,认证方式为 local,也就是不需要 Key。新建 setup.json:

{
  "llm": {
    "provider": "llama_cpp",
    "model": "gemma-4-e2b",
    "base_url": "http://localhost:8080/v1"
  }
}

先校验,再写入:

deeptutor config apply setup.json --check
deeptutor config apply setup.json

对照结果:

{ "ok": true, "status": "validated", "sections": ["llm"] }
{ "ok": true, "status": "applied", "sections": ["llm"] }

(输出原本是多行 JSON,这里压成了一行。)

如果要换成云端模型,按 AGENT_SETUP.md 的规则改两处:provider 和 model 换成对应的值,再加一行 "api_key_env": "OPENAI_API_KEY",写的是环境变量的名字。setup.json 里不能直接写 Key,写了会被拒绝。另外,DeepTutor 不读取 .env 文件,配置统一存放在 data/user/settings/ 下。

第 5 步:体检,然后问第一个问题

deeptutor config show
deeptutor doctor --online

config show 会显示当前的 LLM、Embedding 和搜索配置,API Key 打码显示。doctor --online 的对照结果(表格边框省略):

PASS  LLM configuration   Active model: gemma-4-e2b (llama_cpp).
PASS  LLM credentials     The selected local provider does not
                          require an API key.
PASS  LLM endpoint        http://localhost:8080
PASS  Runtime storage     Writable: .../my-deeptutor
SKIP  RAG prerequisites   No knowledge bases are configured.
PASS  Provider response   The model returned a response.
Required checks passed.

去掉 --online 时只做本地检查,不会真的调用模型。接着用 run 发起一轮对话,-l zh 指定用中文回答:

deeptutor run chat "用三句话解释什么是导数,最后给一个生活中的例子。" -l zh

实测输出(节选,约 27 秒,公式两侧的 $ 已省略):

导数是用来衡量函数在某一点的瞬时变化率的数学概念。……
生活中的例子:想象你正在开车……那么在某一时刻的导数 v'(t)
就是你那一刻的瞬时速度……
session=unified_1793…_6558f4d7 capability=chat rounds=1 tokens=3.2k

注意这里的错误:速度函数 v(t) 的导数是加速度,不是速度。小模型「张口就来」是常态,下一课就用知识库让它按你的笔记作答。最后一行的 session= 是会话 ID,第 3 课会用它接着聊。

小结

  • 1.7.0 要装 deeptutor[full] 才有完整功能,版本用 pip show deeptutor 查。
  • init --non-interactive 加上 config apply setup.json 可以完全脚本化配置;Key 只能通过 api_key_env 写环境变量名。
  • doctor --online 能一次确认配置、连通性和模型是否有响应。