Tavily 的搜索 API 是一个专为 AI 代理(LLM)构建的搜索引擎,提供实时、准确和真实的结果,速度极快。
概述
集成详情
| 类 | 包 | Python 支持 | 下载量 | 版本 |
|---|---|---|---|---|
TavilySearch | @langchain/tavily | ✅ | !NPM - 下载量 | !NPM - 版本 |
工具特性
| 返回产物 | 原生异步 | 返回数据 | 定价 |
|---|---|---|---|
| ❌ | ✅ | 标题、URL、内容片段、原始数据_content, answer, images | 1,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. - - 由于可靠性和性能原因,某些影响响应大小的参数无法在调用期间修改:
includeAnswer和includeRawContent这些限制可以防止意外的上下文窗口问题并确保结果一致。
注意:可选参数可供代理动态设置。如果您在实例化时设置了某个参数,然后在调用工具时传入不同的值,工具将使用您在调用时传入的值。
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, searchDepth和 timeRange 等参数作为其工具调用的一部分。
在下面的示例中,当我们让代理查找"哪个国家举办了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