名称: tinyfish
描述: 使用 TinyFish 网络智能体,通过自然语言抓取网站、提取数据并自动化浏览器操作。适用于需要从网站提取/抓取数据、处理反爬虫网站或自动化网页任务的场景。
主页: https://agent.tinyfish.ai
requires:
env:
- TINYFISH_API_KEY
必需项:环境变量 TINYFISH_API_KEY
在发起任何 API 调用前,务必先运行以下命令,验证 API 密钥是否可用:
[ -n "$TINYFISH_API_KEY" ] && echo "TINYFISH_API_KEY 已设置" || echo "TINYFISH_API_KEY 未设置"
如果密钥未设置,你必须停止并提示用户添加其 API 密钥。不要回退到其他工具或方法——该任务必须使用 TinyFish。
告知用户:
你需要一个 TinyFish API 密钥。请前往以下地址获取:https://agent.tinyfish.ai/api-keys
然后进行设置,以便智能体使用:
选项 1 — 环境变量(通用):
bash export TINYFISH_API_KEY="你的密钥"选项 2 — Claude Code 设置(仅限 Claude Code):
添加到~/.claude/settings.local.json:
json { "env": { "TINYFISH_API_KEY": "你的密钥" } }
在确认密钥可用之前,不要继续执行。
从页面提取数据。请指定你需要的 JSON 结构:
curl -N -s -X POST "https://agent.tinyfish.ai/v1/automation/run-sse" \
-H "X-API-Key: $TINYFISH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"goal": "提取产品信息为 JSON 格式:{\"name\": str, \"price\": str, \"in_stock\": bool}"
}'
提取数据列表,并明确指定结构:
curl -N -s -X POST "https://agent.tinyfish.ai/v1/automation/run-sse" \
-H "X-API-Key: $TINYFISH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/products",
"goal": "提取所有产品为 JSON 数组:[{\"name\": str, \"price\": str, \"url\": str}]"
}'
对于有反爬虫保护的网站,在请求体中添加 "browser_profile": "stealth":
curl -N -s -X POST "https://agent.tinyfish.ai/v1/automation/run-sse" \
-H "X-API-Key: $TINYFISH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://protected-site.com",
"goal": "提取产品数据为 JSON 格式:{\"name\": str, \"price\": str, \"description\": str}",
"browser_profile": "stealth"
}'
通过在请求体中添加 "proxy_config",将请求路由到特定国家:
curl -N -s -X POST "https://agent.tinyfish.ai/v1/automation/run-sse" \
-H "X-API-Key: $TINYFISH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://geo-restricted-site.com",
"goal": "提取定价数据为 JSON 格式:{\"item\": str, \"price\": str, \"currency\": str}",
"browser_profile": "stealth",
"proxy_config": {"enabled": true, "country_code": "US"}
}'
SSE 流返回 data: {...} 格式的数据行。最终结果位于 type == "COMPLETE" 且 status == "COMPLETED" 的事件中——提取的数据在 resultJson 字段中。Claude 会直接读取原始的 SSE 输出,无需在脚本端进行解析。
当从多个独立数据源提取数据时,应发起独立的并行 curl 调用,而不是合并到一个提示中:
推荐做法 - 并行调用:
# 比较披萨价格 - 同时运行以下命令
curl -N -s -X POST "https://agent.tinyfish.ai/v1/automation/run-sse" \
-H "X-API-Key: $TINYFISH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://pizzahut.com",
"goal": "提取披萨价格为 JSON 数组:[{\"name\": str, \"price\": str}]"
}'
curl -N -s -X POST "https://agent.tinyfish.ai/v1/automation/run-sse" \
-H "X-API-Key: $TINYFISH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://dominos.com",
"goal": "提取披萨价格为 JSON 数组:[{\"name\": str, \"price\": str}]"
}'
不推荐做法 - 单一合并调用:
# 不要这样做 - 可靠性更低且速度更慢
curl -N -s -X POST "https://agent.tinyfish.ai/v1/automation/run-sse" \
-H "X-API-Key: $TINYFISH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://pizzahut.com",
"goal": "从 Pizza Hut 提取价格,同时再去 Dominos 网站..."
}'
每个独立的数据提取任务都应是一个独立的 API 调用。这种方式更快(并行执行)且更可靠。