Files
wiki_crawler/README.md
2026-01-20 01:51:39 +08:00

57 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# wiki_crawler
本仓库主要用于存放wiki_crawler的代码
核心依赖 `firecrawl` 和 阿里百炼 的api支持
完成wiki网页爬取和向量化与知识库查找
mcp调试命令
```bash
npx @modelcontextprotocol/inspector uv run backend/mcp_server.py
```
需要nodejs环境
打开页面后在Environment Variables中添加`PYTHONIOENCODING = utf-8`来防止编码问题(视具体情况而定,如果可以正常运行,也可以不加)
## 当前状况
1. chunk分段逻辑根据返回的markdown进行分割按照#、##进行标题的分类增加JSONB格式字段meta_info有下面两个字段分别可以用于数据库查询和LLM上下文认知资料来源
```python
# 源数据 (headers)
headers = {"h1": "产品介绍", "h2": "核心功能", "h3": "多语言支持"}
# 生成数据 (header_path)
# Python 代码逻辑: " > ".join(headers.values())
header_path = "产品介绍 > 核心功能 > 多语言支持"
```
2. 量化指标以及测试:目前存入的数据较少,测试结果可能偏差较大
```
"p_at_1": [], # Precision@1: 首位精确率
"hit_at_5": [], # HitRate@5: 前5命中率即返回的前五个目前设置只返回5个是否符合问题
"mrr": [], # Mean Reciprocal Rank: 倒数排名分数,正确答案排得越靠前,分数越高
"latency": [] # 响应耗时
```
3. 搜索逻辑和问题分类尚未实现目前参考一些主流的做法用户输入后先过一个LLM对问题进行拆分和分类然后传入对应的知识库参数task_id进行对应的检索
4. RAG逻辑混合检索使用向量和关键词混合检索此处进行粗筛数据层返回后在业务层调用 gte-rerank 模型进行重排,最后返回请求
```python
vector_score = (1 - self.db.chunks.c.embedding.cosine_distance(query_vector))# 计算向量相似度
keyword_score = func.ts_rank(self.db.chunks.c.content_tsvector, keyword_query) # 计算关键词相似度
final_score = (vector_score * 0.7 + func.coalesce(keyword_score, 0) * 0.3).label("score")# 计算最终分数
```
5. 产品面向场景客户需求爬取几个文档并长期维护更新后续需要新增但是量相对不会太大firecrawl付费大概不会太贵。爬虫获取完整wiki可无视robots.txt当前知识库存入和爬虫绑定强依赖markdown格式存入
6. 后续开发添加旧wiki的更新维护功能。dify增加对后端的封装做一套搜索逻辑和问题分类的节点如果不好弄那还是迁回到后端后端只提供知识库的mcpbot调用mcp之后自行调用实现搜索和问题分类
对比其他检索方法的优势做一套评测机制标准评估最终LLM输出的准确度目前是知识库检索准确度
切割逻辑准确率定义归结资料测试设计mcp服务调用搜索逻辑问题分类流程架构设计场景假设
整理dify报错
包装mcp server