AI-Infra-Guard Agent Scan HTTP 自定义接口配置实战:从配置项到源码级解析实现

发布时间:2026/9/17 16:15:12

AI-Infra-Guard Agent Scan HTTP 自定义接口配置实战:从配置项到源码级解析实现 AI-Infra-Guard Agent Scan HTTP 自定义接口配置实战从配置项到源码级解析实现【免费下载链接】AI-Infra-GuardA full-stack AI Red Teaming platform securing AI ecosystems via Agent Scan, Skills Scan, MCP scan, AI Infra scan and LLM jailbreak evaluation.项目地址: https://gitcode.com/GitHub_Trending/ai/AI-Infra-Guard本文基于 AI-Infra-Guard 仓库中的 HTTP 接口配置指南common/websocket/static/aigdocs/docs/agent-scan-http-config_en.md完整讲解如何将自托管 Agent 服务或第三方非标准接口接入 Agent Scan 进行安全扫描包括 URL、请求头、{{prompt}}请求体模板、响应解析器与超时等全部配置项的使用方法并结合agent-scan子项目的适配器源码agent-scan/agent_scan/core/agent_adapter/adapter.py深入剖析占位符渲染、响应字段提取与 SSE 流式解析的底层实现帮助读者既能正确配置任意 HTTP 对话端点也能理解扫描器在底层如何把一次 HTTP 交互转化为可评估的 Agent 回复。一、HTTP Endpoint 在 Agent Scan 中的定位Agent Scan 是 AI-Infra-Guard 平台中用于对 AI Agent 目标进行安全扫描越狱、提示注入、工具滥用等的组件。为了覆盖 OpenAI 兼容 API 之外的目标它内置了一个“自定义 HTTP 端点”HTTP Endpoint适配器只要目标 Agent 暴露了一个 HTTP 对话接口无论字段名、返回结构多非标都可以用 URL 请求头 请求体模板 响应解析器这四项配置接入。从源码结构看该适配器的核心类是 adapter.py 中的AIProviderClient。其_route_call方法约 L308-L337按优先级路由请求provider ID 以websocket开头或 URL 以ws:///wss://开头时自动改走 WebSocket 处理分支_should_use_websocket约 L477-L481provider ID 以http开头或仅配置了 URL 的匿名配置时进入本文主题的_call_http_provider分支dify、coze等平台型 provider 有专门处理其余标准厂商OpenAI、Anthropic、Mistral、Groq 等走统一的_call_standard_provider其模板与响应路径由 providers.yaml 中的格式组定义。需要说明的是HTTP Endpoint 分支只接受http:///https://地址——_validate_local约 L1294-L1337会显式校验“HTTP URL must start with http:// or https://”这也是为什么 WebSocket 目标必须填 ws/wss 前缀才能被正确路由。二、配置入口与基础必填项配置入口Settings设置→Agent ConfigurationAgent 配置→Add新增→ 选择HTTP Endpoint。基础设置必填配置项说明默认值Agent NameAgent 名称自定义的唯一名称用于识别与管理该 Agent无URL目标 HTTP 端点的完整地址如https://api.example.com/chat无必填HTTP Method请求方法支持 POST、GET、PUT、PATCH、DELETEPOST在源码中这三个必填项分别映射到 adapter.py 里ProviderConfig模型的字段约 L47-L77url、method、headers、body、transform_response、timeout_ms。_call_http_provider约 L483-L503对它们的处理逻辑与文档描述一一对应url缺失时直接返回HTTP URL is required失败结果method会统一转为大写未配置时回退为POSTmethod (config.method or POST).upper()若用户额外配置了endpoint字段常见于 YAML 配置文件方式最终地址为url endpoint的拼接。三、高级配置项详解可选3.1 请求头Request Headers格式JSON 格式的 HTTP 请求头。默认值{Content-Type: application/json}。示例{ Content-Type: application/json, Authorization: Bearer your-token-here, X-Custom-Header: xxxxx }注意若目标接口需要鉴权在此添加Authorization等头。源码印证_call_http_provider中有一段兜底逻辑约 L496-L499——当用户未提供任何Content-Type不区分大小写检查Content-Type与content-type时自动补上application/json。这意味着文档中的“默认值”并非 UI 占位文案而是运行时真实行为。对于非 JSON 接口如纯文本必须像文档示例 2 那样显式写{Content-Type: text/plain}否则请求体序列化方式也会按 JSON 处理。3.2 请求体Request Body与{{prompt}}占位符格式请求体模板支持文本或 JSON 格式。占位符使用{{prompt}}表示测试输入的注入位置扫描时会替换为实际的测试 prompt。默认值{message: {{prompt}}}。示例{ query: {{prompt}}, user_id: agent-user, stream: false }注意按目标接口的真实请求格式填写确保{{prompt}}处于正确位置。源码印证占位符替换发生在_render_prompt_body约 L505-L519这里有几个文档未展开、但直接影响配置成败的实现细节兼容带空格的变体代码同时替换{{prompt}}和{{ prompt }}两种写法JSON 安全转义替换前 prompt 先经过json.dumps(prompt)[1:-1]处理即引号、换行、反斜杠等字符会被正确转义后再嵌入模板。这保证 prompt 中含有双引号或换行时JSON 模板不会被破坏模板合法性回退替换后的模板会先尝试json.loads解析——能解析则作为 JSON 对象发送解析失败则按原始字符串发送对应contentbody的纯文本请求体。这解释了为什么“简单文本接口”可以直接把请求体写成{{prompt}}默认模板body未配置时回退为{message: prompt}与文档声明的默认值一致。3.3 响应解析器Response Parser响应解析器用于从 HTTP 响应中提取 Agent 的真实回复内容对应ProviderConfig中的transform_response字段。格式JSONPath 表达式或路径表达式。配置方法JSON 响应使用点号路径提取嵌套字段。响应为{reply: content}时配置json.reply响应为{data: {message: content}}时配置json.data.message。文本响应留空或填response。响应本身就是纯文本如Agent reply content时解析器留空即可。如何确定先用“Agent Connection Verification”Agent 连接验证功能测试观察真实响应结构后再配置。源码印证文档将其描述为 JSONPath/JS 表达式但从 adapter.py 的_apply_transform实现约 L1239-L1285看实际是一个轻量级的路径提取引擎能力边界值得明确前缀剥离response.、json.、data.前缀不区分大小写会被先剥掉因此json.data.reply与data.reply等价空表达式语义表达式为空、或仅为response/json/data时直接返回原始响应文本原样返回JSON 序列化为字符串——这就是“文本响应留空即可”的实现来源点号 数组下标遍历表达式被切分为a.b[0].c这类 token 序列逐层dict.get取键、list[index]取下标任一层越界或类型不符即返回None。因此json.choices[0].message.contentOpenAI 格式这类带数组下标的路径是受支持的非字符串收尾若最终取到的是 dict 或 list会序列化为 JSON 字符串返回取到None视为提取失败交给默认提取逻辑兜底。若未配置解析器或提取失败_extract_output约 L1176-L1237会按常见格式自动兜底提取识别顺序为OpenAI 格式choices[0].message.content或choices[0].textAnthropic 格式contentlist 或字符串Google 格式candidates[0].content.parts[0].textOllama/Cohere 格式message.content、text通用字段依次尝试response、result、output、data、generated_text。这一兜底链意味着即使解析器配错只要响应命中上述常见结构验证仍可能成功反之字段名完全私有的接口如reply包在data下必须显式配置解析器。3.4 超时Timeout, ms默认值3000030 秒。说明请求超时时长。超过该时间未收到响应即判定为失败。源码印证_get_timeout_seconds约 L548-L551将timeout_ms除以 1000 转为秒并强制下限为 1 秒。HTTP 请求本身由httpx.Client(timeoutself.timeout)发起_make_http_request约 L942-L1033客户端级默认超时DEFAULT_TIMEOUT 30秒约 L224与 UI 默认 30000ms 保持一致从源码结构看timeout_ms的按秒换算逻辑被 WebSocket 分支连接、逐条消息接收直接复用。超时发生时HTTP 分支返回Request timed out after N seconds的标准化失败结果而不是抛出异常。四、两个完整配置示例继承自官方指南示例 1标准 JSON API假设目标接口为POST https://api.example.com/chat请求格式{ message: 用户输入内容, user_id: user123 }响应格式{ status: success, data: { reply: Agent 回复内容 } }配置URLhttps://api.example.com/chatHTTP MethodPOSTRequest Headers{Content-Type: application/json, Authorization: Bearer your-token}Request Body{message: {{prompt}}, user_id: agent-user}Response Parserjson.data.reply对照源码路径请求体经_render_prompt_body替换占位符后以 JSON 发送响应经_apply_transform依次取data→reply得到回复文本。示例 2简单文本接口假设目标接口为POST https://api.example.com/simple请求体为纯文本响应也是纯文本。配置URLhttps://api.example.com/simpleHTTP MethodPOSTRequest Headers{Content-Type: text/plain}Request Body{{prompt}}Response Parser留空或填response对照源码路径纯文本模板{{prompt}}替换后json.loads失败回退为字符串请求体httpxcontent发送响应为非 JSON 时raw_response即响应文本解析器留空时_extract_output对非 dict 直接str()返回。仓库中的真实配置样例除 UI 配置外Agent Scan 也支持从 YAML 文件批量加载目标load_config_from_file约 L1341-L1407支持providers或targets两种顶层键。仓库自带的测试用例 case3/provider.yaml 就是一个完整的 HTTP Endpoint 配置targets: - id: http config: url: http://127.0.0.1:18091 endpoint: /chat method: POST headers: Content-Type: application/json body: message: {{prompt}} transform_response: reply它覆盖了 UI 中所有配置项的 YAML 形态id: http触发 HTTP 路由分支transform_response: reply对应 Response Parser 的json.reply等价写法reply前缀剥离后与json.reply路径相同。五、请求执行链路从发出请求到拿到回复理解_make_http_request约 L942-L1033的完整流程能解释“连接验证成功/失败”的每一种结果形态发送dict 类型请求体走jsonbodyJSON 序列化str 类型走contentbody原始字节方法、URL、请求头均按配置原样发出SSE 流式识别若响应头content-type包含text/event-stream进入_parse_sse_response约 L1035-L1163逐行解析data:帧跳过[DONE]标记并分别支持四种流式协议的内容累积OpenAI 风格choices[0].delta.content拼接Anthropic 风格content_block_delta事件的delta.text拼接message_delta事件提取usageCoze 风格type: answer事件的contentDify 风格含answer字段的帧。解析完成后会重组为一个“规范化响应对象”如 OpenAI 风格的choices[0].message.content再交给响应解析器提取——这就是官方 FAQ 中“支持流式响应”的源码依据非流式响应优先response.json()解析失败则按文本处理若响应含usage字段会一并捕获供 Token 用量统计结果标准化无论成败都返回ProviderTestResult其中provider_response携带raw原始响应、output提取出的回复、响应头、token_usage与metadata包含status_code、elapsed_time、url、method、is_sse。2xx 状态码判定成功并返回Connection successful! Status: xxx, Time: x.xx s非 2xx 时会尝试从响应的error.message/message字段提取错误详情拼入失败信息。一个值得注意的路由细节虽然本文主题是 HTTP 接口但若把ws:///wss://地址填入 URL_should_use_websocket约 L477-L481会自动改走 WebSocket 请求-响应处理分支同样复用同一套transform_response提取逻辑并内置消息条数与响应字节数上限保护。配置前建议确认目标协议类型避免误路由。六、连接验证Agent Connection Verification配置完成后官方指南强烈建议使用“Agent Connection Verification”功能做快速验证UI 位于 Agent 配置页内通过“Prompt Input”输入测试词、“Run Test”发送测试请求并在解析器不正确时查看完整原始响应。从源码看其核心流程非常精简connectivity.py 中的connectivity()函数加载 YAML 配置中的第一个 provider用固定探测 promptOnly return 1调用一次call_provider以result.success作为连通性结论。也就是说验证请求与正式扫描走的是完全相同的适配器路径验证通过即可保证扫描阶段的请求链路可用。针对 HTTP 接口的验证排障要点继承自官方指南提取失败连通但拿不到回复优先检查 Response Parser 是否与真实响应结构一致连通性检查失败依次核对 URL含http:///https://前缀、HTTP 方法、请求头尤其是Content-Type与鉴权头、请求体格式、响应解析器4xx/5xx失败信息中会携带服务端返回的错误 message可直接用于定位鉴权或参数问题。七、FAQQ如何确定 Response Parser 该怎么配A先用“Agent Connection Verification”查看真实响应结构再按响应格式配置路径。常见对照响应为{reply: content}用json.reply{data: {message: content}}用json.data.messageOpenAI 格式{choices: [{message: {content: ...}}]}用json.choices[0].message.content此格式不配置时也会命中_extract_output的自动兜底。Q支持流式Streaming响应吗A支持。_make_http_request会自动识别text/event-stream并走 SSE 解析分支兼容 OpenAI/Anthropic/Coze/Dify 四种流式协议。若解析失败建议切换为非流式Synchronous/阻塞模式请求。Q请求体必须包含{{prompt}}吗A必须。{{prompt}}是必填占位符扫描时被替换为实际的测试 prompt源码中亦兼容{{ prompt }}写法替换前会自动做 JSON 转义。Q支持文件上传吗A当前版本不支持文件上传仅支持文本对话。Q如何得知目标接口的参数与响应格式A官方指南给出的五条途径仍然适用查阅接口文档了解请求格式URL、方法、头、body 结构与响应格式使用“Agent Connection Verification”配置基础信息后发送测试请求解析器配错时可看到完整原始响应结构浏览器开发者工具F12 → Network 面板 → 在 Web 界面发送消息 → 观察对应的 HTTP 请求与响应curl 或 Postman直接调用接口观察请求/响应格式参考响应解析器示例按 3.3 节的路径写法对照常见响应格式配置。八、相关文件索引文件作用HTTP 接口配置指南英文本文主体依据的官方配置文档HTTP 接口配置指南中文同指南中文版本adapter.pyAIProviderClient适配器HTTP 路由、占位符渲染、SSE 解析、响应提取的核心实现connectivity.py连通性验证入口Only return 1探测providers.yaml标准厂商 provider 的模板与响应路径定义case3/provider.yaml仓库内置的 HTTP Endpoint 真实配置样例provider_config_en.jsonprovider 配置说明英文小结接入一个 HTTP 自定义 Agent 的本质是回答三个问题——“请求怎么发”URL/方法/头/带{{prompt}}的 body 模板、“回复在哪取”transform_response路径、“多久放弃”timeout_ms。三个问题都答对_call_http_provider→_make_http_request→_extract_output这条链路即可把任意非标准 HTTP 对话接口转化为 Agent Scan 可评估的文本回复遇到失败时对照ProviderTestResult中携带的status_code、错误 message 与原始响应即可快速定位是链路问题还是解析问题。【免费下载链接】AI-Infra-GuardA full-stack AI Red Teaming platform securing AI ecosystems via Agent Scan, Skills Scan, MCP scan, AI Infra scan and LLM jailbreak evaluation.项目地址: https://gitcode.com/GitHub_Trending/ai/AI-Infra-Guard创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/17 16:15:12

