Trong bài viết này, chúng ta sẽ khám phá cách xây dựng một hệ thống lập kế hoạch du lịch thông minh sử dụng AI với khả năng đối thoại đa vòng và gọi công cụ (tool calling). Đây là một ứng dụng thực tiễn cao trong ngành du lịch, giúp tự động hóa quy trình tư vấn và lên lịch trình cho khách hàng.

So sánh các giải pháp API AI hiện nay

Trước khi đi vào chi tiết kỹ thuật, hãy cùng xem bảng so sánh toàn diện giữa HolySheep AI và các giải pháp khác trên thị trường:

Tiêu chí HolySheep AI API chính thức Dịch vụ Relay khác
Tỷ giá ¥1 = $1 (85%+ tiết kiệm) $2-15/MTok $1.5-10/MTok
Thanh toán WeChat, Alipay, Visa Thẻ quốc tế Đa dạng
Độ trễ <50ms 100-300ms 80-200ms
Tín dụng miễn phí Có khi đăng ký Không Ít khi
API tương thích 100% OpenAI compatible Chuẩn 90-95%
Hỗ trợ 24/7 tiếng Việt Email Khác nhau

Tại sao nên chọn HolySheep cho ứng dụng Du lịch?

Ngành du lịch đòi hỏi xử lý nhanh chóng và chi phí thấp để phục vụ nhiều khách hàng. HolySheep AI cung cấp:

Kiến trúc tổng quan: Multi-turn Conversation với Tool Calling

Hệ thống lập kế hoạch du lịch thông minh bao gồm các thành phần chính:

Triển khai đầy đủ: Hệ thống Lập kế hoạch Du lịch AI

1. Cài đặt cơ bản và kết nối API

import openai
import json
from datetime import datetime, timedelta

Cấu hình HolySheep API - KHÔNG dùng api.openai.com

client = openai.OpenAI( api_key="YOUR_HOLYSHEEP_API_KEY", base_url="https://api.holysheep.ai/v1" )

Định nghĩa các công cụ cho hệ thống du lịch

TRAVEL_TOOLS = [ { "type": "function", "function": { "name": "search_flights", "description": "Tìm kiếm chuyến bay phù hợp với yêu cầu", "parameters": { "type": "object", "properties": { "origin": {"type": "string", "description": "Điểm khởi hành (IATA code)"}, "destination": {"type": "string", "description": "Điểm đến (IATA code)"}, "departure_date": {"type": "string", "description": "Ngày khởi hành (YYYY-MM-DD)"}, "passengers": {"type": "integer", "description": "Số hành khách"} }, "required": ["origin", "destination", "departure_date"] } } }, { "type": "function", "function": { "name": "search_hotels", "description": "Tìm kiếm khách sạn theo địa điểm và tiêu chí", "parameters": { "type": "object", "properties": { "city": {"type": "string", "description": "Thành phố"}, "check_in": {"type": "string", "description": "Ngày nhận phòng"}, "check_out": {"type": "string", "description": "Ngày trả phòng"}, "budget_range": {"type": "string", "description": "Mức giá: economy, mid-range, luxury"} }, "required": ["city", "check_in", "check_out"] } } }, { "type": "function", "function": { "name": "get_attractions", "description": "Lấy danh sách địa điểm du lịch nổi tiếng", "parameters": { "type": "object", "properties": { "city": {"type": "string", "description": "Thành phố cần tìm"}, "category": {"type": "string", "description": "Loại hình: nature, culture, food, adventure"} } } } } ] print("Cấu hình hoàn tất. Kết nối HolySheep API thành công!")

2. Triển khai Conversation Manager với Tool Calling

