使用langchain及openai创建本地知识库

该文描述了如何搭建一个基于GPT的本地知识库ChatBot,包括安装必要的Python依赖、设置OpenAIAPI密钥、准备知识文件、构建索引并运行应用。用户可以通过输入文本向知识库提问,获取相关信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.安装依赖

! pip install llama-index==0.5.27 langchain==0.0.142 gradio==3.28.1 openai==0.27.6

2.设置openai api key

import os

# Note. alternatively you can set a temporary env variable like this:
os.environ["OPENAI_API_KEY"] = "sk-xxx"
if os.getenv("OPENAI_API_KEY") is not None:
    print("OPENAI_API_KEY is ready")
else:
    print("OPENAI_API_KEY environment variable not found")

3. 将知识文件放在kb目录下,以.txt或.doc或.pdf文件的形式存在。

4.运行app

from llama_index import SimpleDirectoryReader, LangchainEmbedding, GPTListIndex,GPTSimpleVectorIndex, PromptHelper, LLMPredictor, ServiceContext

from langchain import OpenAI

import gradio as gr

import sys

import os


def construct_index(directory_path):

    max_input_size = 4096

    num_outputs = 2000

    max_chunk_overlap = 20

    chunk_size_limit = 600
    
    prompt_helper = PromptHelper(max_input_size, num_outputs, max_chunk_overlap, chunk_size_limit=chunk_size_limit)

    llm_predictor = LLMPredictor(llm=OpenAI(temperature=0.7, model_name="gpt-3.5-turbo", max_tokens=num_outputs))

    documents = SimpleDirectoryReader(directory_path).load_data()

    service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)

    index = GPTSimpleVectorIndex.from_documents(documents,service_context=service_context)

    index.save_to_disk('index.json')

    return index

def chatbot(input_text):

    index = GPTSimpleVectorIndex.load_from_disk('index.json')

    response = index.query(input_text, response_mode="compact")

    return response.response

iface = gr.Interface(fn=chatbot,

                     inputs=gr.inputs.Textbox(lines=7, label="请输入,您想从知识库中获取什么?"),

                     outputs="text",

                     title="AI 本地知识库ChatBot")

index = construct_index("kb")

iface.launch(share=True, server_port=8500, server_name="0.0.0.0")

5.登录app界面 localhost:8500开始提问吧。

### 使用 LangChain 构建本地知识库 构建本地知识库的过程涉及多个步骤,包括加载数据、分割文本、嵌入向量以及设置问答模型。以下是详细的说明和示例代码。 #### 加载文件并创建文档对象 LangChain 提供了多种工具来处理不同类型的文件(PDF、TXT、CSV 等)。可以通过 `DirectoryLoader` 或其他特定的加载器读取文件内容,并将其转换为适合进一步处理的对象。 ```python from langchain.document_loaders import DirectoryLoader, TextLoader loader = DirectoryLoader('./data', glob="*.txt", loader_cls=TextLoader) docs = loader.load() ``` 此代码片段展示了如何从指定目录中的 `.txt` 文件加载数据[^1]。 #### 文本分块 为了提高效率和减少计算成本,在将整个文档传递给模型之前通常会先对其进行切片操作。这一步骤对于大型文档尤为重要。 ```python from langchain.text_splitter import RecursiveCharacterTextSplitter text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0) texts = text_splitter.split_documents(docs) ``` 上述脚本实现了对已加载文档的拆分功能[^3]。 #### 向量化存储 接下来需要定义一个持久化的向量数据库用于保存这些经过预处理后的文本块及其对应的嵌入表示形式。这里我们选用 ChromaDB 作为例子展示具体实现方式。 ```python from langchain.vectorstores import Chroma from langchain.embeddings.openai import OpenAIEmbeddings embedding_function = OpenAIEmbeddings(openai_api_key='your-api-key') vectordb = Chroma.from_documents(texts, embedding_function, persist_directory="./chroma_db") ``` 这段程序完成了向量化过程并将结果存放在本地磁盘上的某个位置以便后续访问。 #### 初始化检索增强型生成 (RAG) 模型 最后一步就是配置好实际使用的 LLM 并集成到 RAG 流程当中去完成最终的任务需求——即根据输入提问返回最相关的答案摘要连同出处链接一起呈现出来。 ```python from langchain.chains import RetrievalQA from langchain.chat_models import ChatOpenAI llm = ChatOpenAI(model_name="gpt-3.5-turbo", openai_api_key='your-api-key') qa_chain = RetrievalQA.from_chain_type( llm, retriever=vectordb.as_retriever(), ) query = "什么是量子计算机?" result = qa_chain({"query": query}) print(result['answer']) ``` 以上部分演示了怎样借助先前建立起来的知识体系快速找到匹配度最高的几条记录从而形成高质量回复的能力[^2]。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jacky_wxl(微信同号)

喜欢作者

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值