《LangChain全解析:从新手到高手的模型接口实践指南》

作品声明:个人观点、仅供参考模型介绍

说白了,AI应用的灵魂在于它所依赖的语言模型。LangChain作为一个“工具”,其实并不直接提供任何大型语言模型,而是通过接入各种第三方的大模型来实现功能。例如,它能够把OpenAI、Anthropic、Hugging Face、LlaMA、阿里Qwen、ChatGLM等平台的模型顺畅地融合到你的应用中。

模型的分类

在LangChain里,大语言模型主要可以分为几种类型,我们通常用到的就是聊天模型:

模型类型

输入形式

输出形式

主要特点

典型适用场景

LLM(大型语言模型)

纯文本字符串

文本字符串

  1. 基础的文本生成模型
  2. 没有上下文记忆
  3. 快速且轻量
  1. 单轮问答
  2. 生成摘要
  3. 文本改写或扩展
  4. 执行指令(Instruct模型)

ChatModel(聊天模型)

消息列表(List[BaseMessage]),包括HumanMessage、SystemMessage、AIMessage等

聊天消息对象(AIMessage)

  1. 适用于对话场景
  2. 支持多轮上下文
  3. 更接近人类的对话逻辑
  1. 智能助手
  2. 客服机器人
  3. 多轮推理任务
  4. LangChain Agent工具调用

Embeddings(文本向量模型)

文本字符串或列表(str或List[str])

向量(List[float]或ndarray)

  1. 将文本转成语义向量
  2. 可用于相似度搜索
  3. 通常不生成文本
  1. 文本检索增强(RAG)
  2. 知识库问答
  3. 聚类/分类/推荐系统

模型继承关系

在LangChain的类结构中,最顶层的基类是BaseLanguageModel,它定义了模型的一般接口。这个类可以分为两个分支:BaseChatModel和BaseLLM。

《LangChain全解析:从新手到高手的模型接口实践指南》

当你接入聊天模型时,需要继承BaseChatModel,比如常用的ChatOpenAI;而文本生成模型则是继承BaseLLM,例如OpenAI。

聊天模型主要参数

在搭建聊天模型时,有一些标准的参数需要注意:

参数名

参数含义

model

指定使用的大语言模型的名称(例如“gpt-4”、“gpt-3.5-turbo”等)

temperature

温度设置,温度越高,输出内容越随机;温度越低,输出内容越确定

timeout

请求超时时间

max_tokens

生成内容的最大token数量

stop

当模型遇到这些“停止词”时将立即停止生成,通常用于控制输出的边界。

轻松理解LangChain的基础设置和消息组件

首先,咱们来说说一些基本参数,这些参数虽然看起来有点专业,但其实就是你在使用大语言模型时需要了解的东西。比如,max_retries这个参数,它指的是你可以重试请求的最大次数;还有api_key,这是你从模型提供商那里拿到的秘钥,用来验证你的身份;base_url则是你请求API的地址。

不过要注意,这些参数并不是适用于所有大语言模型的。有些参数在特定模型中可能没用,像这些标准化参数主要适用于LangChain官方集成的模型,比如langchain-openai和langchain-anthropic。而在langchain-community包下的第三方模型,基本上就不需要遵循这些规则了。

了解消息组件

当你调用模型之后,它会返回一条AI的消息。在LangChain中,消息其实有好几种类型。所有的消息都包含type、content、response_metadata等属性。

那这些属性到底有什么用呢?

属性名 属性作用
type 这个属性告诉你消息的类型,包括”user”、”ai”、”system”和”tool”等。
content 通常是个字符串,不过在某些情况下,它可能是一个字典列表,这个字典列表是用来处理大模型的多模态输出的。
name 当消息类型相同的时候,这个属性能帮你区分不同的消息,但并不是所有模型都支持这个功能。
response_metadata 只有AI消息才会有的属性,它包含了大语言模型响应中的一些元数据,比如本次请求使用了多少token。
tool_calls 同样是AI消息特有的属性,当大语言模型需要调用工具时,这里就会包含相关信息。你可以通过.tool_calls属性获取一个ToolCall的列表,每个ToolCall都是一个字典,里面包括工具名、参数和唯一标识ID等字段。

