@esankhan3/anvil-knowledge-core

中文文档
0.4.13发布于 2026/11/13MITTypeScriptES Module构建来源已验证近 30 天下载 2182

共享知识堆栈(chunking,AST,嵌入器,向量存储,混合检索)用于cli + 代码-搜索-mcp.

中文使用文档
文档目录17 节
  1. Grep + 嵌入的问题
  2. 你得到的东西
  3. AST 认识块
  4. 默认递增
  5. 混合检索,四个阶段
  6. 6个嵌入式提供者,4个重排
  7. 明确配置 + 覆盖
  8. 矢量空间安全
  9. 项目图
  10. 跨雷波边缘探测
  11. 由LLM驱动,在它重要的地方
  12. 结构散列
  13. 一览建筑
  14. 存储布局
  15. 哲学
  16. 状态
  17. 部分 安维尔 ——AI开发管道.

@anvil/知识-核心

你的密码库,可检索.

代码感知知识堆栈——AST级分解,混合检索, 项目图,和跨repo边缘检测。 特务们看到 页:1 整体 代码库,不只是你碰巧打开的文件.


Grep + 嵌入的问题

代码搜索有两种方法之一: 词汇法(grep, fast, dumb) 或 基于嵌入的(vector DB,在编辑上缓慢,对结构盲去). 两者 错过相同的东西: 代码有 图表 结构。 一个功能不是 只是一大堆文字——它进口东西,被东西召唤, 执行东西,生活在一个包里, 谈话到其他重置.

知识核心把密码库当成一个图表和一个工具 同时. 树保姆将每种支持的语言分析为 AST块。 一个向量存储 + BM25 + 一个工程图形全部回答 相同的查询, 连接到一个排序列表中 。 检索者知道什么时候 你在问一个标识符对一个错误代码对一个自然 - 语言问题和相应的信号加权.

import {
  indexFromPath,
  getRetriever,
  loadKnowledgeConfig,
} from '@esankhan3/anvil-knowledge-core';

// Build a fully-resolved KnowledgeConfig: YAML at
// ~/.anvil/projects/<project>/factory.yaml, overlaid by CODE_SEARCH_*
// env vars. Or hand-construct one — the indexer accepts any shape.
const config = loadKnowledgeConfig('space-tourism');

// Index once — incremental thereafter. Pass config explicitly so
// CODE_SEARCH_* env vars (provider, model, dims, API key, base URL)
// actually reach the embedder — pre-P1 they were silently ignored.
await indexFromPath('space-tourism', '/path/to/workspace', { config });

// Retrieve — vector + BM25 + 1-hop graph + cross-encoder rerank.
// Pass the same config so query-time embedder matches the index.
// getRetriever() also hard-errors on vector-space mismatch (P2) so
// silent provider drift is impossible.
const retriever = await getRetriever('space-tourism', config);
const result = await retriever.retrieve(
  'where do we validate booking seat tiers?',
);

console.log(result.chunks.length, 'chunks');     // ranked, deduped
console.log(result.graphContext);                // related symbols
console.log(result.totalTokens);                 // budgeted

你得到的东西

AST 认识块

tree-sitter WASM 解析类型脚本, JavaScript, TSX, Go, Python, Rust, Java, 和 PHP 进入适当的函数/ 类/ 方法 边框。 不再将一个函数切成两半的块 。 缩写 没有语法的语言倒行逆施,所以没有什么是无索引的.

默认递增

索引员读到 git rev-parse HEAD,对上一个 索引了SHA, 并且只重装改变的东西。 删除的文件获得 从向量存储中移除。 嵌入是独立的 递增的 —— 它向 LanceDB 传递新的块ID , 并且只有 嵌入三角洲。 大回扣永远保持快.

混合检索,四个阶段

  1. BM25 平行向量 ——语义回想+语法回想.
  2. 对等排名组合 ——不设一统.
  3. AST 三方扩展 - 召集呼叫者、被呼叫者以及 通过项目图表键入引用.
  4. 交叉编码器重新排序 默认的 Quen3- Ranker; Cohere / Voyage / OpenAI相容可互换.

