Soi sáng ‘hộp đen’ RAG Local với Arize Phoenix trong 5 phút

Artificial Intelligence tutorial - IT technology blog
Artificial Intelligence tutorial - IT technology blog

Quick Start: Chạy Arize Phoenix chỉ với 2 dòng lệnh

Nếu đã có sẵn môi trường Python, bạn chỉ mất chưa đầy 1 phút để khởi động Arize Phoenix. Thay vì vật lộn với các file cấu hình YAML dài dằng dặc, chúng ta sẽ đi thẳng vào thực thi.

Đầu tiên, hãy cài đặt các thư viện cần thiết qua pip:

pip install arize-phoenix openinference-instrumentation-llama-index

Tiếp theo, hãy mở terminal hoặc file Python và chạy đoạn mã này để kích hoạt server giám sát:

import phoenix as px

# Khởi chạy Phoenix server
session = px.launch_app()

# In URL truy cập dashboard
print(f"Dashboard đang chạy tại: {session.url}")

Ngay lập tức, giao diện web sẽ xuất hiện tại http://localhost:6006. Đây là nơi toàn bộ “nội tạng” của hệ thống RAG sẽ được phơi bày để bạn theo dõi sát sao.

Tại sao mình chọn Arize Phoenix thay vì LangSmith?

Hồi mới làm RAG, mình thường xuyên đau đầu vì model trả lời sai mà không rõ nguyên nhân. Có phải do Vector Database tìm sai tài liệu? Hay do Model tự “huyễn hoặc” (hallucination) dù context rất chuẩn? Hay đơn giản là Prompt của mình quá tệ?

LangSmith là một lựa chọn tốt nhưng nó chạy trên Cloud. Với các dự án doanh nghiệp yêu cầu bảo mật nghiêm ngặt, việc đẩy dữ liệu nội bộ lên server bên thứ ba là rủi ro không thể chấp nhận. Arize Phoenix giải quyết triệt để vấn đề này.

Những điểm cộng khiến mình gắn bó với công cụ này:

  • Riêng tư tuyệt đối: Dữ liệu nằm gọn trong máy bạn, không một byte nào thoát ra ngoài.
  • Chuẩn OpenTelemetry: Bạn không bị trói buộc vào framework nào.

    Dù dùng LangChain, LlamaIndex hay code thuần, Phoenix đều cân được hết.

  • Trace cực sâu: Bạn sẽ thấy rõ bước Embedding mất bao nhiêu mil giây, hay bước Retrieval đã lấy ra những đoạn văn bản (chunks) cụ thể nào.
  • Chi phí bằng không: Bản open-source cung cấp sức mạnh quá đủ cho nhu cầu cá nhân và startup.

Gắn “camera giám sát” vào code RAG

Để Phoenix có thể ghi lại mọi diễn biến, chúng ta cần sử dụng cơ chế Instrumentation. Hãy coi đây là việc gắn các camera hành trình vào từng nút thắt trong luồng xử lý dữ liệu của bạn.

Dưới đây là stack RAG 100% Local mình thường dùng: LlamaIndex + Ollama + Arize Phoenix.

import phoenix as px
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, set_global_handler

# 1. Kích hoạt Phoenix
px.launch_app()

# 2. Kết nối LlamaIndex với Phoenix
set_global_handler("arize_phoenix")

# 3. Luồng RAG cơ bản
documents = SimpleDirectoryReader("./data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()

# Test thử một câu hỏi
response = query_engine.query("Cách cài đặt Arize Phoenix là gì?")
print(response)

Khi chạy xong, bạn hãy quay lại dashboard. Một dòng “Trace” mới sẽ xuất hiện. Click vào đó, bạn sẽ thấy sơ đồ cây hiển thị chính xác: Bước Embedding tốn 200ms, bước Retrieval lấy ra 3 đoạn văn bản, và LLM mất 2 giây để tổng hợp câu trả lời.

Dùng LLM làm “giám thị” chấm điểm tự động

Điểm ăn tiền nhất của Phoenix là khả năng Evaluation (đánh giá). Việc đọc thủ công hàng trăm log để kiểm tra độ chính xác rất mất thời gian. Thay vào đó, Phoenix cho phép bạn dùng một LLM khác (LLM Judge) để chấm điểm cho LLM chính.

Bạn có thể tận dụng Ollama để chạy Llama3 hoặc Mistral làm quan tòa, giúp tiết kiệm chi phí API OpenAI:

from phoenix.evals import HallucinationEvaluator, OpenAIModel
# Cấu hình model chấm điểm (trỏ về endpoint local của Ollama)
judge_model = OpenAIModel(base_url="http://localhost:11434/v1", api_key="ollama")

evaluator = HallucinationEvaluator(model=judge_model)
# Phoenix sẽ tự động dán nhãn "Pass" hoặc "Fail" cho các câu trả lời dựa trên context.

Tính năng này cực kỳ hữu ích khi bạn thay đổi Prompt. Bạn chỉ cần chạy bộ test, nhìn dashboard là biết ngay độ chính xác tăng hay giảm mà không cần đoán mò.

Kinh nghiệm thực tế để không “ăn hành”

Sau nhiều tháng triển khai RAG, mình rút ra vài lưu ý quan trọng để bạn tránh mất thời gian:

  1. Kiểm soát RAM: Phoenix lưu trace trực tiếp vào bộ nhớ đệm. Nếu chạy test hàng ngàn request liên tục, máy bạn có thể ngốn sạch 8GB-16GB RAM và treo cứng. Hãy nhớ clear dataset định kỳ.
  2. Xung đột thư viện: Thằng Phoenix cập nhật tính năng theo tuần. Nếu gặp lỗi lạ, hãy tạo venv mới và update đồng thời cả arize-phoenix lẫn llama-index lên bản mới nhất.
  3. Đừng tin 100% vào AI Judge: Dù LLM Judge rất tiện, nó vẫn có thể chấm sai (false positive). Bạn nên dành thời gian kiểm tra xác suất (spot check) khoảng 5-10% kết quả để đảm bảo độ tin cậy.
  4. Tối ưu hóa Latency: Hãy dùng Phoenix để soi xem bước nào đang làm hệ thống chậm. Đôi khi chỉ cần đổi model Embedding là latency giảm được từ 2 giây xuống còn 200ms.

Giám sát không chỉ là để sửa lỗi, mà là để hiểu rõ dữ liệu của bạn đang “nói chuyện” với model như thế nào. Với Arize Phoenix, bạn đang sở hữu một chiếc kính hiển vi mạnh mẽ để tối ưu hệ thống RAG mà vẫn giữ kín được bí mật dữ liệu.

Share: