Làm chủ Phidata: Xây dựng AI Assistant có ‘trí nhớ’ và khả năng thực thi tác vụ

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

Vấn đề: Khi AI của bạn bị “não cá vàng”

Tuần trước, mình thức trắng đêm xử lý một ca khó trên production. Con chatbot hỗ trợ khách hàng cứ nói trước quên sau, chỉ sau 3 câu hội thoại là nó quên sạch yêu cầu ban đầu của user. Tệ hơn, nó chẳng thể thực hiện hành động nào ngoài việc trả lời văn bản suông. Nếu bạn từng thấy LangChain quá cồng kềnh với hàng tá boilerplate code, Phidata chính là “cứu cánh” gọn nhẹ mà bạn cần.

Phidata đóng gói LLM (OpenAI, Claude, Llama…) cùng với Memory (trí nhớ) và Tools (khả năng hành động) vào một thực thể duy nhất. Thay vì phải tự quản lý mảng messages thủ công, bạn chỉ cần tập trung vào logic nghiệp vụ.

Thử nghiệm: Chạy AI Assistant đầu tiên trong 2 phút

Lý thuyết ít thôi, hãy xem code thực tế chạy nhanh thế nào. Bạn chỉ cần cài đặt thư viện và chuẩn bị OpenAI API Key để bắt đầu.

pip install -U phidata openai duckduckgo-search

Tạo file assistant.py với nội dung bên dưới. Con bot này có khả năng search web để cập nhật dữ liệu thời gian thực ngay lập tức:

from phi.assistant import Assistant
from phi.tools.duckduckgo import DuckDuckGo
import os

os.environ["OPENAI_API_KEY"] = "sk-xxxx..."

assistant = Assistant(
    tools=[DuckDuckGo()],
    show_tool_calls=True
)

assistant.print_response("Giá Bitcoin hôm nay bao nhiêu?", markdown=True)

Điểm hay ở đây: Bạn không cần code logic tìm kiếm. Khi bạn hỏi về giá Bitcoin, AI tự hiểu nó thiếu thông tin và kích hoạt tool DuckDuckGo. Đây chính là sức mạnh của Function Calling.

Tại sao Phidata đáng dùng hơn các framework khác?

Nhiều framework hiện nay làm phức tạp hóa vấn đề bằng quá nhiều lớp trừu tượng (abstraction). Phidata chọn hướng đi thực dụng hơn, giúp giảm khoảng 50% thời gian viết code cấu trúc:

  • Function Calling tự động: Bạn chỉ cần quăng hàm Python vào tools, Phidata tự lo phần JSON schema cho LLM.
  • Quản lý Session tinh gọn: Trí nhớ của bot được lưu trực tiếp vào database thay vì chỉ lưu tạm trong RAM.
  • Output chuẩn chỉnh: Hỗ trợ streaming và định dạng Markdown cực đẹp mà không cần cấu hình thêm.

Cách hiện thực hóa “Trí nhớ dài hạn” (Memory)

Thông thường, AI sẽ quên sạch khi bạn tắt script. Để bot nhận ra khách quen, chúng ta cần dùng Storage. SQLite là lựa chọn tuyệt vời để bắt đầu nhanh trên máy local.

from phi.assistant import Assistant
from phi.storage.assistant.sqlite import SqlAssistantStorage

assistant = Assistant(
    storage=SqlAssistantStorage(
        table_name="ai_memory",
        db_file="agents.db",
    ),
    read_chat_history=True,
    add_chat_history_to_messages=True,
    session_id="user_unique_001" 
)

assistant.print_response("Chào, mình là Nam, dev tại Hà Nội.")
assistant.print_response("Mình vừa nói mình ở đâu nhỉ?")

Phidata sẽ tạo file agents.db để lưu vết. Dù bạn có khởi động lại app, chỉ cần đúng session_id, con bot vẫn sẽ nhớ bạn là ai. Đây là nền tảng để xây dựng các ứng dụng cá nhân hóa sâu.

Biến AI thành “nhân viên” thực thụ với Function Calling

Đây là tính năng mình tâm đắc nhất. Thay vì chỉ chat, AI có thể tra cứu đơn hàng hoặc gửi email cho khách. Bạn chỉ cần viết một hàm Python thuần túy.

import json

def check_shipping_status(order_id: str):
    """Dùng hàm này để kiểm tra trạng thái vận chuyển đơn hàng."""
    # Giả lập truy vấn database
    db = {"DH123": "Đang giao hàng", "DH456": "Đã nhận hàng"}
    return json.dumps({"status": db.get(order_id, "Không tìm thấy")})

assistant = Assistant(tools=[check_shipping_status], show_tool_calls=True)
assistant.print_response("Đơn DH123 của tôi tới đâu rồi?")

Mẹo nhỏ: Phần docstring (mô tả hàm) cực kỳ quan trọng. AI dựa vào đó để quyết định khi nào nên gọi hàm. Hãy viết mô tả thật rõ ràng để tránh việc bot gọi nhầm tool.

Quy trình xử lý nâng cao: RAG kết hợp Memory

Trong các hệ thống thực tế mình từng triển khai, Assistant thường vận hành theo quy trình 5 bước:

  1. Tiếp nhận câu hỏi và kiểm tra Memory để nắm ngữ cảnh.
  2. Truy xuất Knowledge Base (file PDF, Docs) để tìm dữ liệu liên quan.
  3. Kiểm tra xem có cần dùng Tools (API bên thứ 3) hay không.
  4. LLM tổng hợp thông tin từ tất cả các nguồn.
  5. Trả về phản hồi cuối cùng cho người dùng.

Kinh nghiệm thực chiến khi triển khai

Sau nhiều lần “vấp ngã” khi đưa AI lên production, mình rút ra 3 lưu ý sống còn:

  • Bảo mật API Key: Tuyệt đối không hardcode key. Hãy dùng file .env để tránh mất tiền oan nếu lỡ tay push code lên GitHub.
  • Chống lặp vô hạn: LLM thỉnh thoảng bị lỗi logic và gọi tool liên tục. Hãy set max_calls=5 để giới hạn số lần gọi tool mỗi lượt hội thoại.
  • Bật Debug: Khi phát triển, hãy dùng debug_mode=True. Bạn sẽ thấy chi tiết từng payload gửi đi, giúp fix lỗi nhanh hơn gấp nhiều lần.

Phidata thực sự làm việc xây dựng AI Agent trở nên “dễ thở” và thực tế hơn. Nếu bạn đang tìm kiếm một framework cân bằng giữa tính năng và sự đơn giản, hãy thử bắt đầu với Phidata ngay hôm nay.

Share: