第四章:大模型(LLM)】06.langchain原理-(3)langchain 数据连接方法
第四章:大模型(LLM)
第六部分:langchain原理
第三节:langchain 数据连接方法
在实际的大模型应用中,LangChain 不仅仅是“问答”或“对话”,它的核心价值之一是可以将外部数据源接入大模型,让模型拥有实时、领域化的知识,而不仅依赖预训练参数中已有的信息。
这一节我们将深入讲解 LangChain 如何与不同类型的数据进行连接,包括:
文本文件(TXT、Markdown 等)
表格(CSV、Excel)
数据库(SQL、NoSQL)
API 接口
网络爬取数据(Web scraping)
1. 数据连接的整体思路
LangChain 的数据连接流程一般分为四个阶段:
数据加载(Loaders)
使用
DocumentLoader
从本地文件、数据库、网络等读取数据。常见的有
TextLoader
、CSVLoader
、UnstructuredFileLoader
、WebBaseLoader
、SQLDatabaseLoader
等。
数据切分(Text Splitters)
将长文档拆成适合模型处理的小段。
常用
CharacterTextSplitter
、RecursiveCharacterTextSplitter
。
向量化(Embeddings)
使用向量模型(如 OpenAI Embeddings、HuggingFace Embeddings)将文本转化为向量表示。
存储与检索(VectorStore / Retriever)
将向量存入数据库(如 FAISS、Pinecone、Milvus)。
检索时根据用户问题找出相似度最高的文本片段,传给 LLM 进行回答。
2. 常用数据连接方法
(1)加载本地文本文件
from langchain.document_loaders import TextLoaderloader = TextLoader("data/my_notes.txt", encoding="utf-8")
documents = loader.load()print(documents[0].page_content[:200]) # 预览前200字符
(2)加载 CSV 表格
from langchain.document_loaders import CSVLoaderloader = CSVLoader(file_path="data/dataset.csv")
documents = loader.load()
(3)连接 SQL 数据库
from langchain.document_loaders import SQLDatabaseLoader
from langchain.sql_database import SQLDatabasedb = SQLDatabase.from_uri("sqlite:///data/my_database.db")
loader = SQLDatabaseLoader(db, "SELECT * FROM users;")
documents = loader.load()
(4)从网页加载数据
from langchain.document_loaders import WebBaseLoaderloader = WebBaseLoader("https://example.com/article")
documents = loader.load()
(5)通过 API 获取数据
import requests
from langchain.docstore.document import Documentresponse = requests.get("https://api.example.com/data")
data = response.json()documents = [Document(page_content=str(data))]
3. 数据切分与向量化
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS# 切分
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
docs = splitter.split_documents(documents)# 向量化
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(docs, embeddings)# 检索
query = "请解释LangChain的核心组件"
results = vectorstore.similarity_search(query, k=3)
for r in results:print(r.page_content)
4. 数据连接的应用场景
企业内部文档问答:连接公司内部知识库(PDF、Word、Wiki)。
实时信息获取:结合 API,如股票、天气、新闻。
数据库自然语言查询:用自然语言直接问数据库。
学术资料检索:连接论文数据库(Arxiv、Semantic Scholar)。
5. 注意事项
数据格式要尽量统一(UTF-8 编码,去掉冗余 HTML 标签)。
对私有数据要注意安全(API Key、数据库密码不要硬编码)。
长文本必须切分,否则会超出 LLM Token 限制。
数据连接流程图
flowchart LRA[数据源] -->|文档加载器 Loaders| B[文档数据 Documents]B -->|切分 Text Splitters| C[小段文本]C -->|向量化 Embeddings| D[向量 Vector]D -->|存储 VectorStore| E[向量数据库]E -->|相似度检索 Retriever| F[相关文本]F -->|传递给 LLM| G[生成回答]