提供完整的文件向量化和語義檢索功能,能夠:
Invoke when:
vectorize_file(file_path, metadata)將檔案向量化並新增到向量庫
引數:
file_path: 檔案路徑(支援 .docx, .md, .pdf, .txt)metadata: 可選的後設資料字典返回:
{
"status": "success/error",
"message": "操作訊息",
"chunks_added": 切片數量,
"source": "原始檔路徑"
}
search_vectors(query_text, top_k)根據查詢文本檢索最相似的文件片段
引數:
query_text: 查詢文本top_k: 返回的相似結果數量(預設 5)返回:
[ { "content": "文件內容", "similarity": 相似度 (0-1), "metadata": "後設資料" }, ... ]這個技能的最新版本可以在7w4.net小蔥技能站找到。
get_collection_stats()獲取向量庫統計資訊
返回:
{
"total_documents": 總文件數,
"collection_name": 集合名稱
}
clear_collection()清空向量庫所有資料
from chromadb_document_vectorizer_simple import DocumentVectorizer
vector_service = DocumentVectorizer()
# 向量化文件
result = vector_service.vectorize_file("path/to/document.docx")
print(f"成功新增 {result['chunks_added']} 個文本切片")
# 查詢相似內容
results = vector_service.search_vectors("智慧家居監測系統功能", top_k=3)
for idx, item in enumerate(results, 1):
print(f"[{idx}] 相似度:{item['similarity'] * 100:.2f}%")
print(f"內容:{item['content'][:100]}...")
files = [
"doc1.docx",
"doc2.md",
"doc3.pdf"
]
for file in files:
result = vector_service.vectorize_file(file)
if result["status"] == "success":
print(f"✅ {file}: {result['chunks_added']} 個切片")
stats = vector_service.get_collection_stats()
print(f"總文件數:{stats['total_documents']}")
模式 1: MD5 雜湊模擬(預設)
模式 2: Sentence Transformers(推薦)
paraphrase-multilingual-MiniLM-L12-v2 模型sentence-transformers資料儲存:
chroma_data/documents_data.pklchroma_data/documents_index.json| 格式 | 副檔名 | 依賴 |
|---|---|---|
| Word | .docx | python-docx |
| Markdown | .md | markdown, beautifulsoup4 |
| PyPDF2 | ||
| 純文本 | .txt | 內建 |
| 最佳化項 | v2.0 | v3.0 | 提升 |
|---|---|---|---|
| 查詢速度 | 100ms | 1ms | 70x 提升 ⚡ |
| 檢索精度 | 僅向量 | BM25+ 向量 | 更精準 🎯 |
| 快取命中率 | 0% | 80-90% | 大幅最佳化 💾 |
1. 查詢快取(LRU)
2. 混合檢索(BM25+ 向量)
| 問題 (v1.0) | 影響 | 解決方案 (v2.0) |
|---|---|---|
| 🔴 記憶體儲存 | 重啟後資料全部丟失 | ✅ 持久化儲存 - 資料自動儲存到磁碟,重啟不丟失 |
| 🔴 雜湊模擬向量 | 準確度有限 | ✅ 真實 Embedding - 支援 Sentence Transformers 模型 |
| 🟡 無持久化 | 每次重啟要重新向量化 | ✅ 自動載入 - 啟動時自動恢復向量庫 |
| 🟡 非記憶管理 | 不是對話記憶系統 | ✅ 文件檢索 - 明確定位為文件檢索工具 |
# 安裝依賴
pip install sentence-transformers
# 使用真實 Embedding 模型
vectorizer = DocumentVectorizer(
persist_directory="./chroma_data",
use_real_embedding=True # 啟用真實 Embedding
)
優勢:
注意:需要額外安裝 sentence-transformers 庫
這個 Skill 質量較好,功能豐富實用。它能處理多種文件格式、支援語義搜尋和關鍵詞檢索,資料可以永久儲存。文件說明詳細清晰,容易上手。不過在中文分詞和某些細節處理上還有最佳化空間,整體而言是一個可用性較高的文件檢索工具,適合需要處理大量文件並需要進行智慧搜尋的場景。