LangChain介绍
LangChain介绍
LangChain是一个基于大语言模型用于构建端到端语言模型应用的框架,它提供了一系列工具、套件和接口,让开发者使用语言模型来实现各种复杂的任务,如文本到图像的生成、文档问答、聊天机器人等。
官网地址:https://python.langchain.com/docs/introduction/
中文地址:https://www.langchain.com.cn/docs/introduction/
from dotenv import load_dotenv
load_dotenv()
from langchain_openai import ChatOpenAI
openai_api_key = '你的API Key'
openai_api_base = 'https://api.siliconflow.cn/v1'
llm= ChatOpenAI(
model="Qwen/Qwen2.5-14B-Instruct",
openai_api_key=openai_api_key,
openai_api_base=openai_api_base
)
response=llm.invoke("你好啊")
print(response)
print(response.content)
Propmt
from dotenv import load_dotenv
load_dotenv()
from langchain_openai import ChatOpenAI
openai_api_key = "你的API Key"
openai_api_base = "https://api.siliconflow.cn/v1"
llm = ChatOpenAI(
model="Qwen/Qwen2.5-14B-Instruct",
openai_api_key=openai_api_key,
openai_api_base=openai_api_base,
)
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser, JsonOutputParser
prompt = ChatPromptTemplate.from_messages(
[
("system", "您是世界级的技术文档编写者"),
("user", "请帮我写一篇关于{topic}的文档"),
]
)
output_parsers = JsonOutputParser()
chain = prompt | llm
response = chain.invoke({"topic": "大模型中的LangChain是什么?"})
print(response)
print(response.content)
向量存储
使用一个简单的本地向量存储FAISS,首先需要安装它
from langchain_community.document_loaders import WebBaseLoader
from dotenv import load_dotenv
import os
os.environ['OPENAI_API_KEY'] = 'API Key'
load_dotenv()
import base64
from bs4 import SoupStrainer
loader = WebBaseLoader(
web_path="https://www.dov.cn/xinxin/2820-86/01/content_5516649.html",
bs_kwargs=dict(parse_only=SoupStrainer(id="UCAP-CONTENT")),
)
docs = loader.load()
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
# 使用此嵌入模型将文档提取到矢量存储中
from langchain_community.vectorstores import FAISS
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 使用分割器分割文档
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
documents = text_splitter.split_documents(docs)
print(len(documents))
# 向量存储 embeddings会将 documents 中的每个文本片段转换为向量,并将这些向量存储在FAISS中
vector = FAISS.from_documents(documents, embeddings)
实例2
from langchain_community.document_loaders import WebBaseLoader
from dotenv import load_dotenv
import os
os.environ["OPENAI_API_KEY"] = "API Key"
load_dotenv()
import base64
from bs4 import SoupStrainer
loader = WebBaseLoader(
web_path="https://www.dov.cn/xinxin/2820-86/01/content_5516649.html",
bs_kwargs=dict(parse_only=SoupStrainer(id="UCAP-CONTENT")),
)
docs = loader.load()
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
# 使用此嵌入模型将文档提取到矢量存储中
from langchain_community.vectorstores import FAISS
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 使用分割器分割文档
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
documents = text_splitter.split_documents(docs)
print(len(documents))
# 向量存储 embeddings会将 documents 中的每个文本片段转换为向量,并将这些向量存储在FAISS中
vector = FAISS.from_documents(documents, embeddings)
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_template(
"""仅根据提供的上下文回答以下问题:
<context>
{context}
</context>
问题:{input}"""
)
from langchain_openai import ChatOpenAI
llm = ChatOpenAI()
documents_chain = create_stuff_documents_chain(llm, prompt)
from langchain.chains import creat_retrieval_chain
retriever = vector.as_retriever()
retriever.search_kwargs = {"k": 3} # 限制为最多检索3个文档
# 创建检索链 该链结合了检索器和文档组合链,实现了从向量数据库中检索相关文档,并将这些文档与用户问题组合成提示
retriever_chain = creat_retrieval_chain(retriever, documents_chain)
response = retriever_chain.invoke({"input": "建设用地使用权是什么?"})
print(response)

浙公网安备 33010602011771号