资讯详情

资讯详情

Strands SDK 的 http_request 工具:为 AI Agent 提供跨平台、可超时的外部 HTTP 请求能力

人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务【免费下载链接】harness-sdkBuild an agent harness and control it end-to-end. Open-source SDK for production AI agents in Python TypeScript - any model, any cloud.项目地址https://gitcode.com/GitHub_Trending/sdkpython13/harness-sdk点击查看免费下载本文聚焦 strands-ts 中内置的 HTTP 请求工具vended toolhttpRequest讲解如何在 Strands Agent 中或直接以编程方式调用它访问外部 API。读完本文你将掌握该工具的完整输入输出契约、超时与取消机制、错误处理行为以及它在 Agent 场景中的实际用法与安全边界。工具定位Agent 访问外部世界的标准通道httpRequest是 Strands SDK 官方提供的一组开箱即用的vended tools内置工具之一用于让 Agent 通过 HTTP 协议与外部 API 交互——例如拉取公开数据、调用内部服务接口或触发第三方 Webhook。它定义于 src/vended-tools/http-request/http-request.ts并在 src/vended-tools/http-request/index.ts 中统一导出同时通过strands-agents/sdk/vended-tools/http-request子路径提供给使用者。与同样由 SDK 提供的webFetch等工具相比httpRequest更贴近原生 HTTP 客户端的定位它不解析网页、不提取正文而是完整暴露状态码、响应头和响应体文本适合对接 JSON API 与需要精确控制请求的 REST 服务。⚠️ 安全警告无目的地限制的出站请求工具文档在开篇就给出了明确的安全提示这是使用前必须理解的第一条约束该工具对任意 URL 发起 HTTP 请求对目标地址不设任何限制请求执行时使用宿主机进程的网络权限只应在受信任的输入下使用生产环境部署时建议将运行环境放入沙箱容器、虚拟机等切勿在未附加额外安全措施的情况下将该工具暴露给不受信任的用户或不受信任的 Prompt 输入。从实现看工具回调直接调用globalThis.fetch(url, fetchOptions)http-request.ts没有对协议、域名或端口做白名单校验。这意味着一旦 Agent 的 Prompt 被注入恶意指令工具便可能被诱导向内网地址或 SSRF 目标发起请求。因此将其与 sandbox 等隔离机制配合使用、或在应用层做 URL 校验是生产环境的基本要求。核心特性完整 HTTP 方法支持GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS跨平台底层基于原生fetchAPI可在 Node.js 22 与所有现代浏览器中运行超时支持可配置请求超时默认 30 秒类型安全基于 Zod schema 对输入做运行时校验TypeScript 类型完备全面的错误处理网络错误、超时、HTTP 错误均有明确的错误语义。安装npm install strands-agents/sdk安装后即可通过子路径导入该工具package.json 的exports字段已声明./vended-tools/http-request入口。基本用法场景一作为 Agent 工具使用将httpRequest传入Agent的tools数组Agent 会依据用户 Prompt 自主决定何时调用它import { Agent } from strands-agents/sdk import { httpRequest } from strands-agents/sdk/vended-tools/http-request const agent new Agent({ tools: [httpRequest], }) // Agent 将根据你的 Prompt 决定是否调用该工具 await agent.invoke(Get data from https://api.example.com/data)集成测试 test/integ/tools/http-request.test.ts 给出了真实场景Agent 被要求调用 Open-Meteo 获取纽约天气测试断言最终结果包含天气/温度/预报等关键词验证了 Agent 能正确选择并执行http_request工具完成任务。场景二直接调用编程式调用工具本身实现了invoke()接口可以不经过 Agent 直接使用import { httpRequest } from strands-agents/sdk/vended-tools/http-request // 简单 GET 请求 const response await httpRequest.invoke({ method: GET, url: https://api.example.com/data, }) console.log(response.status) // 200 console.log(response.body) // 响应体文本API 参考输入参数工具接受一个包含以下属性的对象类型定义见 src/vended-tools/http-request/types.ts属性类型必填默认值说明methodGET \| POST \| PUT \| DELETE \| PATCH \| HEAD \| OPTIONS是-使用的 HTTP 方法urlstring是-请求目标 URLheadersRecordstring, string否-可选的 HTTP 请求头bodystring否-可选的请求体用于 POST/PUT 等timeoutnumber否30超时时间秒从实现细节看http-request.tsZod schema 还额外施加了两条约束url必须是合法 URLz.string().url()非 URL 字符串会在进入回调前就被校验拦截timeout必须为正数z.number().positive()且headers与body均为可选。这意味着工具即使在直接调用绕过 Agent时也会在运行时校验输入并抛出 Zod 校验错误这是ZodTool的默认行为——见 src/tools/zod-tool.tsFunctionTool回调外层会先执行inputSchema.parse(input)校验通过后再把类型化输入传给用户回调。输出结果工具返回一个包含以下属性的对象类型定义见 types.ts属性类型说明statusnumberHTTP 状态码statusTextstringHTTP 状态文本headersRecordstring, string响应头转为普通对象bodystring响应体文本响应体的读取方式为response.text()http-request.ts因此无论服务端返回 JSON、纯文本还是空内容都以字符串形式呈现空响应体如 204 No Content会得到空字符串这一点有单元测试覆盖tests/http-request.test.ts。响应头通过response.headers.forEach逐个收敛为Recordstring, string普通对象便于 Agent 与下游代码直接读取。错误处理工具在以下情形抛出标准 JavaScriptError对象超时错误请求超过指定超时时间错误消息包含 Request timed outHTTP 错误响应状态码为非 2xx错误消息包含 HTTP 状态码与状态文本网络错误连接失败、DNS 解析失败等错误透传自底层fetch。源码级错误语义在 Agent 场景下这些错误会被自动转换为工具执行错误tool execution error。具体实现逻辑http-request.ts值得展开超时与取消共用 AbortSignal工具用AbortSignal.timeout(timeout * 1000)生成超时信号当存在执行上下文context时通过AbortSignal.any([timeoutSignal, context.cancelSignal])将超时信号与 Agent 的取消信号合并——两者任一触发都会中止请求非 2xx 抛出 HTTP 错误response.ok为 false 时抛出HTTP ${status} ${statusText}: ${method} ${url}因此 3xx 重定向、4xx 客户端错误与 5xx 服务端错误都会抛错单元测试逐一验证了 301、404、500 场景见 http-request.test.ts区分超时与取消捕获到AbortError后通过检查timeoutSignal.aborted区分超时与被取消并分别抛出Request timed out after N seconds与Request cancelled两种消息Error.cause保留原始 AbortError便于排查。可取消性测试单元测试专门验证了取消链路http-request.test.ts当ToolContext.cancelSignal与 Agent 信号不一致时执行端调用abort()后请求被中止最终抛出Request cancelled: GET url。这说明工具对长时间挂起的请求具备随时可中断的能力配合 Agent 的取消机制不会出现悬空请求。深入原理工具如何被构建与校验httpRequest并非手写的普通函数而是通过 SDK 的tool()工厂创建的标准化工具src/tools/tool-factory.ts传入的inputSchema是 Zod schema工厂据此实例化ZodToolZodTool会把 Zod schema 转换为 JSON Schema供模型工具定义使用并在回调入口执行schema.parse做运行时校验最终工具对外暴露统一的name、description与invoke()接口方便 Agent 运行时统一调度。因此http_request工具的描述文本Makes HTTP requests to external APIs. Supports GET, POST, PUT, DELETE, PATCH, HEAD, and OPTIONS methods...会作为函数定义呈现给模型帮助 Agent 在需要访问外部 API 时正确选中该工具。小结httpRequest为 Strands Agent 提供了一条类型安全、支持超时与取消、跨 Node.js/浏览器平台的外部 HTTP 请求通道。理解它的输入输出契约与错误语义能让你在编排 Agent 访问外部 API 时更可控同时务必牢记其无目的地限制的安全边界在不可信输入场景下配合沙箱或应用层 URL 校验使用。完整的单元测试tests/http-request.test.ts与集成测试test/integ/tools/http-request.test.ts可作为进一步阅读与参考的起点。赞分享人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务【免费下载链接】harness-sdkBuild an agent harness and control it end-to-end. Open-source SDK for production AI agents in Python TypeScript - any model, any cloud.项目地址https://gitcode.com/GitHub_Trending/sdkpython13/harness-sdk点击查看免费下载相关推荐strands-py 的 http_request 工具用 httpx.AsyncClient 为 Agent 打通任意 HTTP 调用strands py 的 http_request 工具用 httpx.AsyncClient 为 Agent 打通任意 HTTP 调用 导读 http_re人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务Tasmota HTTP请求超时处理提高外部API调用稳定性的技巧Tasmota HTTP请求超时处理提高外部API调用稳定性的技巧 1. 智能家居场景下的API调用痛点 在智能家居系统中Tasmota设备常需与外部服务嵌入式物联网固件智能家居Fly.js跨平台的JavaScript HTTP请求库Fly.js跨平台的JavaScript HTTP请求库 在现代Web开发中处理HTTP请求是不可或缺的一部分。无论是在浏览器、Node.js、微信小程序还网络上一篇终极指南如何使用AppArmor为Symfony Translation实现进程权限安全加固下一篇终极SheetJS性能优化指南轻松处理百万级数据的7个实用技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →