以编程方式使用文档

Tavily 的搜索 API 是一个专为 AI 代理(LLM)构建的搜索引擎,提供实时、准确和真实的结果,速度极快。

概述

集成详情

Python 支持下载量版本
TavilySearch@langchain/tavily!NPM - 下载量!NPM - 版本

工具特性

返回产物原生异步返回数据定价
标题、URL、内容片段、原始数据_content, answer, images1,000 free searches / 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"

实例化

该工具在实例化期间接受各种参数:

  • - maxResults (可选,数字):返回的最大搜索结果数量。默认值为 5.
  • - topic (可选,字符串):搜索的类别。可以是 "general", "news", or "finance"。默认值为 "general".
  • - includeAnswer (可选,布尔值):在结果中包含对原始查询的回答。默认值为 false.
  • - includeRawContent (可选,布尔值 | "markdown" | "text"):包含每个搜索结果的清理和解析内容。默认值为 false.
  • - includeImages (可选,布尔值):在响应中包含与查询相关的图片列表。默认值为 false.
  • - includeImageDescriptions (可选,布尔值):包含每张图片的描述性文本。默认值为 false.
  • - searchDepth (可选,字符串):搜索深度,可以是 "basic" or "advanced"。默认值为 "basic".
  • - timeRange (可选,字符串):从当前日期开始的时间范围,用于过滤结果 — "day", "week", "month", or "year"。默认值为 undefined.
  • - includeDomains (可选,字符串数组):要特别包含的域名。默认值为 [].
  • - excludeDomains (可选,字符串数组):要特别排除的域名。默认值为 [].

如需全面了解可用参数,请参阅 Tavily 搜索 API 文档.

const tool = new TavilySearch({
  maxResults: 5,
  topic: "general",
  // includeAnswer: false,
  // includeRawContent: false,
  // includeImages: false,
  // includeImageDescriptions: false,
  // searchDepth: "basic",
  // timeRange: "day",
  // includeDomains: [],
  // excludeDomains: [],
});

调用

使用参数直接调用

Tavily 搜索工具在调用期间接受以下参数:

  • - query (必需):一个自然语言搜索查询。
  • - 以下参数也可以在调用期间设置: includeImages, searchDepth, timeRange, includeDomains, excludeDomains.
  • - 由于可靠性和性能原因,某些影响响应大小的参数无法在调用期间修改: includeAnswerincludeRawContent这些限制可以防止意外的上下文窗口问题并确保结果一致。

注意:可选参数可供代理动态设置。如果您在实例化时设置了某个参数,然后在调用工具时传入不同的值,工具将使用您在调用时传入的值。

await tool.invoke({ query: "What happened at the last wimbledon" });

使用 ToolCall 调用

我们也可以使用模型生成的 ToolCall来调用工具,在这种情况下将返回一个ToolMessage

// This is usually generated by a model, but we'll create a tool call directly for demo purposes.
const modelGeneratedToolCall = {
  args: { query: "euro 2024 host nation" },
  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));
{"query": "euro 2024 host nation", "follow_up_questions": null, "answer": null, "images": [], "results": [{"title": "UEFA Euro 2024 - Wikipedia", "url": "https://en.wikipedia.org/wiki/UEFA_Euro_2024", "content": "Tournament details Host country Germany Dates 14 June – 14 July Teams 24 Venue(s) 10 (in 10 host cities) Final positions Champions Spain (4th title) Runners-up England Tournament statisti

在代理中使用

我们可以通过将其传递给 createAgent来直接使用 LangChain 代理调用搜索工具。代理可以动态设置 includeDomains, searchDepthtimeRange 等参数作为其工具调用的一部分。

在下面的示例中,当我们让代理查找"哪个国家举办了2024年欧洲杯?仅包含维基百科来源。"时,代理会动态设置参数并使用 { query: "Euro 2024 host nation", includeDomains: ["wikipedia.org"] }.

// @lc-docs-hide-cell


const llm = new ChatOpenAI({
  model: "gpt-5.5",
  temperature: 0,
});
// Initialize Tavily Search Tool
const tavilySearchTool = new TavilySearch({
  maxResults: 5,
  topic: "general",
});

const agent = createAgent({
  model: llm,
  tools: [tavilySearchTool],
});

const userInput = "What nation hosted Euro 2024? Include only wikipedia sources.";

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 Search API 功能和配置的详细文档,请前往 API 参考: docs.tavily.com/documentation/api-reference/endpoint/search