@langchain/google-genai 2.3 版本全解析:Gemini 集成的新能力、错误处理与网关路由

发布时间:2026/9/14 0:08:23

@langchain/google-genai 2.3 版本全解析:Gemini 集成的新能力、错误处理与网关路由 langchain/google-genai 2.3 版本全解析Gemini 集成的新能力、错误处理与网关路由【免费下载链接】langchainjsThe agent engineering platform项目地址: https://gitcode.com/GitHub_Trending/la/langchainjs本篇技术指南以langchain/google-genai的 CHANGELOG 为主线系统梳理 2.x 系列重点为 2.3.x引入的核心变更EmptyContentError类型化错误、LangSmith Gateway 路由、outputDimensionality嵌入参数、原生 streamEvents 转换等。读完本文你将掌握这些能力在 LangChain.js GeminiDeveloper API集成中的具体配置方法、源码级实现原理以及对应的集成测试证据可直接应用于对话、嵌入与流式场景的工程实践。版本背景与包定位langchain/google-genai是 LangChain.js 官方发布的 Google Gemini 集成包通过 Google 官方google/generative-aiSDK 连接 Gemini 系列模型其包定义与依赖关系见 package.json当前版本 2.3.2要求 Node.js 20运行时依赖google/generative-ai^0.24.1。该包提供了两条核心能力Chat 模型ChatGoogleGenerativeAI类面向 Gemini 对话、多模态与工具调用场景嵌入模型GoogleGenerativeAIEmbeddings类面向向量检索场景。安装与基础使用方式由 README 给出npm install langchain/google-genai langchain/core export GOOGLE_API_KEYyour-api-keyimport { ChatGoogleGenerativeAI } from langchain/google-genai; import { HumanMessage } from langchain/core/messages; const model new ChatGoogleGenerativeAI({ model: gemini-pro, maxOutputTokens: 2048, }); const response await model.invoke(new HumanMessage(Hello world!));以下各节按 CHANGELOG 中的变更线索展开逐一讲解每个重要特性的配置方法、实现位置与验证测试。v2.3.2嵌入模型新增outputDimensionality参数CHANGELOG 中 2.3.2 版本记录了一条特性变更为GoogleGenerativeAIEmbeddings增加outputDimensionality参数PR #9687。该参数用于指定输出嵌入向量的维度数量仅受较新的嵌入模型如gemini-embedding-001支持而旧模型embedding-001固定输出 768 维。从 embeddings.ts 源码可见其完整实现export interface GoogleGenerativeAIEmbeddingsParams extends EmbeddingsParams { modelName?: string; model?: string; taskType?: TaskType; title?: string; stripNewLines?: boolean; /** 输出嵌入向量的维度数仅受新嵌入模型支持 */ outputDimensionality?: number; apiKey?: string; baseUrl?: string; }构造函数将该参数透传给底层 SDK 请求_convertToContent方法return { content: { role: user, parts: [{ text: cleanedText }] }, taskType: this.taskType, title: this.title, outputDimensionality: this.outputDimensionality, } as EmbedContentRequest;注意源码中的注释说明outputDimensionality虽已被 Google API 支持但当时尚未包含在 SDK 的EmbedContentRequest类型定义中因此实现中通过类型断言传入。使用示例import { GoogleGenerativeAIEmbeddings } from langchain/google-genai; const embeddings new GoogleGenerativeAIEmbeddings({ model: gemini-embedding-001, outputDimensionality: 768, }); // 单条查询向量 const res await embeddings.embedQuery(OK Google); // 批量文档向量内部按 maxBatchSize100 分批失败批次以空数组占位 const docRes await embeddings.embedDocuments([Hello world, Bye bye]);该特性有对应集成测试佐证见 embeddings.int.test.ts 中 Test GoogleGenerativeAIEmbeddings.embedQuery with outputDimensionality 与 embedDocuments with outputDimensionality 两个用例均传入outputDimensionality: 768。补充说明两个相关参数的使用约束同样来自源码注释与校验逻辑taskType目前仅被embedding-001支持title仅在taskType为RETRIEVAL_DOCUMENT时合法否则构造函数直接抛错stripNewLines默认true会先将文本中的换行替换为空格再发送。v2.3.0非流式调用抛出可捕获的EmptyContentError变更动机2.3.0 版本修复了一个关键问题当 Gemini 返回一个不含内容的 candidate 时非流式调用.invoke()、.generate()、.batch()此前会静默返回空内容 / 空generations数组。这种行为会掩盖两类本质不同的问题显式拦截提示词被 Google 的安全/复述recitation过滤器拦截或请求被整体拒绝blockReason模型未产出可用输出如思考模型thinking model在推理阶段耗尽 token 预算MAX_TOKENS、函数调用格式错误MALFORMED_FUNCTION_CALL等——这种情况下模型并非被拦截而是单纯没返回任何内容。源码实现新的类型化错误定义在 errors.ts 中export class EmptyContentError extends ns.brand( LangChainError, empty-content ) { readonly name EmptyContentError; readonly finishReason?: FinishReason | string; readonly blockReason?: string; constructor(params: EmptyContentErrorParams {}) { const message params.message ?? The model returned no content.${ params.blockReason ? Block reason: ${params.blockReason}. : }${params.finishReason ? Finish reason: ${params.finishReason}. : }; super(message); this.finishReason params.finishReason; this.blockReason params.blockReason; // 对同一输入重试无意义标记为不可重试 stampRetryable(this, false); } }关键设计点错误通过finishReason与blockReason区分被拦截与模型没输出两类情形构造时调用stampRetryable(this, false)将该错误标记为不可重试——因为同一输入在相同过滤策略/结束原因下重试不会改变结果与流式路径行为不同.stream()不会抛出该错误而是静默跳过无内容的 chunk避免破坏一个整体成功的流。使用方式try { await model.invoke(...); } catch (error) { if (EmptyContentError.isInstance(error)) { console.log(No content: ${error.finishReason ?? error.blockReason}); } }该行为有单元测试覆盖见 common.test.ts其中分别断言了finishReason如安全拦截返回的SAFETY与blockReason两种路径都能正确抛出EmptyContentError实例。v2.3.0LangSmith Gateway 支持 GeminiDeveloper API路由变更内容同一版本中还为 GeminiDeveloper API模型增加了 LangSmith Gateway 支持PR #11405。当设置了LANGSMITH_GATEWAY环境变量后ChatGoogleGenerativeAI、ChatGoogle以及initChatModel(google-genai:...)的请求会经由网关的 Gemini 路径路由并使用网关 key回退到LANGSMITH_API_KEY。同时满足以下任一条件时网关路由会被抑制显式设置了baseUrl/endpoint显式提供了apiKey配置了 Vertex AI。源码佐证实现位于 chat_models.ts构造函数通过langchain/core/utils/gateway的resolveLangSmithGatewayConfig解析网关配置const gatewayConfig resolveLangSmithGatewayConfig({...}); this.baseUrl gatewayConfig.baseURL;并且该版本顺带新增了GEMINI_API_KEY作为ChatGoogleGenerativeAI的 API key 回退环境变量——构造函数在解析 key 时的优先顺序为显式apiKey 网关 key GEMINI_API_KEYGOOGLE_API_KEY详见 chat_models.ts 构造函数中的取值逻辑。该版本还包含一处重要的守卫逻辑当启用了网关时会阻止客户端在后续请求中被重建为 Google 默认端点否则会拿网关 key 去打 Google 端点导致鉴权失败。配置示例export LANGSMITH_GATEWAYhttps://your-gateway.example.com export LANGSMITH_API_KEYyour-gateway-key # 可选当显式 apiKey 未提供时作为回退 export GEMINI_API_KEYyour-gemini-keyimport { ChatGoogleGenerativeAI } from langchain/google-genai; const model new ChatGoogleGenerativeAI({ model: gemini-2.0-flash, // 不传 baseUrl / apiKey即可走网关路由 });v2.2.0原生 streamEvents 事件转换2.2.0 为 google-genai 引入了原生streamEvents事件转换能力PR #10924。这意味着流式输出不仅能产出传统 chunk还能以标准ChatModelStreamEvent形式暴露内容块级block-level事件。实现位于 stream_events.ts核心函数convertGoogleGenAIStream是一个异步生成器输入AsyncIterableEnhancedGenerateContentResponse输出AsyncGeneratorChatModelStreamEvent以blockAccumulators与blockKeyToIndex维护text、reasoning、tool:n三类内容块的累加与索引映射首个响应到达时发出message-start事件streamUsage默认true按需在流中携带 usage/token 统计usageSnapshot与finishReason默认stop过程中对text与reasoning块分别累加最终统一收尾为完整事件。这为上层提供了把 Gemini 原生流转换为 LangChain 标准流事件的通道配合langchain/core/language_models/event中的事件类型可在 LangSmith trace 与自定义回调中消费结构化内容块。相关测试见 stream_events.test.ts 与 chat_models_stream_events.test.ts。思考模式thinkingConfig相关的版本演进思考模式配置贯穿了 1.0.x 与 2.1.x 多个版本可从 CHANGELOG 串联出完整演进线索1.0.2 / 1.0.3加入函数调用思考签名function calling thought signature支持以及thinkingConfig支持含includeThoughts、thinkingBudget并修复流式思考签名 bug1.0.3新增基于 tier 的 usage 元数据 token 计数、缓存 token 计数cached token counts进入 usage metadata2.1.2thinkingLevel新增medium取值PR #9680此前仅有LOW/HIGH2.1.8当启用includeThoughts时将思考块与文本块分离PR #9769同时正确提升 reasoning tokens2.1.26在多轮对话中往返round-trip保留思考内容块PR #10415。配置类型定义见 types.tsexport type GoogleGenerativeAIThinkingConfig { /** 是否在响应中返回思考内容仅当可用时返回 */ includeThoughts?: boolean; /** 模型应生成的思考 token 数量 */ thinkingBudget?: number; /** 思考 token 级别 */ thinkingLevel?: GoogleGenerativeAIThinkingLevel; }; export type GoogleGenerativeAIThinkingLevel | THINKING_LEVEL_UNSPECIFIED | LOW | MEDIUM | HIGH;使用示例集成测试见 chat_models.int.test.tsconst model new ChatGoogleGenerativeAI({ model: gemini-2.5-pro, thinkingConfig: { includeThoughts: true, thinkingBudget: 1024, thinkingLevel: MEDIUM, }, });注意源码注释中的约束对不支持思考功能的模型设置该字段会返回错误。聊天模型的其他重要修复与增强中断Abort信号处理2.1.14PR #9900 为聊天模型补齐了中断语义新增ModelAbortError类位于langchain/core/errors当中途流式中断时携带已累积的部分输出partialOutputinvoke()在流式回调处理器下被中断时抛出ModelAbortErrorstream()被中断时抛普通AbortErrorchunk 已交给调用方所有 provider 在_generate()与_streamResponseChunks()中均检查并传播中断信号signal.throwIfAborted()早退检查 流式循环内检查对 Google GenAI / Google Common / VertexAI / Cohere 底层 SDK 调用透传中断信号langchain/standard-tests增加了对应标准测试。这使取消操作和 fallback 链能正确工作前一个 runnable 被中断后fallback 链可继续执行下一个 runnable。枚举空字符串校验2.1.14PR #9875 为枚举值增加空字符串校验避免将空串透传给 Gemini API 后产生难以理解的运行时错误。工具调用与内容块兼容2.1.12 / 2.1.262.1.12PR #9788修复outputVersion: v1下处理 LangChainAIMessage工具调用时抛 Unknown content type tool_call 的问题为转换工具增加tool_call块类型处理2.1.26PR #9979为 Google providers 增加ContentBlock.Multimodal类型支持。流式聚合与自定义能力2.1.11 / 2.1.02.1.11PR #9827优化流式 chunk 聚合、移除冗余排序2.1.0PR #8327ChatGoogleGenerativeAI支持自定义请求头customHeaders参数同版本还支持createAgent中的自定义 agent 名称、对自定义内容 parts 的安全访问以及标准 schema 结构化输出支持2.1.24PR #10209。可观测性相关2.1.21 / 2.1.20 / 1.0.x2.1.21每个包在构造时于this.metadata.versions中写入自身版本号LangSmith trace 元数据可直接读取版本信息2.1.20为聊天模型增加字符串模型构造重载1.0.3usage metadata 按 tier 统计 token 数并含缓存 token 计数。版本兼容与开发验证依赖与兼容说明CHANGELOG 显示本包与langchain/core版本严格联动每次 core 发版都会触发对应 Patch 更新1.0.0 版本起为 LangChain v1.0 兼容性重构。仓库中的 dependency_range_tests 等目录提供了不同依赖版本区间的测试脚本用于验证包在 latest/lowest 依赖下的行为一致性。本地开发与测试README 给出了包级开发流程pnpm install # 安装依赖 pnpm build # 构建或从仓库根目录pnpm build --filter langchain/google-genai pnpm test # 单元测试 pnpm test:int # 集成测试需真实 GOOGLE_API_KEY pnpm test:standard # 标准测试unit int测试约定单元测试以.test.ts结尾集成测试以.int.test.ts结尾。本包测试目录位于 src/tests覆盖了聊天模型含扩展、标准、流事件、网关路由、上下文缓存、嵌入、工具调用转换、错误处理等维度是理解各版本变更行为最直接的参考。小结langchain/google-genai2.x 系列围绕可靠性、可观测性与 Gemini 新模型能力持续演进2.3.x 引入EmptyContentError类型化错误与 LangSmith Gateway 路由顺带新增GEMINI_API_KEY回退、为嵌入模型增加outputDimensionality2.2.0 提供原生 streamEvents 转换1.02.1 期间逐步补齐思考模式配置、中断信号、自定义请求头与结构化输出。在接入 Gemini 时可据此选择合适版本并结合 CHANGELOG、chat_models.ts、embeddings.ts 与 errors.ts 快速定位实现细节与测试证据。【免费下载链接】langchainjsThe agent engineering platform项目地址: https://gitcode.com/GitHub_Trending/la/langchainjs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/14 0:08:23

