AI Agents · บทเรียน

Tavily และ SerpAPI สำหรับการค้นหาของตัวแทน

การตั้งค่า API การสร้างคำค้นหา และการแยกวิเคราะห์ผลลัพธ์สำหรับเครื่องมือค้นหาเว็บ

บทเรียน 1 จาก 413 ขั้นตอน

Tavily และ SerpAPI สำหรับการค้นหาของตัวแทน เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน

เหตุผลที่ตัวแทนต้องใช้การค้นหาเว็บ

LLM มีวันตัดข้อมูลความรู้ สำหรับคำถามเกี่ยวกับเหตุการณ์ปัจจุบัน ราคาสด ข่าวล่าสุด หรือหัวข้อที่เปลี่ยนแปลงอย่างรวดเร็ว ข้อมูลฝึกสอนของโมเดลย่อมล้าสมัย

เครื่องมือค้นหาเว็บอย่างทาวิไลและ SerpApi ช่วยให้ตัวแทนเข้าถึงอินเทอร์เน็ตแบบเรียลไทม์ เชื่อมช่องว่างระหว่างข้อมูลฝึกสอนแบบคงที่กับความเป็นจริงในปัจจุบัน

ทาวิไล: สร้างมาเพื่อตัวแทน AI โดยเฉพาะ

ทาวิไลเป็น API การค้นหาที่ออกแบบมาโดยเฉพาะสำหรับตัวแทน AI ต่างจากการดึงข้อมูลจากเว็บทั่วไป เพราะส่งคืน ผลลัพธ์ที่สะอาดและมีโครงสร้าง พร้อมเนื้อหาที่แยกไว้ล่วงหน้า จึงไม่ต้องแยกวิเคราะห์ HTML

ติดตั้งด้วย pip install tavily-python ขอคีย์ API ได้ที่ 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('---')

พารามิเตอร์การค้นหาของทาวิไล

ทาวิไลมีพารามิเตอร์หลายรายการสำหรับควบคุมลักษณะการค้นหา พารามิเตอร์ที่มีประโยชน์มากที่สุดสำหรับตัวแทน ได้แก่ max_results, search_depth และ 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']
)

โครงสร้างผลลัพธ์ของทาวิไล

ผลลัพธ์แต่ละรายการจากทาวิไลประกอบด้วย title, url, content (ข้อความที่แยกออกมา), score (ความเกี่ยวข้อง) และอาจมี published_date ด้วย ฟิลด์ content เป็นข้อความสะอาด ไม่มีแท็ก 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: การเข้าถึงการค้นหากูเกิลด้วยโปรแกรม

SerpApi ให้การเข้าถึงข้อมูลแบบมีโครงสร้างจากกูเกิล บิง YouTube และเครื่องมือค้นหาอื่น ๆ โดยส่งคืนข้อมูลจำนวนมาก ซึ่งรวมถึงผลการค้นหาทั่วไป แผงความรู้ ตัวอย่างข้อมูลเด่น และผลการค้นหาสินค้า

ติดตั้งด้วย 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()

โครงสร้างผลลัพธ์ของ SerpApi

SerpApi ส่งคืนข้อมูลแบบมีโครงสร้างที่ละเอียดกว่าทาวิไล ฟิลด์สำคัญใน organic_results ได้แก่ title, link, snippet และ position ตัวอย่างข้อมูลเด่นจะปรากฏแยกต่างหากภายใต้ 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']}")

ตัวเลือกความใหม่และการกรองตามวันที่

สำหรับคำสั่งสอบถามที่อ่อนไหวต่อเวลา ให้กรองผลลัพธ์ตามวันที่เผยแพร่ ทาวิไลรองรับพารามิเตอร์ days ส่วน SerpApi รองรับพารามิเตอร์ tbs (การค้นหาตามเวลา)

# 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()

การสร้างเครื่องมือค้นหาสำหรับ LangChain

