🔬 Nghiên cứu 🌱 Mới trồng 17 tháng 8, 2026 Trồng 17 thg 8

cactus-compute/needle

📦 cactus-compute/needle ⭐ 5.7k Mở trên GitHub ↗

14MB foundation model for tiny devices; phones, wearables, smart home, and robots.

Kết luận: partial · Công nghệ: on-device-ai · edge-ml · tiny-llm · embedded-ai · local-inference

needle là dự án mô hình nền tảng siêu nhỏ (~14MB) cho on-device AI trên điện thoại, wearable, smart home và robot; phù hợp khi cần suy luận cục bộ với ràng buộc bộ nhớ/điện năng. Đây không phải giải pháp LLM đa dụng hoàn chỉnh cho backend lớn, nhưng đáng chú ý như một hướng AI nhúng/edge cho trợ lý cục bộ, tự động hóa thiết bị và UX offline-first.

📖 Giới thiệu chi tiết

🧩 Nó là gì?

cactus-compute/needle là dự án Python package cho Needle 2, một mô hình AI rất nhỏ: chỉ khoảng 14MB, chạy được trên thiết bị nhỏ như điện thoại, wearable, smart home và robot.

Nó được thiết kế để giúp thiết bị tự hiểu câu lệnh, chọn công cụ cần gọi, điền tham số đúng dạng và trả kết quả có cấu trúc — ngay trên máy, không cần gửi dữ liệu lên server khi suy luận.

🎯 Giải quyết vấn đề gì? Dành cho ai?

Nhiều ứng dụng muốn có AI nhưng lại bị giới hạn bởi:

  • Thiết bị yếu, ít RAM, ít pin.
  • Cần chạy offline hoặc hạn chế gửi dữ liệu lên cloud.
  • Muốn AI gọi đúng hàm, đúng API, đúng hành động thay vì chỉ trả lời văn bản chung chung.
  • Cần trích xuất dữ liệu có cấu trúc từ văn bản, ví dụ hóa đơn, form, lệnh điều khiển nhà thông minh.

needle dành cho:

  • Lập trình viên làm on-device AI: AI chạy trực tiếp trên thiết bị.
  • Ứng dụng mobile, robot, IoT, smart home, wearable.
  • Người cần một mô hình nhỏ để tool calling: AI chọn và gọi công cụ/hàm phù hợp.
  • Người cần structured extraction: lấy dữ liệu từ text và trả về JSON/object đúng mẫu.
  • Nhóm muốn fine-tune mô hình nhỏ cho bộ công cụ riêng.

Nói đơn giản: nếu bạn muốn một “bộ não nhỏ” giúp thiết bị hiểu câu lệnh và hành động đúng, needle là một lựa chọn đáng chú ý.

⚙️ Hoạt động ra sao?

  • Bạn mô tả các “công cụ” cho needle, ví dụ hàm lấy thời tiết, bật đèn, đặt lịch, đọc cảm biến.
  • Người dùng nhập câu lệnh tự nhiên, ví dụ: "dim the kitchen to 10".
  • Needle 2 đọc câu lệnh và quyết định nên gọi công cụ nào.
  • Nó tự điền tham số cho công cụ, ví dụ room="kitchen"brightness=10.
  • Kết quả trả về ở dạng có cấu trúc, thường là JSON hoặc object Python, thay vì chỉ là một đoạn text khó xử lý.
  • Mỗi phản hồi có confidence score, tức điểm tự tin; bạn có thể đặt ngưỡng để chỉ cho thiết bị hành động khi mô hình đủ chắc chắn.
  • Với nhiều công cụ, Needle có cơ chế tool retrieval: nó chọn ra một nhóm nhỏ công cụ phù hợp nhất cho lượt hiện tại, thay vì xem toàn bộ danh sách.
  • Bộ nhớ được giới hạn bằng cửa sổ 256 token, giúp RAM ổn định khoảng 28MB cho một phiên chạy.
  • Mô hình được đóng gói thành một engine/binary nhỏ, không phải quản lý nhiều file model riêng lẻ.
  • Inference, tức quá trình chạy mô hình để lấy kết quả, không cần network sau khi engine đã được tải và cache.

Về bên trong, Needle 2 là mô hình 45M tham số, dùng kiến trúc Simple Attention Network và được nén bằng Cactus Quants. Bạn không cần hiểu sâu phần này để dùng; chỉ cần nhớ rằng mục tiêu của nó là chạy nhỏ, nhanh, tiết kiệm RAM nhưng vẫn làm tốt việc gọi công cụ và trích xuất dữ liệu.

