(一)AI本地知识库问答(可运行):LangChain+Chroma向量数据库+OpenAi大模型

2023-12-13 03:32:34

调研阶段,有什么不好的地方欢迎大家帮我指认,谢谢!

一、项目结构总览(AiDemo,先上代码,后续再解释)

只需要看config目录下的config.py,data目录下的txt知识库文件,db向量数据库文件在持久化部署后会自动生成,route下的app.py,scripts目录下的Chroma向量库持久化部署.py这几个就可以,scripts目录下的考勤问答.py和test目录下都是单独的自己测试的小代码,可以不用关注

二、安装C++编译环境

因为运行需要本地有C++的环境,所以需要安装C++生成工具,

勾选这一个就可以

地址:Microsoft C++ 生成工具 - Visual Studio

三、代码

config.py

# openai的key
openai_api_key = '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'

# 代理地址配置
http_proxy = "http://127.0.0.1:7890"

# 向量数据库path
kaoqin_vector_db_path = "D:\PythonProjects\pythonTestProject\AiDemo\data\考勤.db"
touzi_vector_db_path = "D:\PythonProjects\pythonTestProject\AiDemo\data\投资.db"
yunying_vector_db_path = "D:\PythonProjects\pythonTestProject\AiDemo\data\产品运营问题反馈.db"

# 问答库path
kaoqin_qa_txt_path = "D:\PythonProjects\pythonTestProject\AiDemo\data\考勤.txt"
touzi_qa_txt_path = "D:\PythonProjects\pythonTestProject\AiDemo\data\投资.txt"
yunying_qa_txt_path = "D:\PythonProjects\pythonTestProject\AiDemo\data\产品运营问题反馈.txt"

data下的知识库,大家自己用自己的就可以了,知识库不要太长 ,太长的话需要对数据进行mapreduce操作,会比较麻烦,入门级不用考虑这么多,先跑起来再说,这里只展示考勤的txt知识库文件,至于db向量数据库文件,是运行chroma持久化部署之后会生成的

app.py

import json

from flask import Flask, request
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain import OpenAI
from langchain.chains import RetrievalQA
import os

from AiDemo.config import config
from AiDemo.config.config import kaoqin_vector_db_path

os.environ["OPENAI_API_KEY"] = config.openai_api_key
os.environ["http_proxy"] = config.http_proxy
os.environ["https_proxy"] = config.http_proxy
app = Flask(__name__)

docsearch = Chroma(
    persist_directory=kaoqin_vector_db_path,
    embedding_function=OpenAIEmbeddings()
)

qa = RetrievalQA.from_chain_type(
    llm=OpenAI(model_name="text-davinci-003"),
    chain_type="stuff",
    retriever=docsearch.as_retriever(),
    return_source_documents=False,
)


@app.route('/get_single_answer', methods=['GET'])
def get_single_answer():
    query = request.args.get('query')
    if query:
        if query.endswith("?") or query.endswith("?"):
            query = query
        else:
            query = query + "?"
        result = qa(
            {"query": "请根据你所知道的来回答下面这个问题:" + query + "如果你不知道,请不要乱说,可以让我去咨询相关的客服人员。"})
        result = result.__str__().replace("'", '"')
        final_result = json.loads(result)
        final_result = final_result['result']
        return '{"result": "' + final_result + '"}'
    else:
        return "请输入问题."


if __name__ == '__main__':
    app.run(debug=True)

?Chroma向量库持久化部署.py

import os
from langchain.document_loaders import UnstructuredFileLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.embeddings.openai import OpenAIEmbeddings

from AiDemo.config import config
from AiDemo.config.config import kaoqin_vector_db_path, kaoqin_qa_txt_path

os.environ["OPENAI_API_KEY"] = config.openai_api_key
os.environ["http_proxy"] = config.http_proxy
os.environ["https_proxy"] = config.http_proxy

loader = UnstructuredFileLoader(kaoqin_qa_txt_path)

documents = loader.load()

source_chunks = []

text_splitter = CharacterTextSplitter(
    separator=" ",
    chunk_size=100,
    chunk_overlap=20
)

split_docs = text_splitter.split_documents(documents)

docsearch = Chroma.from_documents(
    documents,
    OpenAIEmbeddings(),
    persist_directory=kaoqin_vector_db_path
)
docsearch.persist()
print("Chroma向量库持久化部署完成!")

?四、运行

1、需要导入包

pip install langchain
pip install openai
pip install chromadb
pip install ydata-profiling
pip install requests
pip install unstructured

暂时能想起来的就只有这些了,如果提示没有什么什么包,就知道pip就行

2、配置文件里的路径,改成自己本地的路径,openai的key,改成自己的key,我的key已经更新了其他的了,怎么注册申请openai的key,可以自行网上搜索

代理地址配置,也需要配置自己的VPN地址,运行项目,本地是要开启VPN的,这里推荐一个本人使用了快三年的稳定VPN源地址:注册 — 惊叹号cloud

?需要先运行Chroma向量库持久化部署.py文件来将知识库加载到向量数据库中,之后再运行app.py中的main

最后就是用postman访问了?

?

五、总结

????????本文只是以能运行的demo为目的,中间各种知识的铺垫,如有不懂的话,可以去网上搜查各种资料,后续我可能也会继续发布相关的知识学习,有什么问题欢迎大家指正 。

文章来源:https://blog.csdn.net/qq_44810220/article/details/132732522
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。