浏览器内私有AI栈

Domicile是一个完全在浏览器中运行的私有AI堆栈,包括向量数据库、RAG和本地LLM,所有数据处理都在客户端完成,无数据外泄。

  • by kyrillosishak
  • TypeScript
  • 本地部署
  • 10 星标
  • 更新于
在 GitHub 查看 kyrillosishak/Haven

使用说明


您的数据,位于您的设备上。


浏览器中的本地隐私——矢量数据库、RAG和本地LLM。

所有处理都保持在客户端,没有出口。


为什么是Domicile?

Domicile是一个私有的AI堆栈——向量数据库、RAG和一个完全在浏览器中运行的本地LLM。本地级数据保管和特权保护,无需本地基础设施。你的文件永远不会离开他们的合法住所。

  • 私人:数据永远不会离开设备——零出口,零第三方处理器
  • 快:使用WASM SIMD回退实现WebGPU加速
  • 自由:零云成本,无需API密钥,无需每次付费
  • 完成:矢量数据库+嵌入+双LLM+带引用的RAG
  • 离线:初始加载后无需互联网即可工作

快速开始

npm install @kyrillosishak/domicile
import Domicile from '@kyrillosishak/domicile';

// A private, in-browser custody layer
const db = new Domicile({
  storage:   { dbName: 'matter-files' },
  index:     { dimensions: 384, metric: 'cosine' },
  embedding: { model: 'Xenova/all-MiniLM-L6-v2', device: 'webgpu' },
});

await db.initialize();

await db.insert({
  text: 'Privileged communication — attorney work product',
  metadata: { matter: 'M-204', privilege: 'true' },
});

const results = await db.search({ text: 'summary of work product', k: 5 });
console.log(results);

特性

  • 向量数据库:IndexedDB中的持久客户端存储,具有纯TypeScript HNSW图索引。使用余弦、欧几里德或点度量(真实相似性得分、非重建删除)保存和搜索100K以上的文档,所有这些文档都驻留在设备上。
  • 本地嵌入:Transformers.js,支持WebGPU加速和WASM回退。模型权重缓存在设备上,因此重复查询永远不会到达网络。
  • 双LLM运行时:WebLLM用于GPU快速推理,Wllama用于CPU可移植性——自动回退,因此生成可以在任何工作站上运行。
  • RAG及其引用:答案基于你的源文件,引用将每一项声明都链接到支持它的文件——可审计的,而不是黑匣子。
  • MCP集成:将您的托管层作为模型上下文协议工具公开——将Domicile连接到Claude Desktop和您的团队已经构建的代理堆栈中。
  • 居住设计:数据驻留在设备上——没有云出口,没有第三方处理器,没有驻留漂移。边界是架构性的,而不是有人会忘记检查的配置。

为谁

律师事务所和法律团队 --敏感事项文件、特权通信和客户数据永远不会离开工作站。Domicile在本地运行RAG和生成,因此律师客户端权限永远不会通过第三方云路由。建筑符合GDPR,离线工作。

集成和基础设施团队 --您为需要本地担保而无需本地资本支出的客户提供的托管层。将其发布到他们的应用程序中,配置驻留,然后离开——没有服务器可以运行,也没有数据平面需要保护。

核心功能

向量搜索

// Retrieval with metadata filtering
const results = await db.search({
  text: 'indemnification clauses',
  k: 10,
  filter: { field: 'matter', operator: 'eq', value: 'M-204' },
});

for (const r of results) {
  console.log(r.score.toFixed(3), r.metadata);
}

// Inspect custody state
const stats: IndexStats = await db.stats();
console.log(stats.vectorCount, stats.memoryUsage);

RAG管道

import { RAGPipelineManager, WllamaProvider } from '@kyrillosishak/domicile';

const llm = new WllamaProvider({ model: '...' });
const rag = new RAGPipelineManager(db, llm, embedding);

// Ask questions grounded in your documents
const result = await rag.query('Summarize the position.', {
  topK: 3,
  generateOptions: { maxTokens: 256, temperature: 0.7 },
});

console.log(result.answer);
console.log(result.sources); // Cited source documents

MCP集成

import { MCPServer } from '@kyrillosishak/domicile';

// Expose your custody layer as tools for AI agents
const mcp = new MCPServer(db, rag);

const tools: MCPTool[] = mcp.getTools();
// → [search, insert, rag_query, ...]

// Wire into Claude Desktop or any MCP-aware agent
mcp.serve({ transport: 'stdio' });

建筑

一个分层的、按设计驻留的堆栈。每一层都是可交换的,无需服务器即可运行。数据向下流动;答案源源不断——都在设备上。

  • 接口:您的应用程序与干净的TypeScript API对话,或通过MCP-Claude Desktop、ChatGPT与AI代理对话,任何能说出协议的东西。
  • 智能RAG管道管理器通过WebLLM和Wllama运行时以及GPU到CPU的自动回退来协调检索和生成。
  • 检索:Transformers.js生成嵌入;纯TS HNSW指数返回具有真实分数的最近邻。BM25稀疏索引通过互易秩融合与密集索引融合,交叉编码器重新排序器锐化前k个索引——所有这些都是通过元数据过滤的。
  • 监护:IndexedDB存储管理器,具有配额感知驱逐和JSON/二进制导出导入功能,用于迁移和客户端切换。
  • 加速度:WebGPU可用时GPU计算,否则WASM SIMD回退,使用工作池进行批处理并行。
  • 可靠性:一个类型化的错误层次结构、LRU缓存、内存管理器和一个内置的基准运行器来衡量这一切。