开发环境配置
项目创建

推荐使用uv来初始化和管理你的项目,具体的操作步骤可以参考这篇文档:
https://www.cuiliangblog.cn/detail/section/228701279

轻松创建项目与环境变量

# 创建项目
# uv init LangChainDemo                                                                                                                          
项目`langchaindemo`已经在`/opt/PycharmProjects/LangChainDemo`初始化完成。
# 进入项目目录
# cd LangChainDemo 
# 安装Langchain
# uv add langchain                                                                                                      
当前使用的解释器是:CPython 3.12.3,路径在:/usr/bin/python3.12
正在创建虚拟环境:.venv
在43.66秒内解决了32个软件包                                                                                                                                                            
准备了24个软件包,耗时1分钟整
安装了29个软件包,耗时131毫秒                                                                                                                                                            
 + annotated-types==0.7.0                                                                                                                                                                 
 + anyio==4.9.0                                                                                                                                                                           
 + certifi==2025.7.14                                                                                                                                                                     
 + charset-normalizer==3.4.2                                                                                                                                                              
 + greenlet==3.2.3                                                                                                                                                                        
 + h11==0.16.0                                                                                                                                                                            
 + httpcore==1.0.9                                                                                                                                                                        
 + httpx==0.28.1                                                                                                                                                                          
 + idna==3.10                                                                                                                                                                             
 + jsonpatch==1.33                                                                                                                                                                        
 + jsonpointer==3.0.0                                                                                                                                                                     
 + langchain==0.3.26                                                                                                                                                                      
 + langchain-core==0.3.69                                                                                                                                                                 
 + langchain-text-splitters==0.3.8                                                                                                                                                        
 + langsmith==0.4.8                                                                                                                                                                       
 + orjson==3.11.0                                                                                                                                                                         
 + packaging==25.0                                                                                                                                                                        
 + pydantic==2.11.7                                                                                                                                                                       
 + pydantic-core==2.33.2
 + pyyaml==6.0.2
 + requests==2.32.4
 + requests-toolbelt==1.0.0
 + sniffio==1.3.1
 + sqlalchemy==2.0.41
 + tenacity==9.1.2
 + typing-extensions==4.14.1
 + typing-inspection==0.4.1
 + urllib3==2.5.0
 + zstandard==0.23.0

设置密钥环境变量

# touch .env

.env 文件的内容如下:

轻松接入大模型,打造你的AI应用

嘿,今天我们要聊聊如何通过 Python 来读取环境变量,特别是使用 python-dotenv 这个库。首先,你需要在你的项目中创建一个 .env 文件,里面放上你的 API 密钥,像这样:

DEEPSEEK_API_KEY=XXXX
QWEN_API_KEY=XXXX
OPENAI_API_KEY=XXX

接下来,使用下面的代码来加载这些环境变量到你的程序中:

import os
from dotenv import load_dotenv 
load_dotenv(override=True)

deepseek_api_key = os.getenv("DEEPSEEK_API_KEY")
# print(deepseek_api_key)  # 如果想看看,可以打印出来

接入 Ollama 模型

你可以参考这份文档了解更多:
Ollama 参考文档

from langchain_ollama import ChatOllama

# 设置本地模型,这里不使用深度思考
model = ChatOllama(base_url="http://localhost:11434", model="qwen3:14b", reasoning=False)

# 打印结果
print(model.invoke("什么是LangChain?"))

执行后,你会得到如下输出:

