为了让初学者更容易上手,在文章末尾,给出一个综合应用样例:搭建流式响应的多轮问答机器人,它结合了消息格式和流式响应,模拟真实聊天场景。

1. LangChain 1.0 的基础模型消息格式

在LangChain 1.0中,消息(Message)是模型输入和输出的核心构建块。它提供了一个跨模型统一的Message标准,无论你使用OpenAI、Anthropic、Gemini还是本地模型,都能保持一致的行为。这种统一抽象带来了三大好处:

好处 解释
兼容性强 不同模型的消息格式自动对齐,无需编写提供商特定的代码。
可扩展性高 支持多模态内容(如文本、图像、音频)、工具调用和自定义元数据,便于扩展新数据类型。
可追踪性好 通过元数据(如ID、token使用量、响应信息)为LangSmith等调试工具提供一致的上下文结构。

每个消息包含角色(role)(如system、user、assistant、tool)、内容(content)(文本或其他)和可选的元数据(metadata)。核心消息类型包括:

  • SystemMessage:设置助手的角色或行为。
  • HumanMessage:用户输入。
  • AIMessage:模型输出。

1.样例代码:构建消息并调用模型

下面是一个简单示例:创建一个系统消息定义助手角色,然后添加用户消息,调用模型生成响应。

from langchain_openai import ChatOpenAI  # 导入OpenAI聊天模型from langchain_core.messages import SystemMessage, HumanMessage, AIMessage# 初始化模型(替换为你的API密钥)model = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)# 系统消息:定义助手角色system_msg = SystemMessage(content="你叫小智,是一名助人为乐的助手。")# 用户消息:用户输入human_msg = HumanMessage(content="你好,好久不见,请介绍下你自己。")# 消息列表:按顺序传递给模型messages = [system_msg, human_msg]# 调用模型response = model.invoke(messages)print(response)  # 输出:AIMessage(content='你好!我是小智,一名乐于助人的AI助手...', ...)

2.响应结果解释

模型的invoke()方法返回一个AIMessage对象,包含生成的文本和其他元数据。以下表格解释了其关键属性(基于官方文档):

属性 类型 描述
content str 或 list[dict] 原始内容负载(字符串或提供商原生块)。
text str 人类可读的文本内容(简化版content)。
content_blocks list[ContentBlock] 内容块的标准化视图(如推理块、图像)。
tool_calls list[dict] 或 None 模型调用的工具(名称、参数、ID)。
id str 唯一标识符(自动生成或来自提供商)。
usage_metadata dict 或 None Token使用量(如input_tokens、output_tokens)。
response_metadata ResponseMetadata 或 None 提供商特定响应数据(如完成原因)。

运行上述代码后,你会看到类似输出:

AIMessage(content='你好!我是小智,一名乐于助人的AI助手。我可以帮你解答问题、生成代码或聊天。有什么我能帮忙的吗?', id='run-abc123', usage_metadata={'input_tokens': 25, 'output_tokens': 50, ...})

这让调试和追踪变得简单——例如,通过response.usage_metadata监控token消耗。

3.常见问题排查

  • 错误:No API key provided:确保设置了OPENAI_API_KEY环境变量(export OPENAI_API_KEY=your_key)。
  • 消息顺序混乱:始终按[system, human, ai, …]顺序构建列表,模型会记住历史。
  • 多模态扩展:想加图像?用HumanMessage(content=[{"type": "text", "text": "描述"}, {"type": "image_url", "image_url": {"url": "img.jpg"}}])

2. 模型的流式响应

流式响应(Streaming)是提升用户体验的关键:在LangChain 1.0中,通过stream()方法,模型不会一次性返回完整结果,而是返回一个迭代器(iterator)。每次迭代生成一个AIMessageChunk,包含部分内容(如单个token或文本块)。这允许实时打印输出,减少感知延迟,非常适合聊天界面。

启用流式需要设置streaming=True(在模型初始化时)。迭代器会逐步yield chunk,你可以处理每个chunk的content属性。

1.样例代码:实时打印流式输出

以下示例使用简单用户输入,逐步打印模型生成的token(以“|”分隔,模拟实时流)。

from langchain_openai import ChatOpenAIfrom langchain_core.messages import HumanMessage# 初始化模型,启用流式model = ChatOpenAI(model="gpt-3.5-turbo", temperature=0, streaming=True)# 用户消息messages = [HumanMessage(content="你好,好久不见。讲个关于AI的笑话吧。")]# 流式调用:返回迭代器for chunk in model.stream(messages):    if chunk.content:  # 确保chunk有内容        print(chunk.content, end="|", flush=True)  # 实时打印,无换行print("\n")  # 结束时换行

2.运行结果示例

运行后,你会看到类似实时输出:

为什么AI不怕冷?因为它有许多层!|哈哈,是不是很智能?|

每个chunk是一个AIMessageChunk对象,chunk.content是增量文本。flush=True确保立即刷新到控制台,而end="|"添加分隔符模拟流式效果。

提示:如果使用stream_mode="messages"(高级用法),chunk将代表完整消息块。但对于初学者,上述简单循环就够用。流式特别适合Web应用,能让用户看到“打字机”效果。

3.常见问题排查

  • 无输出或卡住:检查streaming=True是否设置;如果chunk为空,可能是模型不支持或网络问题。
  • 性能瓶颈:流式会增加少量开销;生产中,用asyncio异步处理以支持并发。
  • 历史消息:流式也支持消息列表,确保传入完整历史以保持上下文。

3. 模型的结构化输出方法

结构化输出让模型返回可预测的格式(如JSON对象或Pydantic模型),避免解析自然语言的麻烦。在LangChain 1.0中,支持多种Schema:

  • Pydantic:最丰富,支持字段校验、描述、默认值和嵌套结构。生产首选。
  • TypedDict:轻量类型约束,适合简单场景。
  • JSON Schema:通用,与前后端/跨语言接口兼容。

这些通过with_structured_output()方法绑定到模型,确保输出符合Schema。Pydantic提供验证(如类型检查、范围约束),如果输出无效会自动重试。

1.样例代码:使用Pydantic生成电影信息

以下示例定义一个电影Schema,绑定到模型,然后输入提示,输出结构化对象。

from pydantic import BaseModel, Fieldfrom langchain_openai import ChatOpenAI# 定义Pydantic模型:电影详情class Movie(BaseModel):    """A movie with details."""    title: str = Field(..., description="The title of the movie")    year: int = Field(..., description="The year the movie was released")    director: str = Field(..., description="The director of the movie")    rating: float = Field(..., description="The movie's rating out of 10")# 初始化模型model = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)# 绑定结构化输出:返回Movie实例model_with_structure = model.with_structured_output(Movie)# 输入提示response = model_with_structure.invoke("Provide details about the movie Inception")print(response)  # 输出:Movie(title='Inception', year=2010, director='Christopher Nolan', rating=8.8)

2.解释与好处

  • 绑定过程with_structured_output(Movie)创建了一个新模型变体,内部使用工具调用或提供商原生功能强制Schema。
  • 输出response直接是Movie实例(Pydantic对象),便于访问属性如response.title。无需手动解析JSON!
  • 好处:减少错误(自动校验)、提高可靠性(模型“知道”输出格式)、易集成(直接序列化为JSON)。

扩展提示:对于TypedDict,使用typing.TypedDict定义;对于JSON Schema,直接传dict。生产中,结合错误处理(如method_kwargs={"handle_errors": True})以重试无效输出。

3.常见问题排查

  • 校验失败:模型可能生成不匹配数据;用include_raw=True保留原始输出调试。
  • 嵌套结构:Pydantic支持类内嵌套类,如actors: List[Actor](需导入List)。
  • 兼容性:非OpenAI模型可能需额外配置(如mode="tool_calling")。

4. 综合应用:搭建流式响应的多轮问答机器人

现在,让我们将前两部分知识结合:使用消息格式维护对话历史,并启用流式响应构建一个交互式聊天机器人。这个机器人支持多轮对话、实时输出,并自动限制历史长度以防token超限。适合初学者快速原型化聊天应用。

1.优化说明

  • 模型选择:采用OpenAI(更通用),但你可轻松替换为其他模型。
  • 改进点:添加了异常处理、消息长度限制(最近50条,避免token爆炸)、退出机制优化。使用messages列表维护状态,支持上下文记忆。
  • 运行方式:在终端运行,输入exit退出。流式输出模拟“打字机”效果。

