Tavily搜索:使用实时搜索功能来增强AI智能体

云的事情不好说 2024-07-22 01:22:16

Tavily搜索是一个旨在为AI智能体提供实时准确和真实结果的搜索引擎。

Tavily 搜索 API 是一款为大型语言模型(LLMs)和检索增强生成(RAG)优化的搜索引擎,旨在提供高效、快速且持久的搜索结果。与其他搜索引擎 API 如 Serp 或 Google 不同,Tavily 专注于为 AI 开发者和自治 AI 智能体优化搜索。

搜索 API 还可以用来回答问题(适用于像 autogen 这样的多智能体框架使用案例),并且能在几秒钟内完成全面的研究任务。此外,Tavily 利用专有的金融、代码、新闻等内部数据源来补充在线信息。

本文介绍如何将Tavily搜索与AI 智能体集成,可以通过让其获得最新信息来增强智能体功能。

一、申请TAVILY API秘钥

要对Tavily Search API发出身份验证请求,需要将Tavily API密钥设置为环境变量。这可以通过将以下代码添加到应用代码中来完成:

os.environ["TAVILY_API_KEY"] = "<YOUR_API_KEY>"

可以到官网申请TAVILY_API_KEY秘钥:https://app.tavily.com/home

登录注册即可获得对应的访问密钥,如图所示:

二、单独使用Tavily搜索

现在可以开始单独使用Tavily搜索。要做到这一点,需要从langchain_community.tools.tavily_search模块中导入TavilySearchResults类。

示例代码如下所示:

from langchain_community.tools.tavily_search import TavilySearchResultsimport osos.environ["TAVILY_API_KEY"] = "tvly-xxxxxxxxxx"tool = TavilySearchResults()tool.invoke({"query": "特朗普被暗杀最新报道"})

要使用Tavily搜索进行搜索,首先需要创建TavilySearchResults类的一个实例。这个实例将作为访问Tavily搜索功能的入口点。创建完成后,可以使用此实例的invoke()方法来执行搜索。此方法接受一个具有“query”键的字典作为输入,并返回一个搜索结果列表。

假设想搜索当前最新的新闻报道。只需创建一个TavilySearchResult类的实例,并使用查询调用invoke()方法。该方法将返回一个搜索结果列表,每个结果包含一个URL和与查询相关的内容片段。

三、构建AI智能体

单独使用Tavily搜索可能非常有帮助,但它的真正潜力在于与其他AI工具和平台的集成。让我们来看看与LangChain Agent的集成示例。

要将Tavily搜索与Agent 集成,需要安装另外两个Python包:langchain-openai和langchainhub。

pip install langchain-openai langchainhub

安装完成后,可以使用langchain.agents模块中的AgentExecutor类创建一个AI 智能体。这个类允许我们使用ChatOpenAI语言模型(LLM)和TavilySearchResults工具配置AI 智能体。

由于网络访问限制, 先设置proxy server:

# 设置代理的HTTP和HTTPS环境变量os.environ['HTTP_PROXY'] = 'http://127.0.0.1:8001' # 设置HTTP代理os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:8001' # 设置HTTPS代理

示例代码如下所示:

# 导入创建结构化聊天代理的函数from langchain.agents import create_structured_chat_agent# 导入Langchain的Hub功能,用于获取存储在Hub中的资源from langchain import hub# 导入Tavily搜索结果类,用于处理搜索结果的显示from langchain.tools.tavily_search import TavilySearchResults# 导入OpenAI聊天模型,用于生成语言响应from langchain_openai import ChatOpenAI# 导入Tavily搜索API包装器,用于访问Tavily搜索服务from langchain_community.utilities.tavily_search import TavilySearchAPIWrapper# 初始化OpenAI聊天模型,指定使用gpt-4模型,设置温度为0.7# 温度控制生成文本的创造力和多样性,较高的温度可能导致更创造性但可能不准确的回答llm = ChatOpenAI(model_name="gpt-4", temperature=0.7)# 初始化Tavily搜索API包装器,用于后续的搜索操作search = TavilySearchAPIWrapper()# 初始化Tavily搜索结果工具,用于处理和展示搜索结果tavily_tool = TavilySearchResults(api_wrapper=search)# 将搜索工具添加到工具列表中,供聊天代理使用tools = [tavily_tool]# 从Langchain Hub拉取名为"hwchase17/structured-chat-agent"的资源,作为聊天代理的配置或promptprompt = hub.pull("hwchase17/structured-chat-agent")# 使用create_structured_chat_agent函数创建一个结构化的聊天代理# 参数llm是预定义的语言模型,用于生成对话响应# 参数tools是一个工具列表,这些工具可以被代理在对话过程中调用以执行特定任务,如搜索信息# 参数prompt是预先设定的提示信息,用于引导和限制代理的行为,确保其按照预期的方式进行对话agent = create_structured_chat_agent( llm, tools, prompt)

现在,可以使用agent_executor.invoke()方法来执行Agent链并检索搜索结果。此方法触发AI 智能体的执行,其中包括使用ChatOpenAI LLM生成响应和使用Tavily搜索获取相关信息。

# 导入AgentExecutor类,用于执行由代理和工具组合而成的智能任务from langchain.agents import AgentExecutor# 创建一个AgentExecutor实例,该实例将使用先前定义的代理(agent)和工具(tools)# verbose参数设为True,意味着在执行过程中将打印详细的运行agent_executor = AgentExecutor( agent=agent, tools=tools, verbose=True,)# 构建一个字典类型的查询对象,其中键"input"对应的值为想要获取的信息查询语句query = {"input": "最新的特朗普暗杀新闻?"}# 使用agent_executor执行查询,invoke方法接受一个字典作为输入,其中包含了代理执行所需的所有信息# 在这个例子中,它将处理查询并返回一个响应,该响应可能包含所请求的新闻信息response = agent_executor.invoke(query)

打印输出response 结果,如下所示:

再构建一个字典类型的查询对象,由于这次是一个通用的知识,不需要使用工具进行搜索,执行过程如下所示:

query2 = {"input": "孙悟空是谁?"}response = agent_executor.invoke(query2)print(response)



0 阅读:0

云的事情不好说

简介:感谢大家的关注