Khóa học
Mặc dù các ứng dụng AI tạo sinh đã trở nên cực kỳ phổ biến, bài toán xây dựng ứng dụng hiệu quả, nhất quán và triển khai chúng vẫn còn nhiều thách thức.
Llama Stack, một dự án mã nguồn mở của Meta, nhằm giải quyết sự phức tạp này.
Llama Stack giới thiệu một khung chuẩn hóa và các API dạng mô-đun, mang lại trải nghiệm phát triển nhanh hơn và mượt mà hơn. Nó xác định và tiêu chuẩn hóa các khối xây dựng cần thiết để đưa ứng dụng AI tạo sinh ra thị trường.
Trong bài viết này, tôi sẽ hướng dẫn bạn bắt đầu với Llama Stack bằng các bước cụ thể. Nếu bạn là nhà phát triển đang chuẩn bị triển khai ứng dụng AI vào môi trường sản xuất, hãy thường xuyên tham khảo kho Llama Stack vì dự án liên tục được cập nhật.
Llama Stack là gì?
Llama Stack là một framework được xây dựng để tối ưu quy trình phát triển và triển khai các ứng dụng AI tạo sinh dựa trên các mô hình Llama của Meta. Nó đạt được điều này bằng cách cung cấp tập hợp API và thành phần tiêu chuẩn hóa cho các tác vụ như suy luận, an toàn, quản lý bộ nhớ và năng lực agent.
Các mục tiêu và lợi ích:
- Tiêu chuẩn hóa: Bộ API cung cấp giao diện và môi trường làm việc nhất quán để nhà phát triển sử dụng, đồng thời giúp nhanh chóng điều chỉnh ứng dụng khi có mô hình mới.
- Hiệp lực: Bằng cách trừu tượng hóa các chức năng phức tạp thành API, nó cho phép các công cụ và thành phần khác nhau phối hợp, tăng tính mô-đun và linh hoạt.
- Phát triển mượt mà: Llama Stack cung cấp các công cụ giúp đơn giản hóa vòng đời phát triển bằng cách định nghĩa sẵn các chức năng cốt lõi và tăng tốc triển khai.

