Tavily 是一个专为 AI 代理(LLM)构建的搜索引擎,提供实时、准确和真实的结果。Tavily 提供一个 提取 端点,可用于提取一个或多个 URL 的清洗和解析后的内容。
概述
集成详情
| 类 | 包 | PY 支持 | 下载量 | 版本 |
|---|---|---|---|---|
TavilyExtract | @langchain/tavily | ✅ | !NPM - 下载量 | !NPM - 版本 |
工具特性
| 返回产物 | 原生异步 | 返回数据 | 定价 |
|---|---|---|---|
| ❌ | ✅ | raw content and images | 1,000 free credits / month |
设置
该集成位于 @langchain/tavily 包中,可以按以下方式安装:
npm install @langchain/tavily @langchain/core
yarn add @langchain/tavily @langchain/core
pnpm add @langchain/tavily @langchain/core
凭证
设置 Tavily API 密钥 并将其设置为名为 TAVILY_API_KEY.
process.env.TAVILY_API_KEY = "YOUR_API_KEY"
设置 LangSmith 也很有帮助(但非必需),以获得最佳的可观测性:
process.env.LANGSMITH_TRACING="true"
process.env.LANGSMITH_API_KEY="your-api-key"
实例化
该工具在实例化时接受以下参数:
- -
extractDepth(可选,字符串):提取深度,可以是"basic"or"advanced"。默认值为"basic". - -
includeImages(可选,布尔值):是否在提取中包含图片。默认值为false. - -
format(可选,字符串):内容格式。"markdown"or"text"。默认值为"markdown". - -
includeFavicon(可选,布尔值):包含每个结果的 favicon URL。默认值为false.
有关可用参数的完整概述,请参阅 Tavily 提取 API 文档.
const tool = new TavilyExtract({
extractDepth: "basic",
includeImages: false,
});
调用
使用参数直接调用
Tavily 提取工具在调用时接受以下参数:
- -
urls(必需):要提取内容的 URL 列表。 - - 以下参数也可以在调用时设置:
extractDepth,includeImages.
注意:可选参数可供代理动态设置。如果您在实例化时设置了参数,然后在调用时传递了不同的值,工具将使用调用时传递的值。
await tool.invoke({ urls: ["https://en.wikipedia.org/wiki/Lionel_Messi"] });
{
results: [{
url: 'https://en.wikipedia.org/wiki/Lionel_Messi',
raw_content: 'Lionel Messi - Wikipedia\nJump to content\nMain menu\n... (truncated)',
images: []
}],
failed_results: [],
response_time: 0.02
}
使用 ToolCall 调用
我们还可以使用模型生成的 ToolCall来调用工具,在这种情况下将返回一个 ToolMessage:
// This is usually generated by a model, but we'll create a tool call directly for demo purposes.
const modelGeneratedToolCall = {
args: { urls: ["https://en.wikipedia.org/wiki/Lionel_Messi"] },
id: "1",
name: tool.name,
type: "tool_call",
};
const toolMsg = await tool.invoke(modelGeneratedToolCall);
// The content is a JSON string of results
console.log(toolMsg.content.slice(0, 400));
{"results": [{"url": "https://en.wikipedia.org/wiki/Lionel_Messi", "raw_content": "Lionel Messi - Wikipedia\nJump to content\nMain menu\nMain menu\nmove to sidebar hide\nNavigation\n\nMain page\nContents\nCurrent events\nRandom article\nAbout Wikipedia\nContact us\n\nContribute\n\nHelp\nLearn to edit\nCommunity portal\nRecent changes\nUpload file\nSpecial pages\n... (truncated)"}], "failed_results": [], "response_time": 0.02}
在代理中使用
我们可以通过将其传递给 createAgent来直接使用提取工具。代理可以动态设置 URL 列表和开关,如 extractDepth 和 includeImages 作为其工具调用的一部分。
// @lc-docs-hide-cell
const llm = new ChatOpenAI({
model: "gpt-5.5",
temperature: 0,
});
const tavilyExtractTool = new TavilyExtract();
const agent = createAgent({
model: llm,
tools: [tavilyExtractTool],
});
const userInput = "Summarize https://en.wikipedia.org/wiki/Albert_Einstein and https://en.wikipedia.org/wiki/Theoretical_physics.";
const stream = await agent.streamEvents(
{ messages: [["human", userInput]] },
{ version: "v3" },
);
for await (const snapshot of stream.values) {
const lastMsg = snapshot.messages[snapshot.messages.length - 1];
if (lastMsg.tool_calls?.length) {
console.dir(lastMsg.tool_calls, { depth: null });
} else if (lastMsg.content) {
console.log(lastMsg.content);
}
}
API 参考文档
有关 Tavily Extract API 所有功能和配置的详细文档,请参阅 API 参考文档: docs.tavily.com/documentation/api-reference/endpoint/extract