LangChain[2] ---- Model I/O

📅 2026/7/9 4:34:38
LangChain[2] ---- Model I/O
文章目录前言一、Model I/O 核心概念三大组成模块LangChain 三类模型核心区分开发优先级划分二、LangChain 统一模型调用对比原生 SDK 核心优势2.1 原生厂商 SDK 的开发痛点2.2 LangChain 统一抽象的核心价值三、ChatOpenAI 基础入门兼容 OpenAI 格式模型通用类3.1 最简可运行示例环境依赖提前安装完整代码新手高频踩坑知识点3.2 初始化核心参数全解析temperature 温度参数场景对照表Token 计费基础概念3.3 动态模型切换工具 init_chat_model四、对话消息规范4 类标准消息与 3 种传参格式4.1 四大标准消息类记忆口诀系统定规用户提问AI应答工具回传多轮对话完整实战示例4.2 三种消息传入方式按需选择方式1直接传入纯字符串最简方式2消息对象列表项目通用首选方式3元组/字典轻量化格式动态构建场景五、四种标准调用API覆盖全部业务场景5.1 invoke() 同步调用基础通用场景5.2 stream() 流式输出打字机实时展示效果5.3 batch() 批量调用批量数据处理场景5.4 ainvoke() 异步调用Web高并发服务场景核心误区纠正六、主流在线大模型接入实战复制即用6.1 DeepSeek 国产高性价比模型6.2 硅基流动海量开源在线模型6.3 OpenAI GPT 国内代理渠道6.4 非OpenAI规范模型统一接入厂商接入速查表七、离线本地模型调用Ollama 零API成本方案7.1 Ollama 基础使用流程八、生产环境高阶实用特性8.1 多模态识图图文混合提问8.2 Token 消耗统计成本监控工具8.3 接口速率限流避免平台封禁8.4 提示词缓存降低Token开销九、全文核心知识点总结前言上手 LangChain 开发大模型应用第一个必须吃透的核心模块就是Model I/O它是框架和各类大模型交互的底层核心所有对话、文本生成、多模态识图、批量处理功能全部依托该模块实现。很多新手入门时会陷入一个误区直接使用各大厂商原生 SDK 调用模型等到需要切换模型、做多轮对话、流式输出、高并发服务时代码会大量重构、维护成本陡增。而 Model I/O 提供了一套标准化交互规范一套调用逻辑兼容 OpenAI、DeepSeek、通义千问、Claude、本地 Ollama 等几乎所有主流模型极大降低多模型项目开发成本。本文将拆解 Model I/O 底层逻辑、三类模型区分、消息结构、4 种调用模式、全平台接入代码、本地离线模型、高阶实用功能搭配可直接复制运行的完整代码看完即可独立完成任意大模型调用开发。一、Model I/O 核心概念三大组成模块Model I/O 全称模型输入输出完整覆盖向模型传递指令、发起请求、接收返回结果、格式化输出全链路整体分为三大闭环环节类比快递收发逻辑极易理解Prompts提示词模板统一封装系统角色、用户问题、历史对话标准化为模型可识别的消息格式等同于打包快递统一包装规范适配所有快递公司。Models模型调用层LangChain 提供统一抽象接口屏蔽不同厂商 API 差异只需要修改初始化配置即可切换模型等同于快递配送统一配送流程换快递公司无需修改收件逻辑。Output Parsers输出解析器将模型原生文本输出自动解析为 JSON、列表、实体对象等结构化数据等同于拆快递把包裹内物品整理成业务可用格式。本文聚焦最核心的Models 模型调用层提示词模板、输出解析器将在下一篇文档详解。LangChain 三类模型核心区分开发优先级划分框架内置三种模型抽象适用场景完全隔离开发前必须分清避免误用模型分类官方名称核心交互逻辑典型业务场景学习优先级对话模型Chat Models消息列表多角色入参返回 AI 消息对象人机对话、问答系统、文案生成、工具调用、多模态识图⭐⭐⭐⭐⭐ 必学核心文本补全模型LLMs纯字符串输入纯字符串输出早期初代大模型接口当前业务基本淘汰⭐ 仅了解概念向量嵌入模型Embeddings文本输入返回浮点数字向量数组RAG 知识库、语义检索、文本相似度计算⭐⭐ RAG 章节重点学习开发重点日常业务开发 99% 场景使用 Chat Models本文全部实战案例均基于对话模型展开。二、LangChain 统一模型调用对比原生 SDK 核心优势2.1 原生厂商 SDK 的开发痛点OpenAI、DeepSeek、Anthropic Claude、谷歌 Gemini 均提供独立官方 SDK直接使用原生工具存在三大致命问题接口不统一切换模型重写代码不同厂商客户端初始化、请求传参、结果取值语法完全不同同时对接 2 种以上模型就要维护多套业务代码。高级能力兼容成本高流式输出、对话记忆、批量请求、异步并发、Token 统计、限流等功能每个厂商实现逻辑不一致需要单独封装工具类。业务扩展性差后续增加工具调用、Agent 智能体、链式流程时原生 SDK 无法直接对接 LangChain 上层组件需要大量适配改造。2.2 LangChain 统一抽象的核心价值LangChain 对所有对话模型做上层封装设计一套标准化 APIinvoke()同步调用、stream()流式输出、batch()批量请求、ainvoke()异步调用。类比原生 SDK 手机品牌专用充电头换手机必须换充电器LangChain Chat Models 万能快充头仅更换适配参数充电操作完全不变。项目迭代、多模型对比、用户自主切换模型场景下能大幅缩减代码量降低维护难度。三、ChatOpenAI 基础入门兼容 OpenAI 格式模型通用类ChatOpenAI是框架使用频率最高的模型类所有兼容 OpenAI 接口规范的在线大模型均可使用该类调用包含 OpenAI GPT 系列、DeepSeek、硅基流动、通义千问、智谱 AI 等国产模型。3.1 最简可运行示例环境依赖提前安装pipinstalllangchain-openai python-dotenv完整代码fromlangchain_openaiimportChatOpenAIfromdotenvimportload_dotenv# 加载.env文件中存储的密钥、接口地址避免硬编码泄露密钥load_dotenv()# 1. 初始化对话模型实例llmChatOpenAI(modelgpt-4o-mini)# 2. 同步调用模型传入用户提问字符串responsellm.invoke(详细介绍LangChain框架的Model I/O模块)# 3. 获取模型返回文本内容print(response.content)新手高频踩坑知识点llm.invoke()返回值不是普通字符串而是AIMessageAI 消息对象.content属性模型输出的纯文本业务中最常用.response_metadata属性存储本次请求元数据包含消耗 Token、模型名称、请求耗时、接口返回状态等信息。3.2 初始化核心参数全解析初始化模型时可配置超参控制模型输出逻辑生产环境必备配置llmChatOpenAI(modelgpt-4o-mini,# 必填目标模型名称temperature0.6,# 输出随机性控制参数max_tokens1500,# 限制模型最大输出token防止超长回答消耗费用timeout60,# 接口请求超时时间单位秒max_retries3,# 请求失败自动重试次数应对网络波动)temperature 温度参数场景对照表温度参数直接决定模型生成内容的稳定性与创造性不同业务场景固定取值业务场景推荐温度区间底层逻辑说明代码生成、数据抽取、专业翻译、数学计算0 ~ 0.3低随机性输出固定严谨杜绝模型幻觉知识库问答、文本摘要、内容分析、方案解读0.3 ~ 0.7平衡准确性与语句流畅度通用业务首选文案创作、起名、头脑风暴、创意故事生成0.7 ~ 1.0高随机性多样化输出丰富创意内容Token 计费基础概念Token 是大模型处理文本的最小计算单元并非汉字/单词中文1 Token ≈ 1~1.8 个汉字英文1 Token ≈ 3~4 个英文字母计费规则单次请求总消耗 Token 输入上下文 Token 模型输出 Token上下文越长、回答篇幅越大调用成本越高。开发调试阶段可使用 OpenAI 官方 Tokenizer 工具统计文本 Token 数量提前预估接口调用费用。3.3 动态模型切换工具 init_chat_model项目需要多模型动态切换、A/B 测试场景推荐使用init_chat_model统一初始化无需多次导入各类模型类fromlangchain.chat_modelsimportinit_chat_modelfromdotenvimportload_dotenvimportos load_dotenv()# 一行初始化不同厂商模型llm_gptinit_chat_model(gpt-4o-mini,model_provideropenai)llm_claudeinit_chat_model(claude-sonnet-4-6,model_provideranthropic)# 调用方法完全统一无需修改业务逻辑print(llm_gpt.invoke(你好).content)print(llm_claude.invoke(你好).content)使用场景区分固定单一模型开发直接使用ChatOpenAI、ChatOllama具体类IDE 代码提示更完善动态切换多模型优先使用init_chat_model简化初始化代码。四、对话消息规范4 类标准消息与 3 种传参格式多轮对话、角色设定场景不能只传递单纯字符串LangChain 定义标准化消息对象区分消息发送者身份让模型识别完整对话上下文。4.1 四大标准消息类记忆口诀系统定规用户提问AI应答工具回传消息类型对应类名核心作用业务示例系统消息SystemMessage设定 AI 角色、业务规则、输出格式约束“你是专业Python后端工程师回答代码问题附带完整可运行示例”用户消息HumanMessage存储用户输入提问、原始需求“如何使用LangChain实现异步批量模型调用”AI消息AIMessage存储历史AI回复拼接多轮对话上下文“异步调用需结合ainvoke与asyncio.gather实现并发请求”工具消息ToolMessage存储工具函数执行结果用于工具调用、Agent开发天气工具返回北京今日气温22-30℃晴多轮对话完整实战示例将历史对话全部传入消息列表模型可完整记忆上下文内容fromlangchain_core.messagesimportSystemMessage,HumanMessage,AIMessagefromlangchain_openaiimportChatOpenAI llmChatOpenAI(modelgpt-4o-mini)# 完整对话上下文列表dialogue[SystemMessage(content你是贴心AI助手记住用户姓名),HumanMessage(content我叫小张),AIMessage(content你好小张有什么问题我可以帮你解答),HumanMessage(content我叫什么名字)]resllm.invoke(dialogue)print(res.content)# 输出你叫小张4.2 三种消息传入方式按需选择方式1直接传入纯字符串最简仅适用于单轮无角色、无历史对话的快速测试resllm.invoke(什么是Model I/O)方式2消息对象列表项目通用首选支持自定义系统角色、拼接完整对话历史90% 业务开发使用该方式resllm.invoke([SystemMessage(content仅将中文翻译成标准英文不输出额外解释),HumanMessage(contentLangChain统一模型调用降低开发成本)])方式3元组/字典轻量化格式动态构建场景无需导入各类消息类适合从数据库、配置文件读取对话数据动态组装消息# 元组写法msg_tuple[(system,专业数据分析助手),(user,分析2026大模型行业发展趋势)]# 字典写法兼容OpenAI原生message结构msg_dict[{role:system,content:专业数据分析助手},{role:user,content:分析2026大模型行业发展趋势}]五、四种标准调用API覆盖全部业务场景LangChain 为所有 Chat Models 统一封装 4 套调用接口分别适配同步、流式、批量、高并发异步场景接口名称全局统一切换模型无需修改调用代码。5.1 invoke() 同步调用基础通用场景发送请求后阻塞程序等待模型完整生成全部内容后返回逻辑简单直观适合脚本、单轮问答、原型开发。resllm.invoke(讲解LangChain四种模型调用方式)print(res.content)5.2 stream() 流式输出打字机实时展示效果逐 Token 返回模型输出内容前端聊天界面、长文本生成必备用户无需等待完整回复即可实时查看内容优化交互体验。print(AI 实时输出,end)# 循环迭代流式分片chunk对象forchunkinllm.stream(写一篇介绍LangChain的短篇技术博客):print(chunk.content,end,flushTrue)5.3 batch() 批量调用批量数据处理场景一次性传入多条独立提问框架自动管理请求队列并发处理无需手动编写循环逻辑适用于批量文本摘要、批量标签分类、批量数据抽取。question_list[Python装饰器原理,JavaScript闭包概念,Go协程优势]response_listllm.batch(question_list)forq,ansinzip(question_list,response_list):print(f提问{q}\n回答{ans.content}\n------)5.4 ainvoke() 异步调用Web高并发服务场景基于 asyncio 异步 IO 实现非阻塞请求模型调用过程中不会阻塞服务主线程充分利用网络等待时间并发请求量越大性能提升越明显。核心误区纠正单独串行await ainvoke()无法提速必须搭配asyncio.gather()批量提交任务实现真正并发importasynciofromlangchain_openaiimportChatOpenAI llmChatOpenAI(modelgpt-4o-mini)asyncdefasync_batch_query():prompts[介绍北京,介绍上海,介绍广州,介绍深圳]# 批量创建异步任务task_group[llm.ainvoke(prompt)forpromptinprompts]# 并发执行所有请求result_listawaitasyncio.gather(*task_group)forresinresult_list:print(res.content[:30]...\n)# 普通py脚本执行异步函数asyncio.run(async_batch_query())# Jupyter Notebook 环境直接使用 await async_batch_query()适用场景FastAPI/Flask 后端接口、大规模批量离线数据处理、高并发 SaaS 平台。六、主流在线大模型接入实战复制即用兼容 OpenAI 接口规范的模型统一使用ChatOpenAI仅修改api_key、base_url、model三个参数不兼容 OpenAI 格式的 Claude、Gemini 使用专属模型类或init_chat_model。6.1 DeepSeek 国产高性价比模型.env 环境变量配置DEEPSEEK_API_KEYsk-xxxx你的密钥 DEEPSEEK_BASE_URLhttps://api.deepseek.com/v1调用代码importosfromlangchain_openaiimportChatOpenAIfromdotenvimportload_dotenv load_dotenv()llmChatOpenAI(modeldeepseek-chat,api_keyos.getenv(DEEPSEEK_API_KEY),base_urlos.getenv(DEEPSEEK_BASE_URL))6.2 硅基流动海量开源在线模型.env 配置SILICONFLOW_API_KEYsk-xxxx SILICONFLOW_BASE_URLhttps://api.siliconflow.cn/v1调用代码llmChatOpenAI(modelQwen/Qwen3-8B,api_keyos.getenv(SILICONFLOW_API_KEY),base_urlos.getenv(SILICONFLOW_BASE_URL))6.3 OpenAI GPT 国内代理渠道.env 配置OPENAI_API_KEYsk-xxxx OPENAI_BASE_URLhttps://api.closeai-asia.com/v1调用代码自动读取环境变量llmChatOpenAI(modelgpt-4o-mini)6.4 非OpenAI规范模型统一接入fromlangchain.chat_modelsimportinit_chat_model# Claude Anthropic厂商llm_claudeinit_chat_model(claude-sonnet-4-6,model_provideranthropic)# Gemini 谷歌厂商llm_geminiinit_chat_model(gemini-2.5-flash,model_providergoogle_genai)厂商接入速查表模型平台使用模型类关键环境变量OpenAI/国内代理、DeepSeek、硅基流动ChatOpenAIAPI_KEY、BASE_URLAnthropic ClaudeChatAnthropic / init_chat_modelANTHROPIC_API_KEY本地Ollama开源模型ChatOllama无需密钥七、离线本地模型调用Ollama 零API成本方案无线上API密钥、离线私有化部署场景推荐使用 Ollama 本地运行开源大模型LangChain 提供专用ChatOllama类对接。7.1 Ollama 基础使用流程官网下载安装 Ollama 客户端终端执行命令拉取并启动模型首次自动下载权重文件ollama run qwen3.5:4bLangChain 调用代码fromlangchain_ollamaimportChatOllama# 本地默认地址 http://localhost:11434llmChatOllama(modelqwen3.5:4b,base_urlhttp://localhost:11434)resllm.invoke(介绍本地大模型Ollama)print(res.content)性能适配建议普通笔记本电脑选择 4B/7B 参数轻量化模型13B 及以上大参数量模型需要高性能显卡支撑否则推理速度极慢。八、生产环境高阶实用特性8.1 多模态识图图文混合提问支持图像输入的模型GPT-4o、Qwen-VL 等可传入本地图片 Base64 数据实现图片识别、图文问答importbase64fromlangchain_core.messagesimportHumanMessage# 读取本地图片转base64编码withopen(test.jpg,rb)asf:img_database64.b64encode(f.read()).decode()# 图文混合消息结构msgHumanMessage(content[{type:text,text:详细描述这张图片内容},{type:image_url,image_url:{url:fdata:image/jpeg;base64,{img_data}}}])resllm.invoke([msg])print(res.content)8.2 Token 消耗统计成本监控工具通过内置回调器统计批量请求总 Token 消耗用于计费监控、成本优化fromlangchain_core.callbacksimportget_usage_metadata_callbackwithget_usage_metadata_callback()ascb:llm.invoke(问题1)llm.invoke(问题2)# 输出输入Token、输出Token、总Token消耗print(cb.usage_metadata)8.3 接口速率限流避免平台封禁通过内存限流器控制每秒最大请求次数防止高频调用触发厂商接口限流、封禁密钥fromlangchain_core.rate_limitersimportInMemoryRateLimiter# 每10秒最多允许1次请求rate_limiterInMemoryRateLimiter(requests_per_second0.1)llmChatOpenAI(modelgpt-4o-mini,rate_limiterrate_limiter)8.4 提示词缓存降低Token开销长固定系统提示词重复调用场景开启厂商服务端缓存重复上下文无需重复计费OpenAI 系列模型默认自动开启上下文缓存无需额外配置Anthropic Claude接入中间件开启缓存缓存命中最高节省90% Token 费用。九、全文核心知识点总结Model I/O 三大核心组件Prompts 提示词模板、Models 模型调用层、Output Parsers 输出解析器三类模型区分开发核心为 Chat Models 对话模型LLMs 文本补全模型已淘汰Embeddings 向量模型用于 RAG标准化消息体系SystemMessage、HumanMessage、AIMessage、ToolMessage支撑完整多轮对话四类统一调用接口invoke()同步、stream()流式、batch()批量、ainvoke()异步并发跨模型统一封装兼容 OpenAI 接口模型全部使用ChatOpenAI仅修改初始化参数即可切换离线方案Ollama ChatOllama 实现本地开源模型私有化调用生产增强能力多模态识图、Token用量统计、接口限流、提示词缓存适配线上业务。