สรุปการใช้ Hermes Agent และ Ollama สร้าง AI วางแผนเที่ยวแบบ Local

ผมต้องการ AI agent ที่สามารถช่วยวางแผนการเดินทาง วิจัยจุดหมายปลายทาง แนะนำที่พัก และหาเที่ยวบินได้จริงๆ โดยไม่ต้องสมัครสมาชิก ไม่ต้องส่งข้อมูลไปประมวลผลบนคลาวด์ และไม่มีบิลรายเดือนตามการใช้งาน การค้นหานั้นทำให้ผมพบกับสองเครื่องมือที่น่าสนใจอย่าง Hermes Agent และ Ollama
บทความนี้คือโปรเจกต์จริงที่เกิดจากการจับคู่เครื่องมือทั้งสอง เพื่อสร้างทีมวิจัยการเดินทางแบบ multi-agent ที่รันบนฮาร์ดแวร์ของตัวเองทั้งหมด อย่างไรก็ตาม ก่อนจะเริ่มสร้าง สิ่งสำคัญคือต้องเข้าใจจุดเด่นเฉพาะด้านของเครื่องมือทั้งสองอย่างที่ทำให้โปรเจกต์นี้เป็นไปได้
แนะนำ Hermes Agent
Hermes Agent เป็น AI agent แบบ open-source สร้างโดย Nous Research ภายใต้ใบอนุญาต MIT ปัจจุบันอยู่ที่เวอร์ชัน 0.21.1 มีให้ใช้งานทั้งรูปแบบแอปพลิเคชันเดสก์ท็อป (macOS, Windows, Linux) และ CLI ผ่านเทอร์มินัล โดยทั้งสองรูปแบบให้เอเจนต์พื้นฐานที่ทรงพลังเหมือนกัน
สิ่งที่แยก Hermes ออกจาก chatbot ทั่วไปคือความสามารถด้าน agentic ที่แท้จริง มันสามารถอ่านและแก้ไขไฟล์ในเครื่อง รันคำสั่งเทอร์มินัล และท่องเว็บแบบสดๆ ได้ ซึ่งจำเป็นมากสำหรับโปรเจกต์นี้ เพราะเอเจนต์ต้องค้นหาข้อมูลจุดหมายปลายทางปัจจุบันและดำเนินการตามสิ่งที่พบได้ ไม่ใช่แค่บรรยายแผนการกว้างๆ เท่านั้น
คุณสมบัติสำคัญที่รองรับโปรเจกต์นี้คือ การประสานงานแบบ Multi-agent ที่ช่วยให้เอเจนต์ผู้ประสานงานมอบหมายงานให้เอเจนต์เฉพาะทางได้ รวมถึงมี ความจำระยะยาว (Persistent memory) ที่ช่วยจดจำสไตล์การเดินทางหรือทริปในอดีต และยังรองรับ Model Context Protocol (MCP) เพื่อเชื่อมต่อกับเครื่องมือค้นหาเว็บหรือ custom tool อย่างระบบค้นหาเที่ยวบินที่สร้างขึ้นมาใหม่
ทำความเข้าใจ Ollama และโมเดลแบบ Local
Hermes ต้องการโมเดลภาษา (LLM) เป็นสมองสั่งการ ซึ่งเป็นหน้าที่ของ Ollama เครื่องมือ open-source สำหรับดาวน์โหลดและรันโมเดลบนคอมพิวเตอร์ของคุณเอง โดยแสดงผลผ่าน local API ที่ทำงานเหมือนของผู้ให้บริการคลาวด์ แต่เปลี่ยนไปชี้ที่ localhost แทน เนื่องจาก API ของ Ollama นั้น OpenAI-compatible ทำให้ Hermes สามารถสื่อสารกับโมเดลในเครื่องได้ทันที
"โมเดลแบบ Local" คือการรันโมเดลแบบ open-weight บน CPU หรือ GPU ของคุณเอง ข้อดีคือไม่มีข้อมูลรั่วไหลออกจากเครื่อง ยกเว้นการค้นหาเว็บที่เอเจนต์ตัดสินใจรัน และไม่มีค่าบริการรายเดือน มีเพียงค่าไฟฟ้าเท่านั้น แม้ความเร็วและความสามารถอาจไม่เท่าโมเดลคลาวด์ระดับท็อป แต่สำหรับการวางแผนการเดินทางและใช้เครื่องมือต่างๆ ข้อแลกเปลี่ยนนี้ถือว่าคุ้มค่ามาก
ร่างไอเดียโปรเจกต์ Wanderlist
โปรเจกต์นี้ชื่อว่า Wanderlist ทำหน้าที่รับความต้องการของผู้ใช้ แล้วให้ทีม AI agent แบบ local ประสานงานกันเพื่อวิจัยจุดหมายปลายทาง แนะนำสถานที่เที่ยว ที่พัก และสร้างลิงก์ค้นหาเที่ยวบินจริงที่ใช้งานได้ทันที โดยแบ่งงานออกเป็น 4 ส่วนหลักสำหรับเอเจนต์แต่ละตัว เพื่อให้ได้ข้อมูลที่แม่นยำและเป็นปัจจุบันที่สุด
ตรวจสอบข้อกำหนดเบื้องต้นและติดตั้ง Ollama
การรันทีมวิจัยการเดินทางที่ต้องค้นหาเว็บและเรียกใช้เครื่องมือเฉพาะทาง จำเป็นต้องใช้ฮาร์ดแวร์ที่รองรับการทำ tool-calling ได้อย่างมีประสิทธิภาพ
| ส่วนประกอบ | ขั้นต่ำ | แนะนำ |
|---|---|---|
| RAM | 8 GB | 24+ GB (สำหรับโมเดลระดับ 31B) |
| พื้นที่เก็บข้อมูล | ว่าง 5 GB | ว่าง 25+ GB |
| CPU | 4 คอร์ | 8+ คอร์ |
| GPU | ไม่บังคับ | NVIDIA GPU พร้อม VRAM 8+ GB |
ติดตั้ง Ollama:
curl -fsSL https://ollama.com/install.sh | shดึงโมเดลที่รองรับ tool-calling อย่างแท้จริง เพื่อให้เอเจนต์สามารถมอบหมายงานหรือเรียกใช้เครื่องมือ Python ที่กำหนดเองได้
ollama pull gemma4:31bคำอธิบายโค้ด: การเลือกใช้ gemma4:31b แม้จะใช้ RAM มากกว่า แต่คุ้มค่าเพราะโปรเจกต์นี้ต้องใช้เอเจนต์ถึง 4 ตัวประสานงานกัน ซึ่งต้องการโมเดลที่เข้าใจบริบทการเรียกใช้เครื่องมือได้อย่างแม่นยำ
การกำหนดค่า Hermes ให้ใช้โมเดลแบบ Local
ทำการตั้งค่าให้ Hermes ชี้ไปที่ local endpoint ของ Ollama ผ่านไฟล์ ~/.hermes/config.yaml ดังนี้:
model:
default: "gemma4:31b"
provider: "custom"
base_url: "http://localhost:11434/v1"คำอธิบายโค้ด: กำหนด provider: "custom" เพื่อให้ Hermes มองเป็น OpenAI-compatible endpoint และระบุ base_url ไปที่พอร์ต 11434 ของ Ollama โดยไม่ต้องใส่ API key
การออกแบบทีมการเดินทาง: ผู้ประสานงานและผู้เชี่ยวชาญสามคน
โครงสร้างระบบจะใช้ผู้ประสานงาน root รับคำขอและส่งต่อให้ผู้เชี่ยวชาญ 3 ด้านที่มีบทบาทชัดเจน:
agents:
root:
description: "Travel planning coordinator"
instruction: |
You are a travel planning coordinator. When given a trip request,
delegate destination research to destination-scout, accommodation
guidance to stay-finder, and flight options to flight-finder.
Combine their findings into one clear trip briefing.
sub_agents: [destination-scout, stay-finder, flight-finder]
toolsets:
- type: think
- type: memory
path: ./trip_preferences.db
destination-scout:
description: "Researches destinations, attractions, and entry requirements"
instruction: |
Search the web for current information on the requested destination:
notable places to visit, best time of year, and any visa or entry
requirements. Always search fresh for entry requirements, never
answer from memory, since these change and being wrong has real
consequences for travelers. Cite where each fact came from.
toolsets:
- type: mcp
ref: docker:duckduckgo
stay-finder:
description: "Finds well-regarded neighborhoods and accommodation types"
instruction: |
Search the web for current, well-regarded recommendations on
where to stay in the destination, neighborhoods, accommodation
styles, and typical price ranges from recent travel sources.
Never invent specific listings or prices, only report what
current sources actually say.
toolsets:
- type: mcp
ref: docker:duckduckgo
flight-finder:
description: "Builds real flight search links and current price context"
instruction: |
Given an origin, destination, and travel dates, use the
build_flight_search_url tool to generate a real search link.
Also search the web briefly for current typical fare ranges on
this route, clearly labeling them as approximate.
toolsets:
- type: mcp
ref: docker:duckduckgo
- type: custom
path: ./tools/flight_link.pyคำอธิบายโค้ด: รายการ sub_agents คือหัวใจที่เปลี่ยนเอเจนต์แยกส่วนให้ทำงานเป็นทีม โดย destination-scout ถูกกำชับให้ค้นหาข้อมูลใหม่เสมอโดยเฉพาะเรื่องวีซ่า เพื่อป้องกันความผิดพลาดจากข้อมูลเก่าในหน่วยความจำ
ในขณะที่ stay-finder จะได้รับคำสั่งห้ามเมคตัวเลขราคาเอง และ flight-finder จะเป็นตัวเดียวที่เข้าถึง custom tool ในไฟล์ Python เพื่อทำหน้าที่สร้างลิงก์ค้นหาเที่ยวบินจริง
การสร้างเครื่องมือค้นหาเที่ยวบินจริง เนื่องจากไม่มี API ราคาเที่ยวบินที่ฟรีและแม่นยำ เราจึงสร้างเครื่องมือสร้าง URL ของ Google Flights โดยใช้พารามิเตอร์จากการค้นหาแบบภาษาธรรมชาติแทน
# tools/flight_link.py
import urllib.parse
from datetime import datetime
def build_flight_search_url(origin: str, destination: str, depart_date: str, return_date: str | None = None) -> str:
"""Builds a real Google Flights search URL. Raises ValueError on
malformed input rather than silently producing a broken link."""
if not origin.strip() or not destination.strip():
raise ValueError("Origin and destination cannot be empty")
try:
datetime.strptime(depart_date, "%-%d-%Y")
except ValueError:
raise ValueError(f"depart_date must be in YYYY-MM-DD format, got '{depart_date}'")
query = f"Flights from {origin.strip()} to {destination.strip()} on {depart_date}"
if return_date:
try:
datetime.strptime(return_date, "%-%d-%Y")
except ValueError:
raise ValueError(f"return_date must be in YYYY-MM-DD format, got '{return_date}'")
query += f" returning {return_date}"
encoded_query = urllib.parse.quote(query)
return f"https://www.google.com/travel/flights?q={encoded_query}"คำอธิบายโค้ด: การใช้ urllib.parse.quote ช่วยให้ URL รองรับชื่อเมืองที่มีช่องว่างอย่าง "New York" ได้อย่างถูกต้อง และบล็อก try/except จะช่วยตรวจสอบรูปแบบวันที่ เพื่อแจ้งให้เอเจนต์ขอข้อมูลใหม่จากผู้ใช้หากเกิดข้อผิดพลาด
การให้ความจำแก่ทีม
การระบุ path: ./trip_preferences.db ในชุดเครื่องมือ memory ช่วยให้ระบบจดจำความต้องการข้ามเซสชันได้ เช่น งบประมาณ หรือความชอบส่วนตัว ทำให้ AI ยิ่งใช้งานยิ่งเก่งขึ้นและเข้าใจผู้ใช้มากขึ้นโดยไม่ต้องเริ่มนับหนึ่งใหม่ทุกครั้ง
การรันเซสชันวางแผนการเดินทางจริง
เมื่อเปิดใช้งานด้วยคำสั่ง hermes run travel-team.yaml และระบุความต้องการ เช่น ต้องการไปโปรตุเกสช่วงกลางเดือนตุลาคม บินจากมาดริด เน้นประหยัด และชอบประวัติศาสตร์กับอาหาร
ผู้ประสานงานจะมอบหมายงานให้เอเจนต์ 3 ตัวทันที destination-scout จะเช็กข้อมูลวีซ่าและที่เที่ยว stay-finder จะหาย่านที่พักราคาถูกในลิสบอน และ flight-finder จะสร้างลิงก์ Google Flights พร้อมสรุปราคาคร่าวๆ จากนั้นระบบจะรวบรวมข้อมูลทั้งหมดเป็นสรุปเดียวที่พร้อมใช้งาน
บทสรุป
นี่ไม่ใช่แค่เดโมทั่วไป แต่เป็นโปรเจกต์ที่ใช้งานได้จริงบนฮาร์ดแวร์ของคุณเองผ่าน Hermes และ Ollama ซึ่งมอบทั้งความเป็นส่วนตัว ความแม่นยำ และไม่มีค่าใช้จ่ายรายเดือนในการสร้างแผนการเดินทางที่สมบูรณ์
ความคิดเห็น (0)
เข้าสู่ระบบเพื่อร่วมแสดงความเห็น
สมัครสมาชิกมาเป็นคนแรกที่แสดงความเห็นกันเลยโบร
