ScavioScavio
产品定价文档
登录开始使用
  1. 首页
  2. 教程
  3. 如何将搜索 API 添加到 OpenWebUI
教程

如何将搜索 API 添加到 OpenWebUI

用多平台搜索 API 替换 OpenWebUI 中的 Tavily。使用 Scavio 在 OpenWebUI 中逐步设置网络搜索基础。

获取免费API密钥API文档

OpenWebUI 支持通过 Tavily、SearXNG 和自定义端点进行 Web 搜索。 Nebius 于 2026 年 2 月收购 Tavily 后,许多用户希望有替代方案。 Scavio 提供兼容的搜索端点,涵盖 Google、Amazon、YouTube、Walmart、Reddit 和 TikTok。本教程介绍如何通过内置搜索设置或自定义功能工具配置 OpenWebUI 以使用 Scavio 进行 Web 搜索基础。

前置条件

  • OpenWebUI 安装并运行
  • 来自 scavio.dev 的 Scavio API 密钥
  • Python 3.9+ 用于自定义函数方法
  • 对 OpenWebUI 实例的管理员访问权限

操作指南

步骤 1: 为 OpenWebUI 创建 Scavio 搜索功能

OpenWebUI 支持自定义 Python 函数作为工具。创建一个搜索函数,调用 Scavio API 并返回 LLM 可以使用的格式化结果。

Python
# OpenWebUI Function Tool: scavio_search.py
# Add this as a Function in OpenWebUI Admin > Functions

import os
import requests
from typing import Optional

class Tools:
    def __init__(self):
        self.api_key = os.environ.get('SCAVIO_API_KEY', '')
        self.base_url = 'https://api.scavio.dev/api/v1/search'

    def search_web(self, query: str, num_results: Optional[int] = 5) -> str:
        """Search the web for current information using Scavio.
        Returns titles, snippets, and source URLs.
        """
        try:
            resp = requests.post(self.base_url,
                headers={'x-api-key': self.api_key,
                         'Content-Type': 'application/json'},
                json={'query': query, 'country_code': 'us',
                      'num_results': num_results or 5},
                timeout=10)
            resp.raise_for_status()
            results = resp.json().get('organic_results', [])
            if not results:
                return 'No results found.'
            return '\n\n'.join(
                f'[{i+1}] {r["title"]}\n{r.get("snippet", "")}\nSource: {r["link"]}'
                for i, r in enumerate(results)
            )
        except Exception as e:
            return f'Search error: {str(e)}'

步骤 2: 添加特定于平台的搜索工具

使用 Reddit、YouTube 和 Amazon 搜索工具扩展功能。 OpenWebUI 将把每个工具显示为 LLM 可以调用的单独工具。

Python
# Extended Tools class with platform-specific methods
class Tools:
    def __init__(self):
        self.api_key = os.environ.get('SCAVIO_API_KEY', '')
        self.base_url = 'https://api.scavio.dev/api/v1/search'
        self.headers = {'x-api-key': self.api_key, 'Content-Type': 'application/json'}

    def _search(self, query: str, num: int = 5) -> list:
        resp = requests.post(self.base_url, headers=self.headers,
            json={'query': query, 'country_code': 'us', 'num_results': num}, timeout=10)
        resp.raise_for_status()
        return resp.json().get('organic_results', [])

    def search_web(self, query: str) -> str:
        """Search the web for current information."""
        results = self._search(query)
        return '\n\n'.join(f'[{i+1}] {r["title"]}\n{r.get("snippet","")}\nURL: {r["link"]}'
                            for i, r in enumerate(results)) or 'No results.'

    def search_reddit(self, query: str) -> str:
        """Search Reddit for community discussions and opinions."""
        results = self._search(f'site:reddit.com {query}')
        return '\n\n'.join(f'[{i+1}] {r["title"]}\n{r.get("snippet","")}\nURL: {r["link"]}'
                            for i, r in enumerate(results)) or 'No Reddit results.'

    def search_youtube(self, query: str) -> str:
        """Search YouTube for videos on a topic."""
        results = self._search(f'site:youtube.com {query}')
        return '\n\n'.join(f'[{i+1}] {r["title"]}\nURL: {r["link"]}'
                            for i, r in enumerate(results)) or 'No YouTube results.'

    def search_amazon(self, query: str) -> str:
        """Search Amazon for product information."""
        results = self._search(f'site:amazon.com {query}')
        return '\n\n'.join(f'[{i+1}] {r["title"]}\n{r.get("snippet","")}\nURL: {r["link"]}'
                            for i, r in enumerate(results)) or 'No Amazon results.'

步骤 3: 配置环境并部署

在 OpenWebUI 部署中设置 SCAVIO_API_KEY 环境变量,并通过管理面板添加该功能。

Python
# Docker deployment: add to your docker-compose.yml or .env
# SCAVIO_API_KEY=your_key_here

# Or set in the OpenWebUI admin panel:
# 1. Go to Admin Panel > Functions
# 2. Click 'Create Function'
# 3. Paste the Tools class code
# 4. Set the function name to 'scavio_search'
# 5. Enable it globally or per-model

# Verify the setup with a test
import os, requests

def verify_openwebui_search():
    key = os.environ.get('SCAVIO_API_KEY')
    if not key:
        print('ERROR: SCAVIO_API_KEY not set')
        return False
    tools = Tools()
    result = tools.search_web('test query 2026')
    if 'error' in result.lower():
        print(f'ERROR: {result}')
        return False
    print('OpenWebUI search configured successfully')
    print(f'Test result preview: {result[:150]}')
    return True