content='**LangChain** 是一个用于构建**基于大型语言模型(LLMs)的应用程序**的开源框架。它提供了一系列工具、模块和接口,使得开发者可以更加方便地将大型语言模型集成到各种应用场景中,例如聊天机器人、自动化流程、数据分析、内容生成等。nn---nn##  LangChain 的主要功能nnLangChain 的核心目标是**让构建基于 LLM 的应用变得简单、可扩展、可组合**。它提供以下关键功能:nn### 1. **LLM 集成**n- 支持多种大型语言模型(如 OpenAI、Anthropic、Google Gemini、Hugging Face、本地 LLM 等)。n- 提供统一的接口,方便切换不同的模型。nn### 2. **数据处理**n- 提供工具用于从数据库、API、文档等来源加载和处理数据。n- 支持文档的加载、分割、向量化等操作。nn### 3. **记忆(Memory)**n- 提供**短期记忆**(如聊天历史)和**长期记忆**(如数据库、向量存储)的支持。n- 支持多种记忆方式,如 `ChatMessageHistory`、`ConversationBufferMemory` 等。nn### 4. **代理(Agent)**n- 提供**智能代理(Agent)**,可以执行任务、搜索信息、调用工具等。n- 支持多种代理类型(如 `LLMChain`、`AgentExecutor` 等)。nn### 5. **链(Chain)**n- 提供**链(Chain)**概念,将多个操作(如模型调用、数据处理、工具调用)串联起来。n- 支持 `LLMChain`、`SimpleSequentialChain`、`SequentialChain` 等。nn### 6. **工具(Tools)**n- 提供多种工具(如搜索工具、数据库查询工具、计算器等),可以被代理或链调用。n- 支持自定义工具的开发与集成。nn### 7. **向量存储(Vector Store)**n- 支持与向量数据库(如 FAISS、Pinecone、Weaviate、Chroma)集成。n- 用于实现**向量搜索**、**语义检索**等功能。nn---nn## ️ LangChain 的典型应用场景nn- **聊天机器人**(Chatbot):构建具有上下文理解能力的对话系统。n- **自动化助手**(AI Agent):执行任务、搜索信息、调用工具。n- **内容生成**:自动生成文章、邮件、代码、文档等。n- **数据分析**:结合 LLM 与数据处理工具进行智能数据分析。n- **知识库检索**:基于向量存储构建智能问答系统。nn---nn##  安装 LangChainnn你可以通过 pip 安装 LangChain:nn```bashnpip install langchainn```nn---nn##  学习资源nn- 官方文档:https://docs.langchain.comn- GitHub 仓库:https://github.com/langchain-ai/langchainn- 示例代码:https://github.com/langchain-ai/langchain/tree/main/docs/srcnn---nn##  总结nn**LangChain** 是一个强大且灵活的框架,它让开发者可以更轻松地构建基于大型语言模型的应用。它不仅提供丰富的工具和模块,还支持高度的可扩展性和可组合性,是 AI 应用开发中的一个重要工具。nn如果你正在开发基于 LLM 的应用,LangChain 是一个非常值得使用的框架。' additional_kwargs={} response_metadata={'model': 'qwen3:14b', 'created_at': '2025-10-15T14:19:06.950494871Z', 'done': True, 'done_reason': 'stop', 'total_duration': 18186536365, 'load_duration': 14705460, 'prompt_eval_count': 20, 'prompt_eval_duration': 6723067, 'eval_count': 757, 'eval_duration': 18164078512, 'model_name': 'qwen3:14b'} id='run--b8bbd603-3d74-48fe-9460-c6bbed5fe9bb-0' usage_metadata={'input_tokens': 20, 'output_tokens': 757, 'total_tokens': 777}

接入 deepseek 模型

想要了解更多,请参考这份文档:
DeepSeek 参考文档

如果你还没申请,可以去这里看看:
申请地址

支持的模型包括:

  • deepseek-chat:通用对话模型
  • deepseek-coder:专注于代码理解与生成
  • deepseek-llm:较大的通用模型(例如 DeepSeek-VL)
  • deepseek-moe:混合专家模型
import os
from dotenv import load_dotenv
from langchain_deepseek import ChatDeepSeek
load_dotenv(override=True)
deepseek_api_key = os.getenv("DEEPSEEK_API_KEY")

# 初始化 deepseek
model = ChatDeepSeek(
    model="deepseek-chat",
    temperature=0,
    max_tokens=None,
    timeout=None,
    max_retries=2,
    api_key=deepseek_api_key,
)

# 打印结果
print(model.invoke("什么是LangChain?"))

接入通义千问

想了解更多信息,可以参考这份文档:
通义千问参考文档

申请地址在这里:
申请地址

如何接入 OpenAI

想了解更多信息,可以查看这份文档:
https://python.langchain.com/docs/integrations/chat/

申请API密钥的地址:
https://platform.openai.com/account/api-keys

