前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LangChain学习:加载文档进行问答

LangChain学习:加载文档进行问答

作者头像
Michael阿明
发布2023-07-21 21:39:06
4680
发布2023-07-21 21:39:06
举报

文章目录

learn from https://learn.deeplearning.ai/langchain

1. 加载文档

代码语言:javascript
复制
import os
import pandas as pd
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # read local .env file

from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
from langchain.document_loaders import CSVLoader
from langchain.vectorstores import DocArrayInMemorySearch
from IPython.display import display, Markdown
from langchain.indexes import VectorstoreIndexCreator

自己编的文档

代码语言:javascript
复制
names = ["Alice", "Bob", "Charlie", "David", "Eva", "Frank"]
descriptions = [
    "是一位优秀的科学家,专注于研究人工智能。",
    "是一位出色的艺术家,擅长绘画和雕塑。",
    "是一位杰出的企业家,创办了多家成功的公司。",
    "是一位卓越的音乐家,精通多种乐器。",
    "是一位卓越的运动员,多次获得世界冠军。",
    "是一位杰出的作家,创作了多部畅销书籍。"
]
file = "people.csv"
df = pd.DataFrame({"name": names, "description": descriptions})
df.to_csv(file, index=False)
在这里插入图片描述
在这里插入图片描述

2. index、query

代码语言:javascript
复制
loader = CSVLoader(file_path=file)
index = VectorstoreIndexCreator(vectorstore_cls=DocArrayInMemorySearch).from_loaders([loader])

query = '谁喜欢计算机,为什么呢'
response = index.query(query)
print(response)

输出:Alice喜欢计算机,因为她是一位优秀的科学家,专注于研究人工智能。

  • 查看loader后的文档
代码语言:javascript
复制
docs = loader.load()
docs[0]

输出

代码语言:javascript
复制
Document(page_content='name: Alice\ndescription: 是一位优秀的科学家,专注于研究人工智能。', 
metadata={'source': 'people.csv', 'row': 0})

3. embeddings

代码语言:javascript
复制
from langchain.embeddings import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()

embed = embeddings.embed_query("我喜欢研究算法")
代码语言:javascript
复制
print(len(embed))   # 1536
print(embed[:5])
# [-0.0059773544780910015, -0.0027380685787647963, 0.004629486706107855, -0.05253298953175545, -0.016336973756551743]

是 768*2 = 1536 维的编码

4. 相似文档查找

代码语言:javascript
复制
db = DocArrayInMemorySearch.from_documents(
    docs, 
    embeddings
)
docs = db.similarity_search("我喜欢弹琴")
代码语言:javascript
复制
print(docs[0])

输出:

代码语言:javascript
复制
Document(page_content='name: David\ndescription: 是一位卓越的音乐家,精通多种乐器。', 
metadata={'source': 'people.csv', 'row': 3})
代码语言:javascript
复制
retriever = db.as_retriever()
llm = ChatOpenAI(temperature = 0.0)
qdocs = "".join([docs[i].page_content for i in range(len(docs))])

qdocs:'name: David\ndescription: 是一位卓越的音乐家,精通多种乐器。name: Bob\ndescription: 是一位出色的艺术家,擅长绘画和雕塑。name: Alice\ndescription: 是一位优秀的科学家,专注于研究人工智能。name: Eva\ndescription: 是一位卓越的运动员,多次获得世界冠军。'

代码语言:javascript
复制
response = llm.call_as_llm(f"{qdocs} 问题:请列出跟科学艺术相关的人") 

输出:Bob和Alice是与科学艺术相关的人。Bob是一位出色的艺术家,擅长绘画和雕塑,而Alice是一位优秀的科学家,专注于研究人工智能。

代码语言:javascript
复制
qa_stuff = RetrievalQA.from_chain_type(
    llm=llm, 
    chain_type="stuff", 
    retriever=retriever, 
    verbose=True
)
query =  "喜欢弹琴的是谁,为什么?"
response = qa_stuff.run(query)

输出:'喜欢弹琴的是David,因为他是一位卓越的音乐家,精通多种乐器。'

代码语言:javascript
复制
index = VectorstoreIndexCreator(
    vectorstore_cls=DocArrayInMemorySearch,
    embedding=embeddings,
).from_loaders([loader])
query =  "喜欢写博客的是谁,为什么?"
response = index.query(query, llm=llm)

输出:'喜欢写博客的人是Frank,因为他是一位杰出的作家,创作了多部畅销书籍。写博客可以让他与读者分享自己的想法和经验,同时也可以扩大他的影响力和读者群体。'

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. 加载文档
  • 2. index、query
  • 3. embeddings
  • 4. 相似文档查找
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com