文档API 参考📓 教程🧑‍🍳 食谱🤝 集成💜 Discord🎨 Studio
文档

SerperDevWebSearch

使用 SerperDev API 进行的网络搜索引擎。

pipeline 中的最常见位置LinkContentFetcherConverters 之前
必需的初始化变量"api_key": SearchAPI 的 API 密钥。可以通过以下方式设置:SERPERDEV_API_KEY 环境变量。
强制运行变量“query”: 包含您查询的字符串
输出变量“documents”:文档列表

“links”: 结果链接字符串列表
API 参考Websearch
GitHub 链接https://github.com/deepset-ai/haystack/blob/main/haystack/components/websearch/serper_dev.py

概述

当您将SerperDevWebSearch 提供给查询时,它会返回与您的搜索最相关的 URL 列表。它使用页面摘要(搜索结果中页面标题下方显示的文本片段)来查找答案,而不是整个页面。

要搜索网页内容,请使用 LinkContentFetcher 组件。

SerperDevWebSearch 需要 SerperDev 密钥才能工作。它默认使用SERPERDEV_API_KEY 环境变量。否则,您可以传递一个api_key——请参阅下面的代码示例。

📘

替代搜索

要使用 Search API 作为替代,请参阅其对应的 文档页面

用法

单独使用

这是一个关于SerperDevWebSearch 如何在网上查找我们查询的答案,并将结果转换为包含结果内容摘要以及 URL 作为字符串的文档列表的示例。

from haystack.components.websearch import SerperDevWebSearch
from haystack.utils import Secret

web_search = SerperDevWebSearch(api_key=Secret.from_token("<your-api-key>"))
query = "What is the capital of Germany?"

response = web_search.run(query)

在 pipeline 中

以下是一个 RAG 管道的示例,其中我们使用SerperDevWebSearch 来查找查询的答案。然后将生成的文档传递给LinkContentFetcher 以从 URL 获取完整文本。最后,PromptBuilderOpenAIGenerator 一起工作以形成最终答案。

from haystack import Pipeline
from haystack.utils import Secret
from haystack.components.builders.chat_prompt_builder import ChatPromptBuilder
from haystack.components.fetchers import LinkContentFetcher
from haystack.components.converters import HTMLToDocument
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.components.websearch import SerperDevWebSearch
from haystack.dataclasses import ChatMessage
from haystack.utils import Secret

web_search = SerperDevWebSearch(api_key=Secret.from_token("<your-api-key>"), top_k=2)
link_content = LinkContentFetcher()
html_converter = HTMLToDocument()

prompt_template = [
    ChatMessage.from_system("You are a helpful assistant."),
    ChatMessage.from_user(
        "Given the information below:\n"
        "{% for document in documents %}{{ document.content }}{% endfor %}\n"
        "Answer question: {{ query }}.\nAnswer:"
    )
]

prompt_builder = ChatPromptBuilder(template=prompt_template, required_variables={"query", "documents"})
llm = OpenAIChatGenerator(api_key=Secret.from_token("<your-api-key>"), model="gpt-3.5-turbo")

pipe = Pipeline()
pipe.add_component("search", web_search)
pipe.add_component("fetcher", link_content)
pipe.add_component("converter", html_converter)
pipe.add_component("prompt_builder", prompt_builder)
pipe.add_component("llm", llm)

pipe.connect("search.links", "fetcher.urls")
pipe.connect("fetcher.streams", "converter.sources")
pipe.connect("converter.documents", "prompt_builder.documents")
pipe.connect("prompt_builder.messages", "llm.messages")

query = "What is the most famous landmark in Berlin?"

pipe.run(data={"search": {"query": query}, "prompt_builder": {"query": query}})

其他参考资料

📓 教程:使用条件路由构建到网络搜索的回退