构建本地知识库问答机器人

在这个例子中,我们会介绍如何从我们本地读取多个文档构建知识库,并且使用 Openai API 在知识库中进行搜索并给出答案。

这个是个很有用的教程,比如可以很方便的做一个可以介绍公司业务的机器人,或是介绍一个产品的机器人。

  1. from langchain.embeddings.openai import OpenAIEmbeddings
  2. from langchain.vectorstores import Chroma
  3. from langchain.text_splitter import CharacterTextSplitter
  4. from langchain import OpenAI
  5. from langchain.document_loaders import DirectoryLoader
  6. from langchain.chains import RetrievalQA
  7. # 加载文件夹中的所有txt类型的文件
  8. loader = DirectoryLoader('/content/sample_data/data/', glob='**/*.txt')
  9. # 将数据转成 document 对象,每个文件会作为一个 document
  10. documents = loader.load()
  11. # 初始化加载器
  12. text_splitter = CharacterTextSplitter(chunk_size=100, chunk_overlap=0)
  13. # 切割加载的 document
  14. split_docs = text_splitter.split_documents(documents)
  15. # 初始化 openai 的 embeddings 对象
  16. embeddings = OpenAIEmbeddings()
  17. # 将 document 通过 openai 的 embeddings 对象计算 embedding 向量信息并临时存入 Chroma 向量数据库,用于后续匹配查询
  18. docsearch = Chroma.from_documents(split_docs, embeddings)
  19. # 创建问答对象
  20. qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=docsearch.as_retriever(), return_source_documents=True)
  21. # 进行问答
  22. result = qa({"query": "科大讯飞今年第一季度收入是多少?"})
  23. print(result)

image-20230405173730382

我们可以通过结果看到,他成功的从我们的给到的数据中获取了正确的答案。

关于 Openai embeddings 详细资料可以参看这个连接: https://platform.openai.com/docs/guides/embeddings