class TravelConversationManager:
    def __init__(self, client):
        self.client = client
        self.conversation_history = []
        self.user_preferences = {}
        
    def add_message(self, role, content):
        """Thêm tin nhắn vào lịch sử hội thoại"""
        self.conversation_history.append({
            "role": role,
            "content": content,
            "timestamp": datetime.now().isoformat()
        })
        
    def get_context_summary(self):
        """Tạo tóm tắt ngữ cảnh từ lịch sử hội thoại"""
        context = "## Ngữ cảnh cuộc trò chuyện\n"
        
        if self.user_preferences:
            context += "### Sở thích đã xác định:\n"
            for key, value in self.user_preferences.items():
                context += f"- {key}: {value}\n"
                
        recent = self.conversation_history[-6:]
        context += "\n### Cuộc trò chuyện gần đây:\n"
        for msg in recent:
            context += f"- {msg['role']}: {msg['content'][:100]}...\n"
            
        return context
    
    def execute_tool(self, tool_name, arguments):
        """Thực thi công cụ và trả về kết quả"""
        # Mô phỏng kết quả từ API thực tế
        if tool_name == "search_flights":
            return self._mock_search_flights(arguments)
        elif tool_name == "search_hotels":
            return self._mock_search_hotels(arguments)
        elif tool_name == "get_attractions":
            return self._mock_get_attractions(arguments)
        return "Công cụ không được hỗ trợ"
    
    def _mock_search_flights(self, args):
        return json.dumps({
            "status": "success",
            "flights": [
                {"airline": "Vietnam Airlines", "price": "$320", "time": "08:00-11:30"},
                {"airline": "VietJet", "price": "$180", "time": "14:00-17:30"},
                {"airline": "Bamboo Airways", "price": "$250", "time": "19:00-22:30"}
            ]
        }, ensure_ascii=False)
    
    def _mock_search_hotels(self, args):
        return json.dumps({
            "status": "success",
            "hotels": [
                {"name": "Grand Hotel", "rating": 4.5, "price": "$120/đêm"},
                {"name": "City Center Inn", "rating": 3.8, "price": "$45/đêm"},
                {"name": "Luxury Resort", "rating": 5.0, "price": "$350/đêm"}
            ]
        }, ensure_ascii=False)
    
    def _mock_get_attractions(self, args):
        return json.dumps({
            "status": "success",
            "attractions": [
                {"name": "Vịnh Hạ Long", "category": "nature", "rating": 4.8},
                {"name": "Phố cổ Hội An", "category": "culture", "rating": 4.7},
                {"name": "Chợ Đồng Xuân", "category": "food", "rating": 4.5}
            ]
        }, ensure_ascii=False)
    
    def chat(self, user_message):
        """Xử lý đối thoại đa vòng với tool calling"""
        self.add_message("user", user_message)
        
        # Chuẩn bị yêu cầu với ngữ cảnh và công cụ
        system_prompt = self._build_system_prompt()
        
        response = self.client.chat.completions.create(
            model="gpt-4o",
            messages=[
                {"role": "system", "content": system_prompt},
                *self.conversation_history
            ],
            tools=TRAVEL_TOOLS,
            tool_choice="auto",
            temperature=0.7
        )
        
        assistant_message = response.choices[0].message
        
        # Xử lý yêu cầu gọi công cụ
        if assistant_message.tool_calls:
            tool_results = []
            
            for tool_call in assistant_message.tool_calls:
                tool_name = tool_call.function.name
                arguments = json.loads(tool_call.function.arguments)
                
                print(f"Đang gọi công cụ: {tool_name}")
                result = self.execute_tool(tool_name, arguments)
                
                # Trích xuất thông tin cho user preferences
                self._update_preferences(tool_name, arguments)
                
                tool_results.append({
                    "tool_call_id": tool_call.id,
                    "tool_name": tool_name,
                    "result": result
                })
            
            # Gửi kết quả công cụ về cho AI xử lý
            for result in tool_results:
                self.conversation_history.append({
                    "role": "tool",
                    "tool_call_id": result["tool_call_id"],
                    "content": result["result"]
                })
            
            # Yêu cầu AI tạo phản hồi cuối cùng
            response = self.client.chat.completions.create(
                model="gpt-4o",
                messages=[
                    {"role": "system", "content": system_prompt},
                    *self.conversation_history
                ],
                temperature=0.7
            )
            
            assistant_message = response.choices[0].message
        
        self.add_message("assistant", assistant_message.content)
        return assistant_message.content
    
    def _build_system_prompt(self):
        return """Bạn là trợ lý lập kế hoạch du lịch chuyên nghiệp.
Hỗ trợ người dùng tìm kiếm chuyến bay, khách sạn và địa điểm du lịch.
Khi cần thông tin cụ thể, hãy gọi công cụ phù hợp.
Trả lời bằng tiếng Việt, thân thiện và chuyên nghiệp.
Đề xuất các lựa chọn phù hợp dựa trên sở thích đã xác định."""
    
    def _update_preferences(self, tool_name, args):
        """Cập nhật sở thích người dùng từ các yêu cầu"""
        if tool_name == "search_flights":
            if "origin" in args:
                self.user_preferences["điểm khởi hành"] = args["origin"]
            if "destination" in args:
                self.user_preferences["điểm đến"] = args["destination"]
        elif tool_name == "search_hotels":
            if "city" in args:
                self.user_preferences["thành phố"] = args["city"]
            if "budget_range" in args:
                self.user_preferences["ngân sách khách sạn"] = args["budget_range"]


Demo sử dụng

manager = TravelConversationManager(client)

Vòng hội thoại 1: Tìm chuyến bay

print("=== Vòng 1: Tìm chuyến bay ===") response = manager.chat("Tôi muốn đi từ Hà Nội đến Đà Nẵng vào ngày 15/03