通过搜索 API 增强 LLM 比较 4 种搜索 API,为 LLM 提供最新数据访问的 AI 代理

这篇具有很好参考价值的文章主要介绍了通过搜索 API 增强 LLM 比较 4 种搜索 API,为 LLM 提供最新数据访问的 AI 代理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


tavily search,大语言模型,人工智能,搜索引擎,语言模型

人工智能开发领域不断进步,将可靠的搜索 API 与您的语言学习模型(LLM)结合使用,可以通过提供最新和相关的数据,显著增强您的 AI 代理的性能。

然而,在众多选择中,选择最合适的一个可能会有挑战。本文旨在通过使用 GPT-4 评估四种知名且新颖的搜索 API,协助您在决策过程中做出选择。

我们将迅速介绍各种服务,评估它们在信息详细程度、相关性、及时性、整体答案质量以及答案是否正确回答用户或代理的问题方面的效率。这种比较将帮助您确定最适合您的 LLM 项目的 API。

搜索 API

以下部分简要介绍我们将在后文评估或相互比较的搜索引擎服务。

You.com

tavily search,大语言模型,人工智能,搜索引擎,语言模型

图 1. You.com API 参考截图(作者提供的图片)。

You.com 专注于 LLM 应用场景,通过三个独特的端点提供实时网络数据:

  1. Web LLM:将 Web 搜索与 LLM 结合,以获得精细的响应
  2. Web Search:提供比传统搜索引擎(如必应和谷歌)更详细信息的扩展摘要
  3. News:类似 Web Search,但专注于最新事件

文档简单易懂,配有使用流行的 requests Python 包的代码片段。

当前速率限制为 每秒 20 次,默认调用的执行时间约为 1 秒。Web Search 返回的数据比常规搜索引擎 API 多得多,我建议使用具有大(即 32k)上下文窗口的 LLM。

Tavily Search

tavily search,大语言模型,人工智能,搜索引擎,语言模型

图 2. Tavily Search 截图(作者提供的图片)。

Tavily Search API 将复杂搜索简化为单个调用,为 AI 开发人员提供快速准确的结果。它结合了爬取和数据提取,每次请求访问 20 多个来源,以获得准确答案和全面研究。

Tavily 提供详细的文档和用户友好的 API 演示环境供测试。响应时间根据搜索深度和选择的字段而异(1-10 秒),可以选择访问原始搜索内容,尽管可能需要进行广告相关的清理。

我的请求的代码执行时间约为 1 秒。速率限制为 每分钟 20 次,相当严格。

Exa Search

tavily search,大语言模型,人工智能,搜索引擎,语言模型

图 3. Exa Search API 参考截图(作者提供的图片)。

Exa Search API(前身为 Metaphor)适用于 LLM 应用场景,使用基于嵌入的搜索来获取网络内容。作为知识 API,它为 LLM 提供了神经和关键字搜索功能,提供相关的网页和智能 RAG 模型突出显示的 HTML 内容,可能消除了对网页爬取的需求。

Exa.AI 展示了对用户体验的承诺,提供了交互式文档和在线演示环境。他们的 Python 包 exa-py 有助于轻松集成,但用户也可以使用经典的 requests Python 包。

执行速度快,约为 1 秒,有调整查询以获得更好结果的选项。然而,该服务有时会返回较旧的内容,这可能需要额外的参数来解决。当前速率限制为 每秒 10 次

Perplexity AI

tavily search,大语言模型,人工智能,搜索引擎,语言模型

图 4. Perplexity AI API 参考截图(作者提供的图片)。

Perplexity AI 提供引用、研究和获取等服务,有助于进行广泛的查询和研究整合。

开发人员可以使用他们的 pplx-api 进行知识访问。提供的文档用户友好且易于理解。Perplexity AI 提供了开源语言模型和名为 Sonar 的在线模型。然而,目前通过 API 提供的在线模型不返回来源或引文,但这一功能计划在未来更新中实现。我的代码执行大约需要 1 秒。在线模型的当前速率限制为 每分钟 20 次,相当严格。

该模型的最新数据通常为 3 天前(我向模型询问了最新数据)。在线来源没有指示更新频率,因此可能会有一些延迟。

比较

方法

为了比较这些 API 及其结果,我将为每个开发一个工具。这个工具将提供给一个基于 GPT-4(gpt-4-0125-preview)的代理。

代理将得到四个关于当前事件或趋势的样本问题。随后,我将部署另一个基于 GPT-4 的链,评估代理提供的答案。

评估将基于以下标准进行:

  • 答案中的详细程度(1-5)
  • 答案中信息的相关性和及时性,考虑到来源的日期(如果提供)(1-5)
  • 答案的整体质量(1-5)
  • 答案是否正确回答了用户的问题,这将是一个简单的二元

最终,将为每个工具或服务计算每个类别的平均分数。这些分数将被可视化,以便轻松解释。

问题

  • “2024 年的顶级营销趋势是什么?”
  • “2024 年 2 月发生了哪些重要的地缘政治事件?”
  • “您能总结一下人工智能研究和突破的最新进展吗?”
  • “根据劳工统计局报告,美国最新的失业率是多少?

代码

注意:为了使本文更易读,我没有在下面的代码片段中显示导入语句。但是,您可以在这里找到完整的笔记本。

工具

注意:为了使结果更具可比性,我还将返回结果数量设置为 3。

为了确保我们的代理稍后可以利用每个介绍的服务,我们需要创建或包装每个工具,使用自定义工具装饰器,遵循 LangChain 的指南来定义自定义工具。

# YOU.COM API
@tool
def you_com_api(query: str) -> str:
    """使用此工具在互联网上搜索最新信息。"""
    headers = {"X-API-Key": "XXX"}
    params = {"query": query, "num_web_results": 3}
    results = requests.get(
        f"https://api.ydc-index.io/search",
        params=params,
        headers=headers,
    ).json()
    return json.dumps(results)


# Exa Search API
@tool
def exa_search_api(query: str) -> str:
    """使用此工具在互联网上搜索最新信息。"""
    url = "https://api.exa.ai/search"

    payload = {
        "query": query,
        "contents": {"text": {"includeHtmlTags": False}},
        "numResults": 3,
    }
    headers = {
        "accept": "application/json",
        "content-type": "application/json",
        "x-api-key": "XXX",
    }
    response = requests.post(url, json=payload, headers=headers)

    return response.text


# Tavily Search
@tool
def tavily_search_api(query: str) -> str:
    """使用此工具在互联网上搜索最新信息。"""
    tavily = TavilyClient(api_key="XXX")
    result = tavily.search(
        query=query,
        search_depth="advanced",
        max_results=3,
        include_answer=True,
        include_raw_content=False,
    )
    return json.dumps(result)


# Perplexity AI
@tool
def perplexity_ai_api(query: str) -> str:
    """使用此工具在互联网上搜索最新信息。"""
    url = "https://api.perplexity.ai/chat/completions"

    payload = {
        "model": "sonar-medium-online",
        "messages": [
            {"role": "system", "content": "Be precise and concise."},
            {"role": "user", "content": query},
        ],
    }
    headers = {
        "accept": "application/json",
        "content-type": "application/json",
        "authorization": "Bearer pplx-XXX",
    }

    response = requests.post(url, json=payload, headers=headers)
    return response.text

代理

一旦我们定义了所有工具,我们创建一个方法,其中包含一个基于 gpt-4-0125-preview 运行的 vanilla openai-tools-agent,温度为 0,以确保模型更具确定性。

# 准备代理
# 遵循 https://python.langchain.com/docs/modules/agents/agent_types/openai_tools
prompt = hub.pull("hwchase17/openai-tools-agent")


