Agent 框架使用

最近更新时间:2026-06-12 15:41:32

我的收藏
context.tools 是面向 LLM 的工具清单视角,已经按 framework 做了适配,业务代码不需要再做格式转换。

平台内置工具清单

工具按能力原子化,每个工具一一对应到底层 sandbox 方法。LLM 通过工具名 + 描述的语义匹配选工具,业务也能按工具名细粒度配置允许调用范围。
工具名
入参
说明
commands
cmd, cwd?, env?, timeout?
执行一次性 shell 命令。
files_read
path
读文件。
files_write
path, content
写文件(不存在则创建,存在则覆盖)。
files_list
path
列目录,条目仅含 name / type / path
files_exists
path
检查文件或目录是否存在。
files_remove
path
删除文件或目录。
files_make_dir
path
创建目录。
browser_fetch
url
用真实 Chromium 导航并获取页面元信息与 HTML。
browser_screenshot
url?, fullPage?
截图,返回 { base64Image }
browser_click
selector
点击当前页面元素。
browser_type
selector, text
在当前页面元素中输入文本。
browser_evaluate
script
在当前页面上下文执行 JavaScript。
code_interpreter
language, code, timeout?
代码执行。
web_search
query, maxResults?, site?
轻量级网页搜索;返回 title / href / snippet/ snite/ date

工具选择快捷方法

context.tools 提供以下选择方法,返回值都是当前 framework 适配后的工具对象数组或单个工具对象:
方法
返回值
适用场景
all()
所有内置工具
允许模型使用完整 sandbox 能力。
get(name)
指定名称的单个工具
精确注册或手动调用某个原子工具。
files()
files_readfiles_writefiles_listfiles_existsfiles_removefiles_make_dir
快速注册文件能力。
browser()
browser_fetchbrowser_screenshotbrowser_clickbrowser_typebrowser_evaluate
快速注册浏览器能力。
示例:只给 Agent 文件和浏览器能力,不开放 shell 命令与代码解释器:
const safeTools = [
...context.tools.files(),
...context.tools.browser(),
]
如需进一步禁用写入或删除类能力,可以在分组结果上继续过滤:
const readonlyFileTools = context.tools.files()
.filter((tool) => !['files_write', 'files_remove', 'files_make_dir'].includes(tool.name))

支持的框架

context.tools.* 的输出格式由 framework 决定,在 edgeone.json 中配置:
{
"agents": { "framework": "claude-agent-sdk" } // claude-agent-sdk / openai-agents-sdk / langgraph / crewai / deepagents
}
framework
输出格式
claude-agent-sdk
{ name, description, input_schema, execute }(含 toClaudeMcpServer() helper)。
openai-agents-sdk
Node:轻量 function-tool 兼容对象;Python:agents.FunctionTool
langgraph
Node:lightweight wrapper;Python:LangChain StructuredTool
deepagents
Node:lightweight LangChain-like wrapper;Python:LangChain StructuredTool
crewai
Node:lightweight wrapper;Python:CrewAI BaseTool
说明:
平台不会默认安装 langchain-core / @langchain/core/tools,需要真实框架 tool 对象时,优先使用下面的 helper 方法注入框架 class / factory。

框架 helper 方法

这些 helper 可以在 Makers Agent Runtime 注入的 context.tools 上直接调用。
框架
Node
Python
说明
LangGraph / DeepAgents / LangChain
context.tools.toLangChainTools(toolFactory, names?)
ctx.tools.to_langchain_tools(StructuredTool, names=None)
返回 LangChain 兼容工具,names 可传工具名或工具名数组。
OpenAI Agents SDK
-
-
无需 helper 方法。
CrewAI
context.tools.toCrewAITools(baseToolOrFactory, names?)
ctx.tools.to_crewai_tools(BaseTool, names=None)
返回 CrewAI 兼容工具,支持传 BaseTool 类或兼容 factory。
Claude Agent SDK
context.tools.toClaudeMcpServer(name?, options?)
ctx.tools.to_claude_mcp_server(name=None, options=None)
返回 MCP bundle,name / tools / allowedTools

Claude Agent SDK-toClaudeMcpServer

把 sandbox 内置工具转成 Claude Agent SDK 的 MCP server bundle,业务代码再传给 createSdkMcpServer / create_sdk_mcp_server 即可注册。

参数

参数
说明
name
MCP server name,会同步成 mcp__<name>__<tool> 前缀。
options.alwaysLoad / options.always_load
默认会标记 anthropic/alwaysLoad,传 { alwaysLoad: false } 不会写入 anthropic/alwaysLoad metadata。

返回值

返回 MCP bundle 对象。

TS 示例

import { createSdkMcpServer } from '@anthropic-ai/claude-agent-sdk'
export async function onRequest(context: any) {
const edgeoneMcp = context.tools.toClaudeMcpServer()
// 自定义 server name
const customMcp = context.tools.toClaudeMcpServer('sandbox')
const mcpServers = [
createSdkMcpServer({
name: edgeoneMcp.name,
tools: edgeoneMcp.tools,
}),
]
const allowedTools = edgeoneMcp.allowedTools
// 将 mcpServers / allowedTools 传给 Claude Agent SDK
}