系统盘制作全攻略:U盘与移动硬盘从原理到实操

你是不是也遇到过这种情况:电脑突然开不了机,手边连个能用U盘都没有,只能干瞪眼等维修店;或者是刚装了新硬盘想换个干净系统,却发现装机还要找别人帮忙。其实,制作系统盘这件事真没想象中那么玄乎&#xff…

2026/9/17 16:15:12

移动归因链路拆解与数据可信度验证实战

简介:这份57页PDF研究报告《AppsFlyer移动归因百科全书2021.5》是面向数字营销从业者、增长运营负责人及移动广告优化师的专业指南,直击iOS 14隐私新政下归因失效、预算错配等核心痛点。资源共1个PDF文件(4.1MB),内容结…

2026/9/17 16:10:11

DeepSeek 4.1 Flash实战:从API接入到本地部署的踩坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/17 17:10:16

顺丰作业成本法实践:两阶段分摊、成本动因与SQL核算引擎

简介:这份资源是山东财经大学燕山学院的一篇本科毕业设计(论文)文档,题目为《作业成本法在顺丰快递公司的应用研究》,适合成本管理、物流管理、财务管理方向的在校生与从业者参考。论文以顺丰快递为案例,梳…

2026/9/17 17:10:16

EB tresos 29.0.0安装配置与MCAL开发实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/17 17:10:16

