⚠️注意:后续更新,请移步README
Knowledge QA LLM
- 基于本地知识库+LLM的问答系统。该项目的思路是由langchain-ChatGLM启发而来。
- 缘由:
- 之前使用过这个项目,感觉不是太灵活,部署不太友好。
- 借鉴如何用大语言模型构建一个知识问答系统中思路,尝试以此作为实践。
- 优势:
- 整个项目为模块化配置,不依赖
lanchain
库,各部分可轻易替换,代码简单易懂。 - 除需要单独部署大模型接口外,其他部分用CPU即可。
- 支持常见格式文档,包括txt、md、pdf, docx, pptx, excel等等。当然,也可自定义支持其他类型文档。
- 整个项目为模块化配置,不依赖
TODO
- 完善解析office文档接口及单元测试
- 完善PDF提取接口及单元测试
- 完善图像内容提取接口及单元测试
- 完善LLM接口
- 完善UI
- 合并基于关键词搜索和基于向量搜索两种方法
整体流程
- 解析文档并存入数据库
- 检索并回答问题
使用
-
下载和部署模型
- 下载
moka-ai/m3e-small
模型,放到assets/models/m3e-small
目录下,用于向量化文本内容。 - 单独配置好
chatglm2-6b
的接口,接口启动参考:ChatGLM2-6B API。具体使用方式可参考:knowledge_qa_llm/llm/chatglm2_6b.py
- 将部署好的
llm_api
写到配置文件knowledge_qa_llm/config.yaml
中的llm_api_url
字段下。
- 下载
-
安装运行环境
pip install -r requirements.txt --no-cache-dir
-
运行
streamlit run webui.py
-
UI Demo
-
CLI Demo
🛠 所用工具
- 文档解析:
extract_office_content
,rapidocr_pdf
,rapidocr_onnxruntime
- 提取特征向量:
moka-ai/m3e-small
- 向量存储:
sqlite
- 向量检索:
faiss
- UI:
streamlit>=1.24.0
📂 文件结构
.
├── assets
│ ├── db # 存放向量数据库
│ ├── models # 放置提取embedding的模型
│ └── raw_upload_files
├── knowledge_qa_llm
│ ├── __init__.py
│ ├── config.yaml # 配置文件
│ ├── file_loader # 处理各种格式的文档
│ ├── llm # 大模型接口,大模型需要单独部署,以接口方式调用
│ ├── utils
│ └── vector_utils # embedding的存取和搜索
├── LICENSE
├── README.md
├── requirements.txt
├── tests
├── cli.py
└── webui.py # 基于streamlit的UI实现
更新日志
- 2023-07-29 v0.0.4 update:
- 基于
streamlit==1.25.0
优化UI - 优化代码
- 录制UI GIF demo
- 基于
- 2023-07-28 v0.0.3 update:
- 完成文件解析部分
- 2023-07-25 v0.0.2 update:
- 规范现有目录结构,更加紧凑,提取部分变量到
config.yaml
中 - 完善说明文档
- 规范现有目录结构,更加紧凑,提取部分变量到