Skip to content

这个项目是一个基于openAI的文件问答系统,支持小程序部署

License

Notifications You must be signed in to change notification settings

kjhuanhao/Chinese-Knowledge-Base-QA

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chinese Knowledge Base QA 中文知识库问答

介绍

这个项目是一个基于openAI的中文知识库问答系统,可以用于智能客服等场景

项目用途

智能客服等要求根据特定文件的中文对话系统

项目运行效果(以校园知识库问答为例子)

gif

项目原理示意图

pPnnZAe.md.png(https://imgse.com/i/pPnnZAe)

项目默认支持的文件格式

  • docs
  • pdf
  • md
  • csv

项目特色

  • 前后端分离,前端为小程序,后端采用fastapi
  • 由于小程序不支持event-stream,本项目基于websocket实现流式传输的效果,适用更多场景
  • 基于openAI的ChatModel(gpt-3.5-turbo)
  • 支持多个api_key动态更换api_key
  • 基于chroma存储向量数据和进行相似度检索,默认的检索方式是余弦搜索
  • 支持openAI代理
  • 实现api_key状态管理,可查询用量余额,基于openAI账号的api_key管理
  • 运维复杂度低,只需要引入redis数据库,即可快速构建
  • 智能问答推荐,实现更加精准的答复
  • 使用M3e-base中文嵌入模型,召回文档能力更强
  • 一键Docker部署
  • 智能缓存,问题重复下,无需走openAI接口,实现快速响应

由于官方的余额查询相关接口鉴权方法更换,现已去除接口动态管理功能

使用说明

配置

需要修改env_template.env文件,具体参数说明如下:

  • OPENAI_API_BASE:openAI代理地址设置,例如:https://xxxxx.com/v1 ,如果无需使用代理,请留空即可,默认会走官方接口
  • EXPIRE_DAYS:所有api_key在redis中的可留存时间,例如:60 (默认单位为天数)
  • REDIS_HOST:redis主机地址,例如127.0.0.1
  • REDIS_PORT:redis端口号,例如:6379
  • REDIS_PASSWORD:redis密码,没有密码则为空即可
  • REDIS_DB:redis数据库,例如:0

后端部署运行

直接运行

  1. 安装必备模块
pip install -r requirements.txt
  1. 安装项目依赖的模型,如果速度慢可以自行下载该模型,在此项目根目录下命名为m3e-base,存放模型数据
git lfs install
git clone https://huggingface.co/moka-ai/m3e-base
  1. fastapi使用的是uvicorn,本项目app.py直接运行即可
python3 main.py

Docker部署

  1. 下载本项目代码
git clone https://github.com/kjhuanhao/Chinese-Knowledge-Base-QA.git
  1. 安装项目依赖的模型,如果速度慢可以自行下载该模型,在此项目根目录下命名为m3e-base,存放模型数据
git lfs install
git clone https://huggingface.co/moka-ai/m3e-base
  1. 构建镜像 自行修改<>中的内容
docker build -t <your_images_tag> Chinese-Knowledge-Base-QA/
  1. 运行容器 自行修改<>中的内容
mkdir db
docker run -id -p 13010:8000 --name <your_container_name> -v $PWD/db:/chineseQA/db <your_images_tag>

相关接口

1. 初始化接口

在使用之前需要初始化你的文件,在初始化过程中,会获取相关的embeddings然后存储到本地的chroma向量数据库,会创建一个db文件夹存储向量数据,用于后续的相关问答操作

由于向量化需要时间,此接口速度会较慢,暂时未做边界处理,当然可以打包db文件夹,替换服务器内的db文件夹,这样就不需要初始化了

POST /initialize
content-type: application/json

{
    "filename": "we",
    "file_type": "csv"
}

成功示例

{
    "code": 200,
    "data": "初始化成功",
}

失败示例

{
    "code": 500,
    "data": "初始化失败",
}

2. 上传文件接口

目前仅支持单文件上传,上传后会存储在项目data目录下

POST /upload_file
content-type: multipart/form-data

成功示例

{
    "code": 200,
    "data": "上传成功"
}

3. 问答接口

接口只接受普通文本,返回也是文本,问答接口无上下文,默认的gpt等待时间为30s,如果超过30s未响应socket会断开连接,在后端响应完信息后会主动断开socket连接

GET /ask
Upgrade: websocket
Connection: Upgrade

4. 添加api_key接口

POST /api_key/add
content-type: application/json

{
    "api_key": [
        {
            "your_email1":"your_api_key"
        },
        {
            "your_email2":"your_api_key2"
        }
    ]
}

成功示例

{
    "code": 200,
    "data": [
        {
            "your_email1":"your_api_key"
        },
        {
            "your_email2":"your_api_key2"
        }
    ]
}

5. 查询所有的api_key接口

GET /api_key/get_all_api_keys

成功示例

{
    "code": 200,
    "data": [
        {
            "email": "dk@xx.com",
            "api_key": "sk-"
        },
        {
            "email": "A@xx.com",
            "api_key": "sk-"
        },
        {
            "email": "Fe@xx.com",
            "api_key": "sk-"
        },
        {
            "email": "S@xx.com",
            "api_key": "sk-"
        },
        {
            "email": "C@xx.com",
            "api_key": "sk-"
        }
    ]
}

About

这个项目是一个基于openAI的文件问答系统,支持小程序部署

Resources

License

Stars

Watchers

Forks