网易新闻评论舆情分析系统:Python爬虫+TextRank+情感热力图

简介:本资源是一个面向计算机专业本科生的毕业设计级舆情分析系统,基于Python与Django框架构建,聚焦网易新闻及评论数据的采集、清洗、情感分析与热点可视化,适用于Web开发、文本挖掘与社会计算方向的课程设计与毕设实践。压缩包共…

2026/9/14 0:08:23

MATLAB梯度下降实战:从收敛几何到调参与调试

简介:梯度下降法是机器学习和深度学习领域应用广泛的优化方法,原理简单且实用,其核心思想是沿当前点负梯度方向迭代更新参数,逐步逼近目标函数的局部最小值。这份MATLAB实现专门演示最速梯度下降法的完整流程,面向正在…

2026/9/14 0:08:23

Java内存数据库教学系统:手写SQL解析与HTML交互

简介:这是一套面向Java初学者与数据库入门学习者的简易数据库系统开发实践源码,聚焦基础CRUD操作与前后端协同实现,适合课程设计、小型项目练手及数据库原理理解。资源共29个文件,压缩包仅181KB,包含13个Java核心类&am…

2026/9/14 0:58:29

WorkBuddy连接实战:四层模型、Skill配置与业务系统集成指南

《WorkBuddy 实战蓝皮书》系列写到第三篇,前两篇聊了基础认知和本地环境搭建,后台收到不少私信,问得最多的问题集中在——装好之后怎么让它真正“通”起来?这个“通”不只是网络通畅,更是 WorkBuddy 跟你的电脑、你的资…

