

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

申请一个秘钥用于进行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)