0Pricing
AI Agents · Pelajaran

Tavily dan SerpAPI untuk Pencarian Agen

Penyiapan API, penyusunan kueri, dan penguraian hasil untuk alat pencarian web.

Tavily dan SerpAPI untuk Pencarian Agen adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.

Mengapa Agen Memerlukan Pencarian Web

LLM memiliki tanggal batas pengetahuan. Untuk pertanyaan tentang peristiwa terkini, harga waktu nyata, berita terbaru, atau topik yang berubah cepat, data pelatihan model sudah usang.

Alat pencarian web seperti Tavily dan SerpApi memberikan akses waktu nyata ke internet kepada agen, sehingga menjembatani kesenjangan antara data pelatihan statis dan kenyataan terkini.

Tavily: Dibuat Khusus untuk Agen AI

Tavily adalah API pencarian yang dirancang khusus untuk agen AI. Tidak seperti pengikisan web umum, layanan ini mengembalikan hasil yang bersih dan terstruktur dengan konten yang telah diekstrak sebelumnya — tidak diperlukan penguraian HTML.

Instal dengan pip install tavily-python. Dapatkan kunci API di tavily.com.

from tavily import TavilyClient
import os

client = TavilyClient(api_key=os.getenv('TAVILY_API_KEY'))

results = client.search(
    query='latest OpenAI GPT-5 release date',
    max_results=5
)

for r in results['results']:
    print(r['title'])
    print(r['url'])
    print(r['content'][:200])
    print('---')

Parameter Pencarian Tavily

Tavily menyediakan beberapa parameter untuk mengendalikan perilaku pencarian. Parameter yang paling berguna bagi agen adalah max_results, search_depth, dan include_domains / exclude_domains.

# Basic search
results = client.search(
    query='Python async best practices 2024',
    max_results=5,
    search_depth='basic'  # 'basic' (fast) or 'advanced' (slower, deeper)
)

# Domain-filtered search
results = client.search(
    query='machine learning papers',
    max_results=5,
    include_domains=['arxiv.org', 'papers.nips.cc', 'openreview.net']
)

# Exclude low-quality domains
results = client.search(
    query='stock market today',
    max_results=5,
    exclude_domains=['pinterest.com', 'quora.com']
)

Struktur Hasil Tavily

Setiap hasil Tavily berisi: title, url, content (teks yang diekstrak), score (relevansi), dan secara opsional published_date. Kolom content berisi teks bersih — tanpa tag HTML.

results = client.search('Claude AI pricing 2024', max_results=3)

for r in results['results']:
    print(f"Title:   {r['title']}")
    print(f"URL:     {r['url']}")
    print(f"Score:   {r.get('score', 'N/A')}")
    print(f"Date:    {r.get('published_date', 'unknown')}")
    print(f"Content: {r['content'][:300]}")
    print()

# Tavily also returns 'answer' — a direct answer synthesized from results
if results.get('answer'):
    print('Direct answer:', results['answer'])

SerpApi: Akses Terprogram ke Google

SerpApi menyediakan akses terstruktur ke Google, Bing, YouTube, dan mesin pencari lainnya. Layanan ini mengembalikan data yang kaya, termasuk hasil organik, panel pengetahuan, cuplikan unggulan, dan hasil belanja.

Instal dengan pip install google-search-results.

from serpapi import GoogleSearch
import os

params = {
    'q': 'best Python web frameworks 2024',
    'api_key': os.getenv('SERPAPI_KEY'),
    'num': 5,              # number of results
    'hl': 'en',            # language
    'gl': 'us',            # country
    'safe': 'active'       # safe search
}

search = GoogleSearch(params)
results = search.get_dict()

for r in results.get('organic_results', []):
    print(r['title'])
    print(r['link'])
    print(r.get('snippet', ''))
    print()

Struktur Hasil SerpApi