查询分类员选择适应性权重——识别器精度 BM25,自然语言向量倾斜,出错代码都倾斜.

6个嵌入式提供者,4个重排

内嵌 : (原始内容存档于2013-10-12) (英语). Codestral / Mistral / Voyage / OpenAI / Ollama 双子座 OAuth (自动刷新已过期的访问符号通过 refresh_token· OpenAI 兼容 / 自定义 auto (根据配置的选取). 重新排序 : Ollama (默认) qwen2.5-coder:7b qwen3:0.6b是一个 静静无声,然后被放弃) 相机 相机 相机 相机 OpenAI 兼容 . 插入符合成本/质量/纬度曲线的任何内容.

明确配置 + 覆盖

KnowledgeConfig 是单项合同. EmbeddingProviderConfig 带 {provider, model?, dimensions?, apiKey?, baseUrl?, ollamaHost?}· ; RerankerProviderConfig 带 {provider, model?, apiKey?, baseUrl?, timeoutMs?}。 。 。 . loadKnowledgeConfig(project) 读取工程 YAML 然后覆盖 CODE_SEARCH_* (原始内容存档于2013-10-12) (中文(简体) ). env vars (nEMBEDDING_PROVIDER 编号 : _MODEL 编号 : _DIMENSIONS 编号 : _API_KEY 编号 : _BASE_URL 编号 : OLLAMA_HOST 编号 : RERANKER_PROVIDER 编号 : _MODEL 编号 : _API_KEY 编号 : _BASE_URL 编号 : RETRIEVAL_MAX_CHUNKS 编号 : _MAX_TOKENS 编号 : AUTO_INDEX) (中文(简体) ). 提供者 分类仍然读取有文献记载的销售商MISTRAL_API_KEY, (中文(简体) ), OPENAI_API_KEY,.)作为被贬低的倒计时——每读一读 发出一发一发的 stderr 警告; 库 env 读取在 1.0 中被删除 .

矢量空间安全

getRetriever(project, config?) 读取每个repo的 index_meta.json 打开 如果记录 embeddingProvider 和我们不匹配 当前配置, 它扔出一个硬错误 —— 永远不返回垃圾 从一个配置漂移的向量。 (前P2,无声空间不匹配是 canonical "结果无用,没有出错"bug. )

项目图

A 类 graphology 指导多图缝合 每回波一起. 节点是实体(函数,类,类型,模块),边缘是 导入 / 调用 / 继承 / 包含 / 类型- refs 。 卢万 社区检测群集相近的代码 可以浮出“认证子系统”而不是四个分散的文件.

跨雷波边缘探测

涉及共享类型、卡夫卡专题、HTTP的14个战略 端点, gRPC, 数据库, env vars, npm/工作空间分解, k8s, docker-compose),原生定义,Redis,S3和共享常数. 加上一个LLM-受精语义的边缘层 对于病例的正格克斯不能 抓起来.

由LLM驱动,在它重要的地方

回波剖析(指印文件 → LLM → 键入) RepoProfile, (中文(简体) ), 由指纹散列缓存),语义边缘推论,项目 汇总生成,RAG质量评价. 所有路由经过 @anvil/agent-core 所以,同样的路由器, 重试,和成本分类账 电源 代理堆积 电能知识摄取.

结构散列

computeStructuralHash 将来源化——去除评论, 折叠出白空间,使标识符正常化 —— SHA-256s 结果。 用于块拆卸 财务报告和审定财务报表 与 @anvil/memory-core 所以内存漂移检测 和块分解 说相同的语言.


