LangChain RAG 检索增强生成

本文最后更新于 2026年8月6日

未完待续

RAG原理已经在Spring AI使用知识库增强对话功能LangChain4j RAG检索增强生成等地方说过,在langchain中,同样支持RAG进行大模型应用开发。

1.嵌入模型

以Qwen的嵌入模型为例,因为langchain官方没有主动兼容Qwen,因此需要从langchain-community引入Qwen的嵌入模型对象DashScopeEmbeddings

langchain-community即将在未来停止维护,langchain官方建议迁移到:https://docs.langchain.com/oss/python/integrations/embeddings

pip install langchain-community
pip install dashscope

然后就可以使用Qwen嵌入模型qwen3.7-text-embedding将文本转换为向量

import os

from dotenv import load_dotenv
from langchain_community.embeddings import DashScopeEmbeddings

load_dotenv(encoding='utf-8')

QWEN_KEY = os.getenv('QWEN_KEY')

embeddings = DashScopeEmbeddings(
    model="qwen3.7-text-embedding",
    dashscope_api_key=QWEN_KEY
)


text = "This is a test document."

query_result = embeddings.embed_query(text)
print(len(query_result))
print( query_result[:10] )

doc_results = embeddings.embed_documents([
        "Hi there!",
        "Oh, hello!",
        "What's your name?",
        "My friends call me World",
        "Hello World!"
    ])

print("文本向量数量:", len(doc_results), ",文本向量长度:", len(doc_results[0]), sep='')
1024
[0.021845249459147453, 0.015001866035163403, 0.02622891217470169, -0.04522478207945824, -0.023976197466254234, 3.26301233144477e-05, 0.0807080939412117, -0.025961020961403847, 0.016852745786309242, 0.00046804724843241274]
文本向量数量:5,文本向量长度:1024

2.向量数据库

以redis-stack/milvus为例

2.1 redis-stack

2.2 milvus

使用前需建好db和collection,新建文本,向量和元数据字段(metadata)

import os

from dotenv import load_dotenv
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.vectorstores.milvus import Milvus
from langchain_core.documents import Document

load_dotenv(encoding='utf-8')

QWEN_KEY = os.getenv('QWEN_KEY')

embeddings = DashScopeEmbeddings(
    model="qwen3.7-text-embedding",
    dashscope_api_key=QWEN_KEY,

)

documents = [
    Document(
        page_content="捕捉文档的来源、与其他文档的关系以及其他信息。一个人Document通常代表较大文档的一部分",
        metadata={"source": "1.doc"},
    ),
    Document(
        page_content="本文主要介绍如何将阿里云百炼提供的模型集成到大模型应用开发框架LangChain中",
        metadata={"source": "2.pdf"},
    ),
]

MILVUS_HOST = os.getenv('MILVUS_HOST')
MILVUS_PORT = os.getenv('MILVUS_PORT')
MILVUS_KEY = os.getenv('MILVUS_KEY')

# 连接已有的集合,直接写入数据
vector_store = Milvus(
    embedding_function=embeddings,
    collection_name='test_01',
    connection_args={
        "host": MILVUS_HOST,
        "port": MILVUS_PORT,
        "user": "root",
        "password": MILVUS_KEY,
        "db_name": 'rag_demo',
    },
    auto_id=True,  # 集合主键是自增的,插入时无需提供 id
    text_field="text",  # 集合里存文本的字段
    vector_field="vector",  # 集合里的向量字段
    metadata_field='metadata',  # 集合没有元数据字段,传 None(metadata 会被丢弃)
)

vector_store.add_documents(documents)

3.检索

4.文档分割


"如果文章对您有帮助,可以请作者喝杯咖啡吗?"

微信二维码

微信支付

支付宝二维码

支付宝


LangChain RAG 检索增强生成
https://blog.liuzijian.com/post/2026/01/24/langchain-rag/
作者
Liu Zijian
发布于
2026年1月24日
更新于
2026年8月6日
许可协议