from docseek import DocSearch
# 1. 初始化(自动使用内置分词器 + BM25)
search = DocSearch(persist_directory="./my_docs")
# 2. 摄入文档
search.ingest("./notes/")
# 3. 查询
results = search.query("智能家居", top_k=5)
# 按文件名过滤
results = search.query("配置步骤", filter={"file_name": "README.md"})
# 按章节路径过滤
results = search.query("饮食建议", filter={"section_path": "健康"})
面向 AI agent 的文档检索服务,提供:
Invoke when:
from docseek import DocSearch
# 初始化(指定持久化目录)
search = DocSearch(persist_directory="./my_vector_db")
# 多 base_path 支持
search = DocSearch(
persist_directory="./data",
base_path=["/app/对话", "/app/设定"]
)
# 摄入单个文件
result = search.ingest("path/to/document.md")
# 摄入整个目录
result = search.ingest("./my_notes/")
# 返回值示例
{
"status": "success",
"message": "成功处理 10 个文件",
"files_processed": 10,
"chunks_added": 156,
"files_failed": []
}
# 基本查询
results = search.query("智能家居监测系统功能", top_k=5)
# 按文件名包含匹配过滤
results = search.query(
"安装配置步骤",
top_k=3,
filter={"source_file": "README"}
)
# 按章节路径包含匹配过滤
results = search.query(
"饮食建议",
top_k=3,
filter={"section_path": "健康饮食"}
)
# 按文件扩展名过滤
results = search.query(
"配置方法",
top_k=3,
filter={"file_ext": ".md"}
)
# 按完整文件名过滤
results = search.query(
"使用说明",
top_k=3,
filter={"file_name": "使用指南.md"}
)
# 返回值示例
[
{
"content": "[安装] 配置步骤\n1. 安装依赖包...",
"similarity": 0.8234,
"source_file": "/path/to/README.md",
"relative_path": "README.md",
"file_link": "computer://README.md",
"section_path": "安装 > 配置步骤",
"title": "配置步骤",
"level": 2
},
...
]
result = search.remove("path/to/document.md")
# {"status": "success", "message": "移除了 12 个切片", "removed": 12}
stats = search.stats()
# {
# "total_documents": 156,
# "total_files": 10,
# "vocab_size": 2345,
# "use_sparse": True,
# "memory_mb": 128.5,
# "cache_stats": {"size": 50, "hits": 120, "misses": 30},
# "persist_directory": "./my_vector_db",
# "persist_files": {
# "vectors.json": 45678,
# "index.json": 1234,
# "tfidf_model.json": 8901,
# "bm25_index.json": 2345
# }
# }
result = search.rebuild()
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| ------ | ------ | -------- | ------ |
| persist_directory | str | "./docseek_data" | 持久化目录路径 |
| use_real_embedding | bool | False | 是否使用真实 embedding |
| hybrid_search | bool | True | 启用混合检索(BM25 + 向量) |
| chunk_size | int | 500 | Markdown 切片最大字符数 |
| base_path | str/list | "" | 基准路径,支持字符串(逗号分隔)或列表 |
数据存储在指定目录(默认 ./docseek_data):
| 文件 | 说明 |
|---|---|
| ------ | ------ |
| vectors.json | 向量数据和文档内容(稀疏模式) |
| index.json | 文件索引映射 |
| tfidf_model.json | TF-IDF 模型参数 |
| bm25_index.json | 内置 BM25 索引 |
| cache.json | 查询缓存 |
零依赖运行(默认):
内置功能:
可选依赖(安装后自动使用):
pip install jieba — 中文分词(升级分词效果)pip install sentence-transformers — 真实语义向量pip install rank-bm25 — BM25 加速(与内置 BM25 二选一)pip install python-docx — Word 文档支持pip install PyPDF2 — PDF 文档支持安装 sentence-transformers 后:
search = DocSearch(use_real_embedding=True)
# 标题层级自动切片(h1→h2→h3)示例:
# 文档标题
## 第一章
### 1.1 小节
正文内容...
---
切片结果:
[文档标题] 第一章\n### 1.1 小节\n正文内容...文档标题 > 第一章 > 1.1 小节/docseek/文档雷达/文档搜索from docseek import DocSearch
# 创建检索服务,指定持久化目录
search = DocSearch(persist_directory="/data/knowledge_base")
# 摄入文档(支持 Markdown、Word、PDF、TXT)
search.ingest("./notes/")
# 查询与问题相关的文档片段
results = search.query("如何配置系统", top_k=5)
for r in results:
print(f"[{r['similarity']:.2f}] {r['title']}")
print(f" 来源: {r['source_file']}")
print(f" 内容: {r['content'][:100]}...")
print()
# 只在"健康饮食"章节中搜索
results = search.query(
"营养建议",
filter={"section_path": "健康饮食"}
)
# 查看统计
stats = search.stats()
print(f"文档总数: {stats['total_documents']}")
print(f"内存占用: {stats['memory_mb']}MB")
# 移除文档
search.remove("path/to/outdated.md")
# 重建索引
search.rebuild()
共 1 个版本