원클릭으로
brain-base
任何需要问答或把本地文档入库的场景,默认先调用 brain-base skill。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
任何需要问答或把本地文档入库的场景,默认先调用 brain-base skill。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | brain-base |
| description | 任何需要问答或把本地文档入库的场景,默认先调用 brain-base skill。 |
| disable-model-invocation | false |
本 skill 是 brain-base 的外部 Agent 调用手册,面向 Agent Loop / 工程编排器 / 多 Agent 系统。brain-base 是一个基于 LangGraph StateGraph 的个人知识库,提供三层架构 RAG(原始层 → 检索层 → 固化层)。
核心定位:
python -m brain_base.cli(LangGraph CLI)python -m brain_base.cli:这是给外部强 Agent 用的稳定调用边界。search;需要完整 Agentic RAG 回答 → ask。ask 主图会自动 fetch + 去重 + 入库順带回答(不需额外提示词、也不需独立命令;T50 删了重复设计的 ingest-url,本来就是 ask 的 URL 处理分支);本地文件 → ingest-file。满足任一即触发:
统一入口:
python -m brain_base.cli <command> [options]
| 意图 | 命令 | 是否走 LLM | 典型用途 |
|---|---|---|---|
| 健康检查 | health | 否 | 启动前探测 Milvus / playwright / LLM |
| 纯检索 | search | 否 | 拿候选 chunk,不生成答案 |
| 完整问答 | ask | 是 | Agentic RAG:固化命中 → 意图循环 → 检索 → 回答 → 自检 → 固化 |
| 交互式多轮 | chat | 是 | 内存维护对话历史,自动指代消解,/q 退出 |
| URL 入库 | ask "<问题 + URL>" | 是 | 问题中出现 URL 时,ask 主图自动 fetch + 去重 + 入库(T50 删了重复的 ingest-url):GitHub 项目页 / README / 官方文档 / 网页 |
| 本地文件入库 | ingest-file | 是 | PDF / DOCX / PPTX / XLSX / MD / TXT / 图片入库(MinerU + pandoc) |
| 删除文档 | remove-doc | 是 | 跨存储层一致性删除(dry-run + confirm 两阶段) |
| 固化层清理 | lint | 否 | 清理 rejected / 过期固化条目 |
| 固化命中检查 | crystallize-check | 否 | 判断某问题是否命中固化层(不生成答案) |
| 你手上有什么 | 想要什么 | 应调用 |
|---|---|---|
| 一个问题 | 完整回答 | ask |
| 一个问题 | 只要候选证据 | search |
| 一个 URL | 写入知识库(順带问答) | ask "<问题中包含 URL>",如 ask "介绍一下 https://x.com/y" |
| 一个本地文件路径 | 写入知识库 | ingest-file |
| 一段 Markdown / README 正文 | 写入知识库 | 先落盘到 .md 文件,再 ingest-file --path |
| 一个 doc_id 要删除 | 清理过期/重复文档 | remove-doc |
| 一个问题 | 判断是否已有固化答案 | crystallize-check |
| 需要持续多轮对话 | 跨进程上下文保持 | ask --session <id> |
| 需要交互式对话 | 人在终端里聊 | chat |
health用途:启动前一次性探测 brain-base 基础设施。
python -m brain_base.cli health
返回 JSON 包含 Milvus / playwright / LLM 三项状态。
适合:系统启动自检、CI 冒烟检查、Agent Loop 开机前探测。
search用途:纯检索,不生成答案,不调 LLM。
python -m brain_base.cli search \
--query "claude code subagent" \
--query "how to create claude code subagent" \
--top-k-per-query 20 \
--final-k 10 \
--no-rerank
特点:
--no-rerank 跳过)适合:
ask用途:走完整 QA 链路(LangGraph QaGraph)。
python -m brain_base.cli ask "Claude Code 的 subagent 怎么配置?"
内部流程:
data/crystallized/(value_score ≥ 0.3),下次相似问题短路返回输出:answer Markdown 文本到 stdout;log 到 stderr。
多轮对话(跨进程持久化):
# 第一轮
python -m brain_base.cli ask "RAGFlow 是什么?" --session rag-talk
# 第二轮(自动消解「它」→ RAGFlow)
python -m brain_base.cli ask "它支持哪些文档格式?" --session rag-talk
对话历史持久化到 data/sessions/<id>.jsonl,同 id 自动续上。指代词「它/那个/还有别的吗?」由 normalize 节点基于历史自动消解。
调试:
# 把完整 QaState dump 到 JSON 文件(e2e 测试评判用)
python -m brain_base.cli ask "问题" --state-dump ./debug/state.json
# playwright 强制无头(服务器 / CI)
python -m brain_base.cli ask "问题" --headless
chat用途:交互式多轮对话(人在终端里聊)。
python -m brain_base.cli chat
特点:
/q 退出后丢失)ask 主图)关键设计:ask 主图本身就是 URL 感知的。不需要"收录请求"、"ingest 提示词"、独立命令。只要问题中出现 URL,主图会自动走 extract_urls → url_pre_fetch → fetch_url 工具 入库順带回答。
推荐用法(自然问句即可):
python -m brain_base.cli ask "介绍一下 https://docs.litellm.ai/"
python -m brain_base.cli ask "https://github.com/some/repo 这个项目是干什么的?"
python -m brain_base.cli ask "比较 https://a.com 和 https://b.com 的区别"
ask 主图内部自动完成:extract_urls 提取 user_urls → url_pre_fetch 调 fetch_url 工具(readability + sha256 + hash_lookup 去重)→ qa_persist.write_raw_one(写 source_priority P0-P3)→ chunker 切块 → enrich → Milvus 入库→ 主图继续检索+回答。
全过程 SHA-256 去重(已存在的内容短路跳过,不会重复入库)。
历史说明:T50 前有 ingest-url 独立子命令,但与 ask URL 处理分支重复、已删。外部 Agent 不要在问题前缀加"请收录"/"ingest"/"入库"等提示词——直接问你想问的自然问题即可。
适合:
ask(两者同一个主图)github-trending-monitor 这种"自己抓榜单,但项目详情页交给 brain-base"的架构:对每个项目 URL 调 ask "介绍一下 <url>"evidence / get_info_ingested 字段)ingest-file用途:本地文件入库。
python -m brain_base.cli ingest-file \
--path ./papers/paper.pdf \
--path ./notes.md
参数:
--path:文件路径,可多次指定支持格式:PDF / DOCX / PPTX / XLSX / MD / TXT / 图片 / LaTeX(MinerU 3.x + pandoc)。
内部走 IngestFileGraph:convert(MinerU/pandoc → MD)→ frontmatter(含 SHA-256 去重)→ doc_enrich(LLM 文档级摘要/关键词)→ persist(chunk → enrich → Milvus)。
如果你手上有 Markdown / README 正文但不想先自己落盘:当前 CLI 没有 ingest-text 命令。workaround:先把内容写到临时 .md 文件,再 ingest-file --path:
# Windows PowerShell
Set-Content -Path ./data/temp/my-readme.md -Value $markdownContent -Encoding UTF8
python -m brain_base.cli ingest-file --path ./data/temp/my-readme.md
remove-doc用途:跨存储层一致性删除文档。
# dry-run:只输出删除清单
python -m brain_base.cli remove-doc --doc-id my-doc-2026-05-06 --reason "过期文档"
# confirm:执行删除
python -m brain_base.cli remove-doc --doc-id my-doc-2026-05-06 --confirm --reason "确认删除"
参数:
--doc-id:doc_id,可多次指定--url:按 URL 查找,可多次指定--sha256:按 SHA-256 查找--confirm:必须显式加上才真删(默认 dry-run)--force-recent:跳过时间保护--reason:删除原因内部走 LifecycleGraph:resolve → scan → dry_run →(confirm 时)delete_milvus → delete_files → clean_index → audit。
适合:Agent Loop 定期清理过期/重复文档。
lint用途:固化层健康检查。
python -m brain_base.cli lint
内部走 LintGraph:scan 固化层全部条目 → check 新鲜度 → degrade 过期条目 → delete rejected 条目。
适合:定期维护,清理固化层中的孤儿文件和过期答案。
crystallize-check用途:判断某问题是否命中固化层(不生成答案,不调 LLM)。
python -m brain_base.cli crystallize-check --question "LiteLLM 是什么?"
返回 JSON 含 status 字段(hit_fresh / hit_stale / cold_observed / cold_promoted / miss / degraded)。
适合:外部 Agent 想先判断"这个问题是不是已经有高质量固化答案了",再决定走 ask 还是直接拿缓存。
启动前:health
要回答问题:
1. 可选先 crystallize-check(判断是否已有固化答案)
2. 再 ask(固化命中秒返,未命中走完整 RAG)
3. 固化是自动的(value_score ≥ 0.3 自动写入),无需外部触发反馈
要补库:
1. URL → `ask "<问题中包含 URL>"`(问题里带 URL 即可,ask 主图自动 fetch+hash_lookup+入库順带回答;T50 删了重复的 ingest-url)
2. 本地文件 → ingest-file
要多轮对话:
1. 跨进程 → ask --session <id>
2. 人在终端 → chat
要删除文档:
1. remove-doc --doc-id <ID> --reason "原因"(dry-run)
2. remove-doc --doc-id <ID> --confirm --reason "确认"(执行)
定期维护:
1. lint(清理固化层)
ask "问题"ask "介绍一下 <url>"(任何包含 URL 的问题都会触发 ask 主图自动 fetch+入库,内部 hash_lookup 去重已存在内容短路跳过)search 验证可检索性remove-doc --doc-id <ID> --confirm 清理ask + ask --session 多轮对话ingest-file --path ./doc1.pdf --path ./doc2.md --path ./doc3.docxconversion_errors / persistence_results 确认成功率searchaskask "问题" --session my-sessionask "追问" --session my-session(自动消解指代)data/sessions/my-session.jsonlask / chat)BB_LOG_LEVEL 控制级别,默认 INFO)ask --state-dump <path> 把完整 QaState dict 写入 JSON 文件(含 evidence / sub_questions / answer / crystallize_result 等全部字段),适合 e2e 测试评判和排障。
调用前在 brain-base 项目根目录的 .env 中配置(复制 .env.example):
| 变量 | 作用 | 示例 |
|---|---|---|
BB_LLM_PROVIDER | LLM provider | anthropic / openai / minimax / glm / deepseek / qwen / xai / openrouter |
BB_DEEP_THINK_LLM | 模型名 | claude-sonnet-4-20250514 / MiniMax-M2.7 / deepseek-chat |
BB_LLM_API_KEY | API key | sk-xxx;缺时尝试 ANTHROPIC_API_KEY / OPENAI_API_KEY 兜底 |
| 变量 | 默认 | 作用 |
|---|---|---|
BB_LLM_BASE_URL | 空(用 provider 默认) | 自定义 API 端点(如 MiniMax Anthropic 兼容:https://api.minimaxi.com/anthropic) |
BB_LOG_LEVEL | INFO | 日志级别(DEBUG / INFO / WARNING / ERROR) |
BB_PLAYWRIGHT_HEADLESS | 空(默认有头) | 1 = 强制无头(服务器 / CI);默认有头(Google 反检测) |
BB_DEBUG_PAUSE_GOOGLE | 空 | 1 = Google 搜索后不关 page 等回车(调试用) |
BRAIN_BASE_PATH:外部 Agent 可设此环境变量指向 brain-base 仓库根目录,方便在任意 cwd 下执行:
cd $BRAIN_BASE_PATH && python -m brain_base.cli ask "问题"
brain-base 所有业务逻辑落在 7 个 LangGraph StateGraph 子图上(T50: 原 IngestUrlGraph 删除,URL 入库走 ask 路径),通过 BrainBaseGraph 顶层按 mode 分发:
| 子图 | 职责 |
|---|---|
| QaGraph | 用户问答全流程(固化命中 → 意图 Agent-Loop → 检索 → 回答 → 自检 → 固化);URL 入库同样由主路径 fetch_url 工具 + qa_persist.write_raw_one 完成 |
| IngestFileGraph | 本地文件入库(convert → frontmatter → doc_enrich → persist) |
| PersistenceGraph | 持久化管道(chunk → enrich → Milvus ingest) |
| CrystallizeGraph | 固化答案到整理层(hit_check → freshness_check / crystallize_write) |
| GetInfoGraph | 多步搜索循环(plan → search → classify → loop) |
| LifecycleGraph | 跨存储删除(resolve → scan → dry_run → delete → audit) |
| LintGraph | 固化层健康检查(scan → check → degrade → delete) |
固化命中且新鲜 → 直接返回缓存答案。否则:normalize 改写 → decompose 分解子问题 → intent_planner/executor/observer 循环(LLM 自主调度工具搜索/抓取/检索)→ 证据汇聚 → 入库 → 重新检索 → judge → answer → self_check → 自动固化。
| 层 | 存储 | 作用 |
|---|---|---|
| 原始层 | data/docs/raw/ + Milvus chunks | 不可变的原始证据 |
| 检索层 | Milvus hybrid(bge-m3 dense+sparse + bge-reranker) | 语义 + 关键词混合检索 |
| 固化层 | data/crystallized/(hot/cold 分层) | 高质量答案缓存,相似问题短路返回 |
| 优先级 | 标识 | 说明 |
|---|---|---|
| official-doc | 官方文档 | 最高权重,优先召回 |
| community | 社区内容 | 中等权重 |
| user-upload | 用户上传 | 基础权重 |
调用前应确认:
docker compose up -d).env 已配置 LLM key(BB_LLM_API_KEY)python -m brain_base.cli health 三项 ok(Milvus / playwright / LLM)| 情况 | 处理建议 |
|---|---|
health 显示 Milvus 不通 | docker compose up -d 重启 Milvus 三件套 |
ask 报 "未配置 LLM" | 检查 .env 中 BB_LLM_API_KEY 是否已填 |
ask 返回 exit code 1 | 看 stderr 日志定位具体节点失败原因 |
问题里带 URL 但返回空 get_info_ingested | URL 可能已被 hash_lookup SHA-256 去重短路(正常行为,不是错误) |
ingest-file 返回 conversion_errors | 检查文件格式是否支持、MinerU 是否 OOM(16GB 显卡峰值 ~1.1GB) |
remove-doc 忘记 --confirm | 默认 dry-run 只打清单不删,重新加 --confirm 执行 |
search 返回空结果 | 知识库可能还没相关内容,先 ask "<问题带 URL>" 补库再搜 |
一句话总结:
外部 Agent 应把 brain-base 当成「LangGraph 驱动的知识基础设施」来调,所有调用走 python -m brain_base.cli。固化是自动的,去重是自动的,你只需要关心 ask / search / ingest / remove-doc 四个动词。