Python 示例

from claude_agent_sdk import create_sdk_mcp_server
async def handler(ctx):
edgeone_mcp = ctx.tools.to_claude_mcp_server()
# 自定义 server name
# custom_mcp = ctx.tools.to_claude_mcp_server('sandbox')
mcp_servers = [
create_sdk_mcp_server(
name=edgeone_mcp.name,
tools=edgeone_mcp.tools,
)
]
allowed_tools = edgeone_mcp.allowed_tools
# 将 mcp_servers / allowed_tools 传给 Claude Agent SDK

OpenAI Agents SDK

无需 helper,把 context.tools.all() 传给 OpenAI Agents SDK 即可,仅暴露部分工具可以用 context.tools.files() / context.tools.browser() / context.tools.get(name) 组装即可,输出形态保持一致。

TS 示例

import { Agent } from '@openai/agents'
const agent = new Agent({
name: 'Assistant',
instructions: 'Use sandbox tools.',
tools: context.tools.all(),
model,
})

Python 示例

from agents import Agent, Runner
agent = Agent(
name="Assistant",
instructions="Use sandbox tools.",
tools=context.tools.all(),
)

LangGraph-toLangChainTools

toLangChainTools / to_langchain_tools 接受框架自身的 tool factory,返回真实 LangChain 工具对象。

参数

参数
说明
toolFactory / StructuredTool
模板自己 import 的 LangChain tool 函数(Node)或 StructuredTool 类(Python)。
names
工具名称。

返回值

LangChain 兼容工具数组(Python 是 StructuredTool 实例,Node 是 tool(...) factory 调用结果)。

TS 示例

import { tool } from '@langchain/core/tools'
import { createReactAgent } from '@langchain/langgraph/prebuilt'
const allTools = context.tools.toLangChainTools(tool)
const agent = createReactAgent({ llm: model, tools: allTools })

Python 示例

# requirements.txt: pages-agent-toolkit, langchain-core, langgraph
from langchain_core.tools import StructuredTool
from langgraph.prebuilt import create_react_agent

all_tools = ctx.tools.to_langchain_tools(StructuredTool)
agent = create_react_agent(model, tools=all_tools)

DeepAgents-toLangChainTools

DeepAgents 基于 LangGraph,工具形态同 LangChain,复用 toLangChainTools / to_langchain_tools 即可,helper 参数与返回值与 LangGraph 一致,仅 agent 构造入口不同。

参数

同 LangGraph:传入 LangChain tool factory(Node)或 StructuredTool 类(Python),可选 names

返回值

LangChain 兼容工具数组,可直接作为 create_deep_agent(tools=...) / createDeepAgent({ tools, ... }) 的入参。

TS 示例

import { createDeepAgent } from 'deepagents'
import { tool } from '@langchain/core/tools'
const tools = context.tools.toLangChainTools(tool, ['web_search'])
const agent = await createDeepAgent({
model,
tools,
systemPrompt: 'Use web_search for public web discovery.',
})

Python 示例

from deepagents import create_deep_agent
from langchain_core.tools import StructuredTool
tools = ctx.tools.to_langchain_tools(StructuredTool, names=['web_search'])
agent = create_deep_agent(
tools=tools,
system_prompt='Use web_search for public web discovery.',
)

CrewAI-toCrewAITools

toCrewAITools / to_crewai_tools 接受框架的 BaseTool 类(或兼容 factory),把 sandbox 内置工具包装成 CrewAI 工具实例。

参数

参数
说明
baseToolOrFactory / BaseTool
CrewAI BaseTool 类,或返回 BaseTool 实例的 factory。
names
工具名称。

返回值

CrewAI 兼容工具数组(Python 是 BaseTool 子类实例,Node 是兼容对象)。

TS 示例

const allTools = context.tools.toCrewAITools(CrewBaseToolOrFactory)
const researcher = new Agent({
role: 'Researcher',
goal: 'Use sandbox tools to gather information.',
tools: allTools,
})

Python 示例

from crewai import Agent
from crewai.tools import BaseTool
all_tools = ctx.tools.to_crewai_tools(BaseTool)
researcher = Agent(
role='Researcher',
goal='Use sandbox tools to gather information.',
tools=all_tools,
)

本地调试日志

调试日志默认关闭。开启后会把沙箱实例获取成功事件与沙箱工具执行日志输出到本地 CLI 的 stderr。
开启方式:在运行环境变量中加入 MAKERS_AGENT_TOOLKIT_DEBUG=1 开启。
MAKERS_AGENT_TOOLKIT_DEBUG=1
日志会对敏感字段(token / auth / password / secret / key)做脱敏;截图结果不会打印完整 base64Image,只打印摘要:
[pages-agent-toolkit] tool.execute.start {"tool":"browser_screenshot","operation":"browser_screenshot","args":{"fullPage":true}}
[pages-agent-toolkit] tool.execute.success {"tool":"browser_screenshot","operation":"browser_screenshot","durationMs":123,"result":{"base64ImageLength":193882,"savedToFile":false}}