Python+LangChain 调用大模型全方案深度实战:原生调用、统一接口、流式输出、异步、自定义模型全解析
前言在大语言模型LLM应用开发领域LangChain已成为 Python 生态中最主流的应用开发框架其核心价值之一是屏蔽不同大模型的 API 差异提供标准化的调用、编排、扩展能力。无论是 OpenAI、Anthropic、通义千问、文心一言、讯飞星火还是本地部署的 Llama、ChatGLMLangChain 都能通过统一的接口实现调用大幅降低多模型适配、切换的开发成本。本文将系统性梳理 LangChain 调用大模型的所有主流方式从最基础的原生 API 调用、LangChain 标准 LLM/ChatModel 接口到流式输出、异步调用、自定义模型封装、多模型路由、本地模型部署覆盖生产环境 99% 的应用场景。全文包含可直接运行的实战代码 详细注释深度对比每种方式的优缺点、适用场景、性能差异帮助开发者根据业务需求选择最优方案。本文基于LangChain v0.2最新稳定版兼容 v0.1适配主流闭源大模型OpenAI GPT、通义千问、文心一言与开源本地模型所有代码均可直接复制运行。目录基础概念LangChain 中 LLM 与 ChatModel 的核心区别方式一原生 API 直接调用无 LangChain 封装- 基础对比方式二LangChain 标准 LLM 接口调用文本补全模型方式三LangChain ChatModel 接口调用对话模型推荐方式四流式输出调用实时响应提升用户体验方式五异步调用高并发、高性能场景方式六多模型统一路由与切换动态适配模型方式七自定义模型封装适配私有 / 小众模型方式八本地开源模型调用Llama 3、ChatGLM、Qwen方式九带工具调用的模型调用Function Call十种调用方式核心指标对比总结生产环境最佳实践与避坑指南1. 基础概念LangChain 中 LLM 与 ChatModel 的核心区别在开始实战前必须明确 LangChain 的两个核心抽象LLMLarge Language Model文本补全模型输入纯文本字符串输出纯文本字符串适配 GPT-3.5-instruct、Llama-base 等补全型模型ChatModel对话模型输入消息列表System、Human、AI Message输出结构化消息是当前主流对话场景的标准接口适配 GPT-4、通义千问、文心一言等对话模型核心差异ChatModel 是 LangChain 推荐的标准接口支持对话历史、系统提示、工具调用兼容性更强LLM 仅适用于纯文本补全场景逐步被淘汰。2. 方式一原生 API 直接调用无 LangChain 封装- 基础对比2.1 适用场景极简场景无需 LangChain 的编排、记忆、工具能力测试模型 API 可用性对比 LangChain 封装后的性能对依赖包体积有严格要求的轻量化服务。2.2 实战代码OpenAI 原生 API 调用python运行import openai import os # 配置环境变量推荐避免硬编码密钥 os.environ[OPENAI_API_KEY] 你的OpenAI API Key os.environ[OPENAI_BASE_URL] https://api.openai.com/v1 # 国内可替换为代理地址 # 原生API调用GPT-3.5 def native_openai_call(): # 调用chat/completions接口对话模型 response openai.ChatCompletion.create( modelgpt-3.5-turbo, messages[ {role: system, content: 你是一个专业的Python编程助手}, {role: user, content: 请解释Python中的装饰器} ], temperature0.7, # 随机性参数 max_tokens1024 # 最大输出长度 ) # 解析返回结果 answer response.choices[0].message.content print(原生API返回结果, answer) if __name__ __main__: native_openai_call()2.3 实战代码通义千问原生 API 调用python运行import requests import json import os os.environ[DASHSCOPE_API_KEY] 你的通义千问API Key def native_qwen_call(): url https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation headers { Authorization: fBearer {os.getenv(DASHSCOPE_API_KEY)}, Content-Type: application/json } data { model: qwen-turbo, input: {messages: [{role: user, content: 请解释Python中的装饰器}]}, parameters: {temperature: 0.7} } response requests.post(url, headersheaders, datajson.dumps(data)) answer response.json()[output][text] print(通义千问原生API返回结果, answer) if __name__ __main__: native_qwen_call()2.4 优缺点总结✅ 优点无依赖、轻量化、无封装损耗❌ 缺点每个模型 API 格式完全不同切换模型需要重写代码无流式输出、异步、记忆、编排能力生产环境维护成本极高。3. 方式二LangChain 标准 LLM 接口调用文本补全模型3.1 核心说明LangChain-LLM是针对文本补全模型的封装输入输出均为字符串不支持结构化对话消息仅适配补全型模型。3.2 依赖安装bash运行# 安装LangChain核心 OpenAI适配包 pip install langchain langchain-openai3.3 实战代码OpenAI LLM 调用python运行import os from langchain_openai import OpenAI # 配置环境变量 os.environ[OPENAI_API_KEY] 你的API Key def langchain_llm_call(): # 初始化LLM模型文本补全型 llm OpenAI( modelgpt-3.5-turbo-instruct, # 补全模型 temperature0.7, max_tokens1024, verboseTrue # 打印调试信息 ) # 纯文本输入调用 prompt 你是一个Python助手请解释装饰器 result llm.invoke(prompt) # 同步调用 print(LangChain LLM调用结果, result) if __name__ __main__: langchain_llm_call()3.4 实战代码通义千问 LLM 调用python运行import os from langchain_community.llms import Tongyi os.environ[DASHSCOPE_API_KEY] 你的API Key def langchain_qwen_llm(): llm Tongyi(model_nameqwen-turbo, temperature0.7) result llm.invoke(请解释Python装饰器) print(通义千问LLM调用结果, result) if __name__ __main__: langchain_qwen_llm()3.5 优缺点总结✅ 优点统一调用接口切换模型仅需修改初始化代码基础参数标准化❌ 缺点不支持对话消息、系统提示、工具调用仅适用于纯文本补全不推荐用于对话场景。4. 方式三LangChain ChatModel 接口调用对话模型生产推荐4.1 核心说明ChatModel是 LangChain官方推荐的对话模型接口支持结构化消息System/Human/AI/Function Message对话历史管理工具调用、函数调用全平台模型兼容OpenAI / 通义 / 文心 / 星火 / 本地模型这是生产环境最常用的调用方式90% 的对话应用基于此实现。4.2 依赖安装bash运行pip install langchain langchain-openai langchain-community4.3 实战代码OpenAI ChatModel 标准调用python运行import os from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage, SystemMessage # 配置密钥 os.environ[OPENAI_API_KEY] 你的API Key def langchain_chatmodel_standard(): # 初始化对话模型核心ChatOpenAI chat_model ChatOpenAI( modelgpt-3.5-turbo, # 对话模型 temperature0.7, # 随机性0精准1发散 max_tokens1024, # 最大输出长度 request_timeout30 # 请求超时时间 ) # 构造标准化消息列表核心格式 messages [ SystemMessage(content你是一名资深Python工程师回答简洁专业), # 系统提示 HumanMessage(content请用一句话解释Python装饰器) # 用户问题 ] # 同步调用invoke() 是标准方法 response chat_model.invoke(messages) # 解析结果response.content 为文本答案 print(ChatModel标准调用结果, response.content) if __name__ __main__: langchain_chatmodel_standard()4.4 实战代码通义千问 ChatModel 调用python运行import os from langchain_community.chat_models import ChatTongyi from langchain_core.messages import HumanMessage, SystemMessage os.environ[DASHSCOPE_API_KEY] 你的API Key def langchain_qwen_chat(): # 初始化通义对话模型接口与OpenAI完全一致 chat_model ChatTongyi(model_nameqwen-turbo, temperature0.7) messages [ SystemMessage(content你是Python专家), HumanMessage(content解释装饰器) ] response chat_model.invoke(messages) print(通义千问ChatModel结果, response.content) if __name__ __main__: langchain_qwen_chat()4.5 实战代码文心一言 ChatModel 调用python运行import os from langchain_community.chat_models import ChatWenxin from langchain_core.messages import HumanMessage # 配置文心一言密钥 os.environ[WENXIN_API_KEY] 你的API Key os.environ[WENXIN_SECRET_KEY] 你的Secret Key def langchain_wenxin_chat(): chat_model ChatWenxin(modelernie-3.5, temperature0.7) response chat_model.invoke([HumanMessage(content解释Python装饰器)]) print(文心一言ChatModel结果, response.content) if __name__ __main__: langchain_wenxin_chat()4.6 核心优势✅接口完全统一切换模型仅需修改初始化类业务代码零改动✅ 支持结构化对话、系统提示、对话历史✅ 兼容 LangChain 全生态记忆、链、工具、智能体✅ 生产环境稳定、易维护、易扩展。5. 方式四流式输出调用实时响应提升用户体验5.1 核心说明流式输出Streaming是C 端应用必备功能模型逐字返回结果而非等待全部生成完成后一次性返回大幅提升用户体验。LangChain 的 ChatModel/LLM 均原生支持流式输出仅需开启streamingTrue参数。5.2 实战代码ChatModel 流式输出OpenAIpython运行import os from langchain_openai import ChatOpenAI from langchain_core.messages import SystemMessage, HumanMessage os.environ[OPENAI_API_KEY] 你的API Key def langchain_chatmodel_stream(): # 初始化开启流式输出 streamingTrue chat_model ChatOpenAI( modelgpt-3.5-turbo, temperature0.7, streamingTrue # 核心开启流式 ) messages [ SystemMessage(content你是Python讲师详细解释装饰器), HumanMessage(contentPython装饰器的原理和用法) ] # 流式调用stream() 方法逐字接收结果 print(流式输出, end, flushTrue) for chunk in chat_model.stream(messages): # chunk.content 为逐字返回的文本 print(chunk.content, end, flushTrue) print(\n流式输出完成) if __name__ __main__: langchain_chatmodel_stream()5.3 实战代码通义千问流式输出python运行import os from langchain_community.chat_models import ChatTongyi from langchain_core.messages import HumanMessage os.environ[DASHSCOPE_API_KEY] 你的API Key def qwen_stream(): chat_model ChatTongyi(model_nameqwen-turbo, streamingTrue) print(通义流式输出, end, flushTrue) for chunk in chat_model.stream([HumanMessage(content解释Python装饰器)]): print(chunk.content, end, flushTrue) if __name__ __main__: qwen_stream()5.4 优缺点总结✅ 优点实时响应用户体验拉满适配 Web/APP 对话界面❌ 缺点需要前端处理流式渲染部分小众模型不支持流式适用场景聊天机器人、在线助手、实时文案生成等 C 端应用。6. 方式五异步调用高并发、高性能场景6.1 核心说明同步调用一次只能处理一个请求并发量低异步调用Async非阻塞 IO单线程可处理数百并发是 API 服务、高并发场景的最优解。LangChain 原生支持ainvoke()/astream()异步方法无需额外改造。6.2 实战代码ChatModel 异步标准调用python运行import os import asyncio from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage os.environ[OPENAI_API_KEY] 你的API Key # 异步函数必须用async定义 async def langchain_chatmodel_async(): chat_model ChatOpenAI(modelgpt-3.5-turbo, temperature0.7) # 异步调用ainvoke() 替代 invoke() response await chat_model.ainvoke([HumanMessage(content解释Python装饰器)]) print(异步调用结果, response.content) # 异步运行入口 if __name__ __main__: asyncio.run(langchain_chatmodel_async())6.3 实战代码异步流式输出高性能 实时响应python运行import os import asyncio from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage os.environ[OPENAI_API_KEY] 你的API Key async def langchain_astream(): chat_model ChatOpenAI(modelgpt-3.5-turbo, streamingTrue) print(异步流式输出, end, flushTrue) # 异步流式astream() 方法 async for chunk in chat_model.astream([HumanMessage(content解释Python装饰器)]): print(chunk.content, end, flushTrue) if __name__ __main__: asyncio.run(langchain_astream())6.4 性能对比同步调用10 个请求 ≈ 10 秒异步调用10 个请求 ≈ 1-2 秒✅ 优点高并发、低延迟、服务吞吐量提升 10-100 倍❌ 缺点需要掌握异步编程知识部分老旧库不兼容异步适用场景企业级 API 服务、高并发对话系统、批量数据处理。7. 方式六多模型统一路由与切换动态适配模型7.1 核心说明生产环境中常需要动态切换模型低成本请求用轻量模型qwen-turbo复杂请求用高端模型gpt-4主模型故障自动切换备用模型。LangChain 提供LLMRouterChain、MultiModel封装实现一键模型路由。7.2 实战代码多模型动态切换OpenAI 通义 文心python运行import os from langchain_core.messages import HumanMessage from langchain_openai import ChatOpenAI from langchain_community.chat_models import ChatTongyi, ChatWenxin from langchain_core.language_models import BaseChatModel # 配置所有模型密钥 os.environ[OPENAI_API_KEY] 你的Key os.environ[DASHSCOPE_API_KEY] 你的Key os.environ[WENXIN_API_KEY] 你的Key os.environ[WENXIN_SECRET_KEY] 你的Key # 模型工厂统一初始化所有模型 class ModelFactory: staticmethod def get_model(model_type: str openai) - BaseChatModel: 根据类型获取对应模型统一接口 :param model_type: openai/qwen/wenxin :return: ChatModel实例 if model_type openai: return ChatOpenAI(modelgpt-3.5-turbo, temperature0.7) elif model_type qwen: return ChatTongyi(model_nameqwen-turbo, temperature0.7) elif model_type wenxin: return ChatWenxin(modelernie-3.5, temperature0.7) else: raise ValueError(不支持的模型类型) # 统一调用函数 def multi_model_switch(model_type: str, query: str): model ModelFactory.get_model(model_type) response model.invoke([HumanMessage(contentquery)]) print(f【{model_type}】模型结果, response.content) if __name__ __main__: query 请解释Python装饰器 # 动态切换模型业务代码完全不变 multi_model_switch(openai, query) multi_model_switch(qwen, query) multi_model_switch(wenxin, query)7.3 实战代码故障自动路由高可用python运行# 简化版高可用路由主模型失败自动切换备用模型 def high_available_model_call(query: str): models [openai, qwen, wenxin] for model_type in models: try: model ModelFactory.get_model(model_type) response model.invoke([HumanMessage(contentquery)]) print(f使用【{model_type}】成功, response.content) return except Exception as e: print(f【{model_type}】调用失败{str(e)}切换下一个模型) if __name__ __main__: high_available_model_call(解释Python装饰器)7.4 优缺点总结✅ 优点动态适配模型、成本优化、高可用、业务解耦❌ 缺点需要管理多模型密钥适用场景多模型混合应用、成本控制、高可用服务。8. 方式七自定义模型封装适配私有 / 小众模型8.1 核心说明如果使用私有部署模型、小众开源模型LangChain 没有官方适配包可通过继承 BaseChatModel实现自定义封装实现与官方模型完全一致的接口。8.2 实战代码自定义 ChatModel 封装python运行from typing import List, Optional from langchain_core.callbacks import CallbackManagerForLLMRun from langchain_core.language_models import BaseChatModel from langchain_core.messages import BaseMessage, HumanMessage from langchain_core.outputs import ChatGeneration, ChatResult # 自定义对话模型继承BaseChatModel class CustomChatModel(BaseChatModel): 自定义私有模型封装适配任意API api_url: str # 私有模型API地址 api_key: str # 认证密钥 property def _llm_type(self) - str: 固定返回模型类型用于日志标识 return custom_chat_model def _generate( self, messages: List[BaseMessage], stop: Optional[List[str]] None, run_manager: Optional[CallbackManagerForLLMRun] None, **kwargs, ) - ChatResult: 核心实现调用私有API返回标准化结果 # 1. 解析LangChain消息为自定义API格式 user_query messages[-1].content # 2. 调用私有模型API替换为你的私有接口 import requests response requests.post( urlself.api_url, headers{Authorization: fBearer {self.api_key}}, json{query: user_query, temperature: 0.7} ) answer response.json()[data][answer] # 3. 封装为LangChain标准输出格式 generation ChatGeneration(messageHumanMessage(contentanswer)) return ChatResult(generations[generation]) # 使用自定义模型 def custom_model_test(): # 初始化自定义模型接口与官方完全一致 custom_llm CustomChatModel( api_urlhttp://localhost:8000/api/chat, api_keyyour_private_key ) # 标准调用invoke() response custom_llm.invoke([HumanMessage(content解释Python装饰器)]) print(自定义模型结果, response.content) if __name__ __main__: custom_model_test()8.3 核心价值✅ 私有模型、小众模型无缝接入 LangChain 生态✅ 统一接口业务代码无需任何修改✅ 支持流式、异步、工具调用全能力。9. 方式八本地开源模型调用Llama 3、ChatGLM、Qwen9.1 核心说明企业隐私场景下需本地部署开源大模型Llama 3、ChatGLM4、Qwen2LangChain 通过Ollama、llama-cpp-python实现本地模型调用。9.2 环境准备安装 Ollamahttps://ollama.com/拉取本地模型ollama pull llama3/ollama pull qwen2/ollama pull chatglm49.3 实战代码LangChain 调用本地 Ollama 模型python运行from langchain_community.chat_models import ChatOllama from langchain_core.messages import HumanMessage def local_llama_call(): # 初始化本地Llama 3模型无需API Key本地调用 chat_model ChatOllama( modelllama3, # 本地模型名称qwen2/chatglm4 temperature0.7, streamingTrue ) # 标准调用 response chat_model.invoke([HumanMessage(content解释Python装饰器)]) print(本地Llama 3结果, response.content) # 流式输出 print(本地模型流式, end, flushTrue) for chunk in chat_model.stream([HumanMessage(content解释Python装饰器)]): print(chunk.content, end, flushTrue) if __name__ __main__: local_llama_call()9.4 优缺点总结✅ 优点数据本地化、隐私安全、无调用费用、离线可用❌ 缺点需要 GPU 资源、部署复杂、性能弱于云模型适用场景金融、医疗、政务等隐私敏感场景。10. 方式九带工具调用的模型调用Function Call10.1 核心说明Function Call工具调用是大模型核心能力模型判断是否需要调用外部工具查询天气、数据库、APILangChain 原生支持 ChatModel 工具调用。10.2 实战代码ChatModel 工具调用python运行import os from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage from langchain_core.tools import tool # 1. 定义自定义工具查询天气 tool def get_weather(city: str) - str: 查询指定城市的天气 Args: city: 城市名称 return f{city}今天天气晴朗温度25℃ os.environ[OPENAI_API_KEY] 你的API Key def function_call_test(): # 2. 初始化模型并绑定工具 chat_model ChatOpenAI(modelgpt-3.5-turbo, temperature0).bind_tools([get_weather]) # 3. 调用模型 response chat_model.invoke([HumanMessage(content北京今天天气怎么样)]) # 4. 解析工具调用结果 if response.tool_calls: print(模型需要调用工具, response.tool_calls) # 执行工具 tool_result get_weather.invoke(response.tool_calls[0][args]) print(工具执行结果, tool_result) else: print(模型直接回答, response.content) if __name__ __main__: function_call_test()10.3 核心价值✅ 实现模型与外部系统交互打破知识库限制✅ 标准化工具封装适配所有 ChatModel适用场景智能客服、数据分析、智能体Agent。11. 十种调用方式核心指标对比总结表格调用方式开发难度模型兼容性并发性能用户体验生产推荐度适用场景原生 API 调用⭐⭐⭐⭐⭐极低中等一般⭐极简测试、轻量化脚本LangChain LLM⭐⭐中等中等一般⭐⭐纯文本补全、老旧模型LangChain ChatModel⭐极高中等良好⭐⭐⭐⭐⭐标准对话、全场景通用流式输出⭐⭐高中等优秀⭐⭐⭐⭐⭐C 端对话、实时响应异步调用⭐⭐⭐极高优秀良好⭐⭐⭐⭐⭐高并发 API、企业服务多模型路由⭐⭐⭐极高优秀良好⭐⭐⭐⭐多模型混合、成本优化自定义模型⭐⭐⭐⭐无限优秀良好⭐⭐⭐⭐私有部署、小众模型本地开源模型⭐⭐⭐⭐中等一般良好⭐⭐⭐隐私安全、离线场景工具调用Function Call⭐⭐⭐高中等优秀⭐⭐⭐⭐⭐智能体、外部系统交互12. 生产环境最佳实践与避坑指南12.1 最佳实践优先使用 ChatModel放弃 LLMChatModel 是未来标准环境变量管理密钥绝对禁止硬编码 API Key高并发用异步 流式兼顾性能与用户体验多模型冗余主模型 备用模型避免服务故障本地模型 云模型混合隐私数据本地处理通用数据云模型处理超时重试生产环境必须配置请求超时、自动重试机制。12.2 避坑指南❌ 禁止在生产环境使用verboseTrue避免泄露敏感信息❌ 不要频繁切换模型版本避免输出不稳定❌ 流式输出必须处理前端渲染避免乱码❌ 私有模型必须封装为 ChatModel不要直接调用 API❌ 高并发场景禁止使用同步调用否则服务会阻塞崩溃。结语本文全面覆盖了PythonLangChain 调用大模型的所有主流方案从基础原生调用到生产级异步流式、多模型路由、本地部署、工具调用提供了可直接运行的实战代码 详细注释并完成了全方位对比。LangChain 的核心价值是标准化与生态化无论使用哪种模型、哪种调用方式都能通过统一接口实现业务逻辑大幅降低开发与维护成本。在实际项目中ChatModel 流式 异步 多模型路由是最优组合可满足 99% 的生产场景需求。随着 LangChain 与大模型生态的持续迭代调用方式会更加简洁高效但本文的核心思想与实战代码将长期适用。建议开发者基于本文代码快速搭建自己的大模型应用体系。