不过,由于国内网络的原因,直接调用可能会有困难,可以借助一些第三方平台,比如 https://closeapi.net/。

import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
load_dotenv(override=True)
openai_api_key = os.getenv("OPENAI_API_KEY")

llm = ChatOpenAI(
    api_key=openai_api_key,
    model="gpt-4",  # 或者选择 gpt-3.5-turbo
    temperature=0.3,  # 这个可以根据需求调整
)

# 打印结果
print(llm.invoke("什么是LangChain?"))

如何调用模型对话模型消息类型

在聊天模型中,除了可以输入简单的字符串外,还能用聊天消息来进行交互,输出的也是聊天消息。LangChain 提供了几种内置消息类型:

  • HumanMessage:用户消息,type为”user”,表示来自用户的输入,比如说“实现一个快速排序的方法”。
  • AIMessage:AI消息,type为”ai”,可以是文本内容,也可以是工具调用的请求。
  • SystemMessage:系统消息,type为”system”,用于告知模型当前的背景和任务,并不是所有的模型提供商都支持这种消息类型。
  • ToolMessage/FunctionMessage:工具消息,type为”tool”,用于描述函数调用的结果。
  • ChatMessage:一种通用的消息类型,可以自定义角色。

以下是相关代码示例

from langchain_core.messages import SystemMessage, HumanMessage
from langchain_ollama import ChatOllama

# 设置本地模型,不使用深度思考
model = ChatOllama(base_url="http://localhost:11434", model="qwen3:14b", reasoning=False)
# 构建消息列表
messages = [SystemMessage(content="你叫小亮,是一个乐于助人的人工助手"),
            HumanMessage(content="你是谁")
            ]
# 调用大模型
response = model.invoke(messages)
# 打印结果
print(response.content)
print(type(response))

执行结果如下

我是小亮,一个乐于助人的人工助手。我在这里是为了帮助你解决问题、提供建议和支持。无论是生活上的小烦恼,还是工作上的难题,我都会尽力帮你。有什么需要帮忙的吗?

其中 SystemMessage 是系统提示词,如果想了解更多关于提示词的信息,可以查看:
https://www.cuiliangblog.cn/detail/section/228046450

流式输出

在 Langchain 中,语言模型的输出有两种主要模式:流式输出和非流式输出。

非流式输出:这是与 LLM 交互时的默认方式,最简单也最稳定。当用户发出请求后,系统会在后台等待模型生成完整的响应,然后一次性返回所有结果。

举个例子,用户提问“请编写一首诗”,系统会在沉默几秒后,突然展示出完整的诗篇。(体验上可能有些单调)

在许多问答、摘要和信息提取的任务中,非流式输出提供的结果结构清晰、逻辑完整,适合快速集成和部署。

流式输出:这是一种更具互动感的输出方式,用户不需要等到完整答案,而是能看到模型实时逐个token返回内容。

举个例子,用户请求“请编写一首诗”,当问题刚发出,系统就开始一个字一个字地进行回复,感觉像是在实时对话,更贴近人类的交流习惯,吸引力更强。适合应用于需要“实时反馈”的场景,例如聊天机器人和写作助手。

要在 Langchain 中启用流式输出,可以设置 stream=True,并配合回调机制。

通过 model.stream 方法可以实现流式调用,代码如下:

from langchain_core.messages import SystemMessage, HumanMessage
from langchain_ollama import ChatOllama

# 设置本地模型,不使用深度思考
model = ChatOllama(base_url="http://localhost:11434", model="qwen3:14b", reasoning=False)
# 构建消息列表
messages = [SystemMessage(content="你叫小亮,是一个乐于助人的人工助手"),
            HumanMessage(content="你是谁")
            ]
# 流式调用大模型
response = model.stream(messages)
# 流式打印结果
for chunk in response:
    print(chunk.content, end="", flush=True)  # 刷新缓冲区,避免换行符造成的延迟
print("n")
print(type(response))

执行结果如下:

我是小亮,一个乐于助人的人工助手。很高兴认识你!我在这里可以帮助你解决问题、提供信息,或者只是陪你聊天。有什么我可以帮你的吗?

批量调用

LangChain 还支持批量调用(Batch Inference),也就是说可以一次性向模型提交多个输入并进行并行处理,这样可以显著提高处理效率。

