一、前言

理论铺垫完成,正式进入LangChain框架学习。LangChain作为大应用开发主流框架,封装了模型、向量、链路等大量组件。本讲从最基础功能入手,演示原生大模型、对话模型调用方式,同时讲解流式输出实现打字机效果,并上手嵌入模型Embedding,理解文本如何转变为向量,这是后续向量检索必不可少的基础能力。

二、LangChain框架定位

LangChain本身不是大语言模型,而是一套开发工具库。

核心能力一览:统一对接各类大模型、标准化提示词管理、文档加载与分割、向量数据库适配、链路编排、对话记忆、智能Agent开发。

三、LangChain调用大语言模型

LLM(大语言模型):是技术范畴的统称,指基于大参数量、海量文本训练的Transformer架构模型,核心能力是理解和生成自然语言,主要服务于文本生成场景,输入纯文本,输出纯文本。

⭐阿里云大语言模型的访问(以通义千问为例)

from langchain_community.llms.tongyi import Tongyi
# 实例化模型
llm = Tongyi(model='qwen-max')
# 模型推理
res = llm.invoke("简单介绍LangChain框架)
print(res)

⭐Ollama本地大语言模型的访问

如果要访问本地Ollama的模型,简单更改一下代码。

通过langchain_ollama包导入OllamaLLM类即可(请确保Ollama已经启动并提前下载好要使用的模型)。

from langchain_ollama import OllamaLLM

model = OllamaLLM(model="qwen3:4b")

# 通过invoke方法去调用模型
res = model.invoke(input="简单介绍LangChain框架)

print(res)

四、LangChain调用聊天模型(ChatModel)

日常开发、问答场景优先使用ChatModel,针对对话场景优化。返回结果需要读取.content获取文本。

聊天消息包含下面几种类型,使用时需要按照约定传入合适的值:

-AIMessage:就是AI输出的消息,可以是针对问题的回答(OpenAI库中的assistant角色)

-HumanMessage:人类消息就是用户消息,由人给出的信息发送给LLM的提示信息,比如“实现一个快速排序方法”(OpenAI库中的user角色)

-SystemMessage:可以用于指定模型具体所处的环境和背景,如角色扮演等。你可以在这里给出具体的指示,比如“作为一个代码专家”,或者“返回json格式”(OpenAI库中的system角色)

演示单独使用HumanMessage

from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.messages import HumanMessage

# 初始化模型
chat = ChatTongyi(model="qwen3-max")

# 准备消息list
messages = [
    HumanMessage(content="给我写一首唐诗")
]

# 流式输出
for chunk in chat.stream(input=messages):
    print(chunk.content, end="", flush=True)

演示SystemMessage+HumanMessage

from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.messages import HumanMessage

# 初始化模型
chat = ChatTongyi(model="qwen3-max")

# 准备消息list
messages = [
    SystemMessage(content="你是一名边塞诗人"),
    HumanMessage(content="给我写一首唐诗")
]

# 流式输出
for chunk in chat.stream(input=messages):
    print(chunk.content, end="", flush=True)

演示SystemMessage+HumanMessage+AIMessage

from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.messages import HumanMessage

# 初始化模型
chat = ChatTongyi(model="qwen3-max")

# 准备消息list
messages = [
    SystemMessage(content="你是一名边塞诗人"),
    HumanMessage(content="给我写一首唐诗"),
    AIMessage(content="锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦。"),
    HumanMessage(content="给予你上一首的格式,再来一首")
]

# 流式输出
for chunk in chat.stream(input=messages):
    print(chunk.content, end="", flush=True)

五、LangChain模型的流式输出

模型对象有2个方法去调用模型,如果需要流式输出结果,需要将模型的invoke方法改为stream方法即可。

-invoke,调用模型,一次性返回完整结果

-stream,调用模型,逐段流式输出

# langchain_community
from langchain_community.llms.tongyi import Tongyi

# 不用qwen3-max,因为qwen3-max是聊天模型,qwen-max是大语言模型
model = Tongyi(model="qwen-max")

# 调用stream向模型提问
res = model.stream(input="你是谁能做什么?")

for chunk in res:
    print(chunk, end="", flush=True)

六、LangChain调用嵌入模型(Embedding)

Embedding Models嵌入模型的特点:将字符串作为输入,返回一个浮点数的列表(向量)。

在NPL中,Embedding的作用就是将数据进行文本向量化。

阿里云千问模型访问方式:

from langchain_community.embeddings import DashScopeEmbeddings

# 初始化嵌入模型对象,其默认使用模型是:text-embedding-v1
embed = DashScopeEmbeddings()

# 测试
print(embed.embed_query("我喜欢你"))
print(embed.embed_documents(['我喜欢你', '晚上吃啥', '你睡了吗']))

本地Ollama模型访问方式:

通过langchain_ollama导入OllamaEmbeddings使用,其余不变。

from langchain_ollama import OllamaEmbeddings

# 初始化嵌入模型对象,其默认使用模型是:text-embedding-v1
embed = OllamaEmbeddings(model="qwen3-embedding")

# 测试
print(embed.embed_query("我喜欢你"))
print(embed.embed_documents(['我喜欢你', '晚上吃啥', '你睡了吗']))

目前所掌握的LangChain API如下:

方式 大语言模型 聊天模型 文本嵌入模型
阿里云千问

from

langchain_community.llms.tongyi

import Tongyi

from

langchain_community.chat_models.tongyi

import ChatTongyi

from

langchain_community.embeddings

import DashScopeEmbeddings

Ollama本地模型

from langchain_ollama

import OllamaLLM

from langchain_ollama

import ChatOllama

from langchain_ollama

import OllamaEmbeddings

方法 invoke批量/stream流式 invoke批量/stream流式

embed_query单次转换/

embed_documents批量转换

七、LangChain消息的简写模式

messages = [
    SystemMessage(content="内容"),
    HumanMessage(content="内容"),
    AIMessage(content="内容"),
]

是静态的,一步到位直接得到Message类对象

messages = [
    ("system", "内容"),
    ("human", "内容"),
    ("ai", "内容"),
]

简写模式如上,是动态的,需要在运行时由LangChain内部机制转换为Message类对象

由于是动态,需要转换步骤,所以简写形式支持内部填充{变量}占位,可在运行时填充具体值。

八、结语

本讲正式进入LangChain实操,掌握了大模型、对话模型、流式输出、Embedding嵌入模型四大基础能力。理解了文本→向量的转换过程,熟悉框架最核心的调用范式。所有RAG项目的底层调用逻辑,都在本讲完成铺垫。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