หากต้องการใช้ทาวิไลหรือ SerpApi ภายในตัวแทน LangChain ให้หุ้มฟังก์ชันค้นหาเป็น Tool จากนั้นตัวแทนจะเรียกใช้ฟังก์ชันนี้เหมือนเครื่องมืออื่น ๆ ได้ โดยอิงตามคำอธิบายที่คุณระบุ

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.'
)

การกรองโดเมนเพื่อควบคุมคุณภาพ

ผลลัพธ์การค้นหาไม่ได้มีความน่าเชื่อถือทั้งหมด การกรองโดเมนช่วยจำกัดการค้นหาให้อยู่ในแหล่งข้อมูลที่เชื่อถือได้ (สำหรับการวิจัย) หรือไม่รวมโดเมนที่มีสแปมจำนวนมาก (สำหรับคำสั่งสอบถามทั่วไป)

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)

การจัดการข้อผิดพลาดและขีดจำกัดอัตราการค้นหา

ทั้งทาวิไลและ SerpApi มีขีดจำกัดอัตราการใช้งาน ให้ใช้ตรรกะลองใหม่พร้อมการถอยกลับแบบทวีคูณ และจัดการอย่างเหมาะสมเมื่อการค้นหาไม่ส่งคืนผลลัพธ์

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 []

การปรับความยาวตัวอย่างข้อมูลให้เป็นมาตรฐาน

ตัวอย่างข้อมูลในผลลัพธ์มีความยาวแตกต่างกันมาก บางรายการยาว 50 อักขระ ขณะที่บางรายการยาวถึง 2,000 อักขระ การปรับความยาวตัวอย่างข้อมูลให้เป็นมาตรฐานช่วยให้แต่ละแหล่งข้อมูลได้รับการนำเสนออย่างเท่าเทียมกันในบริบทของ 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]}...")

ตรวจสอบความรู้

ข้อได้เปรียบสำคัญของทาวิไลเหนือแนวทางการดึงข้อมูลจากเว็บทั่วไปสำหรับตัวแทน AI คืออะไร

สรุป: ทาวิไลและ SerpApi สำหรับการค้นหาของตัวแทน

API การค้นหาเว็บช่วยให้ตัวแทนเข้าถึงข้อมูลปัจจุบันที่อยู่นอกเหนือจุดตัดข้อมูลฝึกสอนของตน ทาวิไล สร้างมาเพื่อผู้ช่วย AI โดยเฉพาะ พร้อมการแยกเนื้อหาที่สะอาด ส่วน SerpApi ให้ข้อมูลกูเกิลแบบมีโครงสร้างที่ละเอียดกว่า รวมถึงตัวอย่างข้อมูลเด่นและแผงความรู้

แนวทางสำคัญ: ใช้การกรองโดเมนเพื่อควบคุมคุณภาพ ใช้ตัวกรองความใหม่สำหรับคำสั่งสอบถามที่อ่อนไหวต่อเวลา ปรับความยาวตัวอย่างข้อมูลให้เป็นมาตรฐาน และใช้ตรรกะลองใหม่พร้อมการถอยกลับเพื่อจัดการขีดจำกัดอัตราการใช้งาน

เริ่มต้นได้ฟรี

เรียนรู้ AI Agents ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
60
บทเรียน
239

คำถามที่พบบ่อย

บทเรียน “Tavily และ SerpAPI สำหรับการค้นหาของตัวแทน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “Tavily และ SerpAPI สำหรับการค้นหาของตัวแทน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “Tavily และ SerpAPI สำหรับการค้นหาของตัวแทน”

การตั้งค่า API การสร้างคำค้นหา และการแยกวิเคราะห์ผลลัพธ์สำหรับเครื่องมือค้นหาเว็บ คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “Tavily และ SerpAPI สำหรับการค้นหาของตัวแทน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม

ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Tavily และ SerpAPI สำหรับการค้นหาของตัวแทน
  2. การจัดอันดับและกรองผลการค้นหา
  3. รูปแบบลูปการวิจัยเชิงลึก
  4. การผสานการค้นหาเว็บกับ RAG
← กลับไปที่ AI Agents