2026/9/14 0:58:29

大模型知识表征与逻辑推理机制解析

1. 大模型知识表征的本质特征大语言模型通过海量文本训练形成的知识表征,本质上是一种高维空间中的分布式表示。这种表示方式与人类大脑的神经表征有相似之处,但存在几个关键差异点:首先,模型的知识存储是隐式的。当我们询问GPT-4…

2026/9/14 0:58:29

pyfem弹塑性有限元实现:本构积分与收敛问题解析

简介:PyFEM 是一套基于 Python 的弹塑性有限元计算程序包,面向力学分析、结构仿真和数值计算学习者,主要解决材料在载荷下的线弹性及塑性变形建模问题,可应用于土木、机械与航空航天等工程场景。压缩包共 88 个文件,包…

2026/9/14 0:58:29

STM32 VS Code开发环境搭建:ARM GNU工具链+CMake+OpenOCD调试闭环

1. 为什么STM32开发者正在集体“逃离”Keil,转向VS Code?你手头那块STM32F103C8T6最小系统板,是不是还躺在抽屉里吃灰?不是它不行,而是你用的开发环境——Keil MDK或IAR——正在悄悄拖慢你的节奏。我见过太多工程师&am…

2026/9/14 0:53:29

Python运维相关的笔试题及答案

笔试题及答案项目代码本文档是一套笔试题库, 其中包含详细答案, 题型包含选择题, 解答题以及编程题, 全面覆盖了基础知识点。2023年《网络建设与运维》国赛脚本文件及导出答案视频需要参赛的人员要对最少一种脚本语言做到熟悉, 并且能够领会脚本里和网络有关的指令, 从而迅速地…

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/14 0:03:22

KCF目标跟踪算法与OTB工程实现:毕业设计实战解析

简介:这是一份基于KCF核相关滤波算法、融合尺度池与抗遮挡处理的目标检测跟踪MATLAB完整源码,主要面向计算机相关专业准备毕业设计、课程设计或期末大作业的学生,也适合需要项目实战练习的初学者。源码在OTB数据集上完成验证,能够…

2026/9/14 0:03:22

语音情感识别实战:Keras实现LSTM、CNN、SVM与MLP多模型对比

简介:面向语音情感识别入门与进阶开发者,这份基于Keras的项目源码完整实现了LSTM、CNN、SVM、MLP四种模型,兼容Python3.8与Keras/TensorFlow2环境。压缩包内含49个文件,大小约70.31MB,主体包括Python脚本、yaml/json配…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/13 11:18:28

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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