主题
工具
将 Deep Agents 连接到自定义函数、API、数据库以及任何 MCP 服务器
Deep Agents 可以调用你定义的任何工具、任何 LangChain 工具,以及来自任何 MCP 服务器的工具。 通过 tools= 参数将它们与用于文件管理和子智能体派生的内置 harness 工具一起传递给 create_deep_agent。
python
from deepagents import create_deep_agent
agent = create_deep_agent(
model="google_genai:gemini-3.6-flash",
tools=[search, fetch_url, run_query],
)python
from deepagents import create_deep_agent
agent = create_deep_agent(
model="openai:gpt-5.5",
tools=[search, fetch_url, run_query],
)python
from deepagents import create_deep_agent
agent = create_deep_agent(
model="anthropic:claude-sonnet-5",
tools=[search, fetch_url, run_query],
)python
from deepagents import create_deep_agent
agent = create_deep_agent(
model="openrouter:z-ai/glm-5.2",
tools=[search, fetch_url, run_query],
)python
from deepagents import create_deep_agent
agent = create_deep_agent(
model="fireworks:accounts/fireworks/models/glm-5p2",
tools=[search, fetch_url, run_query],
)python
from deepagents import create_deep_agent
agent = create_deep_agent(
model="baseten:zai-org/GLM-5.2",
tools=[search, fetch_url, run_query],
)python
from deepagents import create_deep_agent
agent = create_deep_agent(
model="ollama:north-mini-code-1.0",
tools=[search, fetch_url, run_query],
)自定义工具
将任何可调用对象,例如普通函数、被 LangChain @tool 装饰的函数或工具字典,直接传递给 tools=。 Deep Agents 会从函数签名和 docstring 推断工具 schema,因此在大多数情况下你无需定义单独的 schema。
python
import os
from typing import Literal
from tavily import TavilyClient
from deepagents import create_deep_agent
tavily_client = TavilyClient(api_key=os.environ["TAVILY_API_KEY"])
def internet_search(
query: str,
max_results: int = 5,
topic: Literal["general", "news", "finance"] = "general",
include_raw_content: bool = False,
):
"""Run a web search"""
return tavily_client.search(
query,
max_results=max_results,
include_raw_content=include_raw_content,
topic=topic,
)
agent = create_deep_agent(
model="google_genai:gemini-3.6-flash",
tools=[internet_search],
)python
import os
from typing import Literal
from tavily import TavilyClient
from deepagents import create_deep_agent
tavily_client = TavilyClient(api_key=os.environ["TAVILY_API_KEY"])
def internet_search(
query: str,
max_results: int = 5,
topic: Literal["general", "news", "finance"] = "general",
include_raw_content: bool = False,
):
"""Run a web search"""
return tavily_client.search(
query,
max_results=max_results,
include_raw_content=include_raw_content,
topic=topic,
)
agent = create_deep_agent(
model="openai:gpt-5.5",
tools=[internet_search],
)python
import os
from typing import Literal
from tavily import TavilyClient
from deepagents import create_deep_agent
tavily_client = TavilyClient(api_key=os.environ["TAVILY_API_KEY"])
def internet_search(
query: str,
max_results: int = 5,
topic: Literal["general", "news", "finance"] = "general",
include_raw_content: bool = False,
):
"""Run a web search"""
return tavily_client.search(
query,
max_results=max_results,
include_raw_content=include_raw_content,
topic=topic,
)
agent = create_deep_agent(
model="anthropic:claude-sonnet-5",
tools=[internet_search],
)python
import os
from typing import Literal
from tavily import TavilyClient
from deepagents import create_deep_agent
tavily_client = TavilyClient(api_key=os.environ["TAVILY_API_KEY"])
def internet_search(
query: str,
max_results: int = 5,
topic: Literal["general", "news", "finance"] = "general",
include_raw_content: bool = False,
):
"""Run a web search"""
return tavily_client.search(
query,
max_results=max_results,
include_raw_content=include_raw_content,
topic=topic,
)
agent = create_deep_agent(
model="openrouter:z-ai/glm-5.2",
tools=[internet_search],
)python
import os
from typing import Literal
from tavily import TavilyClient
from deepagents import create_deep_agent
tavily_client = TavilyClient(api_key=os.environ["TAVILY_API_KEY"])
def internet_search(
query: str,
max_results: int = 5,
topic: Literal["general", "news", "finance"] = "general",
include_raw_content: bool = False,
):
"""Run a web search"""
return tavily_client.search(
query,
max_results=max_results,
include_raw_content=include_raw_content,
topic=topic,
)
agent = create_deep_agent(
model="fireworks:accounts/fireworks/models/glm-5p2",
tools=[internet_search],
)python
import os
from typing import Literal
from tavily import TavilyClient
from deepagents import create_deep_agent
tavily_client = TavilyClient(api_key=os.environ["TAVILY_API_KEY"])
def internet_search(
query: str,
max_results: int = 5,
topic: Literal["general", "news", "finance"] = "general",
include_raw_content: bool = False,
):
"""Run a web search"""
return tavily_client.search(
query,
max_results=max_results,
include_raw_content=include_raw_content,
topic=topic,
)
agent = create_deep_agent(
model="baseten:zai-org/GLM-5.2",
tools=[internet_search],
)python
import os
from typing import Literal
from tavily import TavilyClient
from deepagents import create_deep_agent
tavily_client = TavilyClient(api_key=os.environ["TAVILY_API_KEY"])
def internet_search(
query: str,
max_results: int = 5,
topic: Literal["general", "news", "finance"] = "general",
include_raw_content: bool = False,
):
"""Run a web search"""
return tavily_client.search(
query,
max_results=max_results,
include_raw_content=include_raw_content,
topic=topic,
)
agent = create_deep_agent(
model="ollama:north-mini-code-1.0",
tools=[internet_search],
)有关定义和使用 LangChain 工具的完整细节(工具字典、StructuredTool、返回类型、错误处理等),请参阅 工具。
MCP 工具
NOTE
Deep Agents 完全支持 Model Context Protocol (MCP),这是用于将智能体连接到外部服务的开放标准。从任何 MCP 服务器加载工具,并直接将它们传递给 create_deep_agent。
MCP 是一个开放协议,让智能体通过标准接口连接到不断增长的服务器生态系统——数据库、API、文件系统、浏览器等。你无需为每个服务编写自定义集成代码,只需将 Deep Agents 指向某个 MCP 服务器,它就能获得该服务器暴露的所有工具。
安装带 mcp extra 的 LangChain 以连接到 MCP 服务器:
bash
pip install "langchain[mcp]"bash
uv add "langchain[mcp]"python
import asyncio
from deepagents import create_deep_agent
from langchain.mcp import MCPAdapter
async def main():
config = {"mcpServers": {"my_server": {"url": "http://localhost:8000/mcp"}}}
async with MCPAdapter(config) as adapter:
tools = await adapter.list_tools()
agent = create_deep_agent(
model="google_genai:gemini-3.6-flash",
tools=tools,
)
await agent.ainvoke(
{
"messages": [
{"role": "user", "content": "Use the MCP server to help me."}
]
},
config={"configurable": {"thread_id": "1"}},
)python
import asyncio
from deepagents import create_deep_agent
from langchain.mcp import MCPAdapter
async def main():
config = {"mcpServers": {"my_server": {"url": "http://localhost:8000/mcp"}}}
async with MCPAdapter(config) as adapter:
tools = await adapter.list_tools()
agent = create_deep_agent(
model="openai:gpt-5.5",
tools=tools,
)
await agent.ainvoke(
{
"messages": [
{"role": "user", "content": "Use the MCP server to help me."}
]
},
config={"configurable": {"thread_id": "1"}},
)python
import asyncio
from deepagents import create_deep_agent
from langchain.mcp import MCPAdapter
async def main():
config = {"mcpServers": {"my_server": {"url": "http://localhost:8000/mcp"}}}
async with MCPAdapter(config) as adapter:
tools = await adapter.list_tools()
agent = create_deep_agent(
model="anthropic:claude-sonnet-5",
tools=tools,
)
await agent.ainvoke(
{
"messages": [
{"role": "user", "content": "Use the MCP server to help me."}
]
},
config={"configurable": {"thread_id": "1"}},
)python
import asyncio
from deepagents import create_deep_agent
from langchain.mcp import MCPAdapter
async def main():
config = {"mcpServers": {"my_server": {"url": "http://localhost:8000/mcp"}}}
async with MCPAdapter(config) as adapter:
tools = await adapter.list_tools()
agent = create_deep_agent(
model="openrouter:z-ai/glm-5.2",
tools=tools,
)
await agent.ainvoke(
{
"messages": [
{"role": "user", "content": "Use the MCP server to help me."}
]
},
config={"configurable": {"thread_id": "1"}},
)python
import asyncio
from deepagents import create_deep_agent
from langchain.mcp import MCPAdapter
async def main():
config = {"mcpServers": {"my_server": {"url": "http://localhost:8000/mcp"}}}
async with MCPAdapter(config) as adapter:
tools = await adapter.list_tools()
agent = create_deep_agent(
model="fireworks:accounts/fireworks/models/glm-5p2",
tools=tools,
)
await agent.ainvoke(
{
"messages": [
{"role": "user", "content": "Use the MCP server to help me."}
]
},
config={"configurable": {"thread_id": "1"}},
)python
import asyncio
from deepagents import create_deep_agent
from langchain.mcp import MCPAdapter
async def main():
config = {"mcpServers": {"my_server": {"url": "http://localhost:8000/mcp"}}}
async with MCPAdapter(config) as adapter:
tools = await adapter.list_tools()
agent = create_deep_agent(
model="baseten:zai-org/GLM-5.2",
tools=tools,
)
await agent.ainvoke(
{
"messages": [
{"role": "user", "content": "Use the MCP server to help me."}
]
},
config={"configurable": {"thread_id": "1"}},
)python
import asyncio
from deepagents import create_deep_agent
from langchain.mcp import MCPAdapter
async def main():
config = {"mcpServers": {"my_server": {"url": "http://localhost:8000/mcp"}}}
async with MCPAdapter(config) as adapter:
tools = await adapter.list_tools()
agent = create_deep_agent(
model="ollama:north-mini-code-1.0",
tools=tools,
)
await agent.ainvoke(
{
"messages": [
{"role": "user", "content": "Use the MCP server to help me."}
]
},
config={"configurable": {"thread_id": "1"}},
)有关详细的配置选项——包括 stdio 服务器、OAuth 身份认证、工具筛选和有状态会话——请参阅完整的 MCP 指南。
内置 harness 工具
除了你提供的工具外,每个 Deep Agent 都自带一组来自 harness 的内置工具:
| 工具 | 描述 |
|---|---|
ls | 列出目录中的文件。 |
read_file | 读取文件内容(支持分页和多模态)。 |
write_file | 创建新文件,或覆盖已有文件。 |
edit_file | 在文件中执行精确的字符串替换。 |
delete | 删除文件,或递归删除目录及其内容。delete 工具需要 deepagents>=0.7。 |
glob | 查找匹配 glob 模式的文件。 |
grep | 搜索文件内容。 |
execute | 运行 shell 命令(仅限沙箱后端)。 |
task | 派生一个子智能体来处理被委派的任务。 |
要使用 write_todos 添加结构化任务规划,请通过 TodoListMiddleware 启用。请参阅任务规划。
关于每个内置工具功能的完整说明,请参阅 Harness 概览。
多模态工具输出
当所选模型支持多模态工具结果时,自定义工具可以返回纯文本或标准内容块(文本、图像、音频、视频和文件)。内置的 read_file 工具也会为受支持的非文本文件类型返回多模态块。
对于纯文本结果返回一个字符串,对于文本加媒体或交错的多模态输出则返回内容块的有序列表。有关示例和上下文压缩的注意事项,请参阅多模态和工具返回值。