一键导入
langchain-chat-models
使用 LangChain 中的聊天模型集成指南,包括 OpenAI、Anthropic、Google、Azure 和 Bedrock
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
使用 LangChain 中的聊天模型集成指南,包括 OpenAI、Anthropic、Google、Azure 和 Bedrock
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Mac 系统深度清理和优化工具。使用 Mole (mo 命令) 执行系统清理、磁盘分析、应用卸载、系统优化等任务。 触发场景(当用户提到以下任一内容时使用此 skill): - 清理 Mac、清理磁盘、释放空间、清理缓存、清理系统 - 卸载应用、删除应用、移除应用及其残留 - 磁盘分析、查看磁盘占用、大文件查找、空间分析 - 系统优化、系统维护、刷新系统、重建缓存 - 系统状态、系统监控、CPU/内存/磁盘监控 - 清理 node_modules、清理构建产物、清理项目依赖 - 清理安装包、删除 dmg/pkg 文件 - Mac 清理工具、类似 CleanMyMac 的功能 - "我的 Mac 太慢了"、"磁盘空间不足"、"电脑卡顿" - 即使没有明确说 "Mole",只要涉及上述场景就应使用
快速搭建和配置 pnpm monorepo 项目结构,包含 TypeScript、tsup 构建、私有 npm registry 配置。当用户需要"创建 monorepo"、"初始化 monorepo 项目"、"配置 pnpm workspace"、"设置 monorepo 构建"、"monorepo setup"时使用。特别适合需要统一管理多个包、配置构建工具、处理 TypeScript 路径问题的场景。即使用户只是说"帮我搭建项目结构"或"配置构建",如果涉及多包管理也应该使用此 skill。
智能拆分暂存区的代码变更为多个符合 Conventional Commits 规范的逻辑提交。当用户需要将大量变更按逻辑关系分组提交时使用,比如"拆分这些提交"、"把暂存区的变更分成多个 commit"、"按功能分别提交"、"split commits"等场景。特别适合处理包含多个模块、多种类型文件(配置、代码、测试、文档)的复杂变更集。
OKR 优化与质量评估专家。当用户需要:(1) 评估现有 OKR 的质量,(2) 优化模糊或不可量化的关键结果,(3) 检查 OKR 是否符合核心原则(聚焦、可量化、有挑战),(4) 将任务型 KR 转化为结果型 KR,(5) 提供具体的改进建议时使用。触发词包括"帮我优化 OKR"、"检查这个 OKR"、"这个 KR 写得好吗"、"如何量化这个目标"。
基于 git commits 自动生成 CHANGELOG.md 变更日志。支持语义化版本、分类整理、多格式输出。触发场景包括"生成变更日志"、"更新 CHANGELOG"、"版本记录"。
GitHub PR 代码审查技能。检查代码质量、安全性、性能和最佳实践,生成结构化审查报告。触发场景包括"审查 PR"、"代码检查"、"review pull request"。
| name | langchain-chat-models |
| description | 使用 LangChain 中的聊天模型集成指南,包括 OpenAI、Anthropic、Google、Azure 和 Bedrock |
| language | js |
LangChain 中的聊天模型为与各种 LLM 提供商交互提供了统一接口。它们接受消息序列作为输入,并返回 AI 生成的消息作为输出。聊天模型支持工具调用、结构化输出和流式传输等功能。
| 提供商 | 最适合 | 模型示例 | 包 | 主要特性 |
|---|---|---|---|---|
| OpenAI | 通用、函数调用 | gpt-4、gpt-4-turbo、gpt-3.5-turbo | @langchain/openai | 强大的函数调用、视觉、快速 |
| Anthropic | 长上下文、安全性、分析 | claude-3-opus、claude-3-sonnet、claude-3-haiku | @langchain/anthropic | 200k 上下文、工具使用、提示缓存 |
| Google GenAI | 多模态、免费层 | gemini-pro、gemini-pro-vision | @langchain/google-genai | 视觉、提供免费层 |
| Azure OpenAI | 企业、合规性 | gpt-4、gpt-35-turbo(Azure 部署) | @langchain/openai | 企业 SLA、数据驻留 |
| AWS Bedrock | AWS 生态系统、多样性 | claude、llama、titan 模型 | @langchain/aws | 多个模型、AWS 集成 |
| Google Vertex AI | GCP 生态系统、企业 | gemini-pro、palm 模型 | @langchain/google-vertexai | 企业功能、GCP 集成 |
选择 OpenAI 如果:
选择 Anthropic 如果:
选择 Azure OpenAI 如果:
选择 AWS Bedrock 如果:
选择 Google(GenAI 或 Vertex)如果:
import { ChatOpenAI } from "@langchain/openai";
// 基本初始化
const model = new ChatOpenAI({
modelName: "gpt-4",
temperature: 0.7,
openAIApiKey: process.env.OPENAI_API_KEY, // 如果在 env 中设置则可选
});
// 调用模型
const response = await model.invoke([
{ role: "system", content: "你是一个有用的助手。" },
{ role: "user", content: "什么是 LangChain?" }
]);
console.log(response.content);
// 流式响应
const stream = await model.stream("给我讲个故事");
for await (const chunk of stream) {
process.stdout.write(chunk.content);
}
import { ChatAnthropic } from "@langchain/anthropic";
const model = new ChatAnthropic({
modelName: "claude-3-opus-20240229",
temperature: 0.7,
anthropicApiKey: process.env.ANTHROPIC_API_KEY,
maxTokens: 1024,
});
// 长上下文使用
const response = await model.invoke([
{ role: "user", content: "分析这个长文档..." }
]);
// 使用工具
const modelWithTools = model.bindTools([
{
name: "get_weather",
description: "获取位置的天气",
input_schema: {
type: "object",
properties: {
location: { type: "string" }
},
required: ["location"]
}
}
]);
import { AzureChatOpenAI } from "@langchain/openai";
const model = new AzureChatOpenAI({
azureOpenAIApiKey: process.env.AZURE_OPENAI_API_KEY,
azureOpenAIApiInstanceName: process.env.AZURE_OPENAI_API_INSTANCE_NAME,
azureOpenAIApiDeploymentName: process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME,
azureOpenAIApiVersion: "2024-02-01",
temperature: 0.7,
});
const response = await model.invoke("你好,你好吗?");
import { ChatBedrockConverse } from "@langchain/aws";
const model = new ChatBedrockConverse({
model: "anthropic.claude-3-sonnet-20240229-v1:0",
region: "us-east-1",
credentials: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
},
});
const response = await model.invoke("什么是 AWS Bedrock?");
import { ChatGoogleGenerativeAI } from "@langchain/google-genai";
const model = new ChatGoogleGenerativeAI({
modelName: "gemini-pro",
apiKey: process.env.GOOGLE_API_KEY,
temperature: 0.7,
});
const response = await model.invoke("解释量子计算");
import { initChatModel } from "langchain/chat_models/universal";
// 根据环境自动选择模型
const model = await initChatModel("gpt-4", {
modelProvider: "openai",
temperature: 0.7,
});
// 或使用 Bedrock
const bedrockModel = await initChatModel(
"anthropic.claude-3-sonnet-20240229-v1:0",
{ modelProvider: "bedrock" }
);
import { ChatOpenAI } from "@langchain/openai";
import { z } from "zod";
import { tool } from "@langchain/core/tools";
// 定义工具
const weatherTool = tool(
async ({ location }) => {
return `${location}的天气:晴朗,72°F`;
},
{
name: "get_weather",
description: "获取位置的当前天气",
schema: z.object({
location: z.string().describe("城市名称"),
}),
}
);
// 将工具绑定到模型
const model = new ChatOpenAI({
modelName: "gpt-4",
}).bindTools([weatherTool]);
const response = await model.invoke("旧金山的天气怎么样?");
console.log(response.tool_calls); // 模型将建议调用天气工具
✅ 初始化任何支持的聊天模型提供商
@langchain/openai、@langchain/anthropic 等)✅ 配置模型参数
✅ 使用模型进行文本生成
✅ 实现工具/函数调用
✅ 在提供商之间切换
❌ 创建新的模型提供商
❌ 绕过提供商要求
❌ 修改模型能力
❌ 在没有正确设置的情况下访问模型
// ❌ 错误:硬编码 API 密钥
const model = new ChatOpenAI({
openAIApiKey: "sk-..." // 永远不要提交这个!
});
// ✅ 正确:使用环境变量
const model = new ChatOpenAI({
openAIApiKey: process.env.OPENAI_API_KEY
});
修复:始终使用环境变量或安全密钥管理系统。
// ❌ 不完整:缺少必填字段
const model = new AzureChatOpenAI({
azureOpenAIApiKey: process.env.AZURE_OPENAI_API_KEY,
});
// ✅ 完整:所有必填字段
const model = new AzureChatOpenAI({
azureOpenAIApiKey: process.env.AZURE_OPENAI_API_KEY,
azureOpenAIApiInstanceName: "my-instance",
azureOpenAIApiDeploymentName: "gpt-4-deployment",
azureOpenAIApiVersion: "2024-02-01",
});
修复:Azure 需要实例名称、部署名称和 API 版本。
// 不同提供商有不同的模型命名约定
// OpenAI
const openai = new ChatOpenAI({ modelName: "gpt-4" });
// Bedrock(包括提供商前缀)
const bedrock = new ChatBedrockConverse({
model: "anthropic.claude-3-sonnet-20240229-v1:0"
});
// Anthropic(直接模型名称)
const anthropic = new ChatAnthropic({
modelName: "claude-3-opus-20240229"
});
修复:查看提供商文档以获取正确的模型标识符。
// ❌ 并非所有模型都支持工具调用
const model = new ChatOpenAI({ modelName: "gpt-3.5-turbo-instruct" });
// 这个旧模型不支持工具!
// ✅ 使用支持工具的模型
const model = new ChatOpenAI({ modelName: "gpt-4" });
const withTools = model.bindTools([myTool]);
修复:在绑定工具之前验证模型是否支持函数/工具调用。GPT-4、GPT-3.5-turbo、Claude 3 和 Gemini Pro 都支持工具。
// ❌ 没有重试逻辑
const model = new ChatOpenAI();
const response = await model.invoke("你好"); // 可能因速率限制而失败
// ✅ 配置重试
const model = new ChatOpenAI({
maxRetries: 3,
timeout: 30000, // 30 秒
});
修复:配置重试逻辑并优雅地处理速率限制错误。
// ❌ 超过上下文限制
const model = new ChatOpenAI({ modelName: "gpt-3.5-turbo" }); // 4k 上下文
const longText = "...".repeat(10000);
await model.invoke(longText); // 会失败!
// ✅ 为长上下文使用适当的模型
const model = new ChatOpenAI({ modelName: "gpt-4-turbo" }); // 128k 上下文
// 或
const model = new ChatAnthropic({
modelName: "claude-3-opus-20240229" // 200k 上下文
});
修复:为您的用例选择具有适当上下文窗口的模型。
// ❌ 错误地混合使用流式和非流式
const response = await model.stream("你好");
console.log(response.content); // 不起作用!response 是异步可迭代对象
// ✅ 正确处理流式传输
const stream = await model.stream("你好");
for await (const chunk of stream) {
console.log(chunk.content);
}
// 或使用 invoke 进行非流式
const response = await model.invoke("你好");
console.log(response.content);
修复:使用 invoke() 获得完整响应,使用 stream() 进行逐令牌传输。
# OpenAI
npm install @langchain/openai
# Anthropic
npm install @langchain/anthropic
# AWS (Bedrock)
npm install @langchain/aws
# Google
npm install @langchain/google-genai
npm install @langchain/google-vertexai