def ask_agent(query, tool):

    # 将工具绑定到代理
    llm = ChatOpenAI(openai_api_key="XXX", model="gpt-4-0125-preview", temperature=0)
    llm_agent = llm.bind_tools([tool])

    # 定义包含工具的适当提示
    prompt = ChatPromptTemplate.from_messages(
        [
            (
                "system",
                """You are very powerful assistant, but don't know current events.
              Always try to list the sources your answer is based on.
              """,
            ),
            ("user", "{input}"),
            MessagesPlaceholder(variable_name="agent_scratchpad"),
        ]
    )

    # 组装 llm 和部件以获得代理
    agent = (
        {
            "input": lambda x: x["input"],
            "agent_scratchpad": lambda x: format_to_openai_tool_messages(
                x["intermediate_steps"]
            ),
        }
        | prompt
        | llm_agent
        | OpenAIToolsAgentOutputParser()
    )
    agent_executor = AgentExecutor(agent=agent, tools=[tool], verbose=True)
    result = agent_executor.invoke({"input": query})
    return result["output"]

评估

最后,我们需要编写评估逻辑。在这种情况下,我们利用一个简单的链条运行 GPT-4。您可以找到关于如何定义评估“逻辑”的说明。在这里重要的一点是提及向 GPT-4 提供关于当前年份的信息的必要性。否则,它可能会将过时的文章或来源(例如,2022年)评定为最新。

def eval_service(query: str, agent_answer: str) -> dict:
    output_parser = StrOutputParser()
    instruction = """
  当前年份是2024年。

  # 任务: 
  - 评估人工智能的回答是否充分解答了下面提供的用户查询。

  # 说明:
  1. 仔细阅读用户的查询。
  2. 彻底审查人工智能的回应。
  3. 根据 1 到 5 的等级评定答案的详细程度。
  4. 根据 1 到 5 的等级评定答案中信息的最新程度,考虑到提供的来源的日期。
  5. 根据 1 到 5 的等级评定答案的整体质量。

  # 评估标准:
  - **详细程度:** 评估答案如何全面地解答了查询,考虑到所有相关方面。
  - **信息最新性:** 评估答案中提供的信息的时效性和相关性,考虑到提供的来源的日期。
  - **答案质量:** 评判回应的整体质量,包括准确性、连贯性和相关性。

  # 选项:
  - 选择以下之一:
    - "YES": 如果人工智能的回应有效地解答了用户的查询,提供相关和准确的信息。
    - "NO": 如果人工智能的回应没有充分解答用户的查询或不相关。

  # 返回格式:
  - 以 JSON 格式提供您的答案,包括以下键:
    - "ANSWER": "YES" 或 "NO"
    - "DETAIL_RATING": (1-5)
    - "UP_TO_DATE_RATING": (1-5)
    - "QUALITY_RATING": (1-5)
    - "REASONING": 解释您对每个标准的评分。

  # 用户查询:
  {query}
    
  # 人工智能回应:
  {model_answer}
  """

    prompt = PromptTemplate(
        template=instruction, input_variables=["query", "model_answer"]
    )

    gpt4 = ChatOpenAI(temperature=0, model="gpt-4", openai_api_key="XXX")

    chain = prompt | gpt4 | output_parser
    eval = chain.invoke({"query": query, "model_answer": agent_answer})
    return json.loads(eval)


questions = [
    "2024年的主要营销趋势是什么?",
    "2024年2月发生了哪些重大地缘政治事件?",
    "能否总结人工智能研究和突破的最新进展?",
    "根据美国劳工统计局报告,美国最新的失业率是多少?",
]

tools = [you_com_api, exa_search_api, tavily_search_api, perplexity_ai_api]

ratings = {}
for tool in tools:
    ratings[tool.get_name()] = {}
    for q in questions:
        try:
            tmp_answer = ask_agent(q, tool)
            if tmp_answer is not None:
                ratings[tool.get_name()][q] = eval_service(q, tmp_answer)
        except Exception as e:
            print(f"处理 {q} 时出现错误,使用 {tool}{e}")

