Wingbits AI 新手快速上手指南
更新时间:2026-05-31
适合读者:想快速体验 Wingbits AI、调用 Wingbits Customer API、并把实时航班数据接入业务系统的开发者。
说明:截至本文整理时,Wingbits 公开开发者文档主要提供 Customer API,用于读取实时/历史航班数据;Wingbits AI 的自然语言 Agent 能力主要通过网页端使用。本文会把“AI Agent 使用”和“API 程序化调用”分开讲,避免把网页端能力误写成已公开的 Agent API。
一、Wingbits AI 核心功能与应用场景解析
Wingbits AI 的定位是“用自然语言监控天空”。它不是传统意义上的航班查询网站,而是把实时航空数据、地理区域监控、自动化告警和 AI Agent 结合起来,让用户用一句话描述监控目标,再让 Agent 持续运行。
从官方页面可以看到,Wingbits AI 的核心能力可以拆成四类:
-
实时空域问答
用户可以直接询问某个区域、某架飞机、某类机队当前的飞行状态。例如:查询某机场附近的航班、查看某个 ICAO 地址对应飞机的实时位置、了解某片区域内是否存在异常活动。 -
自动化 Agent 监控
用户可以创建持续运行的 Agent,让它在后台按设定频率检查空域数据,并在满足条件时发送提醒。典型场景包括:VIP 飞机活动提醒、某地区军机/公务机监控、机场延误与备降日报、GPS 干扰事件监控等。 -
告警与报告推送
Wingbits AI 支持将告警或分析结果推送到 Slack、Teams、邮箱等协作工具,适合媒体、机场运营、物流、航空情报、OSINT 调查等团队使用。 -
Customer API 数据接入
对开发者来说,最重要的是 Wingbits Customer API。官方文档显示,该 API 基于 REST,只读访问,支持读取航班位置、航班详情、航迹路径、飞机详情以及 GPS 干扰相关数据。基础地址为:
https://customer-api.wingbits.com/

二、环境依赖检查与账号注册流程
如果只是体验 Wingbits AI 的网页端 Agent,准备一个浏览器和邮箱账号即可。如果要写代码调用 API,建议准备如下环境:
python --version
pip --version
推荐环境:
| 类型 | 建议版本或工具 |
|---|---|
| Python | 3.10+ |
| HTTP 调试 | curl、Apifox、Postman 任选其一 |
| Python 依赖 | requests、python-dotenv、pandas、folium |
| 可视化 | folium / plotly / kepler.gl |
| 运行环境 | 本机、云服务器、定时任务、Docker 均可 |
安装依赖:
pip install requests python-dotenv pandas folium
账号注册流程建议按这个顺序走:
- 打开 Wingbits AI 官网:
https://www.wingbits.ai/ - 点击
Set up your free agent或Get started。 - 进入
https://app.wingbits.ai/后完成注册或登录。 - 如果要调用 API,进入 Wingbits 账号后台或 API Dashboard,找到 API Key 管理入口。
- 如果后台没有 API Key 入口,通常说明当前账号套餐或权限尚未开通 Customer API,需要检查定价页或联系官方支持。

