Install
openclaw skills install personal-knowledge-base管理个人知识库,基于RAG和文本向量化技术,支持文件的保存、向量化、检索、问答、删除等功能
openclaw skills install personal-knowledge-base本技能提供基于RAG(检索增强生成)和文本向量化技术的个人知识库管理能力。
当用户表达以下意图时,使用此技能:
技能目录下的 config.txt 文件包含大部分配置参数。
推荐方式:通过环境变量配置(优先级更高)
# Windows PowerShell
$env:ZHIPUAI_API_KEY="your-api-key-here"
# Windows CMD
set ZHIPUAI_API_KEY=your-api-key-here
# Linux/Mac
export ZHIPUAI_API_KEY="your-api-key-here"
备选方式:在 config.txt 中配置(向后兼容)
ZHIPUAI_API_KEY=your-api-key-here
优先级:环境变量 > config.txt
注意:出于安全考虑,推荐使用环境变量方式配置 API Key,避免敏感信息明文保存在配置文件中。
| 参数 | 说明 |
|---|---|
| workspace_root | 知识库根目录 |
| embedding_model | 嵌入模型名称 |
| ZHIPUAI_LLM_MODEL | 智谱LLM模型名称 |
| DEFAULT_CHUNK_SIZE | 知识库缺省文本块大小 |
| DEFAULT_TOP_K | 默认检索的文本块最大数量 |
| DEFAULT_SIMILARITY_THRESHOLD | 相似度阈值 |
知识库目录应按以下结构组织:
知识库根目录/
└── {知识库名称}/
├── sourcefiles/ # 原始文件存储目录
└── vectordb/ # 向量数据库存储目录
├── faiss_index.bin
├── faiss_metadata.pkl
└── kb_metadata.pkl # 知识库元数据(包含文本块大小)
当用户表示「创建知识库abc」时:
abc 目录abc 目录下创建 sourcefiles 和 vectordb 子目录vectordb 目录下生成空的向量库和索引文件使用示例:
from scripts.knowledge_base_manager import KnowledgeBaseManager
# 创建知识库,指定文本块大小为500
result = KnowledgeBaseManager.create_knowledge_base(
knowledge_base_name="abc",
workspace_root="d:/Nancy/MyWork/WorkBuddyWorkSpace/MyKnowledgeBase",
chunk_size=500 # 可选,不指定则使用config.txt中的DEFAULT_CHUNK_SIZE
)
print(result)
# 输出: {'success': True, 'message': "成功创建知识库 'abc',文本块大小: 500", ...}
当用户表示「把文件(上传的文件或指定路径的文件)保存到我的知识库aabb」时:
/aabb 子目录sourcefiles 目录存在(如不存在则创建)使用示例:
from scripts.knowledge_base_manager import create_knowledge_base_manager
# 创建知识库管理器
manager = create_knowledge_base_manager(
knowledge_base_name="aabb",
workspace_root="d:/Nancy/MyWork/WorkBuddyWorkSpace/MyKnowledgeBase"
)
# 添加文件到知识库
result = manager.add_file_to_knowledge_base("path/to/file.pdf")
print(result)
当用户表示「在知识库abc中更新xxx文件」时:
使用示例:
from scripts.knowledge_base_manager import create_knowledge_base_manager
manager = create_knowledge_base_manager(
knowledge_base_name="abc",
workspace_root="d:/Nancy/MyWork/WorkBuddyWorkSpace/MyKnowledgeBase"
)
# 更新文件
result = manager.update_file_in_knowledge_base("path/to/new_file.pdf")
print(result)
当用户表示「查知识库aabb:xxx」时:
使用示例:
# 查询知识库
result = manager.answer_question("xxx")
print(result["answer"])
print(result["source_files"])
当用户表示「当前我有哪些知识库」时:
使用示例:
from scripts.knowledge_base_manager import KnowledgeBaseCatalog
catalog = KnowledgeBaseCatalog()
# 获取简要列表
kb_list = catalog.list_knowledge_bases()
print(kb_list)
# 获取详细信息
kb_list_detailed = catalog.list_knowledge_bases_detailed()
for kb in kb_list_detailed:
print(f"知识库: {kb['name']}, 文件数: {kb['file_count']}, 文本块大小: {kb['chunk_size']}, 描述: {kb['description']}")
当用户表示「知识库aabb下有哪些文件」时:
使用示例:
manager = create_knowledge_base_manager("aabb")
files = manager.list_files_in_knowledge_base()
for f in files:
print(f"文件: {f['filename']}, 文本块数: {f['chunk_count']}, 导入时间: {f['import_time']}")
当用户表示「删除知识库aabb下的xx文件」时:
使用示例:
result = manager.remove_file_from_knowledge_base("xx.pdf")
print(result)
当用户表示「查看知识库aabb中xx文件的第n个文本块内容」时:
使用示例:
# 查询指定文件的第3个文本块
result = manager.get_chunk_by_index("xx.pdf", 3)
print(result["content"]) # 文本块内容
print(result["total_chunks"]) # 文件总文本块数
以下参数可在创建KnowledgeBaseManager时配置:
| 参数 | 默认值 | 说明 |
|---|---|---|
| knowledge_base_name | 必填 | 知识库名称 |
| workspace_root | config.txt配置 | 知识库根目录 |
| embedding_model | "embedding-3" | 嵌入模型 |
| chunk_size | 从知识库元数据加载 | 文本块大小 |
| vector_size | 2048 | 嵌入向量维度(固定值) |
| similarity_threshold | 0.5 | 相似度阈值 |
| top_k | 3 | 默认检索的文本块数量 |
注意:
chunk_overlap = int(chunk_size * 0.1)安装依赖:
pip install faiss-cpu langchain langchain-community langchain-text-splitters pypdf python-docx python-pptx markdown zhipuai docx2txt