verify_openwebui_search()

步骤 4: 在 OpenWebUI 中测试多平台查询

通过运行测试查询来验证每个平台搜索是否正常工作。 LLM 应根据用户问题自动选择正确的搜索工具。

Python
# Test all search functions
def test_all_tools():
    tools = Tools()
    tests = [
        ('search_web', 'latest AI news 2026'),
        ('search_reddit', 'best mechanical keyboard'),
        ('search_youtube', 'python tutorial beginners'),
        ('search_amazon', 'noise cancelling headphones'),
    ]
    for method_name, query in tests:
        method = getattr(tools, method_name)
        result = method(query)
        lines = result.split('\n')
        has_results = len(lines) > 1
        print(f'[{"PASS" if has_results else "FAIL"}] {method_name}')
        print(f'  Query: {query}')
        print(f'  First result: {lines[0][:60]}')
        print()

test_all_tools()
print('All tools ready for OpenWebUI')
print('Cost: $0.005 per search (250 free/month)')

Python 示例

Python
import os, requests

class ScavioOpenWebUI:
    def __init__(self):
        self.key = os.environ.get('SCAVIO_API_KEY', '')
        self.url = 'https://api.scavio.dev/api/v1/search'
        self.h = {'x-api-key': self.key, 'Content-Type': 'application/json'}
    def search(self, query, num=5):
        resp = requests.post(self.url, headers=self.h,
            json={'query': query, 'country_code': 'us', 'num_results': num})
        return resp.json().get('organic_results', [])
    def search_web(self, query):
        results = self.search(query)
        return '\n'.join(f'[{i+1}] {r["title"]}: {r.get("snippet","")}' for i, r in enumerate(results))
    def search_reddit(self, query):
        return self.search_web(f'site:reddit.com {query}')

tools = ScavioOpenWebUI()
print(tools.search_web('AI news 2026'))

JavaScript 示例

JavaScript
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;

async function searchForOpenWebUI(query, platform = 'web') {
  const prefixes = { reddit: 'site:reddit.com ', youtube: 'site:youtube.com ', amazon: 'site:amazon.com ' };
  const q = (prefixes[platform] || '') + query;
  const resp = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST',
    headers: { 'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ query: q, country_code: 'us', num_results: 5 })
  });
  const results = (await resp.json()).organic_results || [];
  return results.map((r, i) => `[${i+1}] ${r.title}\n${r.snippet || ''}\n${r.link}`).join('\n\n');
}

searchForOpenWebUI('AI agent tools 2026').then(console.log);

预期输出

JSON
[PASS] search_web
  Query: latest AI news 2026
  First result: [1] AI News: Latest Developments in Artificial

[PASS] search_reddit
  Query: best mechanical keyboard
  First result: [1] r/MechanicalKeyboards - Best keyboards mid-2

[PASS] search_youtube
  Query: python tutorial beginners
  First result: [1] Python Tutorial for Beginners - Full Course

[PASS] search_amazon
  Query: noise cancelling headphones
  First result: [1] Sony WH-1000XM6 Wireless Noise Cancelling

All tools ready for OpenWebUI
Cost: $0.005 per search (250 free/month)

相关教程

  • Nebius 收购后如何从 Tavily 迁移到 Scavio
  • 如何在 LangChain RAG 管道中从 Tavily 切换到 Scavio
  • 如何向 Ollama 个人助理添加搜索
  • 如何通过 MCP 向 Claude 添加实时搜索

常见问题

大多数开发者在15到30分钟内完成本教程。您需要一个Scavio API密钥(免费套餐即可)和可用的Python或JavaScript环境。

OpenWebUI 安装并运行. 来自 scavio.dev 的 Scavio API 密钥. Python 3.9+ 用于自定义函数方法. 对 OpenWebUI 实例的管理员访问权限. Scavio API密钥注册即送50个免费积分。

可以。免费套餐注册即送50个积分,完全足够完成本教程并构建一个可运行的原型解决方案。

Scavio提供原生LangChain包(langchain-scavio)、MCP服务器以及适用于任何HTTP客户端的REST API。本教程使用 the raw REST API, 但您可以根据需要适配您选择的框架。

相关资源

Comparison

Tavily vs Scavio

Read more
Best Of

Google I/O 2026 AI模式变化后最佳搜索API

Read more
Glossary

搜索 API 供应商格局(2026)

Read more
Best Of

2026 年最佳 SERP API 提供商按价格排名

Read more
Comparison

Brave Search API vs Scavio

Read more
Solution

从 Brave Search API 迁移到 Scavio 获得更好覆盖

Read more

开始构建

用多平台搜索 API 替换 OpenWebUI 中的 Tavily。使用 Scavio 在 OpenWebUI 中逐步设置网络搜索基础。

获取免费API密钥阅读文档
ScavioScavio

面向AI智能体的实时搜索API。搜索所有平台,不仅仅是Google。

产品

  • 功能
  • 定价
  • 控制台
  • 联盟计划

开发者

  • 文档
  • API参考
  • 快速开始
  • MCP集成
  • Python SDK

替代方案

  • Tavily替代方案
  • SerpAPI替代方案
  • Firecrawl替代方案
  • Exa替代方案

工具

  • JSON格式化
  • cURL转代码
  • Token计数器
  • 全部工具

© 2026 Scavio. 保留所有权利。

Featured on TAAFT
服务条款隐私政策