一览建筑

   git repo(s)
       │
       ▼
   ┌─────────────────────────────────────────────────────────┐
   │  Indexing                                               │
   │   walk + git diff → tree-sitter chunks → AST graph      │
   │           │              │            │                 │
   │           ▼              ▼            ▼                 │
   │     LanceDB         BM25 (FTS)    project graph         │
   │     (vectors)                     + cross-repo edges    │
   └─────────────────────────────────────────────────────────┘
                                │
                                ▼
   ┌─────────────────────────────────────────────────────────┐
   │  HybridRetriever                                        │
   │   query classifier ─▶ adaptive weights                  │
   │   vector ⫽ BM25  →  RRF  →  AST expansion  →  rerank    │
   └─────────────────────────────────────────────────────────┘
                                │
                                ▼
                       ranked chunks + graph context

两个消费者,一叠: @esankhan3/anvil-cli 通过 anvil index 在管道中取回; @esankhan3/code-search-mcp 曝光与 MCP 相同的检索器 任何代理人都可以调用的工具.


存储布局

~/.anvil/knowledge-base/<project>/
  <repo>/chunks.ndjson           # the repo's chunks (consumed by embedder)
  deleted_files.json             # incremental embed cleanup
  system_graph_v2.json           # merged project graph
  PROJECT_GRAPH.json             # LLM-generated semantic graph
  PROJECT_SUMMARY.md             # human-readable companion
  lancedb/                       # vector store
  <repo>/
    profile.json                 # cached RepoProfile
    graph.json                   # per-repo AST graph
    GRAPH_REPORT.md              # quality report
    index_meta.json              # { lastIndexedSha, files, chunkCount }

所有东西都放在磁盘上,可以检查,方便点 感(项目图+摘要).


哲学

春克应该遵循代码形状,而不是字节数. AST 边界 保持整个函数。 检索质量从块开始.

没有单一的检索信号就足够了. 矢量丢失标识符 . BM25 错过了解释。 图形错过了文本形状的所有内容 . Hybrid + 适应性加权是唯一诚实的答案.

递增或无. 每条输油管都有异常指数. 完整的再索引是不可接受的; 引擎处理前一个 SHA作为负载输入.

没有供应商锁定. 兰斯DB在磁盘上. graphology 正在处理中. 可插件嵌入器+再排出. 在不重写的情况下交换任意一层 其余部分.

两个表面,一个引擎. CLI 用户通过检索 管道; MCP 用户通过工具调用获得. 检索 管道是同一个代码路径.


状态

平稳:块、AST图、混合检索、增量 指数化,6个嵌入器,4个复排器,14个交叉复排器 战略,项目图,结构散列. 飞行中:富人 图表查询和更深的RAG-eval带.


部分 安维尔 ——AI开发管道.

版本与发布记录

@esankhan3/anvil-knowledge-core 共发布 32 个版本,首次发布于 2026/05/05;过去 12 个月发布了 32 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.4.13latest2026/11/131 天前
0.4.122026/11/121 天前
0.4.112026/11/122 天前
0.4.102026/10/2520 天前
0.4.92026/10/2420 天前
0.4.82026/10/2420 天前

关于 @esankhan3/anvil-knowledge-core 的常见问题

@esankhan3/anvil-knowledge-core 是什么?

共享知识堆栈(chunking,AST,嵌入器,向量存储,混合检索)用于cli + 代码-搜索-mcp.

如何安装 @esankhan3/anvil-knowledge-core?

在项目目录运行 npm install @esankhan3/anvil-knowledge-core,或使用 pnpm add / yarn add / bun add。

@esankhan3/anvil-knowledge-core 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@esankhan3/anvil-knowledge-core 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@esankhan3/anvil-knowledge-core 可以商用吗?

@esankhan3/anvil-knowledge-core 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@esankhan3/anvil-knowledge-core 的下载量有多少?

根据 npm 官方下载统计,@esankhan3/anvil-knowledge-core 在 2026/10/14 – 2026/11/12 这 30 天内被下载 2,182 次,日均约 73 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@esankhan3/anvil-knowledge-core 还在维护吗?

最新版本 0.4.13 发布于 2026/11/13(1 天前);至今共发布 32 个版本,其中过去 12 个月发布了 32 个;首次发布于 2026/05/05。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。