当你需要让模型处理多条输入时,比如文本摘要批量生成,逐条调用 .invoke() 会导致多次网络请求,速度慢、成本高等问题,而 LangChain 提供的.batch()接口能在内部自动并行执行。

以下是相关代码示例:

轻松批量处理问题的妙招

from langchain_ollama import ChatOllama

# 配置本地模型,这里不启用深度思考
model = ChatOllama(base_url="http://localhost:11434", model="qwen3:14b", reasoning=False)
# 准备一系列问题
questions = [
    "LangChain到底是什么?",
    "Python中的生成器有什么用途?",
    "能说说Docker和Kubernetes之间的关系吗?"
]
# 一次性调用大模型处理问题
response = model.batch(questions)
for q, r in zip(questions, response):
    print(f"问题:{q}n回答:{r}n")

运行结果如下

轻松了解 LangChain 的魅力

LangChain 是一个很酷的框架,专门用来创建基于大型语言模型(LLM)的应用程序。它为开发者提供了一系列工具和模块,帮助大家更高效地开发、集成和部署人工智能应用。

### LangChain 的主要目标是什么?

说白了,LangChain 的核心目标就是让开发者能更轻松地:

  • 构建各种 AI 应用,比如聊天机器人、虚拟助手和自动问答系统等。
  • 灵活地集成不同的 LLM,比如 GPT、LLaMA 或 Claude。
  • 更好地控制和管理 AI 应用的工作流程,包括记忆、提示设计和数据处理等。

### LangChain 的功能模块有哪些?

这个框架提供了多个模块,帮助开发者打造完整的 AI 应用,主要包括:

  1. 提示模板(Prompt Templates):用于构建和管理提示的模板,帮助提示设计变得更系统和可复用。
  2. 大型语言模型(LLM):集成了多种流行的模型,比如 OpenAI、Anthropic、Google 和 Hugging Face。
  3. 记忆(Memory):支持会话记忆和长期记忆,帮助构建具有上下文感知能力的 AI 应用。
  4. 链(Chains):可以把多个 LLM 调用、工具调用和数据处理步骤串联成一个“链式”流程,方便构建复杂的 AI 应用。
  5. 智能代理(Agents):创建具有自主行为的 AI 代理,它们能够执行任务、调用工具和解决问题。
  6. 工具(Tools):提供各种工具接口,比如 API 调用、数据库查询和文件读取,使得 AI 能与外部系统互动。
  7. 数据库(Database):支持与向量数据库(如 Chroma、FAISS、Pinecone)的集成,便于构建基于向量检索的 AI 应用。

### LangChain 的应用场景

你可能会发现它的应用场景非常广泛,比如:

  • 聊天机器人(客服助手、虚拟助手)
  • 内容生成(文章、代码、邮件等)
  • 自动化任务处理(数据分析、信息提取、报告生成)
  • 智能问答系统
  • AI 教学助手、编程助手等

### LangChain 有哪些优势?

它的优势主要体现在:

  • 模块化设计,各个组件可以独立替换,扩展性强。
  • 支持多种 LLM 和工具,兼容多个主流模型和 API。
  • 社区活跃,有大量文档、教程和开源项目支持。
  • 从原型到生产部署都能快速迭代。

### 如何开始使用 LangChain?

你可以通过 Python 安装 LangChain,方法很简单:

pip install langchain

然后,你就可以快速搭建一个简单的 Chain 了:

from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI

template = "将以下内容翻译成法语:{text}"
prompt = PromptTemplate(input_variables=["text"], template=template)

llm = OpenAI(model_name="text-davinci-003", temperature=0)
chain = LLMChain(llm=llm, prompt=prompt)

result = chain.run("Hello, how are you?")
print(result)

### 官方文档和资源

想了解更多信息,可以访问:

  • 官网:https://www.langchain.com/
  • GitHub:https://github.com/hwchong/langchain
  • 文档:https://langchain.readthedocs.io/

如果你对某个特定的场景有疑问或想看简单的示例,随时可以问我哦!

深入了解LangChain,构建智能应用的利器

下面的代码片段演示了如何使用LangChain的本地模型进行简单的请求:

