目录
- 1. 引言:AI Agent 的数据源
- 2. public-apis 是什么
- 3. 仓库结构说明
- 4. 如何浏览与筛选 API
- 4.1 按分类浏览
- 4.2 按需求筛选
- 5. 快速上手:调用一个免费 API
- 5.1 示例一:猫的图片 API(TheCatAPI)
- 5.2 示例二:天气查询 API(Open-Meteo)
- 5.3 示例三:随机用户生成 API(RandomUser)
- 6. 在代码中调用 API
- 6.1 Python 示例
- 6.2 JavaScript 示例
- 7. 作为 AI Agent 的数据源
- 7.1 为什么用免费 API 作为数据源
- 7.2 内置知识 vs 调用免费 API:对比一览
- 7.3 典型场景
- 7.4 在 Agent 中接入 API(Python 示例)
- 7.5 接入时的注意事项
- 8. 注意事项与最佳实践
- 9. 总结public-apis是一个由社区维护的开源项目,收录了全球超过 1400 个免费公开 API,覆盖 40 余个分类,是开发者寻找免费数据接口的「一站式目录」。本文首先介绍如何通过 README 中的字段(Auth、HTTPS、CORS 等)高效浏览与筛选 API,随后以猫图、天气、随机用户三个示例演示了从 curl 到 Python、JavaScript 的调用方式。文章重点展示了如何将这些免费 API 作为 AI Agent 的外部数据源,通过 Function Calling 让智能体实时获取真实世界信息,弥补大模型在时效性与事实性上的不足。最后总结了接入时的注意事项与最佳实践,帮助你快速上手并顺利将免费 API 集成到自己的 Agent 项目中。
1. 引言:AI Agent 的数据源
在构建 AI Agent(智能体)时,一个关键问题是如何让 Agent 获取真实世界的最新信息。大模型本身的知识存在时效性限制,无法覆盖实时变化的天气、新闻、汇率等数据。这时,外部 API 就成了 AI Agent 不可或缺的数据源。
GitHub 上有一个非常著名的开源项目——public-apis,它收录了全球数百个免费公开 API,涵盖动物、金融、天气、娱乐、开发工具等几十个分类,是开发者寻找免费数据接口的「一站式目录」。这些接口恰好可以作为 AI Agent 的「工具箱」,让 Agent 通过 Function Calling / Tool Use 实时调用外部数据,弥补大模型在事实性和时效性上的不足。
本指南将带你从零开始认识 public-apis,学会如何浏览、筛选、调用其中的 API,并重点演示如何将这些免费 API 作为 AI Agent 的数据源,给出可直接上手的实战示例。
2. public-apis 是什么
public-apis 是一个由社区维护的开源项目,仓库地址为:
https://github.com/public-apis/public-apis它的核心价值在于:
- 覆盖面广:收录了数百个免费公开 API,按类别组织,方便查找。
- 信息透明:每个 API 都标注了是否免费、是否需要认证(Auth)、是否支持 HTTPS、是否支持 CORS 等关键信息。
- 社区驱动:任何人都可以提交新的 API 或修正已有条目,内容持续更新。
简单来说,它本身不是一个 API 服务,而是一份「API 索引清单」,帮你快速发现可用的免费接口。截至撰写本文时,该仓库已收录超过 1400 个 API,覆盖 40 余个分类,是 GitHub 上最活跃的 API 索引项目之一。
3. 仓库结构说明
public-apis 仓库的核心是一个README.md文件,其中以表格形式列出了所有 API。每个 API 条目通常包含以下字段:
| 字段 | 含义 |
|---|---|
| API | 接口名称及链接 |
| Description | 接口功能简介 |
| Auth | 是否需要认证(如apiKey、OAuth、No) |
| HTTPS | 是否支持 HTTPS 访问 |
| CORS | 是否支持跨域请求(Yes/No/Unknown) |
此外,仓库还包含:
CONTRIBUTING.md:贡献指南,说明如何提交新的 API。LICENSE:开源许可证。- 分类目录:README 中按类别(如 Animals、Finance、Weather 等)分组展示。
理解这些字段的含义,是高效筛选 API 的前提。例如,Auth字段决定了你调用接口前是否需要注册并获取密钥,CORS字段则直接影响该接口能否在浏览器端被前端代码直接调用。
4. 如何浏览与筛选 API
4.1 按分类浏览
打开 README 后,你会看到按字母顺序排列的分类标题,例如:
- Animals(动物)
- Anime(动漫)
- Finance(金融)
- Food & Drink(食品饮料)
- Games(游戏)
- Music(音乐)
- News(新闻)
- Weather(天气)
- 等等
点击分类标题即可跳转到对应区域的 API 表格。每个分类下通常有多个候选接口,建议先浏览 Description 列,快速判断哪个接口最贴合你的需求。
4.2 按需求筛选
在表格中,你可以根据以下条件快速筛选:
- Auth 列为
No:无需任何认证,直接调用,适合快速测试。 - HTTPS 列为
Yes:接口支持加密传输,更安全。 - CORS 列为
Yes:支持浏览器跨域请求,适合前端项目直接调用。
例如,如果你只想找「无需认证、支持 HTTPS、支持 CORS」的接口,可以同时满足这三个条件的行优先尝试。一个实用技巧是:先用浏览器的「查找」功能(Ctrl+F / Cmd+F)在当前页面搜索关键词,再结合上述条件逐行核对,能显著提升筛选效率。
5. 快速上手:调用一个免费 API
下面以几个典型的免费 API 为例,演示如何快速调用。
5.1 示例一:猫的图片 API(TheCatAPI)
TheCatAPI 无需认证即可获取随机猫咪图片,非常适合练手。
curl"https://api.thecatapi.com/v1/images/search"返回结果示例(JSON):
[{"id":"abc123","url":"https://cdn2.thecatapi.com/images/abc123.jpg","width":1024,"height":768}]5.2 示例二:天气查询 API(Open-Meteo)
Open-Meteo 无需 API Key,即可获取全球天气数据。
curl"https://api.open-meteo.com/v1/forecast?latitude=39.9&longitude=116.4¤t_weather=true"返回结果示例(JSON):
{"latitude":39.9,"longitude":116.4,"current_weather":{"temperature":18.5,"windspeed":12.3,"weathercode":1}}5.3 示例三:随机用户生成 API(RandomUser)
RandomUser 可以生成模拟用户数据,适合测试列表页或表单。
curl"https://randomuser.me/api/"返回结果示例(JSON):
{"results":[{"name":{"first":"John","last":"Doe"},"email":"john.doe@example.com"}]}6. 在代码中调用 API
6.1 Python 示例
使用 Python 的requests库调用随机用户 API:
importrequests url="https://randomuser.me/api/"response=requests.get(url)data=response.json()user=data["results"][0]print(f"姓名:{user['name']['first']}{user['name']['last']}")print(f"邮箱:{user['email']}")6.2 JavaScript 示例
使用浏览器原生fetch调用猫图 API:
fetch("https://api.thecatapi.com/v1/images/search").then((response)=>response.json()).then((data)=>{constimgUrl=data[0].url;console.log("猫咪图片地址:",imgUrl);}).catch((error)=>console.error("请求失败:",error));7. 作为 AI Agent 的数据源
public-apis 收录的免费 API 非常适合作为 AI Agent(智能体)的外部数据源,让 Agent 在对话中实时获取真实世界的信息,而不只是依赖训练时的静态知识。
7.1 为什么用免费 API 作为数据源
- 实时性:天气、新闻、汇率等数据时刻变化,通过 API 获取能保证 Agent 回答的时效性。
- 扩展能力:Agent 可以调用工具(Function Calling / Tool Use)访问外部 API,弥补大模型在事实性、时效性上的不足。
- 低成本:public-apis 中大量接口免费且无需认证,适合快速搭建原型验证。
7.2 内置知识 vs 调用免费 API:对比一览
在决定是否让 Agent 接入外部 API 之前,先理解两种数据获取方式的差异会很有帮助。下表从几个关键维度做了对比:
| 对比维度 | 直接使用大模型内置知识 | 通过 Function Calling 调用免费 API |
|---|---|---|
| 实时性 | 受训练数据截止时间限制,无法获取最新信息 | 实时获取天气、新闻、汇率等动态数据 |
| 准确性 | 可能产生「幻觉」,对事实性细节易出错 | 数据来自真实接口,事实性更强、可溯源 |
| 成本 | 无需额外接口费用,但长上下文推理成本较高 | 免费 API 通常零成本,仅需少量请求开销 |
| 实现复杂度 | 零配置,开箱即用 | 需要定义工具、处理调用与结果回传,稍复杂 |
| 覆盖范围 | 依赖模型训练语料,覆盖面固定 | 可扩展任意分类,覆盖数百个真实数据源 |
| 稳定性 | 稳定,不依赖外部服务 | 依赖第三方接口可用性,需做错误处理与降级 |
简要说明:内置知识适合回答常识性、通用性问题,胜在简单稳定;而免费 API 则适合需要实时、精确数据的场景,如天气查询、汇率换算、新闻摘要等。实际项目中,两者往往互补——先用内置知识理解意图,再按需调用 API 获取最新数据,最后让模型基于真实数据生成回答。这也是 7.3 中 Function Calling 示例的核心思路。
7.3 典型场景
| 场景 | 推荐 API 分类 | 示例 |
|---|---|---|
| 天气助手 | Weather | Open-Meteo |
| 新闻摘要 | News | 各类新闻聚合 API |
| 汇率换算 | Finance | 免费汇率接口 |
| 随机数据生成 | Test Data | RandomUser |
| 图片生成素材 | Animals / Images | TheCatAPI |
7.4 在 Agent 中接入 API(Python 示例)
下面以 OpenAI 风格的 Function Calling 为例,演示如何让 Agent 调用天气 API 作为数据源:
importjsonimportrequestsfromopenaiimportOpenAI client=OpenAI()defget_weather(latitude:float,longitude:float)->str:"""调用 Open-Meteo 获取实时天气"""url="https://api.open-meteo.com/v1/forecast"params={"latitude":latitude,"longitude":longitude,"current_weather":"true"}response=requests.get(url,params=params)returnjson.dumps(response.json())tools=[{"type":"function","function":{"name":"get_weather","description":"获取指定经纬度的实时天气","parameters":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"}},"required":["latitude","longitude"]}}}]messages=[{"role":"user","content":"北京现在多少度?"}]# 第一轮:模型决定调用工具response=client.chat.completions.create(model="gpt-4o",messages=messages,tools=tools)# 如果模型要求调用工具,则执行并返回结果ifresponse.choices[0].message.tool_calls:tool_call=response.choices[0].message.tool_calls[0]args=json.loads(tool_call.function.arguments)weather_data=get_weather(args["latitude"],args["longitude"])messages.append(response.choices[0].message)messages.append({"role":"tool","tool_call_id":tool_call.id,"content":weather_data})# 第二轮:模型基于工具结果生成最终回答final_response=client.chat.completions.create(model="gpt-4o",messages=messages,tools=tools)print(final_response.choices[0].message.content)7.5 接入时的注意事项
- 错误处理:外部 API 可能超时或返回异常,Agent 应捕获异常并给出友好提示。
- 数据校验:对 API 返回的数据做结构校验,避免脏数据进入对话上下文。
- 频率控制:为 Agent 的 API 调用设置速率限制,防止触发接口封禁。
- 上下文裁剪:只把关键字段注入提示词,避免返回的 JSON 过大占用上下文窗口。
8. 注意事项与最佳实践
- 遵守接口使用限制:部分 API 有请求频率限制,请勿高频调用,避免被封禁。
- 注意认证要求:有些 API 虽然免费,但需要注册获取 API Key,调用时需在请求头或参数中携带。
- 检查 HTTPS 与 CORS:在浏览器端调用时,优先选择支持 CORS 的接口,避免跨域问题。
- 关注数据许可:部分 API 返回的数据可能有使用限制,商用前请仔细阅读其条款。
- 保持更新:public-apis 仓库持续更新,建议定期查看最新条目。
9. 总结
参考资料
- public-apis GitHub 仓库:本文核心介绍的免费公开 API 索引清单,收录超过 1400 个接口,覆盖 40 余个分类。
- Open-Meteo 官方文档:无需 API Key 即可获取全球天气数据的免费接口,本文天气查询示例即基于此服务。
- TheCatAPI 官方文档:无需认证即可获取随机猫咪图片的免费 API,适合快速练手与前端演示。
- RandomUser 官方文档:生成模拟用户数据的免费接口,适合测试列表页、表单与分页场景。
- OpenAI Function Calling 官方指南:介绍如何让大模型通过工具调用外部 API,本文 7.3 节 Agent 接入示例即遵循该模式。
public-apis 是开发者寻找免费公开 API 的绝佳起点。通过它,你可以快速发现适合自己项目的接口,并用几行代码完成调用。无论是学习、原型验证还是正式开发,这份清单都能帮你节省大量搜索时间。
更重要的是,这些免费 API 为 AI Agent 提供了丰富的外部数据源,让智能体能够实时获取真实世界的信息。希望本指南能帮你快速上手 public-apis,找到心仪的免费 API,并顺利将其接入你的 AI Agent 项目中!