langchain-openai ChatOpenAI 实战:从安装到流式、工具、向量化一次跑通

发布时间:2026/10/15 11:30:32

langchain-openai ChatOpenAI 实战:从安装到流式、工具、向量化一次跑通 langchain-openai ChatOpenAI 实战从安装到流式、工具、向量化一次跑通【免费下载链接】langchainThe agent engineering platform.项目地址: https://gitcode.com/GitHub_Trending/la/langchainlangchain-openai 是 LangChain 官方维护的 OpenAI 集成包它基于openaiSDK 把 GPT 系列聊天模型、补全模型与 Embedding 模型包装成 LangChain 标准接口让模型对象可以直接参与链、Agent 与检索工作流。这篇 ChatOpenAI 实战指南面向需要把 GPT 接入 LangChain 的开发者10 分钟跑通安装与首次调用再覆盖流式输出、工具调用、结构化输出、向量化与多环境部署。十分钟跑通安装 langchain-openai 并发起第一次 ChatOpenAI 调用✅ 三步完成装包、配密钥、写最小调用。uv add langchain-openai # 或 pip install -U langchain-openai export OPENAI_API_KEYyour-api-keyfrom langchain_openai import ChatOpenAI model ChatOpenAI(modelgpt-4.1-mini, temperature0) ai_msg model.invoke(把 I love programming 翻译成法语) print(ai_msg.content) print(ai_msg.usage_metadata) # {input_tokens: ..., output_tokens: ..., total_tokens: ...}返回的是标准AIMessageresponse_metadata里带有token_usage、model_name、finish_reason等字段。注意api_key未显式传入时会自动读取OPENAI_API_KEY环境变量organization回退到OPENAI_ORG_ID一般无需手写。 任何未被显式声明的参数都会原样透传给底层chat.completions.create例如ChatOpenAI(..., frequency_penalty0.2)与每次调用时传入frequency_penalty0.2等价OpenAI SDK 的完整参数面都可用。功能实战ChatOpenAI 的五个高频任务逐字输出响应流式调用与用量统计对话类应用最关心先出字。stream返回一系列AIMessageChunk直接相加即可聚合出完整消息stream model.stream(messages) full next(stream) for chunk in stream: full chunk print(full.content) # 需要用量统计时model.stream(messages, stream_usageTrue)流式场景下默认不返回 token 用量传入stream_usageTrue等价于下发stream_options{include_usage: True}后聚合消息的usage_metadata才有值。异步侧对应ainvoke/astream/abatch接口与同步版一一对应。绑定工具让模型替你调用需要查天气、查数据库时用 Pydantic 模型描述工具参数即可无需手写 JSON Schemafrom pydantic import BaseModel, Field class GetWeather(BaseModel): Get the current weather in a given location location: str Field(..., descriptionThe city, e.g. San Francisco, CA) tool_model model.bind_tools([GetWeather]) ai_msg tool_model.invoke(Which city is hotter today: LA or NY?) print(ai_msg.tool_calls)bind_tools支持strictTrue强制模型严格遵循参数 Schemaparallel_tool_calls默认开启可在invoke时传False关闭也可用model.bind(parallel_tool_callsFalse)固化。直接拿到结构化结果想让返回值直接变成对象with_structured_output是最短路径from pydantic import BaseModel, Field class Joke(BaseModel): setup: str Field(descriptionThe setup of the joke) punchline: str Field(descriptionThe punchline) structured model.with_structured_output(Joke) print(structured.invoke(Tell me a joke about cats)) # Joke(setup..., punchline...)如果只是要一段合法 JSON 字符串用model.bind(response_format{type: json_object})开启 JSON 模式即可。把文本变成向量Embeddings 与超长文本向量化是检索类应用的入口OpenAIEmbeddings实现 LangChain 的Embeddings接口同步异步都有from langchain_openai import OpenAIEmbeddings embeddings OpenAIEmbeddings(modeltext-embedding-3-large, dimensions1024) print(embeddings.embed_query(hello)) print(len(embeddings.embed_documents([hello, goodbye])))文本太长怎么办超过embedding_ctx_length默认 8191 token的文本会被自动切块分别嵌入再按各块 token 数加权平均并归一化实现见 embeddings/base.py 的_process_batched_chunked_embeddings。对 OpenRouter、Ollama、vLLM 等兼容服务建议设置check_embedding_ctx_lengthFalse跳过本地 token 化避免分词器不认识模型名。延续多轮会话Responses API 与服务端状态ChatOpenAI支持走 Responses API 通道服务端可帮你保留会话状态不必每轮都重发全部历史model ChatOpenAI(modelgpt-5, use_responses_apiTrue, output_versionresponses/v1) resp model.invoke(Hi, Im Bob.) resp2 model.invoke(What is my name?, previous_response_idresp.response_metadata[id])output_versionresponses/v1会把推理摘要、内置工具调用等条目放进消息的content字段而非additional_kwargs新应用推荐开启。初始化时也可以直接use_previous_response_idTrue请求会自动丢弃到最近一次响应为止的历史消息。此时还能绑定 OpenAI 服务端内置工具如model.bind_tools([{type: web_search}])获得网页搜索自由长文本输入的自定义工具则用包内导出的custom_tool装饰器定义。ChatOpenAI 关键参数速查表参数类型默认或回退用途modelstr必填模型名如gpt-4.1-minitemperaturefloat0采样温度max_tokensint \| NoneNone最大输出 token 数api_keystr \| None读OPENAI_API_KEYAPI 密钥base_urlstr \| None依次读OPENAI_API_BASE、OPENAI_BASE_URL代理或兼容服务地址organizationstr \| None读OPENAI_ORG_ID组织 IDstream_optionsdictNone流式配置如{include_usage: True}use_responses_apibool \| NoneNone是否走/v1/responses通道output_versionstr \| NoneNoneresponses/v1启用新版消息格式model_kwargsdictNone标准 OpenAI 参数合并进请求体顶层extra_bodydictNone兼容服务自定义参数嵌套在extra_body键下dimensionsint \| NoneNone嵌入维度仅text-embedding-3及以后支持embedding_ctx_lengthint8191单条嵌入最大 token 数超出自动分块service_tierstr \| NoneNoneflex使用更便宜的 beta 层级适合非实时任务多环境接入Azure、兼容端点与传统补全模型Azure 企业部署。把环境变量换成 Azure 一套改用AzureChatOpenAIexport AZURE_OPENAI_API_KEYyour-api-key export AZURE_OPENAI_ENDPOINThttps://your-endpoint.openai.azure.com/from langchain_openai import AzureChatOpenAI model AzureChatOpenAI( azure_deploymentyour-deployment-name, api_version2024-05-01-preview, # Azure REST API 版本不是模型版本 )api_version是 Azure REST 接口版本与底层模型版本无关别混用。也支持azure_ad_token做 Azure AD 令牌认证向量与补全模型对应AzureOpenAIEmbeddings、AzureOpenAI。OpenAI 兼容端点。base_url指到 vLLM、Ollama、LM Studio 即可复用同一套代码model ChatOpenAI( base_urlhttp://localhost:8000/v1, api_keyEMPTY, modelmeta-llama/Llama-2-7b-chat-hf, use_responses_apiFalse, # 避免模型名触发 Responses API 路由 extra_body{use_beam_search: True, best_of: 4}, # vLLM 专属参数 )⚠️ 标准 OpenAI 参数走model_kwargs合并进请求体顶层如max_completion_tokens、audio服务商自定义参数必须走extra_body嵌套在该键下。自定义参数误用model_kwargs会直接触发 API 报错。另外ChatOpenAI只对齐官方 OpenAI 响应规范第三方私有的reasoning_content等字段不会被提取对接 OpenRouter、DeepSeek 等建议优先用对应的供应商专属包。传统补全模型。如果用的是非聊天式模型如gpt-3.5-turbo-instruct入口是OpenAI类OpenAI(modelgpt-3.5-turbo-instruct).invoke(The meaning of life is )同样支持stream与异步调用。排错与常见坑包内把 OpenAI SDK 的异常统一映射为 LangChain 标准异常定义在 chat_models/base.py便于except分类捕获。高频问题对照现象原因解法抛出OpenAIAuthenticationError密钥未设置或无效设置OPENAI_API_KEY或显式传api_key抛出OpenAIContextOverflowError输入超出模型上下文上限截断历史、换大上下文模型抛出OpenAIRateLimitError触发限流指数退避重试、降低并发抛出OpenAIModelNotFoundError模型名拼错或 Azure 场景传了模型名而非部署名检查azure_deployment配置流式时抛出StreamChunkTimeoutErrorstream_chunk_timeout内未收到分块调大超时或检查网络、代理兼容端点报 400 参数错误非 OpenAI 参数走了model_kwargs改用extra_body兼容服务嵌入报 base64 解码错误服务不支持 token 化/base64 编码check_embedding_ctx_lengthFalse必要时encoding_formatfloattiktoken 报不认识模型名兼容服务的模型不在 tiktoken 列表显式指定tiktoken_model_name按场景选入口场景推荐入口聊天、Agent、链式编排ChatOpenAI文档向量化、语义检索OpenAIEmbeddingsAzure 企业环境AzureChatOpenAI/AzureOpenAIEmbeddings传统文本补全OpenAIResponses API 自由格式工具custom_tool装饰器langchain-openai 的本质是给 OpenAI SDK 加了一层 LangChain 标准化的外壳invoke/stream/bind_tools这些接口让你在换模型时几乎不用改业务代码。建议从ChatOpenAI的基本调用起步遇到多轮状态再开 Responses API接入私有服务时把extra_body与use_responses_apiFalse记在手上绝大多数落地问题都有现成答案。【免费下载链接】langchainThe agent engineering platform.项目地址: https://gitcode.com/GitHub_Trending/la/langchain创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/15 11:30:32

Gin框架在Web3.0后端开发中的高效实践

1. Gin框架入门:为什么选择它作为Web3.0后端开发利器在区块链和去中心化应用爆发的Web3.0时代,后端开发框架的选择直接关系到DApp的性能和开发效率。Gin作为Go语言生态中最轻量级的高性能Web框架,正成为越来越多Web3.0开发者的首选工具。我最…

2026/10/15 11:30:32

CentOS 7 源码编译 OpenSSH 8.3 实战:FIPS 合规与无中断升级

1. 项目概述:为什么在 CentOS 7 上坚持源码编译 OpenSSH 8.3 是个务实选择 你打开终端,输入 ssh -V ,看到的是 OpenSSH_7.4p1, OpenSSL 1.0.2k-fips ——这个版本从 CentOS 7.4 发布起就再没变过。它稳定,但早已落后主流近五年…

2026/10/15 11:30:32

R语言gganimate动态可视化:从静态图表到可验证时间动画

简介:本资源是一套面向R语言数据可视化学习者的动画图表实战教程,聚焦ggplot2与gganimate包的协同应用,适用于具备基础R编程能力、希望提升动态叙事表达能力的中初级数据分析从业者及高校师生。压缩包共7个文件,含2个R Markdown源…

2026/10/15 12:40:53

