本地RAG:VAST数据文档的语义搜索
技术栈:
一个生产就绪的MCP(模型上下文协议)服务器,使用ChromaDB和句子转换器在技术文档上提供快速的本地语义搜索。该系统使Claude和其他人工智能工具能够通过自然语言查询访问您的完整文档库,而无需任何外部API调用。
什么是本地RAG?
本地RAG联合 检索增强生成(RAG) 随着 模型上下文协议(MCP) 创建一个本地的、自包含的语义搜索系统。与传统的基于关键字的搜索不同,Local RAG理解您的查询和文档的语义含义,即使在确切的关键字不匹配的情况下也能找到相关信息。
为什么本地RAG很重要
- 隐私:所有文件都保留在您的机器上。没有数据发送到外部服务。
- 成本:没有对向量数据库或语言模型服务的API调用。
- 速度:延迟以毫秒为单位,而不是秒。
- 可靠性:脱机工作。不依赖云服务。
- 控制:您可以选择要索引的文档以及如何组织它们。
什么是模型上下文协议(MCP)?
MCP是一种标准化协议,允许像Claude这样的人工智能助手安全地调用自定义工具并访问本地系统上的资源。VAST RAG实现了Claude可以用来搜索您的文档的MCP工具,使您的知识可以在对话中直接访问。
系统架构
graph TD
subgraph "Document Ingestion Pipeline"
A["📂 Source Documents
(~/projects/RAG/)"]
B["👁 File Watcher
(watchdog)"]
C["🔍 Parser Factory
(format detection)"]
D["📄 Format Parsers
(PDF/MD/HTML/DOCX/text)"]
E["✂️ Semantic Chunker
(500 tokens, 50 overlap)"]
F["📊 Hash Index
(SHA-256 change detection)"]
end
subgraph "Indexing & Storage"
G["🤖 Embedding Service
(BAAI/bge-base-en-v1.5)"]
H["🗂️ ChromaDB Vector Store
(dual collections)"]
I["📑 vast-data collection
(VAST product docs)"]
J["📚 general-tech collection
(other technical docs)"]
end
subgraph "Query Pipeline"
K["🎯 User Query"]
L["🔀 Query Embedding
(same model)"]
M["🔎 ChromaDB Similarity Search
(L2 distance → 0-1 score)"]
N["📋 Result Aggregation
(with metadata)"]
end
subgraph "MCP Server & Client"
O["🛠️ MCP Server
(stdio interface)"]
P["💬 Claude Desktop
(or other MCP client)"]
end
subgraph "MCP Tools"
Q["🔍 search_docs"]
R["📋 list_collections"]
S["📄 get_document"]
end
subgraph "Storage Locations"
T["~/.claude/rag-data/
chroma/ (database)
logs/ (rotating)
model-cache/ (embeddings)"]
end
A -->|monitors| B
B -->|detects changes| F
F -->|new/changed files| C
C -->|routes to parser| D
D -->|parsed content| E
E -->|text chunks| G
G -->|768-dim vectors| H
H -->|stores in| I
H -->|stores in| J
K -->|user query| O
O -->|embedding| L
L -->|vector search| M
M -->|semantic results| N
N -->|returns via| Q
O -->|list call| R
O -->|document call| S
Q -->|MCP tool| P
R -->|MCP tool| P
S -->|MCP tool| P
H -.->|persists to| T
style A fill:#e1f5ff
style H fill:#fff3e0
style O fill:#f3e5f5
style P fill:#e8f5e9管道详细信息
索引流水线
每当在源目录中添加或修改文档时,索引管道都会自动发现、处理和索引文档。
1.文件监视器(看门狗)
该系统使用 watchdog 图书馆监控 ~/projects/RAG/ 用于文件系统事件。当添加或修改新文档时,观察者会立即触发解析管道。这启用了实时重新加载功能——文档在添加到目录后几秒钟内即可搜索。
文件观察器跟踪所有文件系统事件和支持的文档格式(PDF、Markdown、HTML、DOCX、纯文本和常见代码文件)的过滤器。
2.解析器工厂和特定格式解析器
当检测到文件时,解析器工厂会检查其扩展名和内容,以确定合适的解析器。本地RAG包括用于每种支持格式的专用解析器:
- PDF解析器:使用PyPDF2提取文本,pdfplumber作为回退。保留页码以供引用。
- MarkdownParser:从Markdown文件中提取部分和层次结构,保留结构元数据。
- HTML解析器:使用BeautifulSoup解析HTML,剥离脚本和样式标签,并提取干净的文本。
- DOCXParser:使用python-docx解析Microsoft Word文档。
- 文本解析器:处理纯文本文件和常见代码格式(Python、JavaScript、Java等)。
每个解析器返回一个 ParsedDocument 包含全文内容和元数据(标题、源文件、修改日期)的对象。
3.语义块
原始文档可能非常大——单个PDF可能包含100多页。语义块器将文档划分为可管理的块,这些块针对语义搜索进行了优化。分块器使用以下策略:
- 基于令牌的规模:使用tiktoken来计算实际令牌。每个块大约有500个标记(大约300-400个单词,取决于语言)。
- 上下文重叠:每个块与前一个块重叠50个标记,确保语义边界不会在块之间分割相关概念。
- 元数据保存:每个块保留其源文件、节信息和页码(如果可用)。
这种方法平衡了两种相互竞争的需求:块必须足够小,在语义上连贯一致,但足够大,包含足够的上下文。
4.哈希索引和Idempotent索引
为了避免在每次运行时重新嵌入整个文档集合,Local RAG维护了所有已处理文件的SHA-256哈希索引。在处理文档之前,系统会将当前文件的哈希值与存储的哈希值进行比较。如果它们匹配,则跳过该文件;如果它们不同,则重新解析并重新嵌入文件。
这使得索引幂等且高效——重新运行索引器仅处理更改的文件。
5.嵌入服务
嵌入服务使用BAAI/bge-base-en-v1.5模型将文本块转换为768维向量嵌入。该模型经过专门的语义搜索训练,在一般和技术内容方面表现良好。
关键设计选择:
- 延迟加载:模型仅在首次需要时(在索引或第一次查询期间)下载和加载。这使得启动时间很快。
- 批处理:默认情况下,嵌入以32个块为一批进行计算,以平衡内存使用和速度。
- 自动缓存:下载的模型缓存在
~/.claude/rag-data/model-cache/以避免在后续运行中重新下载。
6.双采集存储(ChromaDB)
嵌入物存储在ChromaDB矢量数据库中,采用精心设计的双集合:
- 海量数据收集:包含与特定知识领域相关的所有文档。文档会根据文件路径自动分类——路径中包含“巨大”的任何文档都会放置在此集合中。
- 一般技术收藏:包含所有其他技术文档(架构说明、设计文档、外部参考等)。
这种双重设计提供了以下好处:
- 灵活的范围界定:用户可以搜索所有文档或将结果缩小到仅限于特定于域的内容。
- 提高相关性:将相关文档放在一起可以减少搜索结果中的语义漂移。
- 未来的可扩展性:该设计很容易容纳额外的专业系列。
查询管道
当用户向Claude提出一个可以从搜索您的文档中获益的问题时,Claude会调用 search_docs MCP工具。
1.查询嵌入
用户的查询使用与嵌入文档相同的BAAI/bge-base-en-v1.5模型嵌入。这确保了查询和文档存在于同一向量空间中,使直接距离比较变得有意义。
2.ChromaDB中的语义搜索
使用L2距离(欧几里德距离)将查询向量与所有文档块向量进行比较。ChromaDB高效地执行此搜索,返回前N个最相似的块。
ChromaDB返回原始距离值;这些使用以下公式转换为相似性得分: similarity = 1 / (1 + distance)这将\[0,∞)范围内的距离转换为(0,1\]范围内的相似性得分,其中1表示完全匹配,接近0的值表示相异。
3.结果汇总和排名
搜索结果按相似性得分的顺序返回(最高者优先)。每个结果包括:
- 文本内容:提供答案或相关信息的实际文本块。
- 源文件:引用的原始文档文件名。
- 页码:PDF中的页面(如果可用),供快速参考。
- 部分:提取的节标题(如果源文档具有层次结构)。
- 相似度分数:计算出的0-1相似性度量(用于透明度和过滤)。
- 类别:源文件是海量数据还是一般技术收集。
测井和可观测性
所有系统活动都记录到 ~/.claude/rag-data/logs/vast-rag.log日志文件使用轮换文件处理程序,每个文件最多保留10 MB,并保留5个备份文件。日志被写入stderr(不是stdout),因为MCP服务器通过stdio与Claude Desktop通信。
MCP工具
本地RAG MCP服务器公开了Claude和其他MCP客户端可以调用的三个核心工具:
search_docs
跨索引文档执行语义搜索。
参数:
query(字符串,必填):自然语言的搜索查询。示例:“如何优化VastDB查询?”,“什么是VAST数据引擎架构?”,《分布式系统中的内存管理》category(字符串,可选):将结果筛选到特定集合。有效值:"vast-data","general-tech",或对所有集合省略。n_results(整数,可选):要返回的结果数。默认值:5。最大值:20。
退货: 搜索结果数组,每个结果包含:
{
"text": "The chunk of text matching your query...",
"source": "vdb-optimization.pdf",
"score": 0.87,
"category": "vast-data",
"page": 42,
"section": "Query Execution Planning"
}示例用法(通过Claude):
"Search the VAST documentation for information about query optimization.
Use the search_docs tool with category='vast-data' to find relevant content."list_collections
列出所有可用的集合及其文档计数。
参数: 无
退货: 包含集合元数据的对象:
{
"collections": [
{ "name": "vast-data", "count": 1234 },
{ "name": "general-tech", "count": 456 }
],
"total_chunks": 1690
}目的: 帮助用户了解可用的文档以及已索引的内容数量。
get_document
检索特定索引文档的完整元数据和信息。
参数:
source_file(string,必填):文档的文件名或路径(由search_docs返回)。category(string,必填):包含文档的集合("vast-data"或"general-tech").
退货: 文档元数据对象(第一个匹配块):
{
"id": "vdb-architecture.pdf_chunk_0",
"source": "vdb-architecture.pdf",
"text": "First chunk of text from the document...",
"metadata": {
"source_file": "vdb-architecture.pdf",
"category": "vast-data",
"chunk_index": 0
}
}目的: 允许用户检查完整文档或验证特定源文件是否已编入索引。
项目结构
vast-rag/
├── README.md # This file
├── LICENSE # License information
├── pyproject.toml # Python project metadata and dependencies
├── pytest.ini # pytest configuration
│
├── src/vast_rag/
│ ├── __init__.py # Package initialization
│ ├── __main__.py # python -m vast_rag entry point
│ ├── server.py # Production MCP entry point (stdio)
│ ├── config.py # Pydantic configuration with env var support
│ ├── types.py # TypedDict and dataclass definitions
│ ├── indexer.py # DocumentIndexer orchestration layer
│ │
│ ├── core/
│ │ ├── __init__.py
│ │ ├── chunker.py # SemanticChunker (tiktoken, 500 tokens)
│ │ ├── embeddings.py # EmbeddingService (bge-base-en-v1.5)
│ │ ├── hash_index.py # FileHashIndex (SHA-256 change detection)
│ │ ├── vector_store.py # ChromaDBManager (dual collections)
│ │ └── watcher.py # FileWatcher (watchdog-based)
│ │
│ ├── mcp/
│ │ ├── __init__.py
│ │ └── server.py # MCPServer wrapper class
│ │
│ └── parsers/
│ ├── __init__.py
│ ├── factory.py # ParserFactory (format detection)
│ ├── pdf.py # PDFParser (PyPDF2 + pdfplumber fallback)
│ ├── markdown.py # MarkdownParser (section extraction)
│ ├── html.py # HTMLParser (BeautifulSoup)
│ ├── docx.py # DOCXParser (python-docx)
│ └── text.py # TextParser (plain text and code)
│
├── tests/
│ ├── unit/
│ │ ├── test_chunker.py # SemanticChunker tests
│ │ ├── test_config.py # Configuration tests
│ │ ├── test_embeddings.py # EmbeddingService tests
│ │ ├── test_hash_index.py # FileHashIndex tests
│ │ ├── test_vector_store.py # ChromaDBManager tests
│ │ ├── test_parsers.py # Parser factory and format tests
│ │ ├── test_mcp_server.py # MCP server wrapper tests
│ │ └── test_server_entry.py # Production server entry point tests
│ └── integration/
│ ├── test_indexer.py # DocumentIndexer integration tests (17)
│ └── test_e2e_pipeline.py # End-to-end pipeline tests (15)
│
├── deployment/
│ ├── README.md # Detailed deployment documentation
│ ├── common.sh # Shared utilities (logging, validation)
│ ├── setup.sh # Creates venv, downloads model, sets up dirs
│ ├── install.sh # Registers with Claude Desktop
│ ├── verify.sh # Runs 6 health checks
│ ├── uninstall.sh # Clean removal with interactive prompts
│ └── deploy.sh # Orchestrator script (setup → install → verify)
│
├── docs/
│ ├── plans/
│ │ ├── 2026-02-12-vast-rag-system-design.md # High-level system design
│ │ └── 2026-02-12-vast-rag-implementation.md # Implementation details
│ └── guides/
│ └── deployment-troubleshooting.md # Common issues and solutions
│
└── .github/
└── workflows/
├── test.yml # CI: Run pytest suite
└── lint.yml # CI: Run ruff linting核心模块说明
服务器.py --生产入口点。通过stdio启动MCP服务器,并延迟初始化:当文档索引在后台任务中运行时,MCP握手立即完成。包括针对macOS 26+xzone malloc在本机扩展(OpenMP、tokenizer)中崩溃的解决方法。
indexer.py --协调所有索引组件的编排层。DocumentIndexer类管理端到端管道:监视文件更改、解析文档、分块、嵌入和存储在ChromaDB中。
config.py --使用Pydantic进行配置管理。从具有合理默认值的环境变量中读取。处理所有路径、型号名称、批量大小等。
类型.py --共享数据结构。定义ParsedDocument(原始解析内容)、DocumentChunk(带元数据的语义块)、SearchResult(返回给用户的内容)和CollectionStats(关于集合的元数据)。
core/chunker.py --使用tiktoken实现语义分块,以实现准确的标记计数。尊重令牌限制和重叠设置。
核心/嵌入.py --管理嵌入模型生命周期(延迟加载、批处理、缓存)。提供嵌入查询和文档的方法。
core/hash_index.py --维护一个JSON文件,将文档路径映射到SHA-256哈希值。启用更改检测而无需重新解析。
core/vector_store.py --包装ChromaDB操作。管理双集合,处理存储/检索,并将L2距离转换为相似性分数。
core/watcher.py --使用监视器监视文件系统。检测新的/修改的文件并触发索引管道。
解析器/factory.py --基于文件扩展名将文档路由到正确解析器的工厂模式实现。
**解析器/\*.py** --特定格式的解析器。每个都负责将其格式转换为纯文本,同时保留有用的元数据。
配置
VAST RAG是通过环境变量和配置文件的组合进行配置的。所有设置都有合理的默认值,因此您可以立即开始。
环境变量
把这些放进你的壳里, .env 或者通过Claude Desktop的配置:
| 变量 | 默认值 | 用途 |
|---|---|---|
RAG_DOCS_PATH | ~/projects/RAG | 文档所在的源目录 |
RAG_DATA_PATH | ~/.claude/rag-data | ChromaDB、日志和缓存模型的目录 |
RAG_CHUNK_SIZE | 500 | 每个区块的目标令牌 |
RAG_CHUNK_OVERLAP | 50 | 连续块之间的重叠标记 |
RAG_EMBEDDING_MODEL | BAAI/bge-base-en-v1.5 | 用于嵌入的拥抱人脸模型 |
RAG_BATCH_SIZE | 32 | 嵌入计算的批量大小 |
RAG_LOG_LEVEL | INFO | 日志记录级别(调试、信息、警告、错误) |
目录结构
部署后,将创建以下目录:
~/.claude/rag-data/
├── chroma/ # ChromaDB database directory
│ ├── vast-data/ # vast-data collection
│ └── general-tech/ # general-tech collection
├── logs/
│ └── vast-rag.log # Rotating log file (10MB, 5 backups)
├── model-cache/ # Downloaded embedding models
│ └── models--BAAI--bge-base-en-v1.5/
└── hash-index.json # SHA-256 hashes of indexed documents
~/projects/RAG/
├── vast-data/ # VAST product documentation
│ ├── vdb-user-guide.pdf
│ ├── vast-engine-api.md
│ └── ... (more VAST docs)
└── general-tech/ # Other technical documentation
├── architecture-notes.md
├── external-references/
└── ... (more general docs).env文件(可选)
对于本地开发,您可以创建 .env 庞大的rag目录中的文件:
RAG_DOCS_PATH=/path/to/my/documents
RAG_DATA_PATH=/path/to/my/rag-data
RAG_LOG_LEVEL=DEBUG系统在本地运行时会自动加载此文件。
部署
快速开始
使用3个命令运行VAST RAG:
# 1. Clone and enter the repository
git clone https://github.com/ssotoa70/vast-rag.git
cd vast-rag
# 2. Run the deployment script
./deployment/deploy.sh
# 3. Restart Claude Desktop (⌘Q, then reopen)部署脚本会自动处理:
- 创建Python虚拟环境
- 安装所有依赖项
- 下载嵌入模型(~400MB)
- 创建所需的数据目录
- 在Claude Desktop注册服务器
- 运行验证测试
在另一台机器上部署
要在其他macOS计算机上部署VAST RAG:
- 转移存储库:
# On source machine
tar -czf vast-rag.tar.gz vast-rag/
# Copy to destination and extract
tar -xzf vast-rag.tar.gz
cd vast-rag- 运行部署:
./deployment/deploy.sh- 复制文档目录(可选):
# On source machine
tar -czf rag-docs.tar.gz ~/projects/RAG/
# On destination machine
mkdir -p ~/projects
tar -xzf rag-docs.tar.gz -C ~/projects- 重新启动克劳德桌面:
按Ctrl+C停止MCP服务器指示器,然后重新打开Claude Desktop。
部署脚本参考
deploy.sh --主要协调人。按顺序运行安装、安装和验证,并进行适当的错误处理。
setup.sh --创建Python 3.12虚拟环境,安装依赖项,下载嵌入模型,并创建所需的目录。
install.sh --通过将MCP服务器添加到配置文件中,向Claude Desktop注册MCP服务器。在修改之前创建原始配置的备份。
verify.sh --运行6次健康检查以确保系统正常运行:
- Python环境有效
- 已安装依赖项
- ChromaDB可访问
- 嵌入模型可下载/缓存
- MCP服务器启动时没有错误
- 搜索功能端到端工作
卸载.sh --通过交互式提示确认数据删除,从系统中彻底删除VAST RAG。
部署故障排除
问题:Python 3.13兼容性错误
- 解决方案:由于Python 3.13与torch交互时的malloc问题,系统需要Python 3.12。部署脚本会自动使用正确的版本。
问题:抱抱脸模型下载失败
- 解决方案:检查您的互联网连接。如果在代理后面,请确保
socksio已安装:pip install socksio
问题:Claude Desktop看不到新工具
- 解决方案:完全重新启动Claude Desktop(而不仅仅是关闭窗口)。使用Cmd+Q退出,然后重新打开。
问题:MCP服务器在初始化过程中超时(错误-32001)
- 解决方案:这在v0.1.1中得到了修复——服务器现在将文档索引推迟到MCP握手完成后的后台任务。如果您看到此错误,请确保您拥有最新版本。
问题:退出时Python崩溃(macOS 26+上的EXC_BREAKPOINT)
- 解决方案:这是一个已知的macOS 26 xzone malloc问题,涉及OpenMP/tokenizers原生代码。服务器包括自动解决方法(
MallocNanoZone=0,os._exit()).崩溃仅在退出时发生,不影响功能。
问题:部署脚本上的“权限被拒绝”
- 解决方案:使脚本可执行:
chmod +x deployment/deploy.sh
有关更详细的故障排除,请参阅 部署故障排除指南.
发展
运行测试
该项目包括97个全面的测试,涵盖单元、集成和端到端场景。
# Activate virtual environment
source .venv/bin/activate
# Run all tests with coverage
pytest tests/ --cov=src/vast_rag --cov-report=html
# Run a specific test file
pytest tests/test_parsers.py -v
# Run tests matching a pattern
pytest tests/ -k "test_embedding" -v
# Run with verbose output and show print statements
pytest tests/ -vv -s开发工作流程
- 对源代码进行更改 在
src/vast_rag/
- 运行测试以验证更改:
pytest tests/- 在本地测试MCP服务器:
python -m vast_rag这将在stdio模式下启动服务器。键入JSON-RPC消息以测试工具。
- 检查代码质量:
ruff check src/ tests/
ruff format src/ tests/- 承诺并推动:
git add .
git commit -m "feat: add new feature"
git push关键设计模式
延迟初始化:嵌入模型仅在首次需要时加载。这使系统即使在大型文档集合中也能保持响应。
概念索引:使用SHA-256哈希,系统可以安全地重新运行索引管道——只有更改的文件才会被重新处理。
双重收藏:庞大的数据和一般技术收集提供了灵活的范围界定,同时将相关文件放在一起。
错误恢复:即使单个文档无法解析,文件监视也会继续。失败的文档会被记录,但不会停止管道。
已知问题和限制
Python 3.13不兼容:Python 3.13的嵌入库和torch存在内存分配问题。使用Python 3.12。部署脚本强制执行此要求。
macOS 26(Tahoe)退出崩溃:在macOS 26+上,xzone malloc分配器在进程退出期间检测OpenMP/tokenizers本机代码中的堆损坏(__kmp_internal_end_library → _xzm_xzone_malloc_freelist_outlined).服务器通过三种缓解措施处理此问题: MallocNanoZone=0 (传统分配器), OMP_NUM_THREADS=1 + TOKENIZERS_PARALLELISM=false (降低了本地并行性),以及 os._exit() 跳过C++atexit处理程序。这只是退出时的崩溃——它不会影响操作过程中的功能。
大型文档处理:大于1GB的文档在解析过程中可能会导致内存问题。将非常大的档案拆分为多个文件。
文件名中的特殊字符:文件名中包含某些Unicode字符的文档可能无法正确索引。文件名使用ASCII或通用Unicode字符。
ChromaDB持久性:系统将嵌入存储在ChromaDB中,并具有本地文件持久性。在机器之间迁移需要复制 ~/.claude/rag-data/chroma/ 目录。
需求
系统要求
- macOS 15.2+ (在Sonoma、Sequoia和Tahoe/MaOS 26上测试)
- Python 3.12.x (由于torch malloc问题,不支持3.13)
- 克劳德桌面版 版本1.0+
- 磁盘空间:嵌入模型约500MB+ChromaDB空间(通常为100-500MB,具体取决于文档数量)
- 随机存取存储器:最小4GB;建议使用8GB+进行并发操作
Python依赖关系
核心依赖关系列在 pyproject.toml:
- 向量数据库 >=0.5.0--矢量数据库和相似性搜索
- 皮丹提克 >=2.0——配置管理和验证
- 句子变换器 >=2.2.0--嵌入模型
- 火炬 >=2.0——深度学习框架(句子转换所需)
- PyPDF2 >=3.0--PDF解析(初级)
- PDF 解析器 >=0.9.0——PDF解析(回退)
- 美丽的Soup4 >=4.12.0——HTML解析
- python docx >=0.8.11-DOCX解析
- 令牌。 >=0.5.0--分块的令牌计数
- 看门狗 >=3.0.0--文件系统监控
- python dotenv >=1.0.0——加载环境变量
- 媒染剂设置 >=2.0--从环境变量配置
发展依赖性
- 测试 >=7.0——测试框架
- 新冠肺炎 >=4.0——覆盖率报告
- 颈毛 >=0.1.0——过梁和格式化
- 黑色 >=23.0--代码格式化程序
- 米皮 >=1.0--静态类型检查
所有依赖项都由部署脚本自动安装。对于本地开发,请运行:
source .venv/bin/activate
pip install -e ".[dev]"VAST RAG如何融入您的工作流程
使用克劳德桌面
部署后,Claude可以自动搜索您的文档:
You: "What's the recommended query optimization strategy in VastDB?"
Claude: [Uses search_docs tool internally]
Found in vast-data/vdb-optimization.pdf (page 42):
"Query optimization in VastDB follows these principles..."在代码和脚本中
如果您有其他需要文档搜索的工具或脚本,可以通过编程方式调用MCP服务器:
import subprocess
import json
# Start the MCP server
proc = subprocess.Popen(
["python", "-m", "vast_rag"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
# Send a JSON-RPC request
request = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_docs",
"arguments": {"query": "VastDB query optimization"}
}
}
response = proc.communicate(json.dumps(request))[0]
results = json.loads(response)性能特征
2023年配备16GB RAM的MacBook Pro的典型性能:
| 操作 | 时间 | 备注 |
|---|---|---|
| 索引100个新的PDF文件 | 45-60秒 | 包括首次运行时嵌入模型的下载/缓存 |
| 无变化后重新索引 | \<5秒 | 哈希比较非常快 |
| 搜索查询(前5个结果) | 100-300ms | 包括嵌入计算和ChromaDB搜索 |
| 索引1已修改文件 | 2-5秒 | 仅重新处理已更改的文件 |
| 模型下载(第一次) | 2-3分钟 | ~400MB下载;之后缓存 |
贡献
这是一个私有存储库。对于错误报告、功能请求或贡献,请直接联系维护人员。
许可证
该项目是专有和机密的。有关详细信息,请参阅LICENSE文件。
进一步阅读
支持
有关问题或疑问,请查看故障排除指南或联系开发团队。