graph TB
    subgraph "Interface"
        APP[User Application]
        MCP[MCP Interface]
    end
    
    subgraph "Intelligence"
        API[VectorDB API]
        RAG[RAG Pipeline Manager]
    end
    
    subgraph "Retrieval"
        TJS[Transformers.js]
        CACHE[Model Cache]
    end
    
    subgraph "LLM Layer"
        WLLAMA[wllama - WASM]
        WEBLLM[WebLLM - WebGPU]
    end
    
    subgraph "Index Layer"
        HNSW[HNSW Graph Index]
        BM25[BM25 Sparse Index]
    end
    
    subgraph "Custody"
        IDB[IndexedDB]
        STORE[Storage Manager]
    end
    
    APP --> API
    MCP --> API
    API --> RAG
    API --> HNSW
    RAG --> TJS
    RAG --> WLLAMA
    RAG --> WEBLLM
    TJS --> CACHE
    HNSW --> STORE
    STORE --> IDB

演出

可复制自 domicile bench --与大楼大门相同的套房。在Linux/服务器CPU(节点)上测量;浏览器WebGPU运行将有所不同。

操作 延迟 吞吐量/质量 备注
搜索(10K向量,128维余弦) p50 2.4ms/p99 7ms recall@10=0.91 纯TS HNSW,热缓存
搜索(1K向量,128维余弦) p50 1.4ms/p99 1.8ms recall@10=1.00 非重建删除<0.01ms
引文准确性(法律已知答案语料库) -- recall@3=0.92 密集+混合+再储层检索
RAG查询(全管道) 检索+生成 流式传输 本地LLM,浏览器绑定

复制: npm run build && node dist/cli/index.js bench

发展

# Install dependencies
npm install

# Run tests
npm test

# Run tests in watch mode
npm run test:watch

# Run integration tests (requires network)
npm run test:integration

# Build library
npm run build

# Type check
npm run type-check

# Run benchmarks
npm run benchmark

浏览器支持

  • Chrome/Edge:90+(WebGPU:113+)
  • 火狐:88+(WebGPU:尚不支持)
  • 狩猎旅行:14+(WebGPU:尚不支持)

要求:

  • IndexedDB支持
  • WebAssembly支持
  • ES2020+JavaScript

可选:

  • WebGPU用于加速推理
  • 用于多线程的SharedArrayBuffer

路线图

  • ~~ Python绑定(PyScript)~~--作为 @kyrillosishak/domicile-pyscript (单独包装)
  • ~~ React钩子包~~--从主包导出(useDomicile, useSearch, useRag, useRagStream, useCapabilities, useIngestProgress)
  • 混合搜索(密集+稀疏)--在中实现 BM25Index +互惠等级融合,集成到 RAGPipelineManager
  • 多模态嵌入(CLIP)--通过发货 createMultiModalGenerator (CLIP文本+共享空间中的图像嵌入)
  • 浏览器中的量化-- quantize / dequantize 在 quantization/index.ts (fp32, fp16, int8, int4)

桌面应用程序

Domicile Desktop是一个基于Tauri的原生应用程序,在webview中运行完整的Domicile引擎——没有虚假的关键字排名,真正的HNSW+Transformers.js+WebLLM/Wllama堆栈。

本地建设

# Build the library first
npm run build

# Build the desktop app
cd desktop
npm install
npm run tauri:build

输出将在 desktop/src-tauri/target/release/bundle/ (.dmg, .deb, .AppImage, .msi, .exe 取决于平台)。

它做什么

  1. 物质工作空间 --拖放文件或粘贴文本;文档被分块(通道级别,256个令牌滑动窗口),嵌入设备中,并保存在IndexedDB中
  2. 问 --流式RAG,具有混合BM25+密集检索、可选的交叉编码器重新排序、绑定到源段落的内联引用芯片
  3. 监护小组 --实时能力矩阵(WebGPU/WASM/SIMD/SharedArrayBuffer/IndexedDB),引擎+索引+文档计数+设备层,始终为零出口计数器
  4. 设置 --嵌入模型、事件ID、混合/重新存储切换、导出/清除保管

建筑

  • 牛磺酸壳 (约10 MB Rust包装器)--无Chromium捆绑包,可审计二进制文件
  • Web视图 运行与浏览器/NMP包完全相同的Domicile引擎
  • 驻地警卫 下载后,除模型权重缓存外,断言网络出口为零

贡献

欢迎捐款。请打开问题或PR。

许可证

麻省理工学院©2026


文档 • 例子 • GitHub

专为注重隐私的法律和整合团队打造