SerpApi mengembalikan data terstruktur yang lebih kaya daripada Tavily. Kolom utama dalam organic_results: title, link, snippet, position. Cuplikan unggulan muncul secara terpisah di bawah answer_box.

def extract_serp_results(serp_data, max_results=5):
    results = []

    # Featured snippet / answer box (highest priority)
    if 'answer_box' in serp_data:
        box = serp_data['answer_box']
        results.append({
            'title': box.get('title', 'Featured Snippet'),
            'url':   box.get('link', ''),
            'snippet': box.get('answer') or box.get('snippet', ''),
            'is_featured': True
        })

    # Organic results
    for r in serp_data.get('organic_results', [])[:max_results]:
        results.append({
            'title':   r.get('title', ''),
            'url':     r.get('link', ''),
            'snippet': r.get('snippet', ''),
            'position': r.get('position', 0),
            'is_featured': False
        })

    return results

if __name__ == '__main__':
    demo_serp = {
        'answer_box': {'title': 'Python version', 'link': 'https://python.org', 'answer': '3.13'},
        'organic_results': [
            {'title': 'Python Docs', 'link': 'https://docs.python.org', 'snippet': 'Official docs', 'position': 1},
        ],
    }
    for r in extract_serp_results(demo_serp):
        print(f"{'[FEATURED] ' if r['is_featured'] else ''}{r['title']} - {r['url']}")

Opsi Kesegaran dan Pemfilteran Tanggal

Untuk kueri yang sensitif terhadap waktu, filter hasil berdasarkan tanggal publikasi. Tavily mendukung parameter days; SerpApi mendukung parameter tbs (pencarian berbasis waktu).

# Tavily: results from last 7 days
recent_results = client.search(
    query='AI news',
    max_results=5,
    days=7  # only results published in last 7 days
)

# SerpApi: results from last month
params = {
    'q': 'AI news',
    'api_key': os.getenv('SERPAPI_KEY'),
    'tbs': 'qdr:m',   # qdr:d=day, qdr:w=week, qdr:m=month, qdr:y=year
    'num': 5
}
search = GoogleSearch(params)
results = search.get_dict()

Membangun Alat Pencarian untuk LangChain

Untuk menggunakan Tavily atau SerpApi di dalam agen LangChain, bungkus fungsi pencarian sebagai Tool. Agen kemudian dapat memanggilnya seperti alat lainnya berdasarkan deskripsi yang Anda berikan.

from langchain.tools import Tool
from tavily import TavilyClient
import os

tavily = TavilyClient(api_key=os.getenv('TAVILY_API_KEY'))

def tavily_search(query: str) -> str:
    results = tavily.search(query=query, max_results=3, search_depth='basic')
    output = []
    for r in results['results']:
        output.append(f"Title: {r['title']}\nURL: {r['url']}\nContent: {r['content'][:500]}")
    return '\n\n'.join(output)

web_search_tool = Tool(
    name='web_search',
    func=tavily_search,
    description='Search the web for current information. Input: a search query string. Returns top results with title, URL, and content.'
)

Pemfilteran Domain untuk Pengendalian Kualitas

Tidak semua hasil pencarian dapat diandalkan. Pemfilteran domain memungkinkan Anda membatasi pencarian pada sumber tepercaya (untuk penelitian) atau mengecualikan domain yang dipenuhi spam (untuk kueri umum).

TRUSTED_DOMAINS = {
    'medical':  ['nih.gov', 'who.int', 'mayoclinic.org', 'pubmed.ncbi.nlm.nih.gov'],
    'legal':    ['law.cornell.edu', 'supreme.justia.com', 'congress.gov'],
    'tech':     ['docs.python.org', 'developer.mozilla.org', 'stackoverflow.com'],
    'finance':  ['sec.gov', 'federalreserve.gov', 'bloomberg.com']
}

SPAM_DOMAINS = ['pinterest.com', 'quora.com', 'answers.yahoo.com', 'wikihow.com']