Left 4 Dead 2 地图制作环境整合指南:从Hammer到VPK

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/17 17:10:16

从一条 stk_auction 代码到 A 股全市场当日竞价快照脚本

从一条 stk_auction 代码到 A 股全市场当日竞价快照脚本 【免费下载链接】Vibe-Trading "Vibe-Trading: Your Personal Trading Agent" 项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading A 股的 9:15–9:25 集合竞价(集中收集委托、…

2026/9/17 17:05:16

Fluent多相流模型怎么选?VOF/Mixture/Eulerian适用边界与实战详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/17 0:03:13

WiFi密码安全测试:从原理到实战的字典暴力破解指南

1. 写在前面:我为什么要研究WiFi密码这件事先交代一下背景。我身边有不少朋友,家里的WiFi密码常年是"12345678"或者"88888888",问就是"好记"。直到有一次,隔壁邻居蹭网蹭到我家路由器后台都进不去&…

2026/9/17 0:03:13

redis-py服务控制与监控函数实战:从ping到slowlog的巡检指南

我用 redis-py 写了快五年的业务代码,坦白说,真正让我觉得这个客户端“像一个成熟工具箱”的,不是 get/set 那套基本操作,而是它那批专门做服务控制与状态监控的辅助函数。日常开发里,大家把redis.Redis(host..., deco…

2026/9/17 0:03:13

SpringBoot+Vue3实现中小企业设备管理系统开发实践

1. 项目概述与核心价值中小企业设备管理系统是制造业、服务业等领域的基础信息化工具。传统设备管理往往依赖Excel表格或纸质记录,存在数据孤岛、流程混乱、维护成本高等痛点。这套基于Java SpringBootVue3MyBatis的技术方案,通过前后端分离架构实现了设…

2026/9/16 22:55:57

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/16 22:56:09

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/16 22:56:16

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码