问题所在
LangChain项目中使用网页抓取工具(BeautifulSoup加载器、Playwright抓取器或Selenium提取器)面临代理崩溃、布局变化导致解析失败和每月数小时的维护时间。
Scavio 解决方案
用Scavio搜索API作为自定义工具替换LangChain抓取工具。迁移很直接:移除抓取器代码,添加API调用工具,更新代理提示使用结构化搜索结果。
之前
迁移前,LangChain研究代理使用基于Playwright的Google抓取器,需要150行代码、浏览器运行时和代理池。每月维护8小时。
之后
迁移到Scavio搜索API后,工具定义仅20行Python。无需浏览器运行时。结构化JSON无需HTML解析。零维护。
适用人群
维护脆弱网页抓取工具并希望迁移到稳定结构化搜索API的LangChain开发者。
核心优势
- 20行API调用替代150行抓取代码
- 消除无头浏览器和代理依赖
- 结构化JSON响应无需HTML解析
- 稳定API合约消除布局变化导致的失效
- 单一工具定义覆盖多平台
Python 示例
from langchain.tools import tool
import requests, os
@tool
def web_search(query: str) -> str:
"""Search the web for current information. Returns structured results from Google."""
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': os.environ['SCAVIO_API_KEY']},
json={'platform': 'google', 'query': query}, timeout=10)
results = resp.json().get('organic', [])[:5]
return '\n'.join(f"{r['title']}: {r['snippet']} ({r['link']})" for r in results)
# Use in a LangChain agent:
# from langchain.agents import create_tool_calling_agent
# agent = create_tool_calling_agent(llm, [web_search], prompt)
# agent_executor = AgentExecutor(agent=agent, tools=[web_search])JavaScript 示例
import { tool } from '@langchain/core/tools';
import { z } from 'zod';
const webSearch = tool(async ({ query }) => {
const resp = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ platform: 'google', query })
});
const data = await resp.json();
return (data.organic || []).slice(0, 5)
.map(r => `${r.title}: ${r.snippet} (${r.link})`).join('\n');
}, {
name: 'web_search',
description: 'Search the web for current information.',
schema: z.object({ query: z.string().describe('Search query') })
});使用的平台
包含知识图谱、PAA和AI概览的网页搜索
来自任何subreddit的社区、帖子及线程评论
YouTube
包含转录和元数据的视频搜索
Amazon
包含价格、评分和评论的产品搜索
Walmart
包含定价和配送数据的产品搜索