深入解析AQS:Java并发编程的核心框架

1. 理解AQS的本质第一次接触AQS时,我盯着这个缩写看了半天——AbstractQueuedSynchronizer,抽象队列同步器。名字听起来就很唬人,但当我真正理解它的设计哲学后,才发现这简直是Java并发编程中的瑞士军刀。AQS本质上是一个构建锁和…

2026/10/15 12:40:53

B2B销售邮件采集工具选型指南:从抓取到CRM的实操避坑

1. 销售勘探场景下的邮件信息采集工具选型思路做B2B销售的人都有一个共识:客户线索的质量直接决定成单率。而在所有线索获取渠道中,邮件信息采集一直是最稳定、最可规模化的一种方式。2020年前后,这个领域经历了一轮明显的工具迭代——早期那…

2026/10/15 12:40:53

Flowing多智能体入门:从猜词游戏理解消息流控与Schema契约

1. 这不是玩具代码:一个真正能跑通、能调试、能讲清原理的多智能体入门切口“Flowing框架”这个词最近在技术圈里冒得挺快,但翻遍中文社区,要么是零散的API文档截图,要么是直接甩出一整套企业级调度系统demo——对刚摸到多智能体门…

2026/10/15 12:40:53

推荐系统冷启动实战:用户、物品与系统冷启动策略详解

1. 冷启动不是"没数据"三个字能概括的推荐系统做到一定阶段,最让人头疼的不是模型效果上不去,而是新用户进来之后首页推什么。老用户有行为序列、有画像标签、有协同过滤的相似邻居,模型随便跑跑都能给出像样的结果。但新用户呢&am…

2026/10/15 12:40:53

ECharts花式折线图实战:渐变、双轴、动态效果与性能优化

折线图大概是数据可视化里最朴素的一张图了。但做项目的人基本都遇到过这种需求——明明是同一份数据,客户看完默认样式的折线图只说“还行”,看到加了渐变、标记点和动画的“花式折线图”却说“这个好看,就要这个”。我接过的可视化需求里&a…

2026/10/14 11:31:03

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/14 17:41:07

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/14 2:32:55

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/15 0:02:22

防关联浏览器哪个好?三款产品实测差异解析

新手做多店铺,最纠结的就是防关联浏览器选哪个。飞跨、网易、站斧这三款被问得最多,先给结论:要一体化省心、长期便宜,选站斧;要网易招牌和稳,选网易;预算紧做东南亚 Lazada,选飞跨。…

2026/10/15 0:02:22

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成 一、技术背景 大模型(LLM)在通用场景下表现强大,但当我们将 GPT-4 或 Qwen 直接用于生成影刀RPA操作指令和 XPath 定位时,准确率通常只有 40%-60%。原因…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