---
type: study
created: 2026-08-11
updated: 2026-08-11
sensitivity: standard
status: verified
tags:
  - study
  - langchain
  - typescript
  - integrations
  - models
  - providers
topic: LangChain JavaScript 模型与 Provider 选型总览
sources:
  - https://docs.langchain.com/oss/javascript/integrations/providers
  - https://docs.langchain.com/oss/javascript/integrations/providers/all_providers
  - https://docs.langchain.com/oss/javascript/integrations/providers/overview
  - https://docs.langchain.com/oss/javascript/integrations/chat
  - https://docs.langchain.com/oss/javascript/integrations/chat/index
  - https://docs.langchain.com/oss/javascript/integrations/embeddings
  - https://docs.langchain.com/oss/javascript/integrations/embeddings/index
  - https://docs.langchain.com/oss/javascript/integrations/llms
  - https://docs.langchain.com/oss/javascript/integrations/llms/index
last_verified: 2026-08-11
---
# 模型与 Provider 选型总览

## 结论

- 新应用默认选 **Chat Model**。它是 message-in/message-out 抽象，承担 tool calling、structured output、streaming 与多模态；具体能力仍取决于所选模型、API 端点和版本。
- **Embeddings** 只处理文本，核心接口是 `embedQuery(string)` 与 `embedDocuments(string[])`。当前 JavaScript 总览明确不支持多模态 embedding。
- **LLM** 页面描述的是较老的 string-in/string-out completion 接口。除非维护特定 instruct/completion 模型，否则应迁移到 Chat Model。
- **Provider** 是第三方能力与独立包的目录概念，不等于“模型厂商”。Provider 路由同时包含模型、检索器、工具、loader、vector store 和 sandbox。

## 路由与正文去重

本批权威清单共有 77 条路由：providers 17、chat 25、embeddings 21、llms 14。

| 路由 | 最终 Markdown 正文 | 处理方式 |
|---|---|---|
| `providers` | 307 到 `providers/overview.md` | 两条路由保留，各计一次；正文只归纳一次 |
| `providers/overview` | `providers/overview.md` | Provider 热门目录 |
| `chat` 与 `chat/index` | 相同正文 | 两条 source 保留；知识只归纳一次 |
| `embeddings` 与 `embeddings/index` | 相同正文 | 两条 source 保留；知识只归纳一次 |
| `llms` 与 `llms/index` | 相同正文 | 两条 source 保留；知识只归纳一次 |
| `providers/all_providers` | 全组件目录 | 用于发现，不复制整站清单 |

因此 source 覆盖仍是 77 个原始 URL，不因重定向或同正文别名减少，也不把同一正文重复写成两份知识。

## 三种模型抽象

| 抽象 | 输入 / 输出 | 适合场景 | 主要能力边界 |
|---|---|---|---|
| Chat Model | message 序列 → `AIMessage` | agent、对话、工具、结构化提取、多模态 | wrapper 标记支持不代表每个模型都支持 |
| Embeddings | 文本 → 定长向量 | 语义检索、聚类、RAG 索引 | 查询与文档可能采用不同策略；无多模态 embedding |
| LLM | string → string | 既有 instruct/completion 系统 | 不应作为新 tool-calling 或多模态架构的默认入口 |

Chat wrapper 接受字符串时会把它转换为 human message；LLM wrapper 接受 messages 时会先格式化成字符串。这种“接口兼容”不能抹平底层语义差异：角色、tool call、content blocks 和 usage metadata 在 LLM 路径上可能丢失或降级。

## 安装与初始化基线

官方集成通常拆成 `@langchain/core` 加独立 provider 包：

```ts
import { ChatOpenAI } from "@langchain/openai";

const model = new ChatOpenAI({
  model: process.env.MODEL_ID,
  temperature: 0,
  maxRetries: 2,
});
```

生产代码还应显式配置超时、取消信号、并发限制和 provider-specific endpoint。不要把文档示例中的模型名当长期默认值；模型 ID、区域、API version 与部署名应进入受控配置，并在发布时验证。

## 能力矩阵的正确读法

文档的 chat feature table 记录 wrapper 层的 tool calling、structured output、图片/音频/视频输入、token streaming、usage 与 logprobs。使用时要再过三道门：

1. provider wrapper 是否实现；
2. 目标模型与端点是否开放；
3. 当前 npm 包版本和运行时是否支持。

例如 Bedrock 文档明确提醒并非所有 Bedrock 模型支持工具；OpenRouter 会因上游路由变化而改变实际能力；OpenAI 页面顶层矩阵与后续音频章节存在模型级差异。上线前应以固定模型 ID 做真实 capability smoke，而不是只相信目录上的勾选。

## Embedding 不变量

- 同一索引的 provider、模型、维度、归一化与 query/document task type 必须固定；任一项变化都应视为新索引并重建，不能原地混写。
- 相似度函数要与模型输出和 vector store 配置匹配；常见选择为 cosine、Euclidean 或 dot product。
- `CacheBackedEmbeddings` 用文本哈希做 key。必须给 `namespace`，建议包含 provider、model、dimension 和预处理版本；query embedding 默认不缓存，需要显式 query store。
- 批量大小受 provider 限制；对 429/5xx 做有界退避，对不可重试的输入错误直接失败，并保存失败批次以便恢复。

## 生产决策顺序

1. 先确定数据驻留、合规、区域、网络出口和预算，再选 provider。
2. 需要工具、结构化输出或多模态时，从 Chat Model 候选中筛选；不要从 legacy LLM 开始。
3. 固定 package version、模型 ID、endpoint/API version、能力 smoke 与回滚模型。
4. 凭据只由服务端 secret manager 或云身份注入；浏览器 bundle 不得包含长期 API key 或 service-account JSON。
5. 工具执行与代码执行在模型之外做授权、参数校验、超时、资源配额、审计和幂等控制。
6. streaming 必须支持 client disconnect/abort，并在最终 chunk 或响应 metadata 汇总 usage；不能因流中断把半成品当成功。
7. structured output 仍需应用侧 schema 验证；provider 的 strict 模式不是业务规则验证。
8. 记录 provider、model、region、request id、latency、retry、finish reason、usage 与错误类别；日志不记录 prompt、凭据或敏感附件原文。

## 本组覆盖

本笔记覆盖 9 条 index/overview 路由；其余 68 条组件路由在同目录其余 7 篇笔记中各出现一次。
