<!-- user-agreement-injected -->📜 用户协议(User Agreement)
- 本 Skill 仅供学习与参考用途。使用本 Skill 产生的任何结果,由使用者自行承担全部责任;本 Skill 不提供任何明示或暗示的保证。
- 涉及法律、财务、税务、投资、医疗等专业决策时,请务必咨询持证专业人士。
- 本代码受版权法保护,未经授权复制、反向工程或商业利用将被追究法律责任。
<!-- ai-generated-notice -->本内容由 AI 生成,仅供学习参考
agent-resources 技能文档
一、能力边界速查卡
本技能面向需要将分散数据源(网页、文件、原始文本)转化为统一结构化格式的开发者和数据分析人员。它提供了一套标准化的处理管线,帮助你在不编写大量胶水代码的情况下,快速完成数据采集、清洗和格式化输出。
1.1 能做什么
| 能力项 | 说明 | 输入示例 | 输出示例 |
|--------|------|----------|----------|
| URL 抓取与解析 | 发起 HTTP GET 请求,提取网页正文,去除脚本和样式干扰 | https://example.com/article | 按段落拆分的纯文本数组 |
| 本地文件读取 | 读取文本文件内容,支持指定编码 | ./data/report.txt | 按行拆分的字符串数组 |
| 原始文本处理 | 直接接收文本输入,按换行符切分为记录 | 多行日志文本 | 每条日志一个元素的数组 |
| 批量处理 | 一次处理多条输入,统一输出格式 | 5 个 URL 列表 | 3 条有效结果(JSON 格式) |
| 自定义格式输出 | 根据需求调整输出结构(JSON/CSV/纯文本) | 结构化配置参数 | 符合配置的输出结果 |
1.2 不能做什么
- 不能执行写操作:本技能只负责读取和转换,不提供数据写入、文件保存或 API 推送功能。
- 不能处理二进制文件:仅支持文本类数据(HTML、TXT、CSV、JSON 等),不支持图片、音视频、压缩包。
- 不能绕过访问限制:对于需要登录、付费墙或存在 robots 协议限制的 URL,无法获取内容。
- 不能进行语义理解:只做结构拆分和格式转换,不提供摘要、翻译、情感分析等 NLP 能力。
- 不能保证数据完整性:如果源数据本身缺失或损坏,输出结果也会相应不完整。
1.3 适用对象
- 需要定期采集网页内容做分析的运营人员
- 需要批量处理日志文件或导出数据的开发人员
- 需要将非结构化文本转为结构化数据的数据工程师
- 需要快速验证数据格式的 AI Agent 开发者
二、触发方式与场景映射
2.1 触发词
当你的指令中包含以下关键词时,本技能将被激活:
- 核心触发词:
agent-resources、资源转换、数据采集、结构化输出、批量处理 - 补充场景词:
数据清洗、内容提取、格式转换
2.2 场景映射表
| 你的需求(大白话) | 对应能力 | 使用建议 | |-------------------|----------|----------| | "帮我把这个网页的内容整理成段落" | URL 抓取与解析 | 直接提供 URL 即可 | | "读取这个文件,按行输出" | 本地文件读取 | 确认文件路径和编码格式 | | "我有一段文本,帮我拆成多条记录" | 原始文本处理 | 确保文本以换行符分隔 | | "我有 10 个链接,想一次性都抓下来" | 批量处理 | 建议分批提交,每批 5 个 | | "输出格式要 JSON,字段名是 title 和 content" | 自定义格式输出 | 在请求中明确字段映射关系 | | "这个网页抓下来后,把广告和导航栏去掉" | URL 抓取与解析(清洗) | 本技能默认去除 script/style,但复杂页面需人工二次清洗 |
三、标准操作流程
3.1 前置条件
在发起处理请求前,请确认以下信息:
| 检查项 | 要求 | 缺失时的处理 |
|--------|------|--------------|
| 输入数据源 | URL 必须可公开访问;文件必须存在且可读;文本必须非空 | 返回错误码 E1001 |
| 编码格式 | 文件编码需明确(默认 UTF-8) | 使用默认编码,若乱码则返回 E2002 |
| 输出格式 | 明确指定 JSON/CSV/纯文本 | 默认输出 JSON |
| 批量大小 | 单次批量不超过 5 条 | 超过时自动分批,但建议手动分批以控制结果质量 |
3.2 执行步骤
步骤一:识别输入类型
根据输入内容判断属于以下哪种类型:
输入类型判断规则:
- 以 http:// 或 https:// 开头 → URL 类型
- 以 file:// 开头或包含文件路径分隔符 → 文件类型
- 其他 → 原始文本类型
步骤二:执行数据获取
URL 类型处理流程:
- 发起 HTTP GET 请求,设置超时时间为 10 秒
- 检查响应状态码,200 为成功,其他状态码按错误码表处理
- 提取 HTML 正文内容(
<body>标签内部) - 去除
<script>和<style>标签及其内容 - 按段落标签(
<p>、<div>、<h1>-<h6>)拆分文本
文件类型处理流程:
- 验证文件存在且可读(使用
os.path.exists和os.access) - 按指定编码(默认 UTF-8)读取文件内容
- 按换行符(
\n)拆分为行数组
原始文本处理流程:
- 直接接收文本内容
- 按换行符拆分为多条记录
- 去除每行首尾空白字符
步骤三:数据清洗与格式化
- 去除空行和纯空白行
- 去除每行首尾的空白字符
- 根据输出格式要求进行序列化:
- JSON:
{"data": [...]}结构 - CSV:逗号分隔,首行为表头
- 纯文本:每行一条记录
- JSON:
步骤四:输出结果
输出规范如下:
{
"status": "success",
"input_count": 5,
"output_count": 3,
"data": [
{"index": 1, "content": "第一条有效内容"},
{"index": 2, "content": "第二条有效内容"},
{"index": 3, "content": "第三条有效内容"}
],
"skipped": [
{"index": 4, "reason": "empty_content"},
{"index": 5, "reason": "fetch_failed"}
]
}
3.3 参数说明
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|--------|------|------|--------|------|
| input | string/array | 是 | 无 | 输入数据,可以是单个字符串或字符串数组 |
| input_type | string | 否 | auto | 可选值:url、file、text、auto |
| encoding | string | 否 | utf-8 | 文件读取编码 |
| output_format | string | 否 | json | 可选值:json、csv、text |
| batch_size | int | 否 | 5 | 批量处理时每批的最大条数 |
| timeout | int | 否 | 10 | HTTP 请求超时时间(秒) |
四、置信度门控机制
本技能遵循"宁缺毋滥"原则,在以下情况会输出占位符而非编造数据:
4.1 需要标注 [需核实] 的场景
| 场景 | 处理方式 | 示例 |
|------|----------|------|
| 网页内容不完整(可能被反爬机制截断) | 在输出末尾添加 [需核实:content_truncated] | "content": "文章前半部分...[需核实:content_truncated]" |
| 文件编码不确定导致乱码 | 输出 [需核实:encoding_uncertain] 并跳过该行 | "content": "[需核实:encoding_uncertain]" |
| 批量处理中部分条目失败 | 在 skipped 数组中标注原因,不静默丢弃 | "skipped": [{"index": 2, "reason": "fetch_failed"}] |
| 输出字段映射不明确 | 使用 [需核实:field_name] 占位 | "title": "[需核实:title]" |
4.2 置信度分级
| 置信度等级 | 判定标准 | 输出行为 | |-----------|----------|----------| | 高(≥90%) | 数据源完整、格式明确、无异常 | 正常输出全部字段 | | 中(70%-89%) | 数据源基本完整,但存在少量缺失或格式不规范 | 输出有效字段,缺失字段用占位符 | | 低(<70%) | 数据源严重不完整或存在大量异常 | 仅输出状态信息,不输出数据内容 |
五、错误码体系
5.1 错误码速查表
| 错误码 | 含义 | 提示话术 | 修正步骤 |
|--------|------|----------|----------|
| E1001 | 输入为空或无效 | "输入数据不能为空,请提供 URL、文件路径或文本内容" | 检查输入参数,确保非空 |
| E1002 | 输入类型无法识别 | "无法自动识别输入类型,请显式指定 input_type 参数" | 在请求中增加 input_type 参数 |
| E2001 | HTTP 请求失败(网络错误) | "网络请求失败,请检查 URL 是否可访问" | 确认网络连接,重试或更换 URL |
| E2002 | HTTP 状态码非 200 | "目标服务器返回状态码 {code},无法获取内容" | 检查 URL 是否正确,或确认目标是否允许访问 |
| E2003 | 响应内容为空 | "目标页面内容为空,可能被反爬机制拦截" | 尝试更换 User-Agent 或使用其他数据源 |
| E3001 | 文件不存在 | "文件 {path} 不存在,请确认路径是否正确" | 检查文件路径,确认文件已创建 |
| E3002 | 文件读取权限不足 | "文件 {path} 不可读,请检查文件权限" | 修改文件权限或更换文件 |
| E3003 | 文件编码错误 | "文件编码与指定编码不符,读取结果可能乱码" | 尝试更换编码参数,如 gbk、latin-1 |
| E4001 | 输出格式不支持 | "输出格式 {format} 不支持,可选值为 json、csv、text" | 检查 output_format 参数 |
| E4002 | 批量处理超限 | "单次批量处理超过 5 条限制,已自动分批" | 无需修正,但建议手动分批以控制质量 |
5.2 错误响应格式
{
"status": "error",
"error_code": "E2002",
"error_message": "目标服务器返回状态码 404,无法获取内容",
"suggestion": "检查 URL 是否正确,或确认目标是否允许访问"
}
六、FAQ 与反模式对照
6.1 常见坑与解决方案
| 常见问题 | 错误做法(反模式) | 正确做法(推荐模式) |
|----------|-------------------|---------------------|
| 网页内容抓取不完整 | 直接使用抓取结果,不做完整性检查 | 检查输出中是否包含 [需核实:content_truncated] 标记,如有则更换数据源或补充抓取 |
| 文件读取乱码 | 忽略编码问题,直接使用乱码数据 | 先尝试 UTF-8,若乱码则尝试 GBK、GB2312 等常见中文编码 |
| 批量处理部分失败 | 整体重试,浪费资源 | 查看 skipped 数组,仅对失败条目进行重试 |
| 输出字段与预期不符 | 在代码中硬编码字段名 | 在请求中明确指定字段映射关系,或使用 [需核实:field_name] 占位符 |
| 数据源包含广告/导航等噪音 | 手动逐条清理 | 利用本技能默认的 script/style 去除功能,复杂噪音需结合其他清洗工具 |
6.2 反模式对照表
| 反模式 | 问题描述 | 推荐替代方案 |
|--------|----------|--------------|
| 过度依赖自动类型识别 | 自动识别可能出错,导致处理流程错误 | 显式指定 input_type 参数 |
| 忽略置信度标记 | 占位符被当作真实数据处理 | 处理前检查输出中是否包含 [需核实: 前缀 |
| 盲目增大批量大小 | 批量过大会导致超时和资源耗尽 | 保持单批 5 条以内,使用循环分批处理 |
| 不检查错误码 | 错误被静默忽略,影响下游数据质量 | 每次调用后检查 status 字段,非 success 时按错误码处理 |
| 将本技能用于语义分析 | 本技能只做结构转换,不做语义理解 | 结合 NLP 类技能进行后续处理 |
七、渐进式披露指南
7.1 新手快速上手路径
如果你是第一次使用本技能,请按以下顺序阅读:
- 先读「一、能力边界速查卡」:了解本技能能做什么、不能做什么,避免期望过高
- 再看「三、标准操作流程」:按步骤操作一次,熟悉基本流程
- 遇到问题查「五、错误码体系」:根据错误码找到对应的解决方案
7.2 进阶用户优化路径
如果你已经熟悉基本操作,希望提升使用效率:
- 深入理解「四、置信度门控机制」:学会识别和处理低置信度输出
- 研究「六、FAQ 与反模式对照」:避免常见错误,优化处理流程
- 探索批量处理的最佳实践:结合
batch_size参数和skipped数组,实现精准重试 - 自定义清洗规则:在输出结果基础上,结合业务场景进行二次清洗
7.3 专家级应用路径
如果你需要将本技能集成到生产环境:
- 设计容错机制:根据错误码表设计重试和降级策略
- 建立数据质量监控:定期检查置信度标记出现频率,评估数据源稳定性
- 优化处理效率:对高频访问的 URL 建立缓存,减少重复请求
- 扩展输出格式:在 JSON/CSV/纯文本基础上,根据业务需求扩展自定义格式
八、使用示例
8.1 示例一:抓取网页内容
请求:
{
"input": "https://example.com/news/2024/01/15/tech-trends",
"input_type": "url",
"output_format": "json"
}
响应:
{
"status": "success",
"input_count": 1,
"output_count": 5,
"data": [
{"index": 1, "content": "2024年科技趋势展望"},
{"index": 2, "content": "人工智能继续引领创新浪潮..."},
{"index": 3, "content": "量子计算取得突破性进展..."},
{"index": 4, "content": "绿色能源技术加速落地..."},
{"index": 5, "content": "数字化转型成为企业共识..."}
],
"skipped": []
}
8.2 示例二:批量处理文件
请求:
{
"input": ["./logs/app1.log", "./logs/app2.log", "./logs/app3.log"],
"input_type": "file",
"encoding": "utf-8",
"output_format": "text"
}
响应:
{
"status": "success",
"input_count": 3,
"output_count": 2,
"data": [
{"index": 1, "content": "2024-01-15 10:23:45 INFO 应用启动成功"},
{"index": 2, "content": "2024-01-15 10:24:01 WARN 内存使用率超过80%"}
],
"skipped": [
{"index": 3, "reason": "file_not_found"}
]
}
8.3 示例三:处理原始文本
请求:
{
"input": "第一行数据\n第二行数据\n\n第四行数据",
"input_type": "text",
"output_format": "csv"
}
响应:
{
"status": "success",
"input_count": 4,
"output_count": 3,
"data": [
{"index": 1, "content": "第一行数据"},
{"index": 2, "content": "第二行数据"},
{"index": 4, "content": "第四行数据"}
],
"skipped": [
{"index": 3, "reason": "empty_content"}
## 许可证(License)
```text
MIT License
Copyright (c) 2026 SkillForge Lab
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
<!-- professional-license-embedded -->
Scan to join WeChat group