LangChain基础配置与对话模型实战

LangChain 1.0 学习笔记:基础配置与对话模型实战

文章目录

  • [LangChain 1.0 学习笔记:基础配置与对话模型实战](#LangChain 1.0 学习笔记:基础配置与对话模型实战)
    • [1. 环境检查](#1. 环境检查)
    • [2. 单轮对话基础](#2. 单轮对话基础)
      • [2.1 模型初始化](#2.1 模型初始化)
      • [2.2 模型输出解析](#2.2 模型输出解析)
      • [2.3 流式输出 vs 非流式输出](#2.3 流式输出 vs 非流式输出)
    • [3. 多轮对话实现](#3. 多轮对话实现)
    • [4. 综合实践:构建翻译器模块](#4. 综合实践:构建翻译器模块)

🔗 查看完整专栏(LangChain 1.0 与 LangGraph 学习笔记)

特别说明:

本文为个人学习笔记,内容仅供学习与交流使用,禁止转载或用于商业用途。笔记为个人理解与总结,可能存在疏漏或偏差,欢迎读者参考并自行甄别。

本文为 LangChain 1.0 框架的学习笔记,主要涵盖基础环境验证、单轮与多轮对话的实现,以及流式与非流式输出的对比分析。最后通过构建一个翻译器类,对上述基础核心知识点进行综合应用与代码实践。

1. 环境检查

LangChain 1.0 版本引入了较多底层架构变更,在正式开发前需进行版本验证,以确保运行环境的兼容性并避免潜在的报错。

py 复制代码
import langchain

if langchain.__version__ >= "1.0.0":
    print(f"LangChain 版本验证通过, 当前版本: {langchain.__version__}")
else:
    print(f"LangChain 版本过低, 当前版本: {langchain.__version__},请执行升级操作。")

2. 单轮对话基础

LangChain 1.0 简化了模型实例化的流程,开发者无需显式调用各个 AI 供应商的特定类,可通过统一的 init_chat_model 方法进行模型的创建与初始化。

环境依赖要求 :使用特定 AI 提供商的模型时,需确保已安装对应的集成包。例如,调用 OpenAI 或兼容 OpenAI 格式的 API 时,需预先安装 langchain-openai

2.1 模型初始化

py 复制代码
from langchain.chat_models import init_chat_model

# 通过环境变量或配置文件加载 BASE_URL 和 API_KEY
model = init_chat_model(
    "model-name",
    model_provider="openai",
    base_url=BASE_URL,
    api_key=API_KEY,
)

配置提示 :若使用兼容 OpenAI 接口的第三方模型服务,可将 model_provider 设为 "openai",并相应替换 base_urlapi_keymodel-name 参数,即可实现平滑接入。

2.2 模型输出解析

invoke() 方法的返回值并非单纯的文本字符串,而是包含丰富请求元数据的对象(通常为 AIMessage 类型)。

py 复制代码
response = model.invoke("Hello, how are you?")
print(response)

AIMessage 结构示例(包含 Token 消耗、停止原因等元数据):

py 复制代码
content="Hello! I'm doing well, thank you for asking. I'm ready to assist you.\n\nHow can I help you today?" 
additional_kwargs={'refusal': None} 
response_metadata={'token_usage': {'completion_tokens': 53, 'prompt_tokens': 6, 'total_tokens': 59...}, 'model_provider': 'openai', 'model_name': 'gemini-2.5-flash', 'finish_reason': 'stop'...} 
id='lc_run--019c2...-0' 
usage_metadata={'input_tokens': 6, 'output_tokens': 53, 'total_tokens': 59}

若仅需提取模型生成的文本内容,可直接调用 .content 属性:

py 复制代码
response = model.invoke("Hello, how are you?")
print(response.content)

2.3 流式输出 vs 非流式输出

大语言模型的推理输出支持 流式(Streaming)非流式(Non-streaming) 两种模式。两者的技术特性与适用场景对比如下:

特性 非流式输出 (Non-streaming) 流式输出 (Streaming)
调用方法 response = model.invoke(prompt) for chunk in model.stream(prompt): ...
输出机制 推理完成后一次性返回完整对象(如 AIMessage) 推理过程中分片返回,每次返回一个 Token 或片段(chunk)
控制台打印 print(response.content) print(chunk.content, end="", flush=True)
前端交互 存在 I/O 阻塞感,需等待模型全量生成完毕 实时响应,呈现打字机效果,降低用户等待焦虑
适用场景 快速验证、后台批处理、日志记录、非交互式任务 聊天机器人前端展示、长文本生成、推理过程可视化
技术优劣 优点 :逻辑控制简单,状态稳定 缺点:长文本生成时响应延迟高 优点 :首字响应时间(TTFT)极短,体验佳 缺点:需引入循环或异步流处理,逻辑复杂度增加

代码实现对比:

  • 非流式输出

    py 复制代码
    response = model.invoke("Hello, how are you?")
    print(response.content)
  • 流式输出

    py 复制代码
    for chunk in model.stream("Hello, how are you?"):
        print(chunk.content, end="", flush=True)

技术细节补充 (flush=True)

Python 标准输出(stdout)默认采用行缓冲机制。在流式输出中指定 print(..., flush=True) 可强制绕过缓冲机制,确保每次接收到的模型片段(chunk)被立即刷新至控制台,从而实现平滑的流式视觉效果。

3. 多轮对话实现

LLM API 原生为无状态(Stateless)设计。为实现多轮对话,需在客户端或服务端维护消息历史列表(messages),并将其作为完整的上下文传递给模型。LangChain 提供了标准的消息类集合用于角色管理。

py 复制代码
from langchain_core.messages import HumanMessage, AIMessage, SystemMessage

# 1. SystemMessage: 定义系统角色、行为规范与全局约束
messages = [
    SystemMessage(content="你是一位熟悉各种概念和原理的人工智能专家,一句话回答问题,不要解释。")
]

# 2. HumanMessage: 承载用户的输入指令
user_input = "什么是智能体?"
messages.append(HumanMessage(content=user_input))

# 发起推理请求
response = model.invoke(messages)

# 3. AIMessage: 将模型的输出追加至消息列表,形成上下文闭环
messages.append(AIMessage(content=response.content))

print(response.content)

运行示例

4. 综合实践:构建翻译器模块

本节通过构建 Translator 翻译器类,对模型初始化、消息管理及参数配置进行综合应用示范。

核心设计原则回顾:

  1. 统一模型实例化 :基于 init_chat_model
  2. 结构化消息管理 :通过 SystemMessageHumanMessage 隔离系统指令与用户数据。
  3. 推理参数控制 :通过 temperature 参数控制输出的随机性。对于翻译等确定性要求较高的任务,建议将 temperature 阈值设定在 0.3 到 0.5 之间。

代码实现

py 复制代码
from langchain.chat_models import init_chat_model
from langchain_core.messages import HumanMessage, SystemMessage

class Translator:
    def __init__(self, base_url: str, api_key: str):
        """
        初始化翻译器,配置低 temperature 以保障翻译准确性。
        """
        self.model = init_chat_model(
            "model-name",
            model_provider="model-provider",
            base_url=base_url,
            api_key=api_key,
            temperature=0.3,
        )
    
    def translate(self, text: str, target_languages: str="zh-cn", style: str="formal") -> str:
        """
        执行翻译任务。
        
        Args:
            text: 待翻译文本
            target_languages: 目标语言代码
            style: 翻译风格 (如 formal, casual)
        """
        system_prompt = f"""
        You are a helpful assistant that translates text from English to {target_languages}.
        The translation should be in the following style: {style}.
        """
        
        messages = [
            SystemMessage(content=system_prompt),
            HumanMessage(content=text),
        ]

        response = self.model.invoke(messages)
        return response.content

# 测试用例
if __name__ == "__main__":
    # 配置 API 凭证
    BASE_URL = "YOUR_BASE_URL"
    API_KEY = "YOUR_API_KEY"
    
    translator = Translator(base_url=BASE_URL, api_key=API_KEY)
    
    source_text = "Hello, how are you?"
    target_lang = "zh-cn"
    target_style = "formal"
    
    result = translator.translate(source_text, target_lang, target_style)
    print(f"[Source]: {source_text}")
    print(f"[Translation]: {result}")

模块特性总结

  • 职责分离SystemMessage 严格控制翻译角色与输出风格(Prompt Engineering)。
  • 动态参数化:对外暴露目标语言与文风参数,提升模块通用性。
  • 高内聚封装:底层模型调用逻辑对业务层透明,便于集成至更复杂的 LangChain Pipeline 中。
相关推荐
河西石头2 小时前
分享python项目与开源python项目中的效率法宝--requirements文件的使用
开发语言·python·requirements文件·批量安装python依赖·python虚拟环境配置
团子和二花2 小时前
Mem0:给 AI Agent 装上「长期记忆」
人工智能
chase。2 小时前
【学习笔记】基于扩散模型的运动规划学习与适应
人工智能·笔记·学习
机器觉醒时代2 小时前
RL Token:破解 VLA “最后一厘米”精度难题,在线强化学习实现机器人精准操控
人工智能·机器人·强化学习·具身智能·vla模型
Thomas.Sir2 小时前
第三章:RAG知识库开发之【RAG系统工作流程详细解析:从数据源到智能问答的全链路实战指南】
人工智能·ai·rag·离线处理·在线查询
不懒不懒2 小时前
【卷积神经网络作业实现人脸的关键点定位功能】
开发语言·python
Bert.Cai2 小时前
Python集合简介
开发语言·python
电子科技圈2 小时前
Durin:Aliro标准赋能,打造无缝移动入户体验
人工智能·mcu·物联网·网络协议·智能家居·智能硬件·iot
tryCbest2 小时前
Java和Python开发项目部署简介
java·开发语言·python