三、API 密钥获取与安全配置方法
Wingbits Customer API 使用 API Key 鉴权。官方文档说明,API Key 可以从 Wingbits 账号 Dashboard 获取,请求时需要把 Key 放进请求头或请求参数中。开发时更推荐放在请求头里,官方 OpenAPI 文档中的安全方案使用的是:
x-api-key: YOUR_API_KEY
不要把 API Key 写死在代码里,也不要提交到 Git 仓库。推荐使用环境变量或 .env 文件。
.env 示例:
WINGBITS_API_KEY=your_api_key_here
WINGBITS_BASE_URL=https://customer-api.wingbits.com
Python 读取配置:
from dotenv import load_dotenv
import os
load_dotenv()
API_KEY = os.getenv("WINGBITS_API_KEY")
BASE_URL = os.getenv("WINGBITS_BASE_URL", "https://customer-api.wingbits.com")
if not API_KEY:
raise RuntimeError("请先配置 WINGBITS_API_KEY")
安全建议:
- 只在服务端使用 API Key,不要放在前端 JavaScript、移动端包体或公开配置文件中。
- 日志里只打印 Key 的前后几位,例如
wb_****abcd,不要打印完整 Key。 - 团队协作时按环境区分 Key,例如
dev、staging、prod。 - 如果怀疑泄露,立即在 Dashboard 中删除旧 Key 并创建新 Key。
- 生产环境优先使用云厂商 Secret Manager、Kubernetes Secret、GitHub Actions Secrets 等托管方案。
四、首个 AI 调用请求的代码实现
这里需要先说清楚一个边界:目前公开文档中可直接编程调用的是 Wingbits Customer API,它提供实时航班和 GPS 相关数据;Wingbits AI 的自然语言 Agent 主要在网页端创建和运行。因此本文的“首个 AI 调用请求”采用开发者最容易落地的方式:先通过 API 拉取实时航班数据,再把这类数据接入自己的 AI 分析、告警或报表流程。
先检查服务是否可用:
curl https://customer-api.wingbits.com/health
如果服务正常,会返回类似 status、timestamp、version、uptime 等字段。
接下来查询 JFK 机场附近 30 海里范围内的航班:
curl -G "https://customer-api.wingbits.com/v1/flights" \
-H "x-api-key: YOUR_API_KEY" \
--data-urlencode "by=radius" \
--data-urlencode "la=40.6413" \
--data-urlencode "lo=-73.7781" \
--data-urlencode "rad=30" \
--data-urlencode "unit=nm"
Python 版本:
import os
import requests
from dotenv import load_dotenv
load_dotenv()
BASE_URL = os.getenv("WINGBITS_BASE_URL", "https://customer-api.wingbits.com")
API_KEY = os.getenv("WINGBITS_API_KEY")
headers = {
"x-api-key": API_KEY,
}
params = {
"by": "radius",
"la": 40.6413,
"lo": -73.7781,
"rad": 30,
"unit": "nm",
}
resp = requests.get(
f"{BASE_URL}/v1/flights",
headers=headers,
params=params,
timeout=(3.05, 15),
)
resp.raise_for_status()
flights = resp.json()
print(f"当前区域航班数量:{len(flights)}")
for item in flights[:5]:
print(item.get("h"), item.get("f"), item.get("la"), item.get("lo"), item.get("ab"))
如果你希望做“自然语言 + 数据”的 AI 应用,可以把这一步作为数据层:先由 Wingbits API 获取实时航空数据,再交给自己的 LLM 做摘要、异常解释、日报生成或告警文本生成。
五、典型业务场景下的参数调优技巧
Wingbits Customer API 的 /v1/flights 支持按地理范围查询。常见参数如下:
| 参数 | 说明 | 调优建议 |
|---|---|---|
by |
查询方式,box 或 radius |
机场周边适合 radius,城市/航路区域适合 box |
la |
中心点纬度 | 范围:-90 到 90 |
lo |
中心点经度 | 范围:-180 到 180 |
rad |
半径 | by=radius 时使用,单位由 unit 决定 |
w / h |
宽度和高度 | by=box 时使用 |
unit |
km 或 nm |
航空场景更常用 nm |
min_ab / max_ab |
气压高度过滤,单位英尺 | 低空监控可设置 max_ab,巡航层分析可设置较高区间 |
categories |
飞机类别代码,逗号分隔 | 用于过滤不同类型的航空器 |
几个典型场景:
机场运行监控
以机场坐标为圆心,半径设置为 20 到 50 海里,关注进近、离场和盘旋等待情况。可以用 max_ab 过滤低空阶段。
params = {
"by": "radius",
"la": 40.6413,
"lo": -73.7781,
"rad": 30,
"unit": "nm",
"max_ab": 12000,
}
区域空域态势
对一个城市或敏感区域做矩形框查询,适合做持续看板。
params = {
"by": "box",
"la": 34.0522,
"lo": -118.2437,
"w": 80,
"h": 60,
"unit": "nm",
}
多区域并行查询
官方文档提供 POST /v1/flights,可以一次查询多个地理区域,并用 alias 区分返回结果。适合同时监控多个机场、多个城市或多个业务区域。
payload = [
{
"alias": "jfk",
"by": "radius",
"la": 40.6413,
"lo": -73.7781,
"rad": 30,
"unit": "nm",
},
{
"alias": "lax",
"by": "radius",
"la": 33.9416,
"lo": -118.4085,
"rad": 30,
"unit": "nm",
},
]
resp = requests.post(
f"{BASE_URL}/v1/flights",
headers={**headers, "Content-Type": "application/json"},
json=payload,
timeout=(3.05, 20),
)
resp.raise_for_status()
data = resp.json()
GPS 干扰监控
GET /v1/gps/jam 用于获取指定边界框内的 GPS accuracy hexes。适合做区域异常热力图、日报或告警。
params = {
"min_lat": 24.0,
"max_lat": 31.0,
"min_lng": 46.0,
"max_lng": 57.0,
"date": "2026-05-31",
}
resp = requests.get(
f"{BASE_URL}/v1/gps/jam",
headers=headers,
params=params,
timeout=(3.05, 20),
)
resp.raise_for_status()
gps_data = resp.json()
六、返回数据解析与结果可视化展示
航班列表接口返回的是数组。常见字段可以这样理解:
| 字段 | 含义 |
|---|---|
h |
ICAO 24-bit aircraft address |
la / lo |
纬度、经度 |
f |
航班号或 callsign |
c |
航空器类别 |
ab |
气压高度 |
ag |
GPS 高度 |
gs |
地速 |
sq |
应答机 squawk code |
t |
数据类型,例如 ADSB、ADSC、MLAT |
ra |
数据接收时间 |
og |
是否在地面 |
最小化解析函数:
def normalize_flight(item: dict) -> dict:
return {
"icao24": item.get("h"),
"callsign": item.get("f"),
"lat": item.get("la"),
"lon": item.get("lo"),
"altitude_barometric": item.get("ab"),
"altitude_gps": item.get("ag"),
"ground_speed": item.get("gs"),
"squawk": item.get("sq"),
"source_type": item.get("t"),
"received_at": item.get("ra"),
"on_ground": item.get("og"),
}
用 folium 生成一张本地地图:
import folium
center = [40.6413, -73.7781]
flight_map = folium.Map(location=center, zoom_start=8, tiles="OpenStreetMap")
for item in flights:
lat = item.get("la")
lon = item.get("lo")
if lat is None or lon is None:
continue
callsign = item.get("f") or "UNKNOWN"
icao24 = item.get("h") or "-"
altitude = item.get("ab") or "-"
speed = item.get("gs") or "-"
popup = f"""
<b>{callsign}</b><br>
ICAO24: {icao24}<br>
Altitude: {altitude}<br>
Ground Speed: {speed}
"""
folium.CircleMarker(
location=[lat, lon],
radius=4,
popup=popup,
color="#0f766e",
fill=True,
fill_opacity=0.8,
).add_to(flight_map)
flight_map.save("wingbits_flights_map.html")
print("已生成 wingbits_flights_map.html")
生成地图后,用浏览器打开 wingbits_flights_map.html,即可看到航班点位分布。
七、常见连接超时与鉴权失败排查
建议先从 /health 开始排查:
curl https://customer-api.wingbits.com/health
如果 /health 正常,而业务接口失败,再看状态码。
| 状态码 | 常见原因 | 处理方式 |
|---|---|---|
400 |
参数不合法,例如经纬度超范围、缺少 rad、w、h 等必填参数 |
对照接口文档检查参数 |
401 |
API Key 缺失、错误或已失效 | 检查 x-api-key 请求头,必要时重新生成 Key |
402 |
当前套餐或余额不支持该请求 | 检查订阅计划、额度或账单状态 |
404 |
航班 ID、ICAO24 或路径不存在 | 确认查询对象是否仍在数据范围内 |
429 |
请求过于频繁或超过配额 | 降低并发,增加退避重试 |
500 |
服务端异常 | 记录请求参数和时间,稍后重试或联系支持 |
Python 中建议显式设置连接超时和读取超时:
resp = requests.get(
f"{BASE_URL}/v1/flights",
headers=headers,
params=params,
timeout=(3.05, 15),
)
排查顺序:
- 确认 URL 是
https://customer-api.wingbits.com/,不要使用http。 - 确认请求头名称是
x-api-key。 - 确认本机或服务器网络可以访问外网。
- 确认代理、防火墙、公司网关没有拦截 HTTPS 请求。
- 将完整 URL、状态码、响应 body、请求耗时记录到日志,但不要记录完整 API Key。
八、并发调用限制与配额管理策略
官方文档说明,每个请求限制取决于当前订阅计划。Wingbits 官方博客也提到,自助 API Dashboard 支持使用量监控、套餐升级和免费额度测试。实际开发时,不要把 API 当成无限制数据流使用,应当主动做配额管理。
推荐策略:
-
请求分层
对实时看板使用短周期刷新,对日报、周报、历史分析使用较低频率任务。 -
本地缓存
对同一地区、同一时间窗口内的重复查询做 10 到 60 秒缓存。机场级态势通常不需要每个用户都打一次 API。 -
退避重试
遇到429后不要立即重试,使用指数退避。
import time
import requests
def request_with_backoff(url, *, headers, params=None, max_retries=3):
for attempt in range(max_retries):
resp = requests.get(url, headers=headers, params=params, timeout=(3.05, 15))
if resp.status_code != 429:
resp.raise_for_status()
return resp.json()
sleep_seconds = 2 ** attempt
time.sleep(sleep_seconds)
raise RuntimeError("请求超过重试次数,可能已经触发限流")
-
按业务拆额度
生产系统里至少区分三类调用:用户即时查询、后台定时任务、告警任务。不要让低优先级任务挤占告警额度。 -
监控用量
每次请求记录接口名、状态码、耗时、返回数量和业务方。每天聚合一次,及时发现异常增长。
九、本地调试工具与日志监控方案
本地调试可以使用三类工具:
| 工具 | 适合场景 |
|---|---|
| curl | 快速验证连通性、鉴权和参数 |
| Apifox / Postman | 保存接口集合、团队共享调试参数 |
| Python 脚本 | 接入业务逻辑、可视化和自动化任务 |
推荐把日志统一成结构化格式:
import logging
import time
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(levelname)s %(message)s",
)
def fetch_flights(params):
started = time.time()
url = f"{BASE_URL}/v1/flights"
try:
resp = requests.get(url, headers=headers, params=params, timeout=(3.05, 15))
elapsed_ms = int((time.time() - started) * 1000)
logging.info(
"wingbits_request endpoint=%s status=%s elapsed_ms=%s",
"/v1/flights",
resp.status_code,
elapsed_ms,
)
resp.raise_for_status()
return resp.json()
except requests.Timeout:
logging.exception("wingbits_timeout endpoint=/v1/flights")
raise
except requests.HTTPError:
logging.exception("wingbits_http_error body=%s", resp.text[:500])
raise
日志里建议保留:
endpointstatus_codeelapsed_msparams的脱敏版本- 返回数据条数
- 业务调用方
- 错误响应前 500 个字符
不建议记录:
- 完整 API Key
- 用户隐私数据
- 大量原始响应 body
- 可反推出敏感监控目标的完整任务配置
十、从 Demo 到生产环境的部署要点
Demo 能跑通,不代表生产环境就稳定。上线前至少补齐以下能力。
1. 服务端代理
如果你的产品有 Web 前端,不要让浏览器直接调用 Wingbits API。正确做法是:
Browser -> Your Backend -> Wingbits Customer API
这样可以隐藏 API Key,也方便统一做限流、缓存、日志和权限控制。
2. 配置与密钥管理
生产环境使用 Secret Manager 或 CI/CD Secret 注入,不要把 .env 文件上传到服务器镜像或代码仓库。
3. 错误处理
对 400、401、402、429 做明确提示。尤其是 402 和 429,它们通常和套餐、配额、调用频率有关,应当进入监控系统。
4. 缓存与降级
实时数据业务很容易被刷新按钮打爆。建议按接口和区域缓存:
cache_key = endpoint + sorted(params)
ttl = 10s ~ 60s
当上游 API 临时不可用时,可以返回最近一次成功结果,并在页面上标记数据更新时间。
5. 任务调度
后台 Agent 或定时任务要避免所有任务同时触发。可以按业务优先级错峰执行,例如每分钟第 0 秒跑机场告警,第 15 秒跑日报数据,第 30 秒跑可视化刷新。
6. 可观测性
生产环境至少监控以下指标:
- API 成功率
- P95 / P99 响应耗时
401、402、429数量- 每日请求总量
- 每个业务模块请求量
- 告警任务漏检或延迟次数
7. 合规与数据使用边界
航空数据可能涉及商业、媒体、OSINT 和安全场景。上线前要明确数据用途、保存周期、访问权限和告警分发范围。对于 VIP、OSINT、敏感区域监控等场景,应当遵守平台条款和当地法律法规。
小结
Wingbits AI 更适合做“空域监控 Agent”和“航空数据自动化告警”,而 Wingbits Customer API 适合开发者把实时航班、飞机详情、航迹和 GPS 干扰数据接入自己的系统。
新手上手时建议先走三步:
- 在网页端创建一个 Wingbits AI Agent,理解自然语言监控流程。
- 用
/health和/v1/flights跑通第一条 API 请求。 - 在本地完成数据解析、地图可视化、日志和限流,再考虑部署到生产环境。
只要把 API Key 管好、请求频率控好、日志和异常处理补齐,从 Demo 走到生产并不复杂。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)