比较结果

评估结果如图 5 所示。有关 GPT-4 推理的更多细节可以在附录中找到。

总体而言,You.com API 在所有类别中处于领先地位,其次是 Perplexity.ai,而 Exa Search API 则始终排名最后。

You.com API 成功的一个因素可能是单次调用返回的大量数据。这显著帮助代理商制定详细、高质量的答案。然而,高数据量(需要在 GPT-4 模型中使用更大的上下文窗口)可能导致与其他服务相比更高的查询成本。

tavily search,大语言模型,人工智能,搜索引擎,语言模型

图 5. 评估结果(作者提供的图片)。

Perplexity.AI 在最新评级和肯定回答计数方面与 You.com 类似。它在其他类别上略逊一筹。然而,它的主要缺点是高速率限制和缺乏来源或引用。相比其他服务,Tavily 位于中间位置。

根据这些发现,You.com API 显然是最佳选择

限制

像每次分析和比较一样,这次比较也有其局限性。它没有包括成本和响应时间的评估。正如所指出的,一些 API(如 You.com 或 Tavily)可能返回大量上下文,可能需要选择一个具有更大上下文窗口的更昂贵模型,或将分析拆分为多个调用。

此外,用于评估的问题数量(4 个)可能不够代表性。更全面的分析可能涉及提出更多问题并进行多次调用。

最后,虽然每个 API 可能都可以使用个别参数进行微调(例如,返回整个原始 HTML 内容),但这次比较旨在评估每个 API 的基本或“原始”版本。

结论

根据我们的比较和评估,You.com API 显然是保持 LLMs 最新数据的最有效工具。尽管由于其大量数据返回可能导致更高的查询成本,但其在所有评估类别中的表现无与伦比。

然而,重要的是要考虑此比较的局限性,包括成本和响应时间等因素,以及所使用的问题数量和性质。未来的分析可能涉及更广泛的问题范围、多次调用以及更详细地评估利用其 API 选项。文章来源地址https://www.toymoban.com/news/detail-849585.html

