Việc làm

01/10 · Hồ Chí Minh · Hybrid

Staff AI Engineer - Report to CTO

Perform.AI · AI / Machine Learning Engineer

Xem mô tả & ứng tuyển trên ITviecMô tả công việc, lương và ứng tuyển nằm ở ITviec.

10 câu hỏi có thể gặp khi phỏng vấn

Chọn theo kỹ năng và cấp của tin (AI / Machine Learning, Python). Gợi ý trả lời do Drama Công Ty biên soạn để bạn ôn nhanh, không phải đề của công ty.

  1. 01Chi phí và độ trễ của ứng dụng LLM quá cao. Bạn tối ưu thế nào?AI / Machine Learning · Senior

    Gợi ý trả lời

    Đo trước: chi phí và độ trễ đến từ số token vào/ra, kích thước mô hình, số lần gọi trong một yêu cầu.

    • Chọn mô hình: định tuyến, việc dễ cho mô hình nhỏ, việc khó mới gọi mô hình lớn.
    • Giảm token: prompt gọn, truy xuất ít đoạn nhưng chính xác hơn (rerank), giới hạn độ dài đầu ra.
    • Prompt caching cho phần prompt cố định lặp lại; cache câu trả lời cho câu hỏi trùng.
    • Streaming để người dùng thấy chữ sớm, cải thiện độ trễ cảm nhận.
    • Gộp việc không gấp thành batch.
    • Tự host: quantization, batching động, engine suy luận tối ưu.

    Người phỏng vấn muốn nghe: mọi tối ưu đều kiểm tra lại bằng bộ eval để chắc chất lượng không giảm.

    Ôn thêm câu hỏi AI / Machine Learning →
  2. 02Chatbot RAG trả lời sai dù tài liệu có thông tin đúng. Bạn debug thế nào?AI / Machine Learning · Senior

    Gợi ý trả lời

    Tách lỗi theo từng khâu của pipeline, kiểm tra từ dưới lên.

    1. Dữ liệu: tài liệu đã được nạp chưa, trích xuất từ PDF/bảng có bị vỡ không, có phiên bản cũ mâu thuẫn không.
    2. Chunking: thông tin cần thiết có bị cắt đôi giữa hai chunk không.
    3. Truy xuất: log các chunk lấy về cho câu hỏi đó; đúng chunk có nằm trong top-k không. Thử hybrid search, rerank, viết lại câu hỏi.
    4. Sinh: chunk đúng đã có trong prompt mà vẫn sai thì xem prompt, thứ tự đặt ngữ cảnh, quá nhiều ngữ cảnh nhiễu.
    5. Thêm ca này vào bộ eval để tránh tái diễn.

    Người phỏng vấn muốn nghe: có tracing để xem từng bước, không đoán mò.

    Ôn thêm câu hỏi AI / Machine Learning →
  3. 03Xây dựng AI agent có gọi tool (API, database) cần lưu ý gì về độ tin cậy và an toàn?AI / Machine Learning · Senior

    Gợi ý trả lời

    Agent cho LLM tự quyết định gọi tool theo nhiều bước, nên lỗi và rủi ro tăng theo số bước; cần giới hạn quyền và kiểm soát chặt.

    • Tool rõ ràng: mô tả và schema tham số chặt, kiểm tra đầu vào bằng code trước khi thực thi.
    • Quyền tối thiểu: tool chỉ đọc khi có thể; thao tác ghi, xoá, chuyển tiền cần người xác nhận.
    • Prompt injection: nội dung lấy từ web, email, tài liệu là dữ liệu không tin cậy; không để nó điều khiển tool nhạy cảm.
    • Giới hạn số bước, timeout, ngân sách token; xử lý lỗi tool và cho phép thử lại có kiểm soát.
    • Log và tracing toàn bộ chuỗi hành động để audit.
    • Đánh giá theo tỷ lệ hoàn thành tác vụ trên bộ kịch bản.

    Người phỏng vấn muốn nghe: workflow cố định thường đủ; chỉ dùng agent tự do khi thật cần.

    Ôn thêm câu hỏi AI / Machine Learning →
  4. 04Một API viết bằng Python (Django hoặc FastAPI) phản hồi chậm. Bạn tối ưu theo thứ tự nào?Python · Senior

    Gợi ý trả lời

    Đo trước, tối ưu chỗ tốn nhất trước. Phần lớn trường hợp nút thắt là DB và gọi mạng, không phải tốc độ của Python.

    1. Đo: APM hoặc tracing (OpenTelemetry) để biết thời gian nằm ở DB, API ngoài hay code. Profile bằng py-spy (gắn vào process đang chạy) hoặc cProfile.
    2. DB: xử lý N+1, thêm index phù hợp, chỉ lấy cột cần (only, values), phân trang.
    3. Cache: Redis cho dữ liệu đọc nhiều, ít đổi; nhớ chiến lược invalidate.
    4. Việc nặng hoặc không cần trả ngay (gửi email, xuất file): đẩy sang Celery hoặc queue.
    5. Gọi nhiều API ngoài: chạy song song, đặt timeout.
    6. Cuối cùng mới tới tối ưu thuật toán, hoặc đưa đoạn nặng CPU sang thư viện C hay service khác.

    Hay sai: viết lại sang async hoặc đổi ngôn ngữ trước khi biết thời gian thực sự bị tiêu ở đâu.

    Ôn thêm câu hỏi Python →
  5. 05Bạn tổ chức một codebase Python lớn nhiều người cùng làm như thế nào: type hints, quản lý dependency, chất lượng code?Python · Senior

    Gợi ý trả lời

    Python linh hoạt nên dự án lớn dễ rối; cần công cụ để bắt lỗi trước khi chạy.

    • Type hints + type checker (mypy hoặc pyright) chạy trong CI. Dùng Protocol cho interface, TypedDict hoặc dataclass thay cho dict tự do.
    • Validate dữ liệu ở biên (request, config, message) bằng Pydantic; bên trong tin vào kiểu đã kiểm.
    • Dependency: môi trường ảo riêng, file lock để build tái lập được (uv, Poetry hoặc pip-tools). Tách dependency dev và production.
    • Lint/format tự động: ruff thay cho nhiều công cụ cũ; chạy qua pre-commit và CI.
    • Cấu trúc: chia theo domain, tách logic nghiệp vụ khỏi framework để test không cần DB hay HTTP.
    • Test bằng pytest với fixture; test tích hợp cho các luồng chính.

    Người phỏng vấn muốn nghe: bạn hiểu type hints không kiểm tra lúc runtime, nên vẫn cần validate dữ liệu đầu vào.

    Ôn thêm câu hỏi Python →
  6. 06RAG là gì? Mô tả các bước xây dựng một hệ thống hỏi đáp trên tài liệu nội bộ.AI / Machine Learning

    Gợi ý trả lời

    RAG (Retrieval-Augmented Generation) tìm các đoạn tài liệu liên quan rồi đưa vào prompt để LLM trả lời dựa trên đó, giúp dùng dữ liệu riêng, cập nhật mà không cần train lại.

    Các bước:

    1. Nạp và làm sạch tài liệu (PDF, wiki), giữ metadata và quyền truy cập.
    2. Chunking theo cấu trúc (tiêu đề, đoạn), có chồng lấp hợp lý.
    3. Embedding và lưu vào vector DB.
    4. Truy xuất: kết hợp tìm vector và từ khoá (hybrid), rồi rerank.
    5. Sinh câu trả lời với prompt yêu cầu bám nguồn và trích dẫn, trả lời "không biết" khi thiếu thông tin.

    Hay sai: bỏ qua phân quyền, để người dùng nhận được nội dung từ tài liệu họ không được xem.

    Ôn thêm câu hỏi AI / Machine Learning →
  7. 07Khi nào bạn chọn prompt engineering, RAG hay fine-tuning?AI / Machine Learning

    Gợi ý trả lời

    Bắt đầu từ cách rẻ và nhanh nhất, chỉ nâng cấp khi đo được là chưa đủ.

    • Prompting: thử đầu tiên; chỉ dẫn rõ, ví dụ mẫu (few-shot), định dạng đầu ra có cấu trúc.
    • RAG: khi mô hình thiếu kiến thức (tài liệu nội bộ, dữ liệu thay đổi thường xuyên), cần trích dẫn nguồn.
    • Fine-tuning: khi cần đổi hành vi ổn định (văn phong, định dạng, tác vụ hẹp lặp lại), hoặc muốn dùng mô hình nhỏ rẻ hơn thay mô hình lớn. Kỹ thuật như LoRA giảm chi phí.

    Fine-tuning không phải cách tốt để nhồi kiến thức mới hay thay đổi liên tục; RAG hợp hơn.

    Người phỏng vấn muốn nghe: có bộ đánh giá trước để so sánh các phương án bằng số liệu.

    Ôn thêm câu hỏi AI / Machine Learning →
  8. 08Hallucination của LLM là gì? Bạn giảm thiểu nó trong sản phẩm thế nào?AI / Machine Learning

    Gợi ý trả lời

    Hallucination là khi mô hình sinh ra nội dung nghe hợp lý nhưng sai hoặc không có căn cứ. Không loại bỏ hoàn toàn được, chỉ giảm và kiểm soát.

    • Cung cấp ngữ cảnh đúng qua RAG, yêu cầu chỉ trả lời dựa trên nguồn và trích dẫn.
    • Cho phép và khuyến khích trả lời "không đủ thông tin".
    • Dùng đầu ra có cấu trúc (JSON schema) và kiểm tra hợp lệ bằng code.
    • Với số liệu, tra cứu hoặc tính toán qua tool/API thay vì để mô hình tự nhớ.
    • Kiểm tra sau sinh: đối chiếu câu trả lời với nguồn.
    • Thiết kế UX hiển thị nguồn; tác vụ rủi ro cao có người duyệt.

    Người phỏng vấn muốn nghe: đo tỷ lệ hallucination bằng bộ đánh giá, không chỉ dựa vào cảm giác.

    Ôn thêm câu hỏi AI / Machine Learning →
  9. 09Decorator hoạt động thế nào? Hãy viết một decorator đo thời gian chạy của hàm.Python

    Gợi ý trả lời

    Decorator là hàm nhận một hàm và trả về hàm mới bọc quanh nó. @timer chỉ là cú pháp ngắn của func = timer(func).

    import functools, time
    
    def timer(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            start = time.perf_counter()
            try:
                return func(*args, **kwargs)
            finally:
                print(func.__name__, time.perf_counter() - start)
        return wrapper
    
    • functools.wraps giữ lại __name__, docstring của hàm gốc, quan trọng cho log và debug.
    • Decorator có tham số (ví dụ @retry(times=3)) cần thêm một lớp hàm bên ngoài.
    • Ví dụ thực tế: @app.get của FastAPI, @login_required của Django, @functools.lru_cache.

    Hay sai: decorator viết kiểu đồng bộ bọc hàm async def. Kết quả là đo thời gian tạo coroutine chứ không phải thời gian chạy.

    Ôn thêm câu hỏi Python →
  10. 10Bạn có quen làm việc remote hoặc hybrid không? Làm sao để làm việc hiệu quả khi không ở văn phòng?Câu hỏi hành vi & văn hoá

    Gợi ý trả lời

    Người phỏng vấn muốn biết bạn tự quản lý được và giao tiếp chủ động khi không ngồi cạnh team.

    • Cập nhật tiến độ thường xuyên trên công cụ chung (ticket, kênh chat của team), không để người khác phải hỏi.
    • Viết rõ ràng: câu hỏi có ngữ cảnh, ghi lại kết quả thảo luận.
    • Có khung giờ làm việc ổn định, phản hồi trong giờ làm, báo trước khi vắng.
    • Dùng ngày lên văn phòng (nếu hybrid) cho thảo luận, brainstorm, gặp gỡ team.

    Câu mẫu: "Team cũ của em làm hybrid hai ngày ở văn phòng. Những ngày remote em cập nhật trạng thái task mỗi sáng và cuối ngày, vướng gì thì gọi nhanh 10 phút thay vì nhắn qua lại."

    Ôn thêm câu hỏi Câu hỏi hành vi & văn hoá →

Bạn đã phỏng vấn ở Perform.AI?

Kể lại các vòng và câu hỏi đã gặp (ẩn danh) để người sau ôn đúng trọng tâm.

Chia sẻ kinh nghiệm phỏng vấn