Nguồn: Meta AI
Thành phần và API của Llama Stack
Llama Stack đi kèm nhiều API, mỗi API nhắm đến một nhóm tác vụ cụ thể khi xây dựng ứng dụng AI tạo sinh.
Inference API
Inference API xử lý sinh văn bản hoặc nhắc lệnh các biến thể Llama đa phương thức. Các đặc điểm chính:
- Hỗ trợ nhiều chiến lược giải mã như top-k sampling.
- Quản lý yêu cầu theo lô và phản hồi dạng luồng, hữu ích cho các ứng dụng quy mô lớn.
API định nghĩa nhiều cấu hình cho phép nhà phát triển kiểm soát hành vi mô hình (ví dụ, lượng tử hóa FP8 hoặc BF16) dựa trên yêu cầu ứng dụng.
Safety API
Safety API được xây dựng nhằm triển khai AI có trách nhiệm thông qua kiểm duyệt nội dung và lọc các đầu ra gây hại hoặc tiềm ẩn thiên lệch. Có thể cấu hình mức độ vi phạm (ví dụ: INFO, WARN, ERROR) và trả về thông điệp có thể hành động cho người dùng.
Memory API
Memory API trao khả năng lưu giữ và tham chiếu tương tác trước đó để tạo hội thoại mạch lạc hơn và nhận biết ngữ cảnh. Nhiều cấu hình bộ nhớ cho phép lựa chọn kiểu lưu trữ theo nhu cầu ứng dụng. Các đặc điểm chính:
- Cho phép lưu trữ bộ nhớ linh hoạt với nhiều cấu hình như vector, key-value, keyword và graph, về bản chất là các phương thức lưu kỷ niệm hội thoại.
- Cho phép chèn, truy vấn, cập nhật và xóa tài liệu trong kho bộ nhớ. Kết quả truy vấn được trả về dưới dạng đoạn (chunk) kèm điểm liên quan.
Agentic API
Agentic API cho phép LLM sử dụng công cụ và hàm bên ngoài, từ đó thực hiện các tác vụ như tìm kiếm web, chạy mã hoặc truy xuất bộ nhớ. API cho phép nhà phát triển cấu hình agent với công cụ và mục tiêu cụ thể. Hỗ trợ tương tác nhiều lượt, mỗi lượt gồm nhiều bước. Các đặc điểm chính:
- Tích hợp sẵn các công cụ như brave_search, wolfram_alpha, photogen và code_interpreter. Ta có thể dùng các công cụ này để xử lý yêu cầu hoặc chạy mã trong ngữ cảnh của mô hình.
- Kết hợp với Memory API để truy xuất thông tin liên quan, tăng cường ngữ cảnh dài hạn.
- Mô hình có thể thực hiện nhiệm vụ qua nhiều bước như suy luận, gọi công cụ, truy xuất bộ nhớ và kiểm tra an toàn.
Các API khác
Các API khác mà Llama Stack cung cấp:
- Evaluation API: Dùng để đánh giá hiệu năng mô hình.
- Post-training API: Hỗ trợ tinh chỉnh mô hình cho tác vụ hoặc dữ liệu cụ thể, với các phương pháp như LORA, DORA, v.v.
- Synthetic data generation API: Hỗ trợ tạo tập dữ liệu tổng hợp để huấn luyện mô hình.
- Reward scoring API: Hữu ích trong các kịch bản học tăng cường để gán điểm thưởng cho hành động hoặc quyết định của mô hình.
Cách cài đặt và thiết lập Llama Stack
Chúng ta sẽ triển khai một dự án mẫu trên Llama Stack để làm quen với ý tưởng chung và năng lực của framework này.
Trước khi bắt đầu, lưu ý rằng:
- Llama Stack phát triển rất nhanh và có thể gặp lỗi khi bạn triển khai client, vì vậy quan trọng là tham khảo tài liệu trong kho mã và báo cáo mọi vấn đề có thể. Tại thời điểm viết bài, chẳng hạn, tôi không thể chạy container Llama Stack trên Windows do một số vấn đề đặc thù hệ điều hành, đội ngũ phát triển sẽ tiếp tục xử lý.
- Bạn không thể dùng Llama Stack trên Google Colab vì phiên bản miễn phí của nền tảng không hỗ trợ dựng container Docker.
Hãy bắt đầu với việc thiết lập giao diện dòng lệnh (CLI) của Llama.
1. Llama CLI
Llama Stack cung cấp giao diện dòng lệnh (CLI) để quản lý bản phân phối, cài đặt mô hình và cấu hình môi trường. Các bước cài đặt như sau:
a. Tạo và kích hoạt môi trường ảo:
conda create -n llama_stack python=3.10
conda activate llama_stack
b. Clone kho Llama Stack:
git clone <https://github.com/meta-llama/llama-stack.git>
cd llama-stack
c. Cài đặt các phụ thuộc cần thiết:
pip install llama-stack
pip install -r requirements.txt
2. Sử dụng Docker containers
Docker giúp đơn giản hóa việc triển khai máy chủ Llama Stack và các nhà cung cấp Agent API. Ảnh Docker dựng sẵn có sẵn để thiết lập dễ dàng:
docker pull llamastack/llamastack-local-gpu
llama stack build
llama stack configure llamastack-local-gpu
Các lệnh này tải ảnh Docker, build và cấu hình stack.
Cách xây dựng ứng dụng với các API của Llama Stack
Hãy xây dựng một chatbot cơ bản bằng các API của Llama Stack. Các bước thực hiện:
1. Khởi động máy chủ Llama Stack
Chúng ta sẽ chạy máy chủ trên cổng 5000. Hãy đảm bảo máy chủ đang chạy trước khi làm việc với API:
llama stack run local-gpu --port 5000
2. Sử dụng Inference API
Sau khi cài đặt Llama Stack, bạn có thể dùng mã client để tương tác với các API. Dùng Inference API để sinh phản hồi dựa trên đầu vào người dùng:
from llama_stack_client import LlamaStackClient
client = LlamaStackClient(base_url="<http://localhost:5000>")
user_input = "Hello! How are you?"
response = client.inference.chat_completion(
model="Llama3.1-8B-Instruct",
messages=[{"role": "user", "content": user_input}],
stream=False
)
print("Bot:", response.text)
Lưu ý: Thay "Llama3.1-8B-Instruct" bằng tên mô hình thực tế có trong thiết lập của bạn.
3. Tích hợp Safety API
Triển khai Safety API để kiểm duyệt phản hồi và đảm bảo chúng phù hợp:
safety_response = client.safety.run_shield(
messages=[{"role": "assistant", "content": response.text}],
shield_type="llama_guard",
params={}
)
if safety_response.violation:
print("Unsafe content detected.")
else:
print("Bot:", response.text)
4. Thêm bộ nhớ với Memory API
Tạo khả năng nhận biết ngữ cảnh cho chatbot bằng cách lưu và truy xuất lịch sử hội thoại:
### building a memory bank that can be used to store and retrieve context.
bank = client.memory.create_memory_bank(
name="chat_memory",
config=VectorMemoryBankConfig(
type="vector",
embedding_model="all-MiniLM-L6-v2",
chunk_size_in_tokens=512,
overlap_size_in_tokens=64,
)
)
5. Xâu chuỗi các thành phần
Chúng ta có thể kết hợp thêm các API để xây chatbot vững chắc hơn:
- Inference API: Sinh phản hồi.
- Safety API: Lọc nội dung không phù hợp.
- Memory API: Duy trì ngữ cảnh hội thoại.
Ví dụ hoàn chỉnh
Dưới đây là mã hoàn chỉnh sau khi thực hiện tất cả các bước:
import uuid
client = LlamaStackClient(base_url="<http://localhost:5000>")
### create a memory bank at the start
bank = client.memory.create_memory_bank(
name="chat_memory",
config=VectorMemoryBankConfig(
type="vector",
embedding_model="all-MiniLM-L6-v2",
chunk_size_in_tokens=512,
overlap_size_in_tokens=64,
)
)
def get_bot_response(user_input):
### retrieving conversation history
query_response = client.memory.query_documents(
bank_id=bank.bank_id,
query=[user_input],
params={"max_chunks": 10}
)
history = [chunk.content for chunk in query_response.chunks]
### preparing messages with history
messages = [{"role": "user", "content": user_input}]
if history:
messages.insert(0, {"role": "system", "content": "\\n".join(history)})
### generate response
response = client.inference.chat_completion(
model="llama-2-7b-chat",
messages=messages,
stream=False
)
bot_response = response.text
### safety check
safety_response = client.safety.run_shield(
messages=[{"role": "assistant", "content": bot_response}],
shield_type="llama_guard",
params={}
)
if safety_response.violation:
return "I'm sorry, but I can't assist with that request."
### memory storing
documents = [
MemoryBankDocument(
document_id=str(uuid.uuid4()),
content=user_input,
mime_type="text/plain"
),
MemoryBankDocument(
document_id=str(uuid.uuid4()),
content=bot_response,
mime_type="text/plain"
)
]
client.memory.insert_documents(
bank_id=bank.bank_id,
documents=documents
)
return bot_response
### putting all together
while True:
user_input = input("You: ")
if user_input.lower() == "bye":
break
bot_response = get_bot_response(user_input)
print("Bot:", bot_response)
Ví dụ và đóng góp cho Llama Stack
Để xem một số ví dụ và bắt đầu nhanh việc triển khai ứng dụng dùng Llama Stack, Meta đã cung cấp kho llama-stack-apps nơi bạn có thể tham khảo một số ứng dụng mẫu. Hãy kiểm tra và làm quen với framework.
Là một dự án mã nguồn mở, Llama Stack sống nhờ vào sự đóng góp của cộng đồng. Các API đang phát triển nhanh chóng và dự án sẵn sàng đón nhận phản hồi, sự tham gia của nhà phát triển để định hình tương lai nền tảng. Nếu bạn thử Llama Stack, việc chia sẻ dự án của mình như một ví dụ hoặc đóng góp tài liệu sẽ giúp ích cho cộng đồng.
Kết luận
Xuyên suốt bài viết, chúng ta đã tìm hiểu cách bắt đầu với Llama Stack qua các bước hướng dẫn cụ thể.
Khi tiến tới triển khai ứng dụng AI, hãy chú ý theo dõi kho Llama Stack để cập nhật những cải tiến mới nhất.
Để tìm hiểu thêm về hệ sinh thái Llama, hãy xem các tài nguyên sau:
Học viên cao học ngành Trí tuệ nhân tạo và chuyên viên biên tập kỹ thuật AI. Tôi chia sẻ những góc nhìn về công nghệ AI mới nhất, giúp phổ biến nghiên cứu ML và đơn giản hóa các chủ đề AI phức tạp để bạn luôn đi đầu.
