LangChainJS 与 Gemini 将带来什么?
Source: Dev.to
请提供您希望翻译的正文内容(除代码块和 URL 之外),我将把它翻译成简体中文并保持原有的 Markdown 格式。
📦 当前 Gemini‑LangChainJS 包
一个令人眼花缭乱的包数量已经出现,用于在 LangChainJS 中使用 Gemini:
| 包 | 用途 | 状态 |
|---|---|---|
@langchain/google-genai | 基于较旧的 Google Generative AI 包;仅适用于 AI Studio API(通常称为 Gemini API)。 | 未维护 (≈ 1 年) |
@langchain/google-gauth | 基于 REST 的库,适用于 Google 托管的环境或其他类 Node 系统;可访问 AI Studio 或 Vertex AI。 | |
@langchain/google-webauth | 与 google-gauth 相同,但专为 没有 文件系统的环境设计。 | |
@langchain/google-vertexai / @langchain/google-vertexai-web | 默认使用 Vertex AI(仍可使用 AI Studio)。 | |
@langchain/google-common | 所有基于 REST 的包共用的核心助手。 |
为什么会有这么多?
最初的目标是 单一 的基于 REST 的包,能够在 Node 和浏览器上同时工作,并支持 Google Cloud 的应用默认凭证(ADC)。在实践中我们遇到了两个主要障碍:
- 平台差异 – Node 与 Web 需要分别处理文件系统访问和凭证加载。
- API 分歧 – 在当时(2023 年底 / 2024 年初),Google 提供了两个不同的 API(AI Studio 和 Vertex AI),每个都有各自的身份验证流程。
到 2024 年 1 月我们终于有了可行的解决方案,但 Google 随后发布了仅针对 AI Studio 的官方库,进一步增加了混乱。
🛠️ Lessons Learned
- 跨平台兼容性 – 我们的库在 Google 官方 JS SDK 赶上之前,就已经同时支持 Node 和浏览器。
- 快速的 Gemini 2.0 支持 – 我们在几天内实现兼容,而 Google 则用了一个多月。
- 实验性功能 – 我们尝试了安全管理器、媒体管理器,以及对非 Gemini 模型的支持(例如 AI Studio 上的 Gemma、Vertex AI 上的 Anthropic)。
尽管取得了这些成果,包的生态仍然令人困惑,而且其中一个库已经过时。是时候寻找更好的解决方案了。
🎉 引入单一统一包
今后,我们只支持一个包:
@langchain/google
请鼓掌欢呼 🎉
您可以使用任何您喜欢的包管理器进行安装:
# npm
npm install @langchain/google
# yarn
yarn add @langchain/google
# pnpm
pnpm add @langchain/google
(原示例使用了 yum;那是笔误——请使用如上所示的 npm/yarn/pnpm。)
📚 使用新库
API 的使用方式依然熟悉。如果你之前使用 ChatGoogle,现在只需从新包中导入即可继续使用:
import { ChatGoogle } from "@langchain/google";
const llm = new ChatGoogle({
model: "gemini-3-pro-preview",
});
创建代理(LangChainJS 1 风格)
LangChainJS 1 引入了全新的 createAgent() 辅助函数。它可直接与统一库配合使用:
import { createAgent } from "@langchain/google";
const agent = createAgent({
model: "gemini-3-flash-preview",
tools: [], // 在此添加你的工具
});
注意: 在新库正式发布之前,
createAgent()可能并未完全按预期工作。请关注发行说明以获取最新信息。
Source: …
🔐 身份验证与凭证
新库继续支持:
- API keys,适用于 AI Studio 和 Vertex AI(包括 Express 模式)。
- Google Cloud credentials,支持服务账号和个人用户。
凭证可以通过三种方式提供:
- 在代码中显式指定——将密钥/JSON 直接传递给构造函数。
- 环境变量——
GOOGLE_API_KEY、GOOGLE_APPLICATION_CREDENTIALS等。 - 应用默认凭证 (ADC)——让 Google SDK 自动定位凭证。
所有通信均通过 REST 进行,因此该库 不依赖 任何 Google 客户端库。
🚀 LangChainJS 1 与 Gemini 3 带来的变化
LangChainJS 0 主要面向文本。随着多模态模型的出现,处理图像、音频和视频变得临时且特定于模型。LangChainJS 1 标准化了多模态支持,新的 @langchain/google 包正是为利用这些能力而构建。
亮点:统一的 response.content
之前:response.content 可能是 字符串 或 数组,取决于模型和请求。
现在:该字段遵循一致的模式(参见 LangChainJS 1 文档),使编写下游代码更容易,能够兼容任何 Gemini 模型——无论是纯文本还是多模态。
📅 What’s Coming “Real Soon Now”
- 完整的 multimodal agent 支持(图像、音频、视频输入)。
- 集成的 Security Manager 与 Media Manager(为全新 REST 核心重新构想)。
- 为未来 Gemini 3 之后的任何 Gemini 发行版提供兼容层。
敬请期待即将发布的发行说明和博客文章,深入了解每项功能。
TL;DR
- 一个包 →
@langchain/google。 - 使用 npm / yarn / pnpm 安装。
- 现有代码(
ChatGoogle、API‑key 认证、ADC)保持不变。 - 新的 LangChainJS 1 模式(
createAgent)已可使用。 - 多模态支持已标准化,并将持续扩展。
感谢关注,祝开发愉快! 🚀
概述
LangChainJS 1 为了向后兼容仍保留 response.content,但获取响应文本部分的首选方式现在是 response.text。这样可以保证返回的是字符串。
从响应中获取文本
import { ChatGoogle } from "@langchain/google";
import { AIMessage } from "langchain/schema";
const llm = new ChatGoogle({
model: "gemini-3-flash-preview",
});
const result: AIMessage = await llm.invoke("Why is the sky blue?");
const answer: string = result.text; // guaranteed string
使用内容块
如果需要区分“思考过程”和实际内容,请使用 response.contentBlocks 字段。它始终是由新且统一的 ContentBlock.Standard 对象组成的数组。
import { ChatGoogle } from "@langchain/google";
import { AIMessage, ContentBlock } from "langchain/schema";
const llm = new ChatGoogle({
model: "gemini-3-pro-image-preview",
});
const prompt = "Draw a parrot sitting on a chain‑link fence.";
const result: AIMessage = await llm.invoke(prompt);
result.contentBlocks.forEach((block: ContentBlock.Standard) => {
if (!("text" in block)) {
// Non‑text block (e.g., image, audio, video)
saveToFile(block);
}
});
向 Gemini 发送媒体
ContentBlock.Standard 同样可用于向 Gemini 发送数据(图像、音频、视频)。
import { ChatGoogle } from "@langchain/google";
import { HumanMessage, AIMessage, ContentBlock } from "langchain/schema";
import * as fs from "fs";
const llm = new ChatGoogle({
model: "gemini-3-flash-preview",
});
const dataPath = "src/chat_models/tests/data/blue-square.png";
const dataType = "image/png";
const data = await fs.readFile(dataPath);
const data64 = data.toString("base64");
const content: ContentBlock.Standard[] = [
{
type: "text",
text: "What is in this image?",
},
{
type: "image",
data: data64,
mimeType: dataType,
},
];
const message = new HumanMessage({
contentBlocks: content,
});
const result: AIMessage = await llm.invoke([message]);
console.log(result.text);
类似的模式同样适用于 音频 和 视频 输入。
发布路线图
- Alpha:2026年1月初
- Final version:Alpha 发布后一个月内
新的包将是 @langchain/google。旧版本将进行版本提升并标记为 deprecated,作为薄层包装,将所有功能委托给新包。这为开发者提供了额外的迁移时间,无需大量代码更改。
兼容性
- 完全向后兼容无法保证,但破坏性更改应尽可能少。
@langchain/google的首次发布将缺少部分功能;社区反馈将决定优先级。
首次发布可能缺失的功能
- 嵌入支持
- 批处理支持
- 媒体管理器
- 安全管理器
- 对非 Gemini 模型的支持(哪些对您最重要?)
- 对 Veo 和 Imagen 的支持(您希望如何使用它们?)
- Google 的 Gemini 深度思考模型和 Interactions API
如果这些(或其他)功能对您至关重要,请告知我们。欢迎贡献——如果您愿意帮助集成这些功能,请与我们联系!
征求反馈
您的意见将决定路线图。请分享:
- 哪些缺失的功能对您最重要?
- 您希望看到的其他功能。
- 您是否有兴趣贡献代码或文档。
致谢
- 团队与社区:感谢 LangChain 团队及更广泛的社区提供的支持。
- 特别感谢:Denis、Linda、Steven、Noble 和 Mark——在技术和编辑方面的建议以及在艰难时刻的友好声音。
- 家庭:我的家人,感谢他们始终如一的支持。
关于作者
我是一名 Google Developer Expert(GDE)和 LangChain Champion,尽管我并未受雇于这两家公司。过去两年里,我出于对 Google 与 LangChain 产品的热爱,为该项目贡献了力量,旨在让它们共同变得更好。我将继续这项工作,也希望你们能够以自己的方式打造改善世界的工具。
欢迎随时提供反馈、功能请求或合作想法!