Công cụ CLI LLM của tôi giờ có thể chạy tool từ mã Python hoặc plugin
(simonwillison.net)- Trong LLM 0.26, nhiều tính năng thực thi tool đã được bổ sung, cho phép nhiều mô hình LLM như OpenAI, Anthropic, Gemini, Ollama sử dụng các công cụ được triển khai bằng hàm Python hoặc plugin
- Có thể cài đặt tool trực tiếp hoặc truyền dưới dạng hàm từ dòng lệnh hay Python API, giúp cải thiện đáng kể khả năng mở rộng và tính linh hoạt
- Thông qua plugin tool, có thể dễ dàng bổ sung cho mô hình nhiều chức năng như tính toán toán học, chạy JavaScript, truy vấn SQL, tích hợp dịch vụ bên ngoài
- Tất cả các vendor LLM lớn và mô hình cục bộ đều đang phổ biến hóa mô thức gọi tool, và LLM 0.26 cũng tích hợp điều này theo cách tiêu chuẩn hóa
- Trong kế hoạch và định hướng phát triển sắp tới, có thảo luận về hỗ trợ chuẩn MCP, mở rộng hệ sinh thái phát triển plugin, và cải thiện log thực thi tool
LLM 0.26: Hỗ trợ thực thi tool với mô hình ngôn ngữ lớn trên terminal
Tính đến ngày 27 tháng 5 năm 2025, phiên bản LLM 0.26 đã được phát hành. Đây là thay đổi lớn nhất kể từ khi dự án LLM bắt đầu, với việc bổ sung hỗ trợ công cụ (tool). Giờ đây, nhiều mô hình LLM như OpenAI, Anthropic, Gemini, Ollama có thể được kết nối với công cụ CLI và thư viện Python của LLM để truy cập bất kỳ tool nào có thể biểu diễn bằng hàm Python.
Tính năng và thay đổi chính
- Cài đặt và nạp tool từ plugin: có thể đăng ký và sử dụng tool thông qua plugin đã cài đặt bằng tùy chọn
--tool/-T - Truyền mã Python qua dòng lệnh: có thể dùng tool bằng cách truyền trực tiếp mã hàm Python với tùy chọn
--functions - Hỗ trợ tool trong Python API: dễ dàng kết nối tool bằng cách truyền
tools=[tên_hàm]vào phương thức.chain - Hỗ trợ ngữ cảnh đồng bộ và bất đồng bộ: có thể gọi tool trong cả tình huống sync/async
Ví dụ sử dụng tool
Chuẩn bị sử dụng
-
Cần cài đặt hoặc nâng cấp lên phiên bản LLM mới nhất
-
Đăng ký API key như OpenAI:
llm keys set openai # nhập API key -
Ví dụ chạy tool đầu tiên:
llm --tool llm_version "What version?" --td- llm_version là một tool demo đơn giản được cung cấp sẵn
--tdlà tùy chọn xuất debug tool, cho phép kiểm tra quá trình gọi tool và nội dung phản hồi
-
Đổi mô hình:
llm models default gpt-4.1-mini- Có thể hỗ trợ nhiều mô hình khác nhau qua tùy chọn (
-m o4-miniv.v.)
- Có thể hỗ trợ nhiều mô hình khác nhau qua tùy chọn (
-
Gọi tool thời gian tích hợp sẵn:
llm --tool llm_time "What time is it?" --td -m o4-mini- Xuất chi tiết thời gian và thông tin múi giờ
Hỗ trợ nhiều mô hình và plugin
- Hoạt động với cùng một giao diện tool trên nhiều môi trường mô hình LLM như Anthropic Claude 4, Google Gemini 2.5 Flash, Ollama Qwen3:4b
- Ví dụ lệnh:
llm install llm-anthropic -U llm keys set anthropic llm --tool llm_version "What version?" --td -m claude-4-sonnet
Tính toán toán học và thực thi mã
- Có thể khắc phục hạn chế yếu về toán học của LLM bằng tool Python
- Hỗ trợ phép toán số học an toàn thông qua plugin llm-tools-simpleeval
llm install llm-tools-simpleeval llm -T simpleeval llm -T simple_eval 'Calculate 1234 * 4346 / 32414 and square root it' --td- Nếu không hỗ trợ
sqrt(), có thể thay bằng** 0.5, từ đó đảm bảo tính linh hoạt trong thực thi mã
- Nếu không hỗ trợ
Giới thiệu các plugin tool
- [llm-tools-simpleeval]: tính toán số học và các biểu thức đơn giản
- [llm-tools-quickjs]: tool trình thông dịch sandbox JavaScript QuickJS
- [llm-tools-sqlite]: truy vấn SQL chỉ đọc đối với cơ sở dữ liệu SQLite cục bộ
- [llm-tools-datasette]: hỗ trợ chạy truy vấn SQL trên instance Datasette từ xa
Ví dụ:
llm install llm-tools-datasette
llm -T 'Datasette("https://datasette.io/content")' --td "What has the most stars?"
- Đây là plugin dạng toolbox, nên có thể cấu hình bằng tham số như URL
- Khi chỉ định sai cột, tool có thể phát hiện lỗi và thử lại → tra cứu schema → tạo truy vấn đúng, qua đó chứng minh khả năng thích ứng của LLM
Tự định nghĩa tool bằng mã Python trực tiếp
- Trên dòng lệnh, có thể truyền hàm Python tùy ý bằng tùy chọn
--functionsđể lập tức biến thành tool - Ví dụ:
llm --functions ' import httpx def search_blog(q): "Search Simon Willison blog" return httpx.get("https://simonwillison.net/search/", params={"q": q}).content ' --td 'Three features of sqlite-utils' -s 'use Simon search'- Có thể triển khai một công cụ tìm kiếm web đơn giản
- Việc thiết lập định hướng sử dụng tool cho mô hình qua system prompt là rất quan trọng
Tích hợp trong thư viện Python
- LLM hỗ trợ cả CLI lẫn Python API
- Phương thức
.chain()tự động hóa toàn bộ quy trình từ phát hiện yêu cầu gọi tool → thực thi → phản ánh kết quả - Ví dụ:
import llm def count_char_in_text(char: str, text: str) -> int: "How many times does char appear in text?" return text.count(char) model = llm.get_model("gpt-4.1-mini") chain_response = model.chain( "Rs in strawberry?", tools=[count_char_in_text], after_call=print ) for chunk in chain_response: print(chunk, end="", flush=True) - Cũng hỗ trợ hàm bất đồng bộ (
async def), cho phép chạy đồng thời - Các plugin toolbox cũng có thể kết nối nguyên trạng dưới dạng
tools=[Datasette(...)]
Quá trình phát triển của mô thức công cụ
- Mô thức gọi tool được giới thiệu từ các bài báo như ReAcT năm 2022, sau đó được mọi vendor LLM lớn và mô hình cục bộ áp dụng
- Tùy từng API, nó được gọi bằng nhiều tên như "Function calling" hoặc "sử dụng tool", nhưng đều đi theo một hình thức thống nhất
- Ollama, llama.cpp v.v. cũng đã bổ sung hỗ trợ tool và mở rộng chức năng
Hậu trường phát triển và vận hành
- Dự án LLM từ lâu đã nhận thấy nhu cầu hỗ trợ tích hợp tool, nhưng việc thiết kế lớp trừu tượng giữa nhiều mô hình khác nhau là rất khó
- Khi việc chuẩn hóa mô thức tool giữa các vendor dần tiến triển, LLM 0.26 mới có thể triển khai tích hợp thống nhất
- Đã được trình diễn như một ví dụ ứng dụng thực tế tại workshop PyCon US 2025
Quan hệ với “agent”
- Thuật ngữ "agent" vẫn còn gây tranh cãi, nhưng trong hệ sinh thái LLM hiện nay, mô hình "tool in the loop" đang dần được tiêu chuẩn hóa
- LLM 0.26 cũng là một triển khai phù hợp cho việc phát triển agent
- Trong tương lai, các template để tạo plugin, issue cải tiến, và tài liệu cho plugin nâng cao sẽ tiếp tục được phát triển sôi động
Dự kiến hỗ trợ Model Context Protocol (MCP)
- MCP đang nổi lên nhanh chóng như một giao thức chuẩn mới để LLM truy cập tool
- Chỉ trong 8 ngày gần đây, nó đã nhanh chóng được đưa vào API của các vendor lớn như OpenAI, Anthropic, Mistral
- Trong tương lai, có kế hoạch biến LLM thành client MCP để dễ dàng kết nối với nhiều máy chủ MCP khác nhau
Cộng đồng và mở rộng
- Dự án LLM đang vận hành cộng đồng Discord để thảo luận về plugin, phát triển tool và mở rộng hệ sinh thái
- Nhấn mạnh rằng khả năng ứng dụng LLM dựa trên tool trong hệ sinh thái mã nguồn mở là gần như vô hạn
Theo cách đó, LLM 0.26 đang trở thành một nền tảng tích hợp tool phổ dụng và có khả năng mở rộng, kết nối với mọi mô hình LLM lớn. Việc mở rộng đáng kể phạm vi ứng dụng của mô hình ngôn ngữ thông qua tool khiến đây trở thành một công cụ rất đáng chú ý với các nhà phát triển và người làm IT thực tế.
1 bình luận
Bình luận trên Hacker News
Tôi có một trình kết xuất Markdown dạng streaming do chính mình làm cho công cụ này
Có thể xem chi tiết tại Streamdown
Cũng có một thứ đáng tham khảo ở đây
Tôi cũng tự làm một công cụ tmux tên là llmehelp, được xây trên llm của Simon
Giờ nó đã trở thành công cụ không thể thiếu mà tôi dùng hằng ngày
Thư viện này trông thực sự rất tuyệt
Tôi nghĩ sẽ hay nếu có một hook cho phép plugin tự kiểm soát phần hiển thị nội dung
Tôi đã tạo issue về việc này ở đây
Tôi có đưa vào vài lựa chọn thiết kế, nhưng vẫn chưa cảm thấy chắc chắn 100%
Rất mong nhận được phản hồi
Còn một thứ nữa tôi quên nhắc
Lần này là một plugin ZSH được xây dựa trên llm
Tôi dùng
zleđể dịch tiếng Anh thành lệnh shell trong một lầnNhân vật chính là Zummoner
Đây là công cụ đã thay đổi hoàn toàn cuộc sống của tôi
Ví dụ, đây là một lệnh tôi tự tạo hôm nay
Đây là câu lệnh tôi đã dùng trong một bình luận ở đây
Ban đầu là
Tôi gửi buffer lên openrouter bằng tổ hợp
ctrl-x xquen thuộc của mình, và chưa đầy 1 giây sau nó trả về với cú pháp chính xácTuyệt thật
Tôi cũng từng thử làm trình kết xuất Markdown dạng streaming bằng nhiều ngôn ngữ để hiển thị đầu ra LLM thật nhanh
Cảm giác thật vui khi biết không chỉ mình tôi làm vậy
Thú vị đấy, tôi nhất định sẽ thử
Tôi đang dùng llm cùng với bat để có tô sáng cú pháp
Đây đúng là tính năng tôi đã rất mong muốn
Cảm ơn bạn
Kiểu công cụ như thế này làm tăng đáng kể nguy cơ footgun (tự gây rủi ro cho chính mình)
Tài liệu có cảnh báo về prompt injection, nhưng trên thực tế tôi nghĩ thiệt hại do tự mình sơ suất còn dễ xảy ra hơn
Ví dụ, nếu bạn cấp cho công cụ quyền truy cập tài khoản môi giới, nó có thể tự động giao dịch
Ngay cả khi không có prompt injection, cũng chẳng có cách nào ngăn bot thực hiện những giao dịch ngu ngốc
Tài liệu tham khảo
Nguy cơ xảy ra kiểu sự cố này thực sự rất lớn
Khi nối tool vào LLM, có quá nhiều tình huống ngoài dự kiến có thể xảy ra nếu nó có thể thực hiện hành động thay bạn bằng các lệnh gọi đã được xác thực
Ta có thể thấy điều này từ các ví dụ gần đây như vụ GitHub MCP bài liên quan
Tôi cũng đã đặt cảnh báo rủi ro thật nổi bật trong tài liệu, và thậm chí không công bố các plugin tool ban đầu có thể gây thiệt hại thực tế
Vì vậy plugin QuickJS sandbox hay plugin SQLite của tôi đều chỉ ở chế độ chỉ đọc
Dù vậy, bản thân lĩnh vực này vẫn là một phổ rất thú vị và kỳ lạ
Nếu ai đó nối llm vào tài khoản môi giới của mình, thì vấn đề có lẽ không phải bot ngu mà là con người ngu
Bất kỳ công cụ nào cũng có thể bị dùng sai cách
Với những ai đang dùng llm, tôi xin đề xuất Gtk-llm-chat
Đây là thành quả của một lượng công sức khổng lồ
Nó tích hợp công cụ dòng lệnh llm với desktop, có biểu tượng khay hệ thống và cửa sổ chat gọn gàng
Gần đây đã phát hành bản 3.0.0 dưới dạng gói cho 3 hệ điều hành desktop lớn
Tôi đang tò mò ngoài chat thông thường thì mọi người dùng nó vào việc gì khác
Đây thực sự là thời điểm quá hoàn hảo
Gần đây tôi đang thử nghiệm đủ thứ trong terminal (Warp), thích ý tưởng đưa agent vào nhưng lại hơi ngại kiểu của Cursor là "hãy tin tưởng giao hết cho prompt/LLM call của chúng tôi (và trả phí)"
Vì vậy tôi chỉ cần một terminal agent đơn giản dựa trên CLI để bù cho kỹ năng shell còn yếu của mình
Tôi hiểu quá rõ loại công cụ này có rủi ro footgun rất lớn
Nhưng sự kết hợp giữa công cụ terminal và llm có vẻ là một cặp cực kỳ lý tưởng theo kiểu nhẹ nhàng
Tôi tò mò không biết nó có hỗ trợ kiểu như các sản phẩm "agent" khác, tức là nếu LLM gọi một tool như
rm -rf ./*thì sẽ hiện "nhấn Y để phê duyệt" mỗi lần hay khôngNếu làm được vậy thì có thể ngăn việc LLM tự ý thao túng terminal của tôi, đồng thời tạo ra một lớp bảo vệ nhất định
Nếu chạy mà không có cờ
--full-autothì nó sẽ hỏi phê duyệt mỗi lầnTôi đang tích cực duy trì một plugin zsh/omz cho tab completion của LLM, nhưng tốc độ ra mắt tính năng mới nhanh quá nên không dễ theo kịp
May là lệnh dưới đây tự động triển khai được khoảng 90%
Kho plugin của tôi ở đây
Tôi muốn bao phủ càng nhiều tùy chọn càng tốt nên cấu trúc hơi phức tạp
Nếu nhận được phản hồi thì tôi thực sự rất biết ơn
Các thế hệ tương lai có lẽ sẽ thấy khó tin về cách chúng ta từng phải tự làm mọi thứ
Cảm giác hệt như việc chúng ta không thể hình dung nổi các lập trình viên assembly đã làm việc ra sao
GPT-4.1 là một mô hình cực kỳ mạnh, từ đầu ra có cấu trúc đến gọi tool
Trong 2 năm qua, gần như mọi công việc lặp đi lặp lại hằng ngày của tôi đều do LLM xử lý
Đây là tổ hợp mô hình vừa rẻ vừa hiệu năng tốt nên tôi luôn chọn nó làm model mặc định
Sau khi thử đủ thứ qua API, nó rẻ một cách phi lý mà vẫn xử lý rất tốt gần như mọi việc
Khi code thì tôi dùng o4-mini, còn ngoài ra thì 4.1-mini thường là đủ
Đây là một ví dụ tôi dùng hôm nay cho vui Tôi đưa thẳng đoạn code demo CSS Minecraft xuất sắc không có nổi một dòng chú thích vào cho GPT-4.1 mini giải thích
Mã nguồn demo liên quan ở đây
Phần trả lời của GPT-4.1 mini thực sự rất hay
Nó chỉ ra chính xác cả những thủ thuật khó như: "This CSS implements a 3D interactive voxel-style UI using cutting-edge CSS techniques with minimal JavaScript"
Toàn bộ phần giải thích
3.813 token đầu vào, 1.291 token đầu ra
Theo phép tính thì khoảng 0,3591 cent, tức chỉ khoảng 1/3 của 1 cent
Công cụ của Simon thực sự xuất sắc
Tôi dùng nó mỗi ngày
Nhờ khả năng kết hợp với pipe và chuyển model dễ dàng giữa local lẫn remote như ollama, công việc trở nên rất thuận tiện
Nội dung này thật tuyệt
Theo tôi biết thì llama.cpp cũng hỗ trợ tool, nhưng tôi vẫn chưa tìm ra cách nối nó với llm
Không biết có thể giải quyết bằng cách thêm gì đó vào
extra-openai-models.yamlhay không... tôi vừa thử nghiệm thì thấy cách thứ hai hoạt động Và ở một cửa sổ khác Tôi đã tổng hợp lại ở đây
Rất cảm ơn vì bản phát hành này
Tôi nghĩ thư viện này là thành phần cốt lõi mở toang toàn bộ tiềm năng của LLM vượt ra ngoài các giới hạn và ràng buộc của các client hiện có
Sau khi bản 0.26 alpha ra mắt, tôi đã cố làm một plugin tương tác với máy chủ MCP nhưng thấy hơi khó
Tạm thời tôi đã làm được phần kết nối để lấy tool động và sử dụng, nhưng vẫn chưa giải quyết xong việc truyền tham số
Tôi đã cố làm một demo plugin đơn giản nhất có thể, nhưng trải nghiệm không hề dễ
Thư viện Python mcp chính thức yêu cầu những thứ như chạy asyncio, kết nối máy chủ và introspect các tool khả dụng
Đây là tính năng mà tôi đã chờ đợi từ rất lâu
Ban đầu tôi đoán nó sẽ được triển khai dựa trên mcp hoặc openapi, nhưng cách hiện tại có thể còn đơn giản và linh hoạt hơn nhiều
Có cảm giác triển khai nó dưới dạng plugin cũng sẽ không quá khó