【用langchain_openai库调用大模型】以下所有学习笔记示例都是在 Windows10\11平台 及 Python3.12 或以上 版本中运行验证。LangChain 1.x 导入通义大模型有以下几种方式推荐优先使用 OpenAI 兼容模式这是目前最主流且最稳定的做法。特性OpenAI 兼容模式推荐langchain-community废弃警告无有额外依赖langchain-openailangchain-community dashscopeLCEL支持完整支持支持维护状态活跃不再主动维护若出现【mportError: cannot import name ContextOverflowError from langchain_core.exceptions ...)】报错:是因 langchain 和 langchain-core 的版本不匹配。langchain-core 版本过低还没有包含这个类所以导入失败。ContextOverflowError 是 langchain-core 在较新版本【1.x】中新增的异常类用于表示模型上下文窗口溢出即输入 token 超过模型最大限制。升级langchain-openai 包至1.x以上即可。一、 方式一OpenAI 兼容模式强烈推荐通义千问兼容 OpenAI 的接口协议可以直接用 langchain-openai 包中的 ChatOpenAI 来调用只需修改 base_url 指向阿里云的兼容端点即可。无需安装 langchain-community不会出现废弃警告且完全兼容 LCEL 管道符、流式输出、异步调用等新特性。【安装依赖】同时安装langchain、langchain-openai两个相关包pip install langchain1.4.0pip install langchain-openai1.6.1pip install langchain1.4.0 pip install langchain-openai1.6.1【*】新版 langchain-openai≥0.3.x对 OpenAI SDK 的参数做了更严格的映射extra_body 已被提升为 ChatOpenAI 的一级参数用于向 API 透传非标准字段。reasoning_effort 也被识别为已知参数因为 OpenAI o1/o3 系列已支持该字段。【**】API 连接与认证常用参数这些参数决定了如何连接到大模型服务。参数类型说明modelstr模型名称api_keystrAPI 密钥。也可通过环境变量 OPENAI_API_KEY 设置。base_urlstr大模型地址。也可用于代理地址或本地部署的地址。timeoutfloat请求超时时间秒。默认为 600 秒。max_retriesintAPI 调用失败时的最大重试次数。默认为 2。【**】模型推理控制常用参数这些参数直接影响模型的生成行为和质量。它们通常对应 OpenAI API 的请求体字段。参数类型默认值说明temperaturefloat0.7采样温度 (0-2)。越高越随机/有创意越低越确定/保守。注意o1 系列模型不支持此参数。top_pfloat1.0核采样概率阈值。与 temperature 二选一调整即可。max_tokensintNone生成的最大 token 数。。nint1为每条 prompt 生成的候选回复数量。streamingboolFalse是否启用流式输出。LangChain 推荐用 .stream() 方法代替此参数。response_formatdictNone指定输出格式如 {type: json_object} 强制 JSON 输出。extra_bodydictNone传入所调用大模型API所支持的独有参数【提示】也可以通过 model_kwargs 字典传入任何上述未列出的所调用大模型 API 却支持的参数。例如DeepSeek独有的“web_search_options”参数# model_kwargs用于传递LangChain未能识别的其他模型参 # 这些参数会直接传递给底层API model_kwargs{ # 设置网络搜索选项 web_search_options: { # 设置搜索上下文大小为中等平衡搜索广度和深度 search_context_size: medium }[ langchain-openai 调用千问大模型--示例1]示例里面有更详细的讲解且可直接复制运行。# 导入 os 模块用于读取系统环境变量 import os # 从 python-dotenv 库导入 load_dotenv 函数 # 该函数的作用是将项目根目录下 .env 文件中定义的键值对加载到系统环境变量中 from dotenv import load_dotenv # 从 langchain_openai 库导入 ChatOpenAI 类 # 这是 LangChain 对 OpenAI 兼容 API 的封装提供了统一的聊天模型接口 # 它内部仍然依赖 openai 库来发送实际的 HTTP 请求 from langchain_openai import ChatOpenAI # 执行加载操作将 .env 文件中的变量如 API_KEY注入到当前进程的环境变量中 # 如果 .env 文件不存在或没有对应变量后续 os.getenv() 将返回 None load_dotenv() # 从环境变量中安全地获取名为 API_KEY 的值 # 这种写法避免了在代码中硬编码密钥是生产环境推荐的安全实践 key os.getenv(API_KEY) # 定义阿里云百炼平台提供的 OpenAI 兼容接口地址 # 通义千问系列模型通过这个端点对外提供服务 url os.getenv(ALI_URL) # 创建 ChatOpenAI 实例这是 LangChain 中代表一个聊天模型的核心对象 llm ChatOpenAI( # 指定要使用的模型名称这里选择通义千问的旗舰模型 qwen-max modelqwen3.8-max, # 传入 API 密钥用于身份认证 api_keykey, # 覆盖默认的 OpenAI 官方地址将请求重定向到阿里云的兼容接口 # 这是使用非 OpenAI 原生模型时的关键配置 base_urlurl, # 设置生成温度参数取值范围通常为 0~2 # 0.7 是一个平衡创造性和稳定性的常用值 # 值越高输出越随机多样值越低输出越确定保守 temperature0.7, ) # 调用模型的 invoke 方法发送请求并获取完整响应 # invoke 是 LangChain 的统一调用接口内部自动处理了消息格式转换、API 调用等细节 # 传入字符串时LangChain 会自动将其包装为 HumanMessage 对象 # 与 streamTrue 不同invoke 会等待模型生成完毕后一次性返回完整结果 response llm.invoke(你好请简单介绍一下你自己) # 打印响应对象的 content 属性 # response 是一个 AIMessage 对象其 content 属性包含模型生成的文本内容 # 注意这里直接打印的是最终回复不包含思考过程reasoning_content # 如需获取思考过程需要使用 llm.stream() 配合 extra_body 参数 print(response.content)二、 方式二langchain-community传统方式有废弃警告通过 langchain-community 包导入需要额外安装 dashscope SDK。注意这种方式会触发 DeprecationWarning因为 langchain-community 已被官方标记为 sunset不再主动维护。【安装依赖】同时安装langchain、langchain-community、dashscope三个相关包pip install langchain0.3.30pip install langchain-community0.3.27 #【因包里面有“-”这符号所以包名要加冒号。】pip install dashscope1.27.4 # 【用通义大模型(LLM)时须安装。】pip install langchain0.3.30 pip install langchain-community0.3.27 pip install dashscope1.27.4【注意事项】若不想触发弃用警告或报错安装的 langchain-community 要低于0.4.0版本。【1】【通用参数 (继承自 BaseChatModel)】这些参数是所有聊天模型共有的用于控制模型的基本行为。参数类型说明model_name / modelstr要使用的模型名称。api_keystr调用模型的 API 密钥。temperaturefloat控制生成结果的随机性。值越低如 0.1输出越确定值越高如 1.0输出越随机。max_tokensint限制模型生成的最大 token 数量。top_pfloat核采样参数。从累积概率超过 top_p 的 token 中进行选择。timeoutint请求超时时间。max_retriesint请求失败时的最大重试次数。verbosebool是否打印详细的运行信息。【2】【涉及调用的千问大模型相关参数】【ChatTongyi核心参数】参数类型默认值说明api_keystrNone【必填】阿里云API密钥modelstrqwen-turbo【必填】模型名称如 qwen-plus、qwen-maxtemperaturefloat0.7【可选】随机性或称温度0~1值越低越确定max_tokensint2000【可选】最大生成token数streamingboolFalse【可选】是否启用流式输出timeoutint60【可选】请求超时时间秒message_formatstrtext【可选】返回文本格式verboseboolFalse【可选】是否打印详细的运行信息。【注】 ChatTongyi 类的初始化参数主要分为两类一类是其父类 BaseChatModel 定义的通用参数另一类是其自身特有的参数。【3】【特有参数 (ChatTongyi 自身)】ChatTongyi 类特有的参数主要用于与通义千问 API 进行认证和配置。# # 1. dashscope_api_key: str, 可选通义千问DashScope的 API Key。如果未提供会自动从环境变量 DASHSCOPE_API_KEY 中读取。# # 2. model_kwargs: Dict[str, Any], 可选一个字典用于存放传递给通义千问 API 的其他参数。如果你需要开启某些特定功能如 enable_search应该在这里进行配置而不是使用 extra_body。【4】为什么用 name 能跑通用 model 却报错这是一个非常典型的 LangChain 框架参数映射机制引发的“隐蔽 Bug”。出现这种奇怪现象的核心原因在于 LangChain 的 ChatTongyi 类在初始化时对 name 和 model 这两个参数的处理逻辑完全不同。当使用 nameqwen3.7-plus 时ChatTongyi 的底层基类BaseChatModel会将 name 参数识别为“给这个模型实例起的别名/标识符”用于日志追踪或区分多模型场景而不会把它当作底层的 API 模型 ID。此时由于你没有提供有效的模型 IDChatTongyi 内部会自动回退使用默认模型通常是 qwen-turbo 或 qwen-plus 等纯文本模型。这些默认模型能够完美兼容你传入的 enable_searchTrue 等参数所以代码运行正常。当你使用 modelqwen3.7-plus 时ChatTongyi 会明确地将底层的 API 模型 ID 设置为 qwen3.7-plus。qwen3.7-plus 是一个多模态模型。当你向一个多模态模型发送请求时如果 SDK 或底层 API 的路由处理不当或者该模型对纯文本请求的某些参数如 enable_search 的传递方式有极其严格的校验就会触发阿里云服务端的参数校验错误从而抛出 InvalidParameter: url error。【5】解决方案方案一换回纯文本模型推荐如果你不需要处理图片或视频等多模态输入直接使用纯文本模型是最稳定、性价比最高的选择。将 model 改回 qwen-plus 或 qwen-max 或 qwen3.7-max等纯文本模型。方案二使用 OpenAI 兼容模式调用如果必须用 qwen3.7-plus如果你必须使用 qwen3.7-plus建议通过 LangChain 的 init_chat_model 配合 OpenAI 兼容接口来调用这种方式对多模态模型的参数路由处理更加标准。[ langchain_community调用千问大模型--示例2]示例里面有更详细的讲解且可直接复制运行。from langchain_community.chat_models import ChatTongyi import os from dotenv import load_dotenv # 加载 .env 文件中的环境变量 load_dotenv() # 读取 .env 文件中变量“API_KEY”的值 keyos.getenv(API_KEY) # # 创建通义千问调用实例 llm ChatTongyi( model qwen3.8-max, # 可选qwen-turbo/qwen-plus/qwen-max api_key key, # 使用 api_key 参数传入API Key temperature 0.5, # 保持原有温度参数 message_format text, # 返回文本格式 model_kwargs { enable_thinking: True, # 开启深度思考过程输出 enable_search: True # 开启联网搜索能力。并非所有模型都支持 enable_thinking # 或enable_search。通常 qwen-max、qwen-plus 支持联网搜索。 }, ) # 调用模型的 invoke 方法发送请求并获取完整响应 # invoke 是 LangChain 的统一调用接口内部自动处理了消息格式转换、API 调用等细节 # 传入字符串时LangChain 会自动将其包装为 HumanMessage 对象 # 与 streamTrue 不同invoke 会等待模型生成完毕后一次性返回完整结果 response llm.invoke(你好请简单介绍一下你自己) # 打印响应对象的 content 属性 # response 是一个 AIMessage 对象其 content 属性包含模型生成的文本内容 # 注意这里直接打印的是最终回复不包含思考过程reasoning_content # 如需获取思考过程需要使用 llm.stream() 配合 extra_body 参数 print(response.content)三、方式三使用 init_chat_model 调用LangChain 1.x 提供了 init_chat_model 函数可以通过指定 model_provider 来统一初始化模型。[ init_chat_model 调用千问大模型--示例3]示例里面有更详细的讲解且可直接复制运行。import os from dotenv import load_dotenv from langchain.chat_models import init_chat_model # 1. 加载环境变量 load_dotenv() key os.getenv(API_KEY) url os.getenv(ALI_URL) # 2. 初始化模型通过 OpenAI 兼容模式调用通义千问 llm init_chat_model( modelqwen-max, model_provideropenai, # 关键指定为 openai 兼容模式 base_urlurl, api_keykey, temperature0.7, ) # 基础调用 print( 基础调用 ) response llm.invoke(你好请简单介绍一下你自己) print(response.content)四、【使用langchain_openai库调用DeepSeek大模型】DeepSeek大模型的调用地址 及 API - Key 获得的方法与前面介绍的获取方法相关不大。可细看 DeepSeek 官网的官方文档说明和每步提示进行操作。新版 langchain-openai≥0.3.x对 OpenAI SDK 的参数做了更严格的映射extra_body 已被提升为 ChatOpenAI 的一级参数用于向 API 透传非标准字段。参数正确位置说明extra_body一级参数透传给 API 的非标准字段容器reasoning_effort一级参数LangChain ≥0.3.x 已识别为已知参数temperature一级参数标准 OpenAI 参数streaming一级参数LangChain 命名对应 SDK 的 stream web_search_optionsmodel_kwargsDeepSeek 特有、LangChain 未识别的参数thinkingextra_bodyDeepSeek 思考模式开关属于非标准 API 字段【langchain-openai调用DeepSeek大模型--示例4】示例里面有更详细的讲解且可直接复制运行。# 导入操作系统接口模块用于访问环境变量等操作系统功能 import os # 从dotenv库导入load_dotenv函数用于加载.env文件中的环境变量 from dotenv import load_dotenv # 从langchain_openai库导入ChatOpenAI类这是LangChain框架中用于调用OpenAI兼容API的聊天模型类 from langchain_openai import ChatOpenAI # 加载.env文件中的环境变量到系统环境中 # 这通常包括API密钥等敏感信息避免硬编码在代码中 load_dotenv() # 创建ChatOpenAI实例用于调用DeepSeek的API llm ChatOpenAI( # 从环境变量中获取DeepSeek的API密钥 # os.getenv(DEEPSEEK_KEY)会读取名为DEEPSEEK_KEY的环境变量 api_keyos.getenv(DEEPSEEK_KEY), # 设置API的基础URL指向DeepSeek的API端点 # 这里使用DeepSeek的API而不是OpenAI的 base_urlhttps://api.deepseek.com, # 指定使用的模型名称 # deepseek-v4-pro是DeepSeek的旗舰模型 modeldeepseek-v4-pro, # 设置温度参数为1控制输出的随机性 # 温度范围通常为0-2值越高输出越随机和创造性值越低输出越确定和保守 temperature1, # 设置是否使用流式输出 # False表示不使用流式输出等待完整响应后一次性返回 streamingFalse, # ✅ 显式传递extra_body参数作为ChatOpenAI的一级参数 # extra_body用于传递额外的请求体参数给API # 这里启用思考模式让模型在回答前进行深度思考 extra_body{ thinking: {type: enabled} # 启用思考模式提高推理质量 }, # ✅ 显式传递reasoning_effort参数作为ChatOpenAI的一级参数 # reasoning_effort控制模型推理的深度和努力程度 # high表示使用高强度的推理会消耗更多计算资源但结果更准确 reasoning_efforthigh, # model_kwargs用于传递LangChain未能识别的其他模型参数 # 这些参数会直接传递给底层API model_kwargs{ # 设置网络搜索选项 web_search_options: { # 设置搜索上下文大小为中等平衡搜索广度和深度 search_context_size: medium } } ) # 定义要发送给模型的提示消息 # 用途供大模型使用 messages 请你扮演一位证券分析师根据最新的信息分析一下当前A股市场。 # 调用LLM生成响应 # invoke方法会发送消息并等待完整响应 # 由于streamingFalse会一次性返回完整结果 response llm.invoke(messages) # 打印模型生成的响应内容 # response是AIMessage对象.content属性包含实际的文本内容 print(response.content)