Round 2 — 新手压力测试报告(novice_test.md)¶
- 测试官:Round 2 子代理 · 新手压力测试官
- 日期:2026-09-21(CST)
- 测试机:Kali Linux VM(kernel 7.1.5+kali-cloud-amd64),8 vCPU / 7.6 GB RAM(+4G swap)/ 79G 磁盘,无 GPU、无 GUI(CPU-only)
- 任务:完全扮演零基础新手,把 Round 1 各文档里"成本最低、当天能跑起来"的步骤逐条实跑。每条记录:命令 / 预期 / 实际 / 耗时 / 成功与否 + 卡点 + 修正版命令。失败如实记录,不猜测绕过。
- 安全约束(已遵守):未触碰任何已有 systemd 服务与容器(nginx / gpt-load / Hermes 全程未动);临时容器
--rm并即时清理;未 pull >2GB 镜像;新开端口一律绑定 127.0.0.1;测试用 cron 完成后已还原。 - 覆盖:6 条测试 —— ①Qdrant 容器 ②Ollama 本地模型 ③promptfoo 评测 ④LightRAG 本地 RAG/知识图谱 ⑤cron 定时 agent ⑥GitHub 项目与版本时效核查。
- 总消耗:约 1.5 小时(含踩坑重跑)、现金 0 元(全本地/开源);测试期磁盘峰值 +约 11G,收尾已全部卸载清理、磁盘回落至基线(29G/39%,见第七节)。
一、环境基线(新手拿到手时会看到什么)¶
| 检查项 | 命令 | 实际结果 |
|---|---|---|
| Docker | docker --version |
29.8.1,已在跑(已有容器 gpt-load、kejilion-panel,不动) |
| Ollama | command -v ollama |
❌ 未安装 → 从零装 |
| promptfoo | command -v promptfoo |
❌ 未安装 → 从零装 |
| Node / npm | node --version |
v26.8.2 / npm 11.19.1 |
| Python | python3 --version |
3.14.7(PEP 668 受管环境,pip 直装被系统拒绝) |
| 磁盘 | df -h / |
起始已用 29G / 可用 46G |
二、逐条实测¶
测试 1:Qdrant 单容器部署(personal_memory.md 阶段 3 的依赖组件)¶
| 项 | 内容 |
|---|---|
| 命令 | docker pull qdrant/qdrant:latest → docker run -d --name novice-qdrant --rm -p 127.0.0.1:16333:6333 qdrant/qdrant → curl 建集合 / 插点 / 搜点 |
| 预期 | 镜像拉取成功;容器启动;REST API 返回版本 JSON;能建 collection、插向量、搜向量 |
| 实际 | 全部通过。v1.19.1;建集合 {"result":true};插入 2 个点成功;搜索返回 {"id":1,"score":1.0};/collections/test_col 显示 status:green, points_count:2 |
| 耗时 | pull 9.4s + 启动 ~3s + API 验证 <1s ≈ 15 秒全链路 |
| 成功 | ✅ 一次通过,零卡点 |
| 卡点 | 无 |
| 清理 | docker rm -f novice-qdrant 已执行,docker ps -a 确认无残留 |
修正版命令(防"端口裸奔"):
docker pull qdrant/qdrant:latest
docker run -d --name qdrant --rm -p 127.0.0.1:6333:6333 qdrant/qdrant # 必须加 127.0.0.1: 前缀
curl -s http://127.0.0.1:6333/ # 期望返回版本 JSON
docker rm -f qdrant # 用完即删
网上教程常写
-p 6333:6333,那会监听0.0.0.0把向量库暴露到公网——正是 infra_automation.md 说的"死法一"。
测试 2:Ollama 安装 → 拉模型 → 推理 → 升级(local_model.md 方案 A 步骤 1-2)¶
| 项 | 内容 |
|---|---|
| 命令 | curl -fsSL https://ollama.com/install.sh -o /tmp/o.sh && sh /tmp/o.sh(分别测"固定版本"与"默认最新"两条路径)→ ollama pull qwen2.5:0.5b → ollama run qwen2.5:0.5b "..." → 重跑脚本升级 |
| 预期 | 安装为常驻服务;能拉模型;能推理出中文回答;升级平滑且模型保留 |
| 实际 | ① 固定版本装(OLLAMA_VERSION=0.11.9)成功:服务 active、API 127.0.0.1:11434 正常。② qwen2.5:0.5b(397MB)拉取 41s;首次推理 6.6s(含冷加载),输出中文段落但质量很差(把向量数据库说成"二维坐标点集")。③ 默认路径重跑脚本 → 平滑升级到 v0.34.2:服务自动重启、4 个模型全部保留。④ 升级后冒烟:推理正常、嵌入 API 返回 768 维、服务 enabled+active。 |
| 耗时 | 安装 ≈1-2 分钟(含下载);pull:0.5B 41s、3B 2m59s、nomic-embed 30s、bge-m3(1.2G,未单独计时);升级数分钟(含重新下载) |
| 成功 | ✅ |
| 卡点 | ① OLLAMA_NO_START=1 只在 macOS 分支生效——脚本里该变量仅用于 open -a Ollama,Linux 下必然创建并启用 systemd 服务(实测输出 "Creating ollama systemd service... Enabling and starting");② 固定版本会装旧版:0.11.9 vs 官方最新 0.34.2(2026-09-15 发布,GitHub API 实测)→ 装完必须核对版本;③ Round 1 方案 A 的验收线"本地 8B 流式对话 ≥30 tok/s"是 M 系 Mac 的数字,8G 内存无 GPU 机器不成立;④ 升级过程中短暂出现 could not connect to a running Ollama instance / client version is 0.34.2 告警,属正常过渡 |
修正版命令:
# 1. 安装(默认装最新版;会自动创建并启用 systemd 服务)
curl -fsSL https://ollama.com/install.sh | sh
ollama --version # 必做:和 https://github.com/ollama/ollama/releases 对一下
systemctl is-enabled ollama # 默认 enabled(开机自启);不想要常驻:systemctl disable --now ollama
# 2. 小内存/无 GPU 机器:先用小模型走通全流程,别一上来就 7B
ollama pull qwen2.5:0.5b # 397MB,~41s
ollama run qwen2.5:0.5b "你好,用一句话自我介绍"
# 3. 确实需要 7B(≥16G 内存或有 GPU 再上)
# ollama pull qwen2.5:7b && ollama run qwen2.5:7b "你好"
# 4. 升级 = 重跑安装脚本(实测平滑:服务自动重启、模型/配置保留)
curl -fsSL https://ollama.com/install.sh | sh
测试 3:promptfoo 安装 + 最小 eval(evaluation.md 第 1-2 步)¶
| 项 | 内容 |
|---|---|
| 命令 | npm i -g promptfoo → 写 promptfooconfig.yaml(2 用例)→ promptfoo eval |
| 预期 | 安装成功;eval 输出表格,2 用例 PASS |
| 实际 | 安装成功(v0.123.1,2m33s)。第一次 eval 失败:Error: Could not identify provider: ollama.chat:qwen2.5:0.5b。改成 ollama:chat:qwen2.5:0.5b 后成功:✓ 2 passed (100%) |
| 耗时 | npm 安装 2m33s;失败 eval 2.2s;成功 eval 3.1s(内部 Duration 1s) |
| 成功 | ✅(修正 provider 语法后) |
| 卡点 | ① provider 语法坑:ollama.chat:<model> 报 "Could not identify provider",正确写法是 ollama:chat:<model>(冒号不是点号)——已查源码 providers.js 确认解析逻辑是 firstPart === "chat";② 安装体积意外大:2.6G(含 onnxruntime 等依赖),小 VPS 需留意;③ pip install promptfoo 不适用(这是 Node 项目) |
修正版命令:
npm i -g promptfoo # 约 2.5 分钟
mkdir -p ~/ai-dashboard && cd ~/ai-dashboard
cat > promptfooconfig.yaml <<'EOF'
description: "我的第一个 eval"
prompts:
- "把下面的词翻译成英文,只输出译文: {{word}}"
providers:
- ollama:chat:qwen2.5:0.5b # 注意:冒号写法!ollama:chat:模型名
tests:
- vars: { word: 猫 }
assert: [{ type: contains, value: cat }]
- vars: { word: 狗 }
assert: [{ type: contains, value: dog }]
EOF
promptfoo eval # 预期: 2 passed (100%)
promptfoo view # 可选:浏览器面板(无 GUI 环境跳过)
接 Ollama 时确保服务在跑;换云 API:provider 改
openai:chat:gpt-4o-mini+export OPENAI_API_KEY=...。
测试 4:LightRAG 本地知识图谱/RAG(personal_memory.md 阶段 4)¶
| 项 | 内容 |
|---|---|
| 命令 | pip3 install lightrag-hku(失败)→ python3 -m venv + pip install lightrag-hku → 脚本用本地 Ollama 索引 2 个小 md → 3 种模式查询 |
| 预期 | 本地零成本建索引,能回答"谁负责凤凰计划、部署在哪台服务器" |
| 实际 | 多次失败后跑通。最终可用路径:lightrag.llm.ollama 官方集成(ollama_model_complete + ollama_embed),实体抽取用 qwen2.5:3b、嵌入用 bge-m3。索引 2 个 ~200 字文件 → 抽出 9 个实体(张三/凤凰计划/PostgreSQL数据库/服务器/192.168.1.100/公司内网/李四/PostgreSQL/硬盘)、3 条关系;查询 3 模式(naive/local/hybrid)均返回正确答案(naive 命中原文;local/hybrid 基于图谱上下文)。 |
| 耗时 | venv+pip 安装 26.9s(lightrag-hku 1.5.7);索引 2 个小文件(3B 模型,CPU)≈4-5 分钟;3 模式查询 1-2 分钟。全程含试错约 15 分钟。 |
| 成功 | ✅(修正 4 个连环坑之后) |
| 卡点 | ① PEP 668:pip install 直装被拒(externally-managed-environment)→ 必须 venv;② openai_embed 硬编码 1536 维 + 默认模型名 text-embedding-3-small:把 base_url 指向 Ollama 后要么 404、要么维度校验炸(total elements (768) cannot be evenly divided by expected dimension (1536))——不能直接把 OpenAI 集成改成 Ollama;③ 传普通 lambda 会崩:AttributeError: 'function' object has no attribute 'func'(必须用 EmbeddingFunc 实例);④ 官方 Ollama 路径默认嵌入模型是 bge-m3(要 ollama pull bge-m3,1.2G,1024 维);⑤ 小模型不可用:0.5B 能索引但实体抽取=0(图谱全空,local/global/hybrid 查询全部 [no-context]),3B 才可用;⑥ 速度瓶颈:CPU-only 下 3B 抽取 2 个小文件要 4-5 分钟——个人大笔记库(成百上千文件)用本地 CPU 模型不现实,必须云 API 或 GPU |
修正版命令(可直接跑通):
# 0. 前置:Ollama 已在跑(见测试 2)
ollama pull qwen2.5:3b # 实体抽取模型(≥3B,0.5B 实测不可用)
ollama pull bge-m3 # 嵌入模型(1024 维,官方默认)
# 1. 独立 venv(绕开 PEP 668)
python3 -m venv ~/lightrag-venv
~/lightrag-venv/bin/pip install lightrag-hku # 实测 1.5.7,约 27s
# 2. 脚本(已归档:round2/agents/artifacts/lightrag_min_v3.py)
import asyncio, glob
from lightrag import LightRAG, QueryParam
from lightrag.llm.ollama import ollama_model_complete, ollama_embed
OLLAMA = "http://127.0.0.1:11434"
async def main():
rag = LightRAG(
working_dir="/tmp/lightrag-work",
llm_model_func=ollama_model_complete,
llm_model_name="qwen2.5:3b",
llm_model_kwargs={"host": OLLAMA, "options": {"num_ctx": 8192}},
embedding_func=ollama_embed, # 关键:官方 Ollama 集成(bge-m3/1024维)
embedding_batch_num=2,
)
await rag.initialize_storages()
docs = [open(f, encoding="utf-8").read()
for f in sorted(glob.glob("/tmp/lightrag-docs/*.md"))]
await rag.ainsert(docs)
for mode in ["naive", "local", "hybrid"]:
print(mode, "->", (await rag.aquery(
"谁负责凤凰计划?它部署在哪台服务器?", param=QueryParam(mode=mode)))[:200])
await rag.finalize_storages()
asyncio.run(main())
实测结论:"本地全免费 RAG"可行但有硬门槛——模型 ≥3B、索引速度受 CPU 限制。小规模(几十个短文件)可接受;大规模笔记库建议走云 API 或 GPU,或只做增量小块索引。
测试 5:cron 定时 agent(infra_automation.md「24/7 自运行」最小验证)¶
| 项 | 内容 |
|---|---|
| 命令 | 写 daily_brief.py(调本地 Ollama 生成三句话简报,追加落盘)→ 手动跑通 → 加 crontab */2 * * * *(每 2 分钟,测试用高频) |
| 预期 | 定时自动执行、产出可查、失败可见 |
| 实际 | 手动运行 13.3s 成功(冷启动)。cron 上线后 19/19 次全部成功(01:18:07 → 01:54:09,cron.log 19 行全 "ok",非 ok 0 行);产物 briefs/2026-09-21.md 共 20 条 = 19 次自动 + 1 次手动 |
| 耗时 | 单次 2-4s(模型常驻)/ 13s(冷启动);观察窗口 36 分钟 |
| 成功 | ✅ 19/19(100%) |
| 卡点/要点 | ① 必须绝对路径(cron 环境 PATH 极简);② 必须重定向日志 >> x.log 2>&1——否则失败无声(cron 默认只发本地 mail);③ 先手动跑通再加 cron(本次即按此顺序);④ 合并已有 crontab 时先 crontab -l > 文件 再追加,别直接覆盖(本次保留了原有 @reboot 行);⑤ 频率即成本:本例用本地模型=0 元;若指向云 API,每 2 分钟一次会烧钱,真实使用建议 1 天 1 次 |
修正版命令:
#!/usr/bin/env bash
set -e
mkdir -p ~/agents
cat > ~/agents/daily_brief.sh <<'EOF'
#!/usr/bin/env bash
# 绝对路径 + 日志重定向,两个都不能省
OUT=~/agents/briefs/$(date +%F).md
mkdir -p "$(dirname "$OUT")"
curl -s http://127.0.0.1:11434/api/generate \
-d '{"model":"qwen2.5:3b","prompt":"用三句话总结今天 AI 领域值得关注的事。","stream":false}' \
| jq -r '.response' >> "$OUT" 2>> ~/agents/error.log
EOF
chmod +x ~/agents/daily_brief.sh
~/agents/daily_brief.sh # ① 先手动跑通
# ② 再加 cron(每天 9:00;测试用 */2 高频验证后记得改回)
( crontab -l 2>/dev/null; echo "0 9 * * * $HOME/agents/daily_brief.sh >> $HOME/agents/cron.log 2>&1" ) | crontab -
crontab -l # 确认
本次测试后已还原 crontab(仅剩原
@reboot iptables-restore行)。
测试 6:项目核查命令 + 版本时效(BRIEF「项目核查」环节)¶
| 项 | 内容 |
|---|---|
| 命令 | curl -s https://api.github.com/repos/<owner>/<repo> \| jq '{stargazers_count, updated_at, pushed_at}' |
| 预期 | 无需 token 即可确认项目存在、近期活跃 |
| 实际 | ✅ 4 个全部返回:ollama/ollama 181,314★(推送 09-19)、HKUDS/LightRAG 39,778★(09-20)、qdrant/qdrant 34,711★(09-19)、promptfoo/promptfoo 25,307★(09-20)—— 全部活跃 |
| 耗时 | <5 秒 |
| 成功 | ✅ |
| 卡点 | 无(注意:匿名 API 限流 60 次/小时,BRIEF 已知) |
版本时效核查(本次实测):Ollama 最新 v0.34.2(2026-09-15,GitHub API)|promptfoo 0.123.1(npm)|lightrag-hku 1.5.7(PyPI)|Qdrant 1.19.1(容器 API)|qwen2.5 系列模型正常可拉。
三、卡点总表(按严重度)¶
| # | 测试 | 卡点 | 现象 | 修正 |
|---|---|---|---|---|
| 1 | ③ | promptfoo provider 语法 | ollama.chat:xxx → "Could not identify provider" |
用 ollama:chat:xxx(冒号) |
| 2 | ④ | LightRAG OpenAI 集成接本地嵌入必炸 | 404 / 768 cannot be divided by 1536 |
改用 lightrag.llm.ollama.ollama_embed |
| 3 | ④ | embedding_func 必须传 EmbeddingFunc 实例 | 'function' object has no attribute 'func' |
用官方已包装的 ollama_embed |
| 4 | ④ | 小模型做不了知识图谱 | 0.5B → 0 实体,图谱查询全部 [no-context] |
实体抽取 ≥3B |
| 5 | ④ | CPU 图谱索引慢 | 2 个小文件 ≈4-5 分钟 | 大库改云 API/GPU/增量索引 |
| 6 | ③④ | PEP 668 | pip install 被系统拒绝 |
venv(或 pipx) |
| 7 | ② | OLLAMA_NO_START 在 Linux 无效 | 仍创建并启用 systemd 服务 | 想不常驻:systemctl disable --now ollama |
| 8 | ② | 固定版本 = 旧版 | 0.11.9 vs 最新 0.34.2 | 装完 ollama --version 对照 GitHub |
| 9 | ③ | npm 全局安装体积 2.6G | 小 VPS 磁盘压力 | 提前确认磁盘;或本地项目内安装 |
| 10 | ① | 端口裸奔 | 教程式 -p 6333:6333 监听 0.0.0.0 |
加 127.0.0.1: 前缀 |
| 11 | ⑤ | cron 静默失败 | 无日志则完全无感知 | 绝对路径 + >> log 2>&1 |
四、六条测试总览¶
| # | 测试 | 结果 | 关键耗时 | 卡点数 |
|---|---|---|---|---|
| 1 | Qdrant 容器 | ✅ 一次通过 | 15s | 0 |
| 2 | Ollama 本地模型 | ✅(含升级验证) | 安装 1-2min | 4 |
| 3 | promptfoo 评测 | ✅(1 次失败后修好) | 2.5min | 3 |
| 4 | LightRAG 本地 RAG | ✅(4 个连环坑后修好) | ~15min 含试错 | 6 |
| 5 | cron 定时 agent | ✅ 19/19 | 13s + 36min 观察 | 0(5 条要点) |
| 6 | 项目/版本核查 | ✅ | <5s | 0 |
五、对 Round 1 文档的具体修改建议(实测驱动)¶
- local_model.md 方案 A:验收线"8B ≥30 tok/s"要分硬件档(无 GPU 机器改成"3B 流程跑通");补
OLLAMA_NO_START 在 Linux 无效的说明;补"装完必核版本";"1 小时体验"要计入模型下载时间。 - evaluation.md:明确
npm i -g promptfoo(不是 pip);provider 语法写ollama:chat:<model>;加 2.6G 安装体积提示。 - personal_memory.md:阶段 1 的 Obsidian+Smart Connections 是 GUI 插件,本环境无 GUI 未实测(诚实标注);阶段 4 的 LightRAG 示例命令与 pip 包 1.5.7 API 差异大,建议整段替换为本文档测试 4 的修正版。
- infra_automation.md:cron/心跳部分补"绝对路径 + 日志重定向 + 先手动后自动"三条铁律;补频率成本提醒。
- 通用:所有"验收标准"应标注前置硬件条件(内存/GPU/网络),否则新手会照抄不可达的数字。
六、本次实测的局限与未覆盖¶
- 无 GPU、无 GUI:Obsidian 插件、桌面 agent、
promptfoo view面板、浏览器类步骤未实测(诚实声明)。 - 样本小:cron 只观察 36 分钟;模型质量结论只基于 0.5B/3B 两个小模型;每项基本只跑 1-2 次。
- 网络环境:Docker Hub / GitHub / npm / PyPI 直连可用(非中国大陆网络);国内网络复现可能有差异。
- 未覆盖:n8n、browser-use/Playwright、MCP 客户端接入(Claude Code 等)、Mem0/Zep、LoRA 微调——超出本轮时间预算或需 GUI/GPU,建议 Round 3 补。
七、产物与清理记录¶
归档产物(保留)(/root/agi-research/round2/agents/):
- daily_brief.py、cron.log(19 行全 ok)、briefs/2026-09-21.md(20 条)
- artifacts/lightrag_min_v3.py(可用版)、artifacts/lightrag_query_only.py、artifacts/promptfooconfig.yaml、artifacts/lightrag-docs/
收尾清理(2026-09-21 02:10–02:26 CST 已执行完毕)——按“服务器资源有限、用完收尾”要求逐项卸载,并复核残留:
| 组件 | 处理 | 释放 |
|---|---|---|
| Ollama v0.34.2(服务 + 二进制 + 4 个模型 + systemd unit + 用户/组) | stop/disable + 全量删除 | ≈6.2G |
| promptfoo(npm 全局,825 个包) | npm rm -g promptfoo |
≈2.6G |
LightRAG venv + 临时目录(/tmp/lightrag-*) |
删除 | ≈0.4G |
| Qdrant 镜像 | docker rmi |
≈0.3G |
| npm / ms-playwright / pip 缓存(测试产生部分) | 清理 | ≈2.2G |
| 测试 crontab 条目 | 还原原样(仅剩 @reboot 行) |
— |
清理结果:磁盘 40G → 29G(回落至测试前基线,79G 盘的 39%);残留复核全部通过(command -v ollama 为空、端口 11434 无监听、ollama 用户/组/systemd unit 已删);既有容器(gpt-load、kejilion-panel)与 nginx / Hermes 全程未动、运行正常。
如需复现:测试 1–5 各节的“修正版命令”即完整重装步骤(Ollama 全套含模型下载约 10 分钟)。
报告定稿于 2026-09-21 02:26 CST;测试安装与缓存已于同日完成收尾清理。所有“实际”均为本机实测输出,未实测项已逐条标注。