最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
从 0 搭一个 SERP API + LLM Agent 端到端实战(2026年7月)
时间:2026-08-03 12:06:57 编辑:袖梨 来源:一聚教程网
我之前做的 AI Agent 跑生产 6 个月,现在把完整搭建过程复盘一遍。

从环境到部署,5 步搭起来一个能问实时问题的 AI Agent。
1. 技术选型
| 组件 | 选择 | 理由 |
|---|---|---|
| LLM | gpt-4o / claude-sonnet-4-5 | 综合能力 |
| SERP API | serpbase | 价格低 + 数据完整 + AI 集成好 |
| 后端 | Python FastAPI | 异步支持好 |
| 前端 | Gradio | 快速 demo |
| 部署 | Docker + Vercel | 简单 |
成本结构:gpt-4o 输入 0.30/1k = 一次问答 $0.012。
2. Step 1:申请 SERP API key
去 serpbase.dev 注册,送 100 次免费调用,不用绑卡。
拿 API key 后存环境变量:
复制代码export SERPBASE_API_KEY=your-keyexport OPENAI_API_KEY=sk-...3. Step 2:核心代码
完整代码 80 行:
复制代码import osimport requestsfrom openai import OpenAIclass SearchAgent:def __init__(self): self.serp_key = os.environ['SERPBASE_API_KEY'] self.openai = OpenAI() def search(self, query: str) -> dict: r = requests.post( 'https://api.serpbase.dev/google/search', headers={'X-API-Key': self.serp_key}, json={'q': query, 'hl': 'zh-CN', 'gl': 'cn', 'num': 10}, timeout=(2, 5) ) r.raise_for_status() return r.json()def format_context(self, serp: dict) -> str: lines = ['## 搜索结果']for i, item inenumerate(serp.get('organic', [])[:5], 1): lines.append(f"[{i}] {item['title']}n{item['snippet'][:80]}n来源: {item['link']}")return 'n'.join(lines)def ask(self, question: str) -> str: serp = self.search(question) if not serp.get('organic'):return "暂未找到相关信息" context = self.format_context(serp) prompt = f"""基于以下搜索结果回答问题,只引用事实。{context}问题: {question}""" r = self.openai.chat.completions.create( model='gpt-4o', messages=[{'role': 'user', 'content': prompt}], temperature=0, timeout=15 ) return r.choices[0].message.contentif __name__ == '__main__': agent = SearchAgent() print(agent.ask('2026 年 Q2 上海 GDP'))4. Step 3:Web UI(Gradio)
10 行加 UI:
复制代码import gradio as grdef chat(question):return SearchAgent().ask(question)demo = gr.Interface( fn=chat, inputs=gr.Textbox(label="问题"), outputs=gr.Textbox(label="答案"), title="实时搜索 AI Agent")demo.launch()跑起来:python app.py,浏览器开 。
5. Step 4:错误处理
直接跑会发现 3 个常见错误,加上去:
复制代码def search(self, query):try: r = requests.post(..., timeout=(2, 5)) r.raise_for_status() return r.json()except requests.Timeout:# 降级 1: stale cache cached = get_stale_cache(query) return cached or {'organic': []}except requests.HTTPError as e:if e.response.status_code == 429:# 降级 2: 等待 Retry-After time.sleep(int(e.response.headers.get('Retry-After', 1)))return self.search(query) # 重试 1 次raisedef ask(self, question): serp = self.search(question) if not serp.get('organic'):return "暂未找到相关信息,你可以:n1. 加时间词(如 '2026')n2. 加地域词n3. 换个说法"# ... LLM 调用6. Step 5:部署
Docker 化:
复制代码FROM python:3.11-slimWORKDIR /appCOPY requirements.txt .RUN pip install -r requirements.txtCOPY . .CMD ["python", "app.py"]部署到 Vercel / Railway / 自己的 VPS。
7. 性能优化
跑起来后,几个常见优化:
缓存。同 query 5 分钟内复用:
复制代码import redisr = redis.Redis()def cached_search(query): key = hashlib.md5(query.encode()).hexdigest() cached = r.get(key) if cached:return json.loads(cached) data = search(query) r.setex(key, 300, json.dumps(data))return data并发。多用户同时问,用 asyncio:
复制代码async defask_async(question): serp = await search_async(question)return await llm_async(question, serp)token 压缩。SERP JSON 太大,只取前 5 条 + 截 snippet 80 字符。
8. 测试
写几个测试 query 验证:
复制代码test_queries = [ ('2026 年 Q2 上海 GDP', '2026'), ('BTC 实时价格', 'BTC'), ('今日新闻头条', None), # 模糊 query]for q, expected in test_queries: answer = agent.ask(q) print(f"Q: {q}nA: {answer}n")9. 监控
跑生产后,盯 3 个指标:
复制代码from prometheus_client import Counter, Histogramrequests_total = Counter('agent_requests_total', 'Total requests')latency = Histogram('agent_latency_seconds', 'Latency')@latency.time()def ask(question): requests_total.inc() return agent.ask(question)Grafana 看板,3 个面板:请求量 / 延迟 / 错误率。
10. 30 天数据
跑下来:
- 平均问答延迟 3.2s
- 月成本 serpbase 75 = $76.5
- 答案准确率 91%(人工评估 200 条)
- 0 故障
整套从 0 到生产,1 个工程师 1 天搭完。
11. 进阶方向
跑起来后,可以扩展:
- 多轮对话:加 memory 模块
- 工具调用:Agent 决定要不要搜(ReAct)
- 多模态:支持图片搜索(Lens 端点)
- 本地 SEO:加 Maps 端点
- 企业版:加用户系统 + 配额管理
我下一步上 ReAct 多轮搜索,预计准确率能到 94%。
12. 完整代码
完整代码 + 部署文档放 GitHub,clone 就能跑。serpbase 注册后 5 分钟接好,1 小时搭完整个 Agent。
相关文章
- 用码道 AI 编程助手开发 2048 数字消除网页小游戏 08-03
- 用码道 AI 编程助手开发像素画板网页小工具 08-03
- 教育 AI 产品的用户留存 ROI:功能投入和用户价值的关联分析 08-03
- 【AI 测评】想用自己的声音给视频配音?Index-TTS本地部署这样做 08-03
- spark读取hbase能实现实时读吗 08-03
- 光遇海洋日兑换图最新2026一览 08-03