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)

posted @ 2025-03-18 10:21  Michael_Z  阅读(138)  评论(0)    收藏  举报