2.完整样例代码

from langchain_openai import ChatOpenAI  # 使用OpenAI作为示例(可替换为其他模型)from langchain_core.messages import SystemMessage, HumanMessage, AIMessage# 1️⃣ 初始化模型(LangChain 1.0 接口,启用流式)model = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7, streaming=True)# 2️⃣ 初始化系统提示词(System Prompt)system_message = SystemMessage(    content="你叫小智,是一名乐于助人的智能助手。请在对话中保持温和、有耐心的语气,并记住之前的上下文。")# 3️⃣ 初始化消息历史messages = [system_message]print("🔹 欢迎使用小智聊天机器人!输入 'exit' 退出对话\n")# 4️⃣ 主循环(支持多轮对话 + 流式输出)while True:    try:        user_input = input("👤 你:").strip()        if user_input.lower() in {"exit", "quit", ""}:            print("🧩 对话结束,再见!")            break        # 追加用户消息到历史        messages.append(HumanMessage(content=user_input))        # 实时输出模型生成内容        print("🤖 小智:", end="", flush=True)        full_reply = ""  # 收集完整回复,用于添加到历史        # ✅ LangChain 1.0 标准写法:流式输出(传入完整消息历史)        for chunk in model.stream(messages):            if chunk.content:                print(chunk.content, end="", flush=True)                full_reply += chunk.content        print("\n" + "-" * 50)  # 分隔线,提升可读性        # 追加 AI 回复消息到历史        messages.append(AIMessage(content=full_reply))        # 保持消息长度(只保留最近50轮,避免token超限)        if len(messages) > 50:            messages = [messages[0]] + messages[-49:]  # 保留系统消息 + 最近49条    except KeyboardInterrupt:        print("\n🧩 对话被中断,再见!")        break    except Exception as e:        print(f"\n❌ 发生错误:{e}。请重试。")        continue

3.运行示例

启动后:

👤 你:你好,小智!今天天气怎么样?🤖 小智:你好!作为AI,我无法直接查看实时天气,但如果你告诉我你的位置,我可以帮你查询或建议。有什么具体城市吗?--------------------------------------------------👤 你:在北京。🤖 小智:北京今天晴朗,温度约15-20°C。记得带件外套哦!有什么其他想聊的?--------------------------------------------------👤 你:exit🧩 对话结束,再见!

机器人记住上下文(如位置),流式输出让响应更自然。

扩展建议:集成LangSmith追踪(pip install langsmith),或用Streamlit/Flask转为Web app。结合结构化输出,可让机器人返回JSON回复(如天气数据)。

结语

通过这四部分,你已从基础消息到高级应用,全面掌握LangChain 1.0的核心交互方式:统一消息构建对话、流式提升响应性、结构化确保数据质量、多轮机器人实现端到端聊天。建议实践这些代码,有问题欢迎评论!参考官方文档:

如何高效转型Al大模型领域?

作为一名在一线互联网行业奋斗多年的老兵,我深知持续学习和进步的重要性,尤其是在复杂且深入的Al大模型开发领域。为什么精准学习如此关键?

  • 系统的技术路线图:帮助你从入门到精通,明确所需掌握的知识点。
  • 高效有序的学习路径:避免无效学习,节省时间,提升效率。
  • 完整的知识体系:建立系统的知识框架,为职业发展打下坚实基础。

AI大模型从业者的核心竞争力

  • 持续学习能力:Al技术日新月异,保持学习是关键。
  • 跨领域思维:Al大模型需要结合业务场景,具备跨领域思考能力的从业者更受欢迎。
  • 解决问题的能力:AI大模型的应用需要解决实际问题,你的编程经验将大放异彩。

以前总有人问我说:老师能不能帮我预测预测将来的风口在哪里?

现在没什么可说了,一定是Al;我们国家已经提出来:算力即国力!

未来已来,大模型在未来必然走向人类的生活中,无论你是前端,后端还是数据分析,都可以在这个领域上来,我还是那句话,在大语言AI模型时代,只要你有想法,你就有结果!只要你愿意去学习,你就能卷动的过别人!

现在,你需要的只是一份清晰的转型计划和一群志同道合的伙伴。作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