← Về trang Blog

🧠 Mô Hình Đánh Giá Agent AI — Tiêu Chuẩn Mới

Hướng dẫn toàn diện về đánh giá AI agent: độ chính xác dùng tool, hiệu quả trajectory, hội thoại đa-turn, và điểm tự phản hồi — kèm code ví dụ.


🧠 Khái Niệm Cốt Lõi: Đánh Giá "Cách Làm", Không Chỉ Kết Quả Cuối Cùng

Với một lệnh gọi LLM thông thường, bạn chỉ kiểm tra phản hồi cuối cùng. Nhưng với một agent, điều đó là không đủ — nó có thể đạt được kết quả đúng nhưng qua một đường đi tệ hại (dùng sai tool, vòng lặp không cần thiết, v.v.).

Bạn cần ba cấp độ đánh giá:

🤔 Vậy tại sao điều này quan trọng?

Năm 2026, đánh giá không còn là một "checkbox nghiên cứu" — nó là cổng kiểm soát sản xuất. Bất cứ ai cũng có thể kết nối LLM với cơ sở dữ liệu vector. Rất ít người xây dựng được hệ thống AI đo lường được và đáng tin cậy.

🔧 Độ Chính Xác Dùng Tool — Nó Có Chọn Đúng Tool Không?

Điều này đánh giá chính xác cách agent tương tác với các hệ thống bên ngoài — không chỉ là kết quả cuối cùng nó trả về.

📊 Nó đo lường gì:

💻 Code Ví Dụ:

from deepeval.metrics import BaseMetric

class ToolUseCorrectnessMetric(BaseMetric):
    name = "Độ Chính Xác Dùng Tool"
    
    def evaluate(self, agent_trace, expected_trajectory):
        """
        Agent trace: [{"tool_name": "get_diff", "args": {}}, ...]
        Expected trajectory: ["get_diff", "check_style", "suggest_fix"]
        """
        actual_tools = [step["tool_name"] for step in agent_trace]

        # 1. Kiểm tra xem tất cả tool bắt buộc đã được gọi chưa
        missing = set(expected_trajectory) - set(actual_tools)

        # 2. Kiểm tra xem có tool nào gọi thừa không (lãng phí chi phí)
        extra = set(actual_tools) - set(expected_trajectory)

        # 3. Kiểm tra tính hợp lệ của schema gọi tool
        for step in agent_trace:
            if not self._validate_schema(step["tool_name"], step["args"]):
                return False, "Đối số tool không hợp lệ"

        return len(missing) == 0 and len(extra) <= 1
    
    def _validate_schema(self, tool_name, args):
        """JSON schema validation cho đối số mong đợi của mỗi tool."""
        # ... code thực tế sẽ dùng jsonschema.validate()...
        return True
💡 Điểm mấu chốt: Độ chính xác dùng tool chia thành: kích hoạt (có nên gọi tool không?), lựa chọn (tool nào?), và tính hợp lệ cấu trúc (các đối số có đúng không?).

📈 Hiệu Quả Trajectory — Nó Có Đi Đường Ngắn Nhất Không?

Khi kết quả cuối cùng đúng, agent của bạn vẫn có thể đi một đường tốn kém, chậm chạp hoặc lặp vòng. Điều này đánh giá hiệu quả — mọi thứ về chi phí và học hỏi.

📊 Nó đo lường gì:

💻 Code Ví Dụ:

from collections import Counter

def evaluate_trajectory_efficiency(agent_trace, max_iterations=10):
    """Đánh giá xem trajectory của agent có hiệu quả không."""
    tool_history = [step["tool_name"] for step in agent_trace]

    # Phát hiện gọi tool lặp lại (hành vi vòng lặp)
    tool_counts = Counter(tool_history)
    redundant_calls = sum(c - 1 for c in tool_counts.values() if c > 2)

    iterations_used = len(agent_trace)
    is_efficient = iterations_used <= max_iterations and redundant_calls == 0

    cost_score = max(0, 1.0 - (redundant_calls / max_iterations))

    return {
        "is_efficient": is_efficient,
        "iterations_used": iterations_used,
        "redundant_calls": redundant_calls,
        "cost_score": round(cost_score, 2)
    }

# Kết quả ví dụ:
# Agent A (tốt):   {"is_efficient": True, "iterations_used": 4, "redundant_calls": 0, "cost_score": 1.0}
# Agent B (xấu):   {"is_efficient": False, "iterations_used": 15, "redundant_calls": 8, "cost_score": 0.3}

🔍 Các mẫu cần phát hiện:

💬 Đánh Giá Đa-Turn — Nó Có Xử Lý Được Ngữ Cảnh Hội Thoại Không?

Agent thực có nhiều lượt hội thoại. Một đánh giá single-turn bỏ qua việc mang theo ngữ cảnh, làm rõ, sửa lỗi, và phục hồi lỗi.

📊 Nó đo lường gì:

🌍 Ví Dụ Test Case Thực Tế:

