ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

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

@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),仅供参考
返回列表