一键导入
langchain-models
Initialize and use LangChain chat models - includes provider selection (OpenAI, Anthropic, Google), model configuration, and invocation patterns
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Initialize and use LangChain chat models - includes provider selection (OpenAI, Anthropic, Google), model configuration, and invocation patterns
用 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-models |
| description | Initialize and use LangChain chat models - includes provider selection (OpenAI, Anthropic, Google), model configuration, and invocation patterns |
| language | js |
聊天模型是 LangChain 应用程序的核心。它们接收消息作为输入并返回 AI 生成的消息作为输出。LangChain 在多个提供商(OpenAI、Anthropic、Google 等)之间提供统一的接口。
核心概念:
| 提供商 | 最适合 | 模型 | 优势 |
|---|---|---|---|
| OpenAI | 通用、推理 | GPT-4.1、GPT-5 | 强大推理、大上下文 |
| Anthropic | 安全性、分析 | Claude Sonnet/Opus | 安全性、长上下文、视觉 |
| 多模态、速度 | Gemini 2.5 | 快速、多模态、成本效益 | |
| AWS Bedrock | 企业级、合规性 | 多个提供商 | 安全性、合规性、多样性 |
| Azure OpenAI | 企业级 OpenAI | GPT 模型 | 企业功能、SLA |
| 用例 | 推荐模型 | 原因 |
|---|---|---|
| 复杂推理 | GPT-5、Claude Opus | 最佳逻辑能力 |
| 快速响应 | Gemini Flash、GPT-4.1-mini | 低延迟 |
| 视觉任务 | GPT-4.1、Claude Sonnet、Gemini | 多模态支持 |
| 长上下文 | Claude Opus、Gemini | 100k+ token 窗口 |
| 成本效益 | GPT-4.1-mini、Gemini Flash | 较低定价 |
| 企业级/合规性 | Azure OpenAI、AWS Bedrock | 安全功能 |
| 方法 | 何时使用 | 示例 |
|---|---|---|
initChatModel("provider:model") | 在提供商之间快速切换 | initChatModel("openai:gpt-4.1") |
| 提供商类 | 需要特定于提供商的功能 | new ChatOpenAI({ model: "gpt-4.1" }) |
| 带配置 | 需要自定义参数 | 温度、最大 token 等 |
import { initChatModel } from "langchain";
// 通用初始化 - 最简单的方法
const model = await initChatModel("openai:gpt-4.1");
// 或使用提供商简写
const model2 = await initChatModel("gpt-4.1"); // 默认为 OpenAI
// 设置 API 密钥(通常从环境变量)
process.env.OPENAI_API_KEY = "your-api-key";
const model3 = await initChatModel("openai:gpt-4.1");
import { ChatOpenAI } from "@langchain/openai";
import { ChatAnthropic } from "@langchain/anthropic";
import { ChatGoogleGenerativeAI } from "@langchain/google-genai";
// OpenAI
const openai = new ChatOpenAI({
model: "gpt-4.1",
temperature: 0.7,
maxTokens: 1000,
apiKey: process.env.OPENAI_API_KEY,
});
// Anthropic
const anthropic = new ChatAnthropic({
model: "claude-sonnet-4-5-20250929",
temperature: 0,
maxTokens: 2000,
apiKey: process.env.ANTHROPIC_API_KEY,
});
// Google
const google = new ChatGoogleGenerativeAI({
model: "gemini-2.5-flash-lite",
temperature: 0.5,
apiKey: process.env.GOOGLE_API_KEY,
});
import { initChatModel } from "langchain";
const model = await initChatModel("gpt-4.1");
// 字符串输入(转换为 HumanMessage)
const response = await model.invoke("什么是 LangChain?");
console.log(response.content);
// 消息数组输入
const response2 = await model.invoke([
{ role: "user", content: "你好!" }
]);
console.log(response2.content);
import { initChatModel } from "langchain";
const model = await initChatModel("gpt-4.1");
// 在 token 到达时流式传输
const stream = await model.stream("解释量子计算");
for await (const chunk of stream) {
process.stdout.write(chunk.content);
}
import { initChatModel } from "langchain";
const model = await initChatModel("gpt-4.1");
// 并行处理多个输入
const results = await model.batch([
"什么是 AI?",
"什么是 ML?",
"什么是 LangChain?"
]);
results.forEach((result, i) => {
console.log(`答案 ${i + 1}:`, result.content);
});
import { initChatModel } from "langchain";
const model = await initChatModel("gpt-4.1");
// 构建对话历史
const messages = [
{ role: "system", content: "您是一个有用的助手。" },
{ role: "user", content: "法国的首都是什么?" },
];
const response1 = await model.invoke(messages);
messages.push({ role: "assistant", content: response1.content });
// 继续对话
messages.push({ role: "user", content: "它的人口是多少?" });
const response2 = await model.invoke(messages);
console.log(response2.content); // 知道我们在谈论巴黎
import { ChatOpenAI } from "@langchain/openai";
const model = new ChatOpenAI({
model: "gpt-4.1",
// 控制随机性(0 = 确定性,1 = 创造性)
temperature: 0.7,
// 限制响应长度
maxTokens: 500,
// 替代采样方法
topP: 0.9,
// 惩罚重复
frequencyPenalty: 0.5,
presencePenalty: 0.5,
// 在这些字符串处停止生成
stop: ["\n\n", "END"],
// 请求超时
timeout: 30000, // 30 秒
// 失败时的最大重试次数
maxRetries: 3,
});
import { ChatOpenAI } from "@langchain/openai";
const azure = new ChatOpenAI({
azureOpenAIApiKey: process.env.AZURE_OPENAI_API_KEY,
azureOpenAIApiInstanceName: "your-instance-name",
azureOpenAIApiDeploymentName: "your-deployment-name",
azureOpenAIApiVersion: "2024-02-15-preview",
});
import { ChatBedrock } from "@langchain/aws";
// 来自环境变量或 ~/.aws/credentials 的 AWS 凭证
const bedrock = new ChatBedrock({
model: "anthropic.claude-3-5-sonnet-20240620-v1:0",
region: "us-east-1",
credentials: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
},
});
import { initChatModel } from "langchain";
function getModel(task: string) {
const modelMap = {
reasoning: "openai:gpt-5",
fast: "google-genai:gemini-2.5-flash-lite",
vision: "openai:gpt-4.1",
long_context: "anthropic:claude-sonnet-4-5-20250929",
cost_effective: "openai:gpt-4.1-mini",
};
return initChatModel(modelMap[task] || "openai:gpt-4.1");
}
// 使用
const reasoningModel = await getModel("reasoning");
const fastModel = await getModel("fast");
import { initChatModel } from "langchain";
const model = await initChatModel("gpt-4.1");
try {
const response = await model.invoke("你好!");
console.log(response.content);
} catch (error) {
if (error.status === 429) {
console.error("超过速率限制");
} else if (error.status === 401) {
console.error("无效的 API 密钥");
} else {
console.error("错误:", error.message);
}
}
import { initChatModel } from "langchain";
const model = await initChatModel("gpt-4.1");
// 检查模型是否支持功能
console.log("支持流式传输:", typeof model.stream === "function");
console.log("支持工具调用:", typeof model.bindTools === "function");
console.log("支持结构化输出:", typeof model.withStructuredOutput === "function");
✅ 模型选择:来自任何提供商的任何支持的模型 ✅ 温度:控制随机性(0-1) ✅ 最大 Token:限制响应长度 ✅ 停止序列:定义停止生成的位置 ✅ 超时/重试:控制请求行为 ✅ API 密钥:每个模型或来自环境变量 ✅ 特定于提供商的选项:每个提供商都有独特的功能
❌ 模型训练数据:模型是预训练的 ❌ 模型架构:无法修改内部结构 ❌ Token 成本:由提供商设置 ❌ 速率限制:由提供商设置(可以使用队列管理) ❌ 模型功能:视觉/工具支持是特定于模型的
// ❌ 问题:缺少 API 密钥
const model = await initChatModel("openai:gpt-4.1");
await model.invoke("你好"); // 错误:找不到 API 密钥
// ✅ 解决方案:设置环境变量
process.env.OPENAI_API_KEY = "sk-...";
const model = await initChatModel("openai:gpt-4.1");
// 或直接传递
import { ChatOpenAI } from "@langchain/openai";
const model = new ChatOpenAI({
model: "gpt-4.1",
apiKey: "sk-...",
});
// ❌ 问题:错误的模型名称
const model = await initChatModel("gpt4"); // 错误!
// ✅ 解决方案:使用正确的格式
const model = await initChatModel("openai:gpt-4.1");
// 或提供商简写
const model2 = await initChatModel("gpt-4.1");
// ❌ 问题:错误的属性访问
const response = await model.invoke("你好");
console.log(response); // AIMessage 对象,不是字符串
// ✅ 解决方案:访问 .content 属性
console.log(response.content); // "你好!我可以帮您吗?"
// 或使用 .toString()
console.log(response.toString());
// ❌ 问题:未等待流
const stream = model.stream("你好");
console.log(stream); // Promise,不是 chunks
// ✅ 解决方案:使用 for await
const stream = await model.stream("你好");
for await (const chunk of stream) {
console.log(chunk.content);
}
// ❌ 问题:错误的温度范围
const model = new ChatOpenAI({
temperature: 10, // 太高了!应该是 0-1
});
// ✅ 解决方案:使用 0-1 范围
const deterministic = new ChatOpenAI({ temperature: 0 }); // 始终相同
const balanced = new ChatOpenAI({ temperature: 0.7 }); // 默认
const creative = new ChatOpenAI({ temperature: 1 }); // 最大随机性
// ❌ 问题:输入 + 输出超过模型限制
const longText = "...50,000 个词...";
const model = await initChatModel("gpt-4.1"); // 128k 上下文
await model.invoke(longText); // 可能成功
const model2 = await initChatModel("gpt-4.1-mini"); // 16k 上下文
await model2.invoke(longText); // 错误:上下文太长
// ✅ 解决方案:检查输入长度或使用更大的上下文模型
import { encoding_for_model } from "tiktoken";
const enc = encoding_for_model("gpt-4.1");
const tokens = enc.encode(longText);
console.log(`输入 tokens:${tokens.length}`);
if (tokens.length > 100000) {
// 使用具有 200k 上下文的 Claude
const model = await initChatModel("anthropic:claude-opus-4");
}
// ❌ 问题:对错误的模型使用特定于提供商的功能
const google = await initChatModel("google-genai:gemini-2.5-flash");
google.bindTools([tool]); // 可能无法以相同的方式工作
// ✅ 解决方案:检查每个提供商的文档
// OpenAI 有特定的工具调用格式
// Anthropic 有特定的工具调用格式
// Google 有特定的工具调用格式
// 使用 initChatModel 以获得可移植性,但要注意差异