当前位置:   article > 正文

使用Langchain+GPT+向量数据库chromadb 来创建文档对话机器人_langchain中如何使用chromadb 库

langchain中如何使用chromadb 库

使用Langchain+GPT+向量数据库chromadb 来创建文档对话机器人

一.效果图如下:

在这里插入图片描述

二.安装包

 pip install langchain
 pip install chromadb
 pip install unstructured
 pip install jieba
  • 1
  • 2
  • 3
  • 4

三.代码如下

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os  # 导入os模块,用于操作系统相关的操作

import chromadb
import jieba as jb  # 导入结巴分词库
from langchain.chains import ConversationalRetrievalChain  # 导入用于创建对话检索链的类
from langchain.chat_models import ChatOpenAI  # 导入用于创建ChatOpenAI对象的类
from langchain.document_loaders import DirectoryLoader  # 导入用于加载文件的类
from langchain.embeddings import OpenAIEmbeddings  # 导入用于创建词向量嵌入的类
from langchain.text_splitter import TokenTextSplitter  # 导入用于分割文档的类
from langchain.vectorstores import Chroma  # 导入用于创建向量数据库的类

import os
os.environ["OPENAI_API_KEY"] = 'xxxxxx'

# 初始化函数,用于处理输入的文档
def init():
    files = ['2023NBA.txt']  # 需要处理的文件列表
    cur_dir = '/'.join(os.path.abspath(__file__).split('/')[:-1])
    for file in files:  # 遍历每个文件
        data_path = os.path.join(cur_dir, f'data/{file}')
        with open(data_path, 'r', encoding='utf-8') as f:  # 以读模式打开文件
            data = f.read()  # 读取文件内容

        cut_data = " ".join([w for w in list(jb.cut(data))])  # 对读取的文件内容进行分词处理
        cut_file =os.path.join(cur_dir, f"data/cut/cut_{file}")
        with open(cut_file, 'w',encoding='utf-8') as f:  # 以写模式打开文件
            f.write(cut_data)  # 将处理后的内容写入文件


# 新建一个函数用于加载文档
def load_documents(directory):
    # 创建DirectoryLoader对象,用于加载指定文件夹内的所有.txt文件
    loader = DirectoryLoader(directory, glob='**/*.txt')
    docs = loader.load()  # 加载文件
    return docs  # 返回加载的文档


# 新建一个函数用于分割文档
def split_documents(docs):
    # 创建TokenTextSplitter对象,用于分割文档
    text_splitter = TokenTextSplitter(chunk_size=1000, chunk_overlap=0)
    docs_texts = text_splitter.split_documents(docs)  # 分割加载的文本
    return docs_texts  # 返回分割后的文本


# 新建一个函数用于创建词嵌入
def create_embeddings(api_key):
    # 创建OpenAIEmbeddings对象,用于获取OpenAI的词向量
    embeddings = OpenAIEmbeddings(openai_api_key=api_key)
    return embeddings  # 返回创建的词嵌入


# 新建一个函数用于创建向量数据库
def create_chroma(docs_texts, embeddings, persist_directory):
    new_client = chromadb.EphemeralClient()
    vectordb = Chroma.from_documents(
        docs_texts, embeddings, client=new_client, collection_name="openai_collection"
    )
    return vectordb  # 返回创建的向量数据库


# load函数,调用上面定义的具有各个职责的函数 pip install unstructured
def load():
    docs = load_documents('data/cut')  # 调用load_documents函数加载文档
    docs_texts = split_documents(docs)  # 调用split_documents函数分割文档
    api_key = os.environ.get('OPENAI_API_KEY')  # 从环境变量中获取OpenAI的API密钥
    embeddings = create_embeddings(api_key)  # 调用create_embeddings函数创建词嵌入

    # 调用create_chroma函数创建向量数据库
    vectordb = create_chroma(docs_texts, embeddings, 'data/cut/')

    # 创建ChatOpenAI对象,用于进行聊天对话
    openai_ojb = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo")

    # 从模型和向量检索器创建ConversationalRetrievalChain对象
    chain = ConversationalRetrievalChain.from_llm(openai_ojb, vectordb.as_retriever())
    return chain  # 返回该对象


init()
# 调用load函数,获取ConversationalRetrievalChain对象
# pip install chromadb
# pip install unstructured
# pip install jieba
chain = load()


# 定义一个函数,根据输入的问题获取答案
def get_ans(question):
    chat_history = []  # 初始化聊天历史为空列表
    result = chain({  # 调用chain对象获取聊天结果
        'chat_history': chat_history,  # 传入聊天历史
        'question': question,  # 传入问题
    })
    return result['answer']  # 返回获取的答案


if __name__ == '__main__':  # 如果此脚本作为主程序运行
    s = input('please input:')  # 获取用户输入
    while s != 'exit':  # 如果用户输入的不是'exit'
        ans = get_ans(s)  # 调用get_ans函数获取答案
        print(ans)  # 打印答案
        s = input('please input:')  # 获取用户输入
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106

文件存放地址

在这里插入图片描述

在这里插入图片描述

参考:

https://python.langchain.com/docs/use_cases/chatbots

https://python.langchain.com/docs/integrations/vectorstores/chroma

https://blog.csdn.net/v_JULY_v/article/details/131552592?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169450205816800226590967%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=169450205816800226590967&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-131552592-null-null.142v93chatsearchT3_2&utm_term=langchain&spm=1018.2226.3001.4449

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/624846
推荐阅读
相关标签
  

闽ICP备14008679号