import asyncio
from langchain_ollama import ChatOllama

# 初始化模型,这里不启用深度思考
model = ChatOllama(base_url="http://localhost:11434", model="qwen3:14b", reasoning=False)

async def main():
    # 异步请求一个解释
    response = await model.ainvoke("解释一下LangChain是什么")
    print(response)
    
# 启动异步程序
asyncio.run(main())

运行这段代码后,你会得到如下的输出:

content='LangChain 是一个用于构建基于大型语言模型(LLM)的应用程序的框架,它旨在简化从数据准备、模型集成到最终应用开发的整个流程。LangChain 提供了一系列工具和模块,帮助开发者更高效地利用像 GPT、PaLM、Llama 等大语言模型的能力,构建出具有记忆、推理、交互等功能的智能应用。nn### LangChain 的主要特点包括:nn1. **模块化设计**  n   LangChain 将构建 AI 应用的过程分解为多个模块,如数据加载、模型调用、记忆管理、推理链、提示工程等,使开发者可以灵活地组合这些模块来构建复杂的应用。nn2. **支持多种大模型**  n   LangChain 支持多种主流的大型语言模型,包括 OpenAI、Anthropic、Google、HuggingFace 等平台的模型,同时也支持本地部署的模型(如 Llama、Baichuan 等)。nn3. **提示模板(Prompt Templates)**  n   提供灵活的提示模板机制,允许开发者根据不同场景自定义提示语,提升模型输出的准确性与相关性。nn4. **记忆系统(Memory)**  n   支持短期记忆(如会话历史)和长期记忆(如数据库存储),使得模型在处理复杂任务时具备上下文理解能力。nn5. **链式调用(Chaining)**  n   允许将多个模型或工具按顺序组合,形成一个“链”,实现更复杂的任务流程。例如:先用一个模型生成内容,再用另一个模型进行分析或总结。nn6. **工具集成**  n   LangChain 提供了与多种工具(如数据库、API、文件系统等)集成的能力,使得模型可以与外部系统交互,实现更强大的功能。nn7. **可扩展性**  n   开发者可以基于 LangChain 构建自定义模块,并与其他工具或框架(如 FastAPI、Django、Streamlit 等)结合,构建完整的 AI 应用。nn### LangChain 的典型应用场景包括:nn- **聊天机器人**:使用 LangChain 构建具有记忆和上下文理解能力的智能客服或助手。n- **自动化任务**:如文档摘要、信息提取、数据分析等。n- **RAG(Retrieval-Augmented Generation)系统**:结合检索和生成,提高模型回答的准确性和相关性。n- **流程自动化(RPA)**:结合大模型与流程自动化工具,实现更智能的自动化操作。nn### 一句话总结:nn**LangChain 是一个用于构建基于大语言模型的 AI 应用的开源框架,提供模块化工具、提示模板、记忆系统、链式调用等功能,帮助开发者更高效地构建智能应用。**nn如果你想了解 LangChain 在特定场景下的应用或某个模块的详细介绍,随时可以问我哦!' additional_kwargs={} response_metadata={'model': 'qwen3:14b', 'created_at': '2025-10-15T15:09:11.989369811Z', 'done': True, 'done_reason': 'stop', 'total_duration': 14716300042, 'load_duration': 20088705, 'prompt_eval_count': 21, 'prompt_eval_duration': 7459747, 'eval_count': 605, 'eval_duration': 14687785730, 'model_name': 'qwen3:14b'} id='run--fc3ec61e-3b0e-40b3-a204-a7b90a111c45-0' usage_metadata={'input_tokens': 21, 'output_tokens': 605, 'total_tokens': 626}

想了解更多?快来看看吧!

欢迎来到崔亮的博客,这里专注于devops自动化运维,传播优秀的IT运维技术文章。更多原创的运维开发内容,别忘了访问我哦!
https://www.cuiliangblog.cn

还可以关注我的公众号《崔亮的博客》,获取更多精彩内容!

来源:今日头条
原文标题:LangChain从入门到实践——Model大模型接口 – 今日头条
声明:
文章来自网络收集后经过ai改写发布,如不小心侵犯了您的权益,请联系本站删除,给您带来困扰,深表歉意!

发表评论