Điều phối AI: LangChain so với Mã nguồn gốc (Native Code)
Tốc độ là yếu tố then chốt khi bạn xây dựng các bản mẫu (prototype) AI. Các nhà phát triển muốn kết nối các câu lệnh (prompts), kho lưu trữ vector (vector stores) và các mô hình một cách nhanh chóng. Nhu cầu này thúc đẩy việc sử dụng các framework như LangChain.
Nhưng quan điểm của tôi thay đổi khi chuyển mã nguồn từ bản mẫu sang môi trường thực tế (production). Trong môi trường production, bạn phải cân nhắc mọi sự phụ thuộc (dependency) so với nợ kỹ thuật (technical debt). Bạn cần xem xét các vấn đề về gỡ lỗi (debugging), bảo trì và các thay đổi gây lỗi hệ thống (breaking changes).
Tôi đã so sánh hai cách để xây dựng các đường ống dữ liệu GenAI (GenAI data pipelines): Python thuần túy (Pure Native Python) và Ngôn ngữ Biểu thức LangChain (LCEL).
Dưới đây là các sự đánh đổi:
Cách tiếp cận Native Python
- Sử dụng client OpenAI chính thức và nhẹ.
- Điều này giúp giảm thiểu bề mặt lỗ hổng bảo mật và ngăn ngừa các vấn đề về phụ thuộc.
- Mã nguồn tuân theo luồng thực thi tiêu chuẩn.
- Các stack traces chỉ chính xác dòng nơi xảy ra lỗi.
- Bạn có thể sử dụng các điểm dừng (breakpoints) và ghi nhật ký (logging) tiêu chuẩn một cách dễ dàng.
- Bạn dựa trực tiếp vào lược đồ API (API schema) thô từ nhà cung cấp.
Cách tiếp cận LangChain
- Nó đưa vào nhiều gói (packages) lồng nhau.
- Các triển khai doanh nghiệp lớn phải đối mặt với nhiều chi phí vận hành hơn để duy trì các phụ thuộc này.
- Nó sử dụng một toán tử pipe tùy chỉnh để khai báo các đường ống (pipelines).
- Điều này khiến việc gỡ lỗi trở nên khó khăn hơn vì các stack traces đi sâu vào mã nguồn của framework.
- Nó giúp bạn tách biệt khỏi các thay đổi API đặc thù của từng mô hình.
- Bạn có thể thay đổi nhà cung cấp mô hình, chẳng hạn như từ OpenAI sang Anthropic, với những thay đổi tối thiểu.
Cách lựa chọn:
Chọn Native nếu đường ống của bạn là một giao dịch đơn giản, một bước. Nếu bạn thực hiện phân tích cú pháp văn bản sang JSON trực tiếp, hãy giữ cho hệ thống của bạn tinh gọn và minh bạch với mã bao bọc (wrapper code) sạch sẽ.
Chọn LangChain khi các yêu cầu của bạn tăng lên. Nếu bạn cần quản lý prompt phức tạp, bộ nhớ dài hạn, hoặc phải thay đổi nhanh chóng nhiều nhà cung cấp mô hình, thì framework này hoàn toàn xứng đáng với chi phí bỏ ra.
Mục tiêu của chúng ta không chỉ là viết ít mã hơn. Chúng ta phải viết các hệ thống có thể bảo trì và có khả năng mở rộng.
Optional learning community: https://t.me/GyaanSetuAi