with one click
langchain-tools
LangChain 工具集成使用指南,包括预构建工具包、Tavily、Wikipedia 和自定义工具
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
LangChain 工具集成使用指南,包括预构建工具包、Tavily、Wikipedia 和自定义工具
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
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-tools |
| description | LangChain 工具集成使用指南,包括预构建工具包、Tavily、Wikipedia 和自定义工具 |
| language | js |
工具使 LLM 能够与外部系统交互、执行计算、搜索网络、查询数据库等。它们将模型能力扩展到文本生成之外,使 Agent 真正具备可执行性。
| 工具/工具包 | 最适用于 | 包 | 主要特性 |
|---|---|---|---|
| Tavily 搜索 | 网络搜索 | @langchain/community | AI 优化的搜索 API |
| Wikipedia | 百科全书查询 | @langchain/community | Wikipedia API 访问 |
| 计算器(Calculator) | 数学运算 | @langchain/community | 表达式求值 |
| DuckDuckGo 搜索 | 注重隐私的搜索 | @langchain/community | 无需 API 密钥 |
| 浏览器工具 | 网页自动化 | @langchain/community | 无头浏览器 |
| 向量存储工具 | 语义搜索 | 基于向量存储 | 查询您自己的数据 |
| 自定义工具 | 您的特定需求 | @langchain/core/tools | 定义任何函数 |
选择 Tavily 如果:
选择 Wikipedia 如果:
选择自定义工具如果:
import { TavilySearchResults } from "@langchain/community/tools/tavily_search";
// 初始化 Tavily(需要 API 密钥)
const searchTool = new TavilySearchResults({
maxResults: 3,
apiKey: process.env.TAVILY_API_KEY,
});
// 直接使用
const results = await searchTool.invoke("Latest AI news");
console.log(results);
// 与 Agent 一起使用
import { ChatOpenAI } from "@langchain/openai";
import { createReactAgent } from "@langchain/langgraph/prebuilt";
const model = new ChatOpenAI({ modelName: "gpt-4" });
const agent = createReactAgent({
llm: model,
tools: [searchTool],
});
const response = await agent.invoke({
messages: [{ role: "user", content: "What's new in AI today?" }]
});
import { WikipediaQueryRun } from "@langchain/community/tools/wikipedia_query_run";
const wikipediaTool = new WikipediaQueryRun({
topKResults: 3,
maxDocContentLength: 4000,
});
// 查询 Wikipedia
const result = await wikipediaTool.invoke("Artificial Intelligence");
console.log(result);
import { Calculator } from "@langchain/community/tools/calculator";
const calculator = new Calculator();
// 执行计算
const result = await calculator.invoke("sqrt(144) + 5 * 3");
console.log(result); // "27"
// 在 Agent 中用于数学问题
const mathAgent = createReactAgent({
llm: model,
tools: [calculator],
});
import { DuckDuckGoSearch } from "@langchain/community/tools/duckduckgo_search";
const searchTool = new DuckDuckGoSearch({
maxResults: 5,
});
const results = await searchTool.invoke("LangChain framework");
import { tool } from "@langchain/core/tools";
import { z } from "zod";
// 定义自定义工具
const weatherTool = tool(
async ({ location, unit = "celsius" }) => {
// 您的实现
const data = await fetchWeather(location, unit);
return `The weather in ${location} is ${data.temp}°${unit === "celsius" ? "C" : "F"}`;
},
{
name: "get_weather",
description: "Get the current weather for a location. Use this when users ask about weather.",
schema: z.object({
location: z.string().describe("The city name, e.g., 'San Francisco'"),
unit: z.enum(["celsius", "fahrenheit"]).optional().describe("Temperature unit"),
}),
}
);
// 与 Agent 一起使用
const agent = createReactAgent({
llm: model,
tools: [weatherTool],
});
const response = await agent.invoke({
messages: [{ role: "user", content: "What's the weather in London?" }]
});
import { StructuredTool } from "@langchain/core/tools";
import { z } from "zod";
class DatabaseQueryTool extends StructuredTool {
name = "database_query";
description = "Query the customer database for information";
schema = z.object({
customerId: z.string().describe("Customer ID to look up"),
});
async _call({ customerId }: { customerId: string }): Promise<string> {
// 您的数据库逻辑
const customer = await db.getCustomer(customerId);
return JSON.stringify(customer);
}
}
const dbTool = new DatabaseQueryTool();
import { createRetrieverTool } from "langchain/tools/retriever";
import { MemoryVectorStore } from "langchain/vectorstores/memory";
import { OpenAIEmbeddings } from "@langchain/openai";
// 创建向量存储
const vectorStore = await MemoryVectorStore.fromTexts(
["LangChain is a framework...", "Agents use tools..."],
[{}, {}],
new OpenAIEmbeddings()
);
// 转换为工具
const retrieverTool = createRetrieverTool(
vectorStore.asRetriever(),
{
name: "knowledge_base",
description: "Search the knowledge base for information about LangChain",
}
);
// 在 Agent 中使用
const agent = createReactAgent({
llm: model,
tools: [retrieverTool],
});
import { ChatOpenAI } from "@langchain/openai";
import { TavilySearchResults } from "@langchain/community/tools/tavily_search";
import { Calculator } from "@langchain/community/tools/calculator";
import { tool } from "@langchain/core/tools";
import { z } from "zod";
import { createReactAgent } from "@langchain/langgraph/prebuilt";
// 定义工具
const searchTool = new TavilySearchResults({ maxResults: 3 });
const calculator = new Calculator();
const customTool = tool(
async ({ query }) => {
// 您的自定义逻辑
return `Custom result for: ${query}`;
},
{
name: "custom_lookup",
description: "Look up custom information",
schema: z.object({
query: z.string().describe("The query to look up"),
}),
}
);
// 创建具有多个工具的 Agent
const agent = createReactAgent({
llm: new ChatOpenAI({ modelName: "gpt-4" }),
tools: [searchTool, calculator, customTool],
});
// Agent 将选择适当的工具
const response = await agent.invoke({
messages: [{
role: "user",
content: "Search for the population of Tokyo and calculate if it doubled"
}]
});
import { tool } from "@langchain/core/tools";
import { z } from "zod";
const apiTool = tool(
async ({ endpoint }) => {
try {
const response = await fetch(`https://api.example.com/${endpoint}`);
if (!response.ok) {
return `API error: ${response.statusText}`;
}
const data = await response.json();
return JSON.stringify(data);
} catch (error) {
return `Failed to call API: ${error.message}`;
}
},
{
name: "api_call",
description: "Call external API",
schema: z.object({
endpoint: z.string().describe("API endpoint to call"),
}),
}
);
✅ 使用预构建工具
✅ 创建自定义工具
✅ 组合多个工具
✅ 处理工具响应
❌ 安全地执行任意代码
❌ 绕过身份验证
❌ 保证工具选择
❌ 使用模型不支持的工具
// ❌ 缺少 API 密钥
const tool = new TavilySearchResults();
await tool.invoke("query"); // 错误!
// ✅ 提供 API 密钥
const tool = new TavilySearchResults({
apiKey: process.env.TAVILY_API_KEY,
});
修复方法:在环境变量中设置所需的 API 密钥。
// ❌ 模型不支持工具调用
import { ChatOpenAI } from "@langchain/openai";
const model = new ChatOpenAI({ modelName: "gpt-3.5-turbo-instruct" });
// 此模型不支持工具!
// ✅ 使用支持工具的模型
const model = new ChatOpenAI({ modelName: "gpt-4" });
const modelWithTools = model.bindTools([myTool]);
修复方法:使用支持函数调用的模型(GPT-4、Claude 3 等)。
// ❌ 描述不清晰
const tool = tool(
async ({ x }) => x * 2,
{
name: "tool1",
description: "A tool", // 太模糊!
schema: z.object({ x: z.number() }),
}
);
// ✅ 清晰、具体的描述
const tool = tool(
async ({ number }) => number * 2,
{
name: "double_number",
description: "Multiply a number by 2. Use this when the user wants to double a value.",
schema: z.object({
number: z.number().describe("The number to double"),
}),
}
);
修复方法:编写清晰的描述,帮助模型知道何时使用该工具。
// ❌ 没有模式验证
const tool = tool(
async ({ location }) => {
// 假设 location 是字符串,但没有验证
return location.toUpperCase(); // 可能崩溃!
},
{
name: "format_location",
description: "Format location",
schema: z.object({ location: z.any() }), // 太宽松
}
);
// ✅ 正确的模式
const tool = tool(
async ({ location }) => {
return location.toUpperCase();
},
{
name: "format_location",
description: "Format location name to uppercase",
schema: z.object({
location: z.string().describe("Location name"),
}),
}
);
修复方法:使用特定的 Zod 模式确保类型安全。
# 社区工具
npm install @langchain/community
# 核心工具
npm install @langchain/core
# 特定集成
npm install @langchain/openai # 用于基于 OpenAI 的工具