本章主要以代码的形式展示
#加载文档#
#langchain_community一般存放的是社区组件,有很多的多样化功能
from langchain_community.document_loaders import WebBaseLoader
loader = WebBaseLoader("https://docs.smith.langchain.com/user_guide")
docs = loader.load()
#加载文档##
#加载embedding模型
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(
api_key = "sk_",#来自于GPT_API_free的Github仓库
base_url = "https://api.chatanywhere.tech/v1"
)
#加载embedding模型##
#分割文档并进行embedding#
from langchain_community.vectorstores import FAISS
from langchain_text_splitters import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter()
documents = text_splitter.split_documents(docs)
vector = FAISS.from_documents(documents, embeddings)
#分割文档并进行embedding##
#设置根据上下文回答问题的模板#
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
api_key = "sk_",
base_url = "https://api.chatanywhere.tech/v1"
)
prompt = ChatPromptTemplate.from_template("""Answer the following question based only on the provided context:
<context>
{context}
</context>
Question: {input}""")
#设置根据上下文回答问题的模板##
#构建检索链#
document_chain = create_stuff_documents_chain(llm, prompt)
#构建检索链##
#通过上下文进行回答#
from langchain_core.documents import Document
document_chain.invoke({
"input": "how can langsmith help with testing?",
"context": [Document(page_content="langsmith can let you visualize test results")]
})
结果是:Langsmith can help visualize test results.但是通过指定内容进行回答失去了检索的本质。
#上面构建了stuff_documents_chain
#再将前面构建的向量库作为检索器
#检索器 | document_chain构建形成一个retrieval的模式进行检索。
#需要注意的是,要先构建document_chain形成一个<context>的标签,retrieval_chain会自动将document添加进去。
from langchain.chains import create_retrieval_chain
retriever = vector.as_retriever()
retrieval_chain = create_retrieval_chain(retriever, document_chain)
response = retrieval_chain.invoke({"input": "how can langsmith help with testing?"})
print(response["answer"])
# LangSmith offers several features that can help with testing:...