到了这里,关于通过搜索 API 增强 LLM 比较 4 种搜索 API,为 LLM 提供最新数据访问的 AI 代理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • openai自定义API操作 API (openai.custom):通过 OpenAI API 实现个性化的电商搜索引擎

    一、技术选型 在实现个性化的电商搜索引擎时,我们需要选择合适的技术框架和工具。OpenAI API为我们提供了一系列的自然语言处理和机器学习功能,可以帮助我们快速构建智能化的应用。以下是我们在实现过程中可能需要用到的技术: 自然语言处理(NLP):通过NLP技术,我

    2024年01月19日
    浏览(10)
  • ToolkenGPT:用大量工具增强LLM

    ToolkenGPT:用大量工具增强LLM

    深度学习自然语言处理 原创 作者:cola 用外部工具增强大型语言模型(LLM)已经成为解决复杂问题的一种方法。然而,用样例数据对LLM进行微调的传统方法,可能既昂贵又局限于一组预定义的工具。最近的上下文学习范式缓解了这一问题,但有限的上下文长度局限于少样本样例

    2024年02月04日
    浏览(11)
  • 通过 BigQuery 中的 11 个新链增强 Google Cloud 的区块链数据服务

    通过 BigQuery 中的 11 个新链增强 Google Cloud 的区块链数据服务

    2018 年初,Google Cloud 与社区合作,通过BigQuery 公共数据集实现 区块链数据民主化 ;2019 年,又扩展了六个数据集;今天,我们在 BigQuery 公共数据集中添加了 11 个最受欢迎的区块链预览版。 我们也在对该程序中的现有数据集进行改进。 我们这样做是因为区块链基金会、Web3

    2024年02月07日
    浏览(5)
  • com.google.common.collect 是 Google Guava 库中的一个包,它提供了一系列扩展和增强 Java 集合框架的工具类和数据结构

    com.google.common.collect 是 Google Guava 库中的一个包,它提供了一系列扩展和增强 Java 集合框架的工具类和数据结构

    com.google.common.collect 是 Google Guava 库中的一个包,它提供了一系列扩展和增强 Java 集合框架的工具类和数据结构。Guava 的集合工具在设计上强调性能、不可变性、功能性和易用性。 以下是 com.google.common.collect 包中一些重要的类和接口: Immutable Collections: ImmutableSet:一个不可变

    2024年03月19日
    浏览(15)
  • Langchain+ElasticSearch+文心千帆 构建检索增强LLM Agent

    Langchain+ElasticSearch+文心千帆 构建检索增强LLM Agent

    很早就开始做检索增强的大语言模型Agent了,通过外接知识库为LLM提供外部知识能增强它回答的准确性。这里我们使用ElasticSearch作为数据库存储相关知识,使用百度文心千帆的embedding API提供向量嵌入;借助langchain搭建LLM Agent. 需要安装的环境有: Python, ElasticSearch, langchain, q

    2024年02月04日
    浏览(14)
  • 【Video-LLaMA】增强LLM对视频内容的理解

    【Video-LLaMA】增强LLM对视频内容的理解

    Paper:《Video-LLaMA : An Instruction-tuned Audio-Visual Language Model for Video Understanding》 Authors: Hang Zhang, Xin Li, Lidong Bing; Affiliation: The Alibaba DAMO Academy; Keywords: Multimodal Large Language Models, Cross-modal training. 大型语言模型 (LLM)在遵循用户意图和指示上表现出了卓越的理解和理解能力,通常,LLM的

    2024年02月04日
    浏览(11)
  • 火山引擎云搜索服务升级云原生新架构;提供数十亿级分布式向量数据库能力

    火山引擎云搜索服务升级云原生新架构;提供数十亿级分布式向量数据库能力

    从互联网发展伊始,搜索技术就绽放出了惊人的社会和经济价值。随着信息社会快速发展,数据呈爆炸式增长,搜索技术通过数据收集与处理,满足信息共享与快速检索的需求。 云搜索服务 ESCloud 是火山引擎提供的 完全托管在线分布式搜索服务 ,兼容 Elasticsearch、Kibana 等软

    2024年02月16日
    浏览(12)
  • mysql通过group by分组取最大时间对应的数据,提供两种有效方法。

    mysql通过group by分组取最大时间对应的数据,提供两种有效方法。

    1、项目记录表project_record的结构和数据如下: 以下为项目记录表 project_record 的所有数据。project_id为项目Id,on_project_time为上项目时间。(每一条数据代表着上某个项目(project_id)的时间(on_project_time)记录) 2、我们的需求是:取出每个项目中最大上项目时间对应的那条数据。

    2023年04月08日
    浏览(10)
  • 卷起来!Dr. LLaMA:通过生成数据增强改进特定领域 QA 中的小型语言模型,重点关注医学问答任务...

    卷起来!Dr. LLaMA:通过生成数据增强改进特定领域 QA 中的小型语言模型,重点关注医学问答任务...

    大家好,最近突然发现了一篇在专门应用于医学领域的LLaMA,名为Dr.LLaMA(太卷了太卷了),就此来分享下该语言模型的构建方法和最终的性能情况。 论文 :Dr. LLaMA: Improving Small Language Models in Domain-Specific QA via Generative Data Augmentation 地址 :https://arxiv.org/pdf/2305.07804.pdf 代码 :

    2024年02月11日
    浏览(12)
  • 为集成LLM到测试平台提供更便捷的方式:为讯飞的LLM星火创建接入LangChain类(全部源代码)

    为集成LLM到测试平台提供更便捷的方式:为讯飞的LLM星火创建接入LangChain类(全部源代码) LangChain是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序

    2024年02月06日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包