🆚 Khi nào nên dùng / không nên

Nên dùng needle khi:

  • Bạn cần AI chạy trực tiếp trên thiết bị nhỏ.
  • Bạn muốn xử lý câu lệnh thành hành động cụ thể, ví dụ gọi hàm hoặc API.
  • Bạn cần kết quả dạng JSON/object rõ ràng để code xử lý tiếp.
  • Bạn cần trải nghiệm offline-first hoặc giảm phụ thuộc vào server.
  • Bạn có nhiều công cụ và muốn mô hình tự chọn công cụ phù hợp.
  • Bạn muốn fine-tune nhẹ bằng LoRA cho tập công cụ riêng.

Không nên dùng needle khi:

  • Bạn cần một chatbot đa năng, nói chuyện dài, viết văn, phân tích phức tạp như các LLM lớn.
  • Bạn đang chạy backend mạnh và cần chất lượng cao nhất thay vì kích thước nhỏ nhất.
  • Bạn cần xử lý ngữ cảnh rất dài; Needle dùng cửa sổ 256 token để giữ bộ nhớ thấp.
  • Bạn muốn một mô hình “biết mọi thứ” thay vì một mô hình nhỏ tập trung vào tool calling và structured extraction.

So với các mô hình lớn hơn như LLM chạy trên cloud, needle nhỏ hơn rất nhiều và phù hợp cho edge/on-device. Đổi lại, nó không phải lựa chọn tốt nhất cho các tác vụ ngôn ngữ tổng quát, dài và phức tạp.

🚀 Bắt đầu nhanh

Cài đặt package:

pip install cactus-needle

Ví dụ tối thiểu: mô tả một công cụ bằng Python function, rồi để Needle tự chọn và gọi công cụ đó.

import needle

@needle.tool
def get_weather(city: str):
    "Get the current weather for a city."
    return {"city": city, "temp_c": 27, "sky": "clear"}

agent = needle.Needle(tools=[get_weather])

response = agent.run("what's it like in Lagos right now?")
print(response["results"])
# [{'city': 'Lagos', 'temp_c': 27, 'sky': 'clear'}]

Ví dụ trích xuất dữ liệu có cấu trúc từ văn bản:

import needle
from pydantic import BaseModel

class Invoice(BaseModel):
    vendor: str
    total: float
    due_date: str

invoice = needle.extract(
    "Invoice from Acme Corp, $1,200.00, due 2026-09-01",
    Invoice,
)

print(invoice.vendor, invoice.total)
# Acme Corp 1200.0

Chạy playground để thử trong trình duyệt:

needle playground
# base model, http://127.0.0.1:7860

Dùng model đã fine-tune:

import needle

agent = needle.Needle(weights="my_needle.cact", tools=[...])
agent.run("...")

✅ Điểm mạnh & ⚠️ Hạn chế

Điểm mạnh:

  • Rất nhỏ: toàn bộ model khoảng 14MB.
  • Chạy tiết kiệm RAM: một phiên đầy đủ khoảng 28MB RAM.
  • Phù hợp cho thiết bị nhỏ như điện thoại, wearable, smart home và robot.
  • Tốt cho tool calling: nhận câu lệnh tự nhiên, chọn hàm, điền tham số.
  • Trả dữ liệu có cấu trúc, dễ đưa vào code xử lý tiếp.
  • Có confidence score để giúp quyết định khi nào nên tự động hành động, khi nào nên hỏi lại hoặc chuyển lên hệ thống khác.
  • Không cần network khi inference, phù hợp cho ứng dụng offline hoặc riêng tư hơn.
  • Hỗ trợ LoRA fine-tuning và export thành file .cact để chạy lại trên cùng engine.

Hạn chế:

  • Không phải LLM đa dụng cho mọi tác vụ.
  • Không phù hợp nếu bạn cần hội thoại dài hoặc suy luận với ngữ cảnh lớn.
  • Chất lượng nên được đánh giá kỹ với bộ công cụ và dữ liệu thực tế của bạn trước khi đưa vào sản phẩm.
  • Lần đầu dùng cần tải engine từ Hugging Face và cache lại.
  • Fine-tuning nâng cao có thể cần hiểu thêm về dữ liệu JSONL, LoRA, checkpoint và export.
  • Mạnh nhất khi bạn mô tả công cụ rõ ràng; mô tả mơ hồ thì kết quả cũng dễ kém chính xác.