免费联网搜索 API 接入实战:给本地 Agent 装一双会查资料的眼睛
你的 Agent 卡壳,往往不是模型不够聪明,而是它不知道当下发生了什么。一个本地跑的大模型,知识停在训练截止日,你问它「今天有什么新 Models 上线」或「某个 GitHub 仓库最新的 star 数是多少」,它要么一本正经地编,要么直接承认「我的知识只到某年某月」。
联网搜索就是补上这块短板的唯一正解:让 Agent 在生成回答之前,先实时查一次外部世界。本文不讲空洞的概念(所有接入口都已收录在本站免费 API 频道),直接给你三套零成本、可落地的联网检索方案,从「零 Key 秒用」到「自建可控」,再附一段能直接抄走的 Python 接入代码。
一、先想清楚:你要的是哪种「联网」
联网检索不是一种能力,而是三种能力,落地成本和使用体验完全不同:
| 需求 | 关键词 | 代表方案 | 是否零 Key |
|---|---|---|---|
| 只想快速拿到网页正文 | URL → Markdown | Jina Reader | 是 |
| 想搜网页并返回摘要 | 搜索引擎 API | DuckDuckGo / SearXNG | 是 |
| 想给 LLM 做 RAG 检索底料 | 检索 + 切片 + 向量 | 搜索 API + Embedding | 是 |
先确认你要哪一档。绝大多数入门场景——「让 Agent 回答时顺手上网查一下」——只需要前两档,一个 Python 函数就能搞定,不需要搭任何付费服务。
二、方案一:DuckDuckGo Instant Answer,零 Key 五分钟跑通
DuckDuckGo 提供了一套不需要注册、不需要 API Key 的即时查询接口。它背后是一个叫 DuckDuckGo Instant Answer API 的 JSON 端点,返回格式稳定,适合做轻量级的事实查询和关键词联想。
它的优点非常直白:
- 零 Key、零注册、零付费,curl 一下就能拿到结果;
- 返回的是结构化 JSON,方便程序解析;
- 支持关键词联想(related topics)和摘要(abstract)。
但它也有明确边界:它更适合「查一个词条 / 一个概念」的即时答案,并不适合「深度搜索全网并返回前 N 条结果」这种搜索引擎式诉求。后者需要自建聚合,也就是方案二。
一个典型的调用流程:把用户问题里的核心实体提取出来,转成查询词,打到 Instant Answer 端点,拿到 abstract 摘要和 related topics,作为 Agent 的补充上下文拼进 prompt。这样 Agent 回答事实性问题时就有据可依,而不是凭空发挥。
三、方案二:SearXNG 自建聚合搜索,可控且无广告
如果你希望 Agent 一次搜遍多个搜索引擎(Google、Bing、DuckDuckGo、Brave 等),又不想被某一家官方 API 的高价和配额绑死,SearXNG 是目前最成熟的免费自建方案。
SearXNG 是一个开源元搜索引擎:你在自己服务器上用 Docker 起一个实例,它把请求转发到多个上游引擎,聚合去重后返回 JSON 结果。它的价值有三点:
- 一个 JSON 接口对接所有搜索引擎,不绑定任何单一供应商;
- 自带隐私保护,不追踪用户,不注入广告;
- 支持
format=json参数,直接返回可编程的结构化结果,天然适合 Agent 工具调用。
部署方式只需三步:拉取 SearXNG 镜像、挂一个 settings 配置、把 http://你的地址/search?q=关键词&format=json 暴露给 Agent 函数即可。唯一要注意的是实例要放在能让你的 Agent 访问到的环境里,并且按自己服务器的承受能力限制并发。
四、方案三:Jina Reader,把任意网页变干净 Markdown
很多时候 Agent 需要的不是「搜索」,而是「读懂某篇具体的文章或某个具体的页面」。这时 Jina Reader 是效率最高的选择:你在任意 URL 前面拼一个固定的前缀,它就把那个页面处理成干净的 Markdown 文本返回。
典型用法:Agent 拿到一条搜索结果的链接后,把它拼成 https://r.jina.ai/对方URL,即可获得该页面的正文 Markdown,再喂给模型做阅读理解或摘要。这对「先搜到、再精读」的两段式 Agent 工作流几乎是标配。
它同样零 Key(有基于 IP 的轻度限流,正式高频使用建议申请免费 token),返回值干净、去除了导航和广告、保留了代码块和标题层级,非常适合做 RAG 的原始语料。
五、完整接入代码(可直接抄走)
下面这段代码把「搜索 + 精读」串成一个完整的 Agent 工具函数。它接受一个查询词,先走 SearXNG 聚合搜索拿结果列表,再对前几条结果调用 Jina Reader 取正文,返回一段可直接拼进 prompt 的上下文:
import requests
SEARX = "http://localhost:8080/search" # 你的 SearXNG 实例
JINA = "https://r.jina.ai/" # Jina Reader 前缀
def agent_web_lookup(query: str, max_results: int = 3) -> str:
# 第一步:聚合搜索
resp = requests.get(SEARX, params={"q": query, "format": "json"}, timeout=15)
resp.raise_for_status()
results = resp.json().get("results", [])[:max_results]
# 第二步:逐条精读正文
chunks = []
for r in results:
url = r.get("url")
if not url:
continue
try:
md = requests.get(JINA + url, timeout=20).text
chunks.append(f"## {r.get('title', '无标题')}\n来源: {url}\n{md[:4000]}")
except Exception:
continue
return "\n\n".join(chunks) if chunks else "未检索到有效内容"
# 用法:把返回拼进 system 或 user prompt
ctx = agent_web_lookup("今天有哪些新发布的大模型")
这段代码的教学价值在于两点:一是展示了「聚合搜索 → 精读正文」的两段式结构,这是所有联网 Agent 的通用骨架;二是它完全免费、不依赖任何商业 Key,你可以立刻在你本地环境里跑起来,替换成你自己的 SearXNG 地址即可。
六、把搜索能力接进 Agent 的两种姿势
有了 agent_web_lookup 这个函数,怎么让它成为 Agent 能力的一部分?主流有两条路:
-
Function Calling(工具调用):把上面的函数声明成一个工具,模型在需要实时信息时自主决定调用它,拿到结果后再组织回答。这是最自然的方式,OpenAI 兼容接口、Anthropic、以及大多数国产模型都支持。
-
检索增强(RAG):在用户提问前,先用搜索 API 批量拉取相关网页、切片、向量化、入库,再让模型基于检索结果回答。适合知识库 + 联网双重需求的场景。
对个人开发者来说,先用方案一的 Function Calling 把流程跑通,再决定要不要上向量库,是最省事的路径。
七、四个高频踩坑与排查
-
反爬封 IP:DuckDuckGo 和 SearXNG 上游对高频请求会限流。规避方式是加一个简单的重试和随机延时,或轮换请求头里的 User-Agent。
-
结果为空:SearXNG 某些上游引擎在国内环境不可达。排查方法是先在浏览器里直接访问你的 SearXNG 实例,看
format=json是否正常返回,再排查网络层。 -
正文乱码:Jina Reader 对部分动态渲染页面抓取不全。遇到时改用「搜索结果摘要 + 标题」兜底,不要强求全文。
-
上下文爆表:把整篇正文塞给模型会很快耗尽上下文窗口。一定要做截断(如上面代码的
md[:4000]),只保留最相关的片段。
八、三方案横向对比(雷达图)
结论很清晰:要零成本快速验证,选 DuckDuckGo;要长期稳定可控,上 SearXNG;要精读网页内容,用 Jina Reader。 三者不是互斥关系,成熟的联网 Agent 通常「SearXNG 搜索 + Jina Reader 精读」配套使用。
九、总结与行动清单
给本地 Agent 装上网,本质是给它接通一个「实时信息入口」。你用三样免费工具就能拼出一条完整链路,总成本为零:
- 用 SearXNG 或 DuckDuckGo 做搜索入口;
- 用 Jina Reader 做正文精读;
- 用 Function Calling 或 RAG 把能力接进 Agent。
按本文的代码跑通第一个「搜索 → 精读 → 回答」闭环后,你的 Agent 就从「会背书的机器」升级为「会查资料的研究助理」。下一步建议你结合本地 Embedding 把检索结果持久化成知识库,实现「一次搜索、多次复用」。
需要完整的免费搜索 API 选型清单,见本站的《2026 免费 Web 搜索 API 盘点》;需要给检索结果配向量化地基,见《免费 Embedding API 完全教程》;需要一站式接入更多免费模型,见本站免费 API 首页。
十、补充:为什么推荐「先 Function Calling,后 RAG」
两者最终都能让 Agent 用上实时信息,但起步门槛差很多。Function Calling 只需一个函数声明 + 一次调用,半小时就能看到效果;RAG 则涉及切片、向量化、向量库选型、检索调优一整条链路,动辄一两天。
建议的进阶路线是:先用 Function Calling 让 Agent「能搜」,观察它实际调用搜索的频率和场景;当发现「同一批资料被反复搜索」时,再把高频结果沉淀到本地知识库,这一步才轮到 Embedding 和向量检索上场。这样每一步都有真实收益,不会一上来就陷入 RAG 工程细节。
如果不知道免费 Embedding 该选哪家,本站已有《免费 Embedding API 完全教程》做了完整实测;想一次看全免费搜索类 API 的横向盘点,见《2026 免费 Web 搜索 API 盘点》。这两篇与本篇构成「搜索 → 向量化 → 接入」的完整闭环,建议配套阅读。
相关阅读与行动入口
- 2026 免费 Web 搜索 API 盘点:8 个零成本联网检索方案的横向实测
- 免费 Embedding API 完全教程:给检索结果配向量化地基
- RAG 必备:6 款免费 Web Scrape API 排行:爬取与解析的选型对照
开始接入前,先到 免费 API 频道 查一下最新可用模型与渠道,找不到合适的再回 免费 API 频道 按分类筛选与渠道;还没有账号的话,一键 注册免费账号 即可拿到密钥。所有方案都基于 免费 API 首页 的可用入口,建议收藏 免费 API 频道 随时查看更新,遇到接口失效也先到 免费 API 频道 反馈。