Knowledge-QA-LLM: 基于本地知识库+LLM的问答系统

发布时间 2023-07-29 20:34:20作者: Danno

⚠️注意:后续更新,请移步README

Knowledge QA LLM

SemVer2.0

  • 基于本地知识库+LLM的问答系统。该项目的思路是由langchain-ChatGLM启发而来。
  • 缘由:
  • 优势:
    • 整个项目为模块化配置,不依赖lanchain库,各部分可轻易替换,代码简单易懂。
    • 除需要单独部署大模型接口外,其他部分用CPU即可。
    • 支持常见格式文档,包括txt、md、pdf, docx, pptx, excel等等。当然,也可自定义支持其他类型文档。

TODO

整体流程

  • 解析文档并存入数据库
    flowchart LR A(["文档"]) --ExtractText--> B([sentences]) B --Embedding--> C([Embeddings]) C --Store--> D[(DataBase)]
  • 检索并回答问题
    flowchart LR E([Query]) --Embedding--> F([Embeddings]) --> H[(Database)] --Search--> G([Context]) E --> I([Prompt]) G --> I --> J([LLM]) --> K([Answer])

使用

  1. 下载和部署模型

    1. 下载moka-ai/m3e-small模型,放到assets/models/m3e-small目录下,用于向量化文本内容。
    2. 单独配置好chatglm2-6b的接口,接口启动参考:ChatGLM2-6B API。具体使用方式可参考:knowledge_qa_llm/llm/chatglm2_6b.py
    3. 将部署好的llm_api写到配置文件knowledge_qa_llm/config.yaml中的llm_api_url字段下。
  2. 安装运行环境

    pip install -r requirements.txt --no-cache-dir
    
  3. 运行

    streamlit run webui.py
    
  4. UI Demo

  5. CLI Demo

? 所用工具

? 文件结构

.
├── 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
    • 完善说明文档