def domain_aware_search(query, domain_category=None):
    kwargs = {'query': query, 'max_results': 5, 'exclude_domains': SPAM_DOMAINS}
    if domain_category and domain_category in TRUSTED_DOMAINS:
        kwargs['include_domains'] = TRUSTED_DOMAINS[domain_category]
    return client.search(**kwargs)

Menangani Kesalahan Pencarian dan Batas Laju

Tavily dan SerpApi sama-sama memiliki batas laju. Terapkan logika percobaan ulang dengan jeda eksponensial, dan tangani dengan baik kondisi ketika pencarian tidak mengembalikan hasil.

import time

def robust_search(query, max_retries=3):
    for attempt in range(max_retries):
        try:
            results = client.search(query=query, max_results=5)
            if results and results.get('results'):
                return results['results']
            print(f'No results for: {query}')
            return []
        except Exception as e:
            if '429' in str(e) or 'rate' in str(e).lower():
                wait = 2 ** attempt  # 1s, 2s, 4s
                print(f'Rate limited. Waiting {wait}s...')
                time.sleep(wait)
            else:
                print(f'Search error: {e}')
                return []
    return []

Normalisasi Panjang Cuplikan

Panjang cuplikan hasil sangat bervariasi: beberapa berisi 50 karakter, sedangkan yang lain berisi 2000 karakter. Menormalkan panjang cuplikan memastikan setiap sumber mendapat representasi yang setara dalam konteks LLM.

MAX_SNIPPET_CHARS = 600
MIN_SNIPPET_CHARS = 100

def normalize_snippets(results):
    normalized = []
    for r in results:
        content = r.get('content') or r.get('snippet', '')
        # Truncate long snippets at sentence boundary
        if len(content) > MAX_SNIPPET_CHARS:
            # Find last sentence end before limit
            cutoff = content.rfind('. ', 0, MAX_SNIPPET_CHARS)
            content = content[:cutoff + 1] if cutoff > 0 else content[:MAX_SNIPPET_CHARS]
        # Skip very short snippets
        if len(content) < MIN_SNIPPET_CHARS:
            continue
        normalized.append({**r, 'content': content})
    return normalized

if __name__ == '__main__':
    demo_results = [
        {'content': 'Short.'},
        {'content': 'A' * 200 + '. ' + 'B' * 500},
    ]
    for r in normalize_snippets(demo_results):
        print(f"Length {len(r['content'])}: {r['content'][:60]}...")

Uji Pemahaman

Apa keunggulan utama Tavily dibandingkan pendekatan pengikisan web umum untuk agen AI?

Ringkasan: Tavily dan SerpApi untuk Pencarian Agen

API pencarian web memberi agen akses ke informasi terkini di luar batas pengetahuan pelatihannya. Tavily dibuat khusus untuk agen AI dengan ekstraksi konten yang bersih; SerpApi menyediakan data Google terstruktur yang lebih kaya, termasuk cuplikan unggulan dan panel pengetahuan.

Praktik utama: gunakan pemfilteran domain untuk pengendalian kualitas, terapkan filter kesegaran untuk kueri yang sensitif terhadap waktu, normalkan panjang cuplikan, dan terapkan logika percobaan ulang dengan jeda untuk menangani batas laju.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Tavily dan SerpAPI untuk Pencarian Agen” gratis?

Ya — teks lengkap “Tavily dan SerpAPI untuk Pencarian Agen” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Tavily dan SerpAPI untuk Pencarian Agen”?

Penyiapan API, penyusunan kueri, dan penguraian hasil untuk alat pencarian web. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Agents?

Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Tavily dan SerpAPI untuk Pencarian Agen” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?

Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Tavily dan SerpAPI untuk Pencarian Agen
  2. Mengurutkan dan Menyaring Hasil Pencarian
  3. Pola Putaran Riset Mendalam
  4. Menggabungkan Pencarian Web dengan RAG
← Kembali ke AI Agents