Langchain+Tavily对接大模型实现联网搜索

在langchain框架开发AI应用时,为了确保模型能够获取到最新消息,并与外界进行连接,从外界获取信息。通常会给模型配置联网工具。本文介绍一款与langchain适配性极好,额度大的api联网搜索工具Tavily,原生支持作为工具为大模型配置

1.首先注册tavily获取密钥

访问https://auth.tavily.com/

注册或登录后进入页面

申请一个秘钥用于进行api调用,普通用户每个月可以免费进行1000次调用。

复制api秘钥后打开开发环境

2.集成入大模型

确保你的环境中安装了langchain系列的依赖

在配置文件中配置tavily和大模型的url和api_key

python 复制代码
from langchain_tavily import TavilySearch
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
import os
from dotenv import load_dotenv
from langchain_core.messages import HumanMessage, SystemMessage, AIMessage, ToolMessage
from pydantic import BaseModel, Field

load_dotenv()

search_tool = TavilySearch(
    max_results = 5, # 最多返回5条
    topic = "general" # 常规查询模式
)

# 结构化输出约束
class Reference(BaseModel):
    title: str = Field(description="标题")
    url: str = Field(description="链接")

class AnswerInfo(BaseModel):
    answer: str = Field(description="答案")
    references: list[Reference] = Field(description="参考资料")

agent = create_agent(
    init_chat_model(
        model = "deepseek-v4-flash",
        model_provider="openai",
        api_key = os.getenv("DEEPSEEK_API_KEY"),
        base_url = os.getenv("DEEPSEEK_BASE_URL"),
        model_kwargs={
            "extra_body": {
                "thinking": {"type":"disabled"}
            }
        }
    ),
    tools = [search_tool],
    response_format= AnswerInfo,
    system_prompt = "你是一个智能助手,擅长实用工具来解决用户问题",
)

response = agent.invoke({"messages": HumanMessage("鸡你太美是什么梗?")})

for message in response["messages"]:
    message.pretty_print()

在TavilySearch()中可以配置多种参数,比如时效、返回条数、查询模式等等,这里演示只配置了最简单的参数。

在默认情况下,代码示例中的方法会使大模型在调用工具时先理解每一个tavilySearch工具参数的含义然后进行调用。在简单场景下这种方式很不划算,会使大模型小号的token剧增。如果事先知道只需要哪几个参数,可以单独封装出一个tool工具为大模型配置,改为下面这样:

python 复制代码
from langchain.tools import tool

@tool
def search(query: str):
    """
    :param query: the question params that need to search
    :return: answer
    """
    return search_tool.run(query)

然后将模型工具列表的工具替换为 search

下面是控制台输出,可以看到每一环节的执行细节都被打印了出来。

3.扩展

如果想要将模型的执行过程各个时段的状态展示出来,做到当前许多网页版大模型的效果。可以使用下面这种方式获取模型运行时的事件流,并流式返回进行json解析。

python 复制代码
    async for event in agent.astream_events(
        {"messages": HumanMessage("鸡你太美是什么梗?")},
        version="v2"
    ):
        print(event)
相关推荐
一个心烑2 小时前
【layui页面编辑下拉框处理的三种方式】
linux·python·layui
xingyuzhisuan2 小时前
2026实测:租用RTX 4090 CUDA适配与PyTorch精准安装教程
人工智能·pytorch·python·深度学习·gpu算力
嗯、.2 小时前
Agent 路由架构的一次尝试:LangGraph + Swarm Handoff + 小模型 Router
人工智能·python·swarm·langgraph·multi-agent·model-routing
SunnyDays10112 小时前
Java 实现插入和删除 Excel 行和列
java·python·excel
kels88992 小时前
加密货币实时api的订单簿快照多久更新一次?
开发语言·笔记·python·金融·区块链
落日屿星辰2 小时前
PyTorch 模型迁移到昇腾NPU 完整指南
人工智能·pytorch·python
SilentSamsara2 小时前
类型注解进阶:Union、Optional、Any 与 Callable
开发语言·python·青少年编程
爱喝热水的呀哈喽2 小时前
gpt:RAG步骤
人工智能·python·机器学习