Tavily และ SerpAPI สำหรับการค้นหาของตัวแทน
การตั้งค่า API การสร้างคำค้นหา และการแยกวิเคราะห์ผลลัพธ์สำหรับเครื่องมือค้นหาเว็บ
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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Tavily และ SerpAPI สำหรับการค้นหาของตัวแทน
- การจัดอันดับและกรองผลการค้นหา
- รูปแบบลูปการวิจัยเชิงลึก
- การผสานการค้นหาเว็บกับ RAG