เอเจนต์วิจัยผ่านเว็บ
ผสานเครื่องมือค้นหา เครื่องมือดึงข้อมูล และ LLM เพื่อค้นคว้าหัวข้อหนึ่งแล้วเขียนบทสรุปพร้อมแหล่งอ้างอิง
เอเจนต์วิจัยผ่านเว็บ เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ
เป้าหมายโครงการ
สร้างเอเจนต์ที่ค้นคว้าหัวข้อโดยค้นหาเว็บ ดึงหน้าเว็บ และเขียนสรุปพร้อมแหล่งอ้างอิง — คล้าย Perplexity ขนาดเล็ก
เครื่องมือที่ต้องใช้
- search — ส่งคำค้นไปยังส่วนเชื่อมต่อการค้นหา (Tavily, Serper, Brave) แล้วส่งคืนผลลัพธ์
- fetch_url — ดาวน์โหลดหน้าเว็บแล้วส่งคืนข้อความที่ทำความสะอาดแล้ว
- answer — เอเจนต์เขียนสรุปสุดท้ายพร้อมการอ้างอิง
Step 1: Search Tool
import requests
def search(query: str, k: int = 5) -> list[dict]:
r = requests.post(
'https://api.tavily.com/search',
json={'api_key': TAVILY_KEY, 'query': query, 'max_results': k}
)
return r.json()['results'] # list of {url, title, snippet}Step 2: Fetch Tool
from bs4 import BeautifulSoup
def fetch_url(url: str) -> str:
r = requests.get(url, timeout=10)
soup = BeautifulSoup(r.text, 'html.parser')
for tag in soup(['script', 'style', 'nav', 'footer']):
tag.decompose()
return soup.get_text(separator='\n', strip=True)[:5000] # truncateStep 3: Tool Definitions
tools = [
{'type': 'function', 'function': {
'name': 'search',
'description': 'Search the web for a query, return top results with URLs',
'parameters': {'type': 'object', 'properties': {'query': {'type': 'string'}}, 'required': ['query']}
}},
{'type': 'function', 'function': {
'name': 'fetch_url',
'description': 'Download the text of a URL',
'parameters': {'type': 'object', 'properties': {'url': {'type': 'string'}}, 'required': ['url']}
}}
]
import json
print(json.dumps(tools, indent=2))
Step 4: The Agent Loop
def research(question, max_steps=8):
messages = [
{'role': 'system', 'content': 'You are a research agent. Use search and fetch_url to gather facts. Cite each claim with a URL.'},
{'role': 'user', 'content': question}
]
for _ in range(max_steps):
r = oai.chat.completions.create(model='gpt-4o-mini', messages=messages, tools=tools)
msg = r.choices[0].message
messages.append(msg)
if not msg.tool_calls:
return msg.content
for tc in msg.tool_calls:
result = dispatch(tc)
messages.append({'role': 'tool', 'tool_call_id': tc.id, 'content': json.dumps(result)})
return 'Step limit reached'Tool Dispatcher
def dispatch(tc):
args = json.loads(tc.function.arguments)
if tc.function.name == 'search':
return search(**args)
if tc.function.name == 'fetch_url':
return fetch_url(**args)
return {'error': 'unknown tool'}เพิ่มขีดจำกัดจำนวนขั้นตอน
หากไม่มีขีดจำกัด เอเจนต์อาจทำงานวนไปตลอด max_steps=8 เป็นค่าเริ่มต้นที่เหมาะสม
ตัดทอนหน้าเว็บที่ดึงมา
หน้าเว็บส่วนใหญ่มีขนาด 50KB ขึ้นไป ซึ่งใหญ่เกินไปมาก ให้ตัดทอนเหลือ 5000 อักขระ (ประมาณ 1300 โทเค็น) โดยทั่วไปโมเดลแทบไม่ต้องใช้มากกว่านี้
ปฏิบัติตาม robots.txt
การเรียกดูเว็บในระบบจริงต้องปฏิบัติตาม robots.txt และข้อกำหนดการให้บริการของเว็บไซต์ หากไม่แน่ใจ ให้ใช้บริการค้นหาและดึงข้อมูลที่มีการจัดการให้
แคชผลลัพธ์
คำค้นและ URL เดิมจะถูกเรียกใช้บ่อย ให้แคชผลลัพธ์ใน Redis เป็นเวลาหนึ่งชั่วโมง:
@lru_cache(maxsize=1000)
def cached_fetch(url):
return fetch_url(url)จัดการความล้มเหลว
ข้อผิดพลาดของเครือข่ายเกิดขึ้นเป็นประจำ ให้ส่งข้อผิดพลาดกลับไปยังโมเดลเพื่อให้โมเดลลองใช้แหล่งอื่น:
try:
return fetch_url(url)
except Exception as e:
return {'error': f'Could not fetch {url}: {e}'}บังคับให้มีการอ้างอิง
ลงท้ายพรอมต์ระบบด้วย: “คำตอบสุดท้ายของคุณต้องมี URL สำหรับทุกข้ออ้าง เช่น [1] https://...” — และควรพิจารณาตรวจสอบสคีมาของผลลัพธ์ด้วย
เฝ้าดูค่าใช้จ่าย
เอเจนต์ค้นคว้ามีค่าใช้จ่ายสูง — เรียกใช้เครื่องมือ 5–15 ครั้งต่อคำถาม โดยแต่ละครั้งดึงข้อมูลหลายกิโลไบต์ กำหนดขีดจำกัดงบประมาณต่อคำค้น
ขีดจำกัดจำนวนขั้นตอน
เหตุใดจึงต้องกำหนดขีดจำกัด max_steps ให้กับวงจรการทำงานของเอเจนต์
สรุป
การค้นหา + การดึงข้อมูล + LLM + ขีดจำกัดจำนวนขั้นตอน = เอเจนต์ค้นคว้าที่ใช้งานได้ใน 50 บรรทัด โครงการที่ 3 อันยอดเยี่ยม
คำถามที่พบบ่อย
บทเรียน “เอเจนต์วิจัยผ่านเว็บ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เอเจนต์วิจัยผ่านเว็บ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เอเจนต์วิจัยผ่านเว็บ”
ผสานเครื่องมือค้นหา เครื่องมือดึงข้อมูล และ LLM เพื่อค้นคว้าหัวข้อหนึ่งแล้วเขียนบทสรุปพร้อมแหล่งอ้างอิง คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “เอเจนต์วิจัยผ่านเว็บ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม
ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- บอตถามตอบบนเอกสารของคุณ
- เอเจนต์อธิบายโค้ด
- เอเจนต์วิจัยผ่านเว็บ
- ผู้ช่วย SQL สำหรับ DB ของคุณ