You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

159 lines
6.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

**向量化模型**:
- SentenceModel('shibing624/text2vec-base-chinese'),专为中文文本设计的句子嵌入模型,用于将查询和文档转化为向量表示。
```sh
# 下载地址
https://huggingface.co/shibing624/text2vec-base-chinese
```
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623151428754.png)
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623151547922.png)
上述架构图展示了一个垂直的层次结构,描述了系统的核心组件及其连接关系,自上而下解读如下:
- **Gradio Web 界面**:
- 位于顶层,使用绿色矩形框表示,标注为"Gradio 大模型交互 Web"。这是用户与系统交互的入口,支持输入查询和接收回答。
- **Qwen2.5-14b**:
- 第二层,用紫色矩形框表示,包含 Qwen 的标志,以及"Qwen2.5-14B 开源大语言模型"字样。用户查询从 Gradio 传递至此,由 Qwen2.5-14b 处理。
- 注意咱们用的通义千问2.5的模型,实际也可以换成 DeepSeek 模型。
- **向量化层**:
- 第三层,用红色矩形框表示,标注为"shibing624/text2vec-base-chinese 向量化"。此层将文本转化为向量,为后续的语义检索提供支持。
- **Elasticsearch 搜索**:
- 第四层,同样为红色矩形框,包含 Elasticsearch 标志和"搜索引擎"字样。向量化的数据在此存储并用于检索。
- **FSCrawler 数据摄取**:
- 第五层,用蓝色矩形框表示,标注为"FSCrawler 文档爬虫",负责将本地文档索引到 Elasticsearch。
- **数据源**:
- 底层,用米色矩形框表示,包含 PDF、DOC、XLS、PPT、TXT 等文档类型图标,标注为"数据源"。
箭头从上到下连接各层,表明数据从用户界面流向大语言模型,再经过向量化、检索,最终基于文档数据生成回答。
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623151707722.png)
- **输入**:
- 左侧标注为"待检索的问句",表示用户输入的查询。同时,"私有化本地数据源"PDF、DOC、XLS 等)作为知识库基础。
- **Elasticsearch**:
- 中间核心组件,标注为"Elasticsearch",包含"向量数据库"和"向量检索"模块。查询和数据源均输入此模块,通过向量检索匹配相关文档。
- **Qwen2.5 LLM**:
- 右侧标注为"DeepSeek ... Qwen2.5 LLM 大语言模型",接收检索结果并生成回答。
- **输出与验证**:
- 最终输出为"提取用户想要的精准答案",并通过"结果验证"确保准确性。此外,系统提供"公网开放接口",支持 API 访问。
#### 3.3 综合分析
综合两图来看,系统采用经典的 **RAGRetrieval-Augmented Generation** 架构:
用户查询首先通过向量化模型(`shibing624/text2vec-base-chinese`)转化为向量,在 Elasticsearch 中检索相关文档,随后将查询与检索结果传递给 Qwen2.5-14b 生成最终回答。
Gradio 提供友好界面FSCrawler 确保数据摄取的自动化,而公网接口则扩展了系统的应用场景。
检索增强生成RAG简单来说就是**先从一大堆文档中找到跟用户问题相关的内容,然后用大语言模型把这些内容整理成自然、易懂的回答**。
### 4. 知识库智能问答系统代码解读
以下是实现该系统的一般步骤与代码思路,具体代码放到[死磕Elasticsearch知识星球](https://jishuzhan.net/article/1898217914180947969)。
#### 4.1 文档摄取
使用 FSCrawler 扫描本地文件并索引到 Elasticsearch
```sh
fscrawler --config_dir /path/to/config job_name
```
配置文件需指定文档路径和 Elasticsearch 索引名称。
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623151939865.png)
#### 4.2 向量化
利用 `shibing624/text2vec-base-chinese` 对文档和查询进行[向量化](https://jishuzhan.net/article/1898217914180947969)
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623151957522.png)
```python
from text2vec import SentenceModel
model = SentenceModel('shibing624/text2vec-base-chinese')
# 文档向量化并存入 Elasticsearch
for doc in documents:
vector = model.encode(doc['text'])
es.index(index='knowledge_base', body={'text': doc['text'], 'vector': vector})
```
#### 4.3 查询处理与检索
将用户查询向量化并在 Elasticsearch 中执行相似性搜索,这里本质做的是关键词匹配+向量检索的组合方式。
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623152024785.png)
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623152054522.png)
#### 4.4 回答生成
将查询和检索结果传递给 Qwen2.5-14b 生成回答:
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/{year}/{month}/{md5}.{extName}/20250623152107385.png)
```python
from ollama import Client
ollama = Client()
context = "\n".join([doc['_source']['text'] for doc in results['hits']['hits']])
prompt = f"根据以下内容回答问题:\n{context}\n问题:{query}"
response = ollama.generate(model='qwen2.5:14b', prompt=prompt)
answer = response['text']
```
#### 4.5 Gradio 界面
通过 Gradio 实现交互:
```python
import gradio as gr
def qa_system(query):
# 查询处理、检索、生成逻辑
return answer
interface = gr.Interface(fn=qa_system, inputs="text", outputs="text")
interface.launch()
```
上述步骤展示了从数据摄取到回答生成的完整流程,体现了系统的模块化设计。
### 5. 知识库智能问答系统待改进和展望
为进一步提升系统性能与用户体验,可考虑以下改进方向:
- **模型优化**:
- 对 Qwen2.5-14b 进行领域特定微调,提升对知识库内容的理解能力。
- 换成 DeepSeek 模型做对比。
- **向量化改进**:
- 尝试其他中文嵌入模型或微调 `text2vec`,提高向量表示的语义准确性。
- **文章切分力度**:
- 当前大家看到一章内容一个文档,效果可以。
- 但如果更细化为一小节内容一个文档导入 Elasticsearch是不是更好呢都有待进一步验证
------
### 结语
基于 Qwen2.5-14b 与 Elasticsearch 的大数据知识库智能问答系统,通过向量检索与生成式 AI 的检索增强 RAG 结合,为用户提供了高效、精准的信息获取途径。
无论是技术架构的清晰性还是实测效果的可靠性该系统都展现了检索增强RAG 在知识管理领域的巨大潜力。
视频讲解地址https://t.zsxq.com/E1toS