# Test case cho agent hỗ trợ khách hàng:

test_multi_turn = [
    {
        "user_query": "Tôi cần đặt lại mật khẩu. Email của tôi là test@example.com",
        "agent_response": "Tôi sẽ giúp bạn đặt lại mật khẩu. Gửi link đến test@example.com",
        "tool_calls": [{"name": "send_password_reset", "args": {"email": "test@example.com"}}]
    },
    {
        "user_query": "Thực ra, email của tôi đã thay đổi. Bây giờ là lktinh@gmail.com",
        "agent_response": "Đã cập nhật email của bạn thành lktinh@gmail.com. Gửi link đặt lại ở đó.",
        "tool_calls": [{"name": "update_email", "args": {"email": "lktinh@gmail.com"}}]
    },
    {
        "user_query": "Gửi lại đi",
        "agent_response": "Đang gửi đặt lại mật khẩu đến lktinh@gmail.com",  # ✅ Đã nhớ!
        "tool_calls": [{"name": "send_password_reset", "args": {"email": "lktinh@gmail.com"}}]
    }
]

# Expected: memory_score=2, error_recovery=True, is_coherent=True
💡 Điểm mấu chốt: Đánh giá đa-turn không chỉ là nhớ sự thật — mà là kiểm tra xem agent có thể phục hồi từ lỗi, làm rõ, và giữ cuộc hội thoại đúng hướng.

🔄 Điểm Tự Phản Hồi — Agent Có Thể Tự Sửa Không?

Một agent tốt không chỉ tìm ra câu trả lời đúng — nó cũng biết khi nào nó đang mắc sai lầm và tự sửa. Đây là điểm tự phản hồi.

📊 Nó đo lường gì:

🌍 Ví Dụ Thực Tế (PR Assistant):

Mẫu này đặc biệt quan trọng cho các ứng dụng rủi ro cao như review code, ngân hàng, hoặc y tế — khi "đủ tốt" không phải là đủ.

🏗️ Ghép Tất Cả Lại — Đường Ống Đánh Giá

Trong sản xuất, bạn chạy tất cả bốn mẫu cùng nhau như một điểm tổng hợp. Đây là những gì bạn sẽ làm trong CI/CD pipeline của mình:

def evaluate_agent_full(agent, test_case):
    """Đánh giá agent đầy đủ — chạy tất cả 4 mẫu trên một test case."""
    result = agent.run(test_case["question"])
    trace = result.trace

    evaluations = {
        "tool_use": evaluate_tool_use_correctness(trace, test_case.expected_tools),
        "trajectory": evaluate_trajectory_efficiency(trace),
        "multi_turn": evaluate_multi_turn_conversation(trace.turns, test_case.memory),
        "reflection": evaluate_reflection(trace, test_case.failure_point),
        "final_answer": evaluate_final_output(result.output, test_case.expected_answer),
    }

    composite = (
        0.25 * evaluations["tool_use"]["score"] +
        0.20 * evaluations["trajectory"]["cost_score"] +
        0.20 * evaluations["multi_turn"]["memory_score"] +
        0.15 * evaluations["reflection"]["score"] +
        0.20 * evaluations["final_answer"]["score"]
    )

    return {
        "composite_score": round(composite, 3),
        "passed": composite >= 0.7
    }

Điểm tổng hợp này cho phép bạn xem agent của bạn mạnh ở đâu và yếu ở đâu — không chỉ là "đạt hoặc trượt".

🔑 Đây là những gì thực sự quan trọng trong 2026:

1. Đánh Giá Retrieval Trước Generation — Nếu retrieval thất bại, generation không thể phục hồi.

2. Đánh Giá Groundedness — Câu trả lời có được hỗ trợ bởi các tài liệu truy xuất, hay mô hình đang hallucinating?

3. Đánh Giá Hành Vi Agent, Không Chỉ Kết Quả Cuối Cùng — agent có chọn đúng tool không? nó có gọi các tools không cần thiết không?

4. Đo Lường Độ Trễ và Chi Phí — Chỉ độ chính xác là không đủ.

5. Kiểm Tra Các Kịch Bản Lỗi — xảy ra gì nếu một tool API thất bại?

6. Sử Dụng Bộ Test Có Cấu Trúc — không chỉ dựa vào testing thủ công.

7. Đánh Giá Liên Tục Trong Sản Xuất — dữ liệu thay đổi, hành vi người dùng thay đổi.

🔚 Suy Nghĩ Cuối Cùng

Năm 2026, xây dựng các hệ thống agent AI không còn đáng khen. Đánh giá chúng đúng cách mới là điều đáng khen. Bất cứ ai cũng có thể kết nối LLM với cơ sở dữ liệu vector. Rất ít người xây dựng được hệ thống AI đo lường được và đáng tin cậy.

Nếu bạn muốn tìm hiểu thêm về đánh giá agent, hãy xem bài mở rộng của chúng tôi về MLFlow EvaluationDeepEval — PyTest-style Agent Testing.