3 điểm bởi GN⁺ 2025-05-28 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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

  1. Cần cài đặt hoặc nâng cấp lên phiên bản LLM mới nhất

  2. Đăng ký API key như OpenAI:

    llm keys set openai
    # nhập API key
    
  3. 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
    • --td là 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
  4. Đổ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-mini v.v.)
  5. 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ã

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

 
GN⁺ 2025-05-28
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ần
      Nhâ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

        $ git find out if abcdefg is a descendent of hijklmnop 
      

      Đây là câu lệnh tôi đã dùng trong một bình luận ở đây

        $ for i in $(seq 1 6); do 
         printf "%${i}sh${i}\n\n-----\n" | tr " " "#"; 
        done | pv -bqL 30 
      

      Ban đầu là

        $ for i in $(seq 1 6); do 
         printf "(# $i times)\n\n-----\n"
        done | pv (30 bps and quietly)
      

      Tôi gửi buffer lên openrouter bằng tổ hợp ctrl-x x quen 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ác

    • Tuyệ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

    • Thú vị đấy
      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ông
    Nế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

    • Chế độ mặc định của Codex CLI chắc là như vậy
      Nếu chạy mà không có cờ --full-auto thì nó sẽ hỏi phê duyệt mỗi lần
  • Tô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%

    llm -f README.md -f llm.plugin.zsh -f completions/_llm -f https://simonwillison.net/2025/May/27/llm-tools/ "implement tab completions for the new tool plugins feature"
    

    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

    • Thật kỳ lạ khi đây không còn là khoa học viễn tưởng mà là thực tế
      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

    • Thành thật mà nói tôi thực sự ngạc nhiên với GPT-4.1 mini
      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
      llm -f https://raw.githubusercontent.com/BenjaminAster/CSS-Minecraft/… \
        -s 'explain all the tricks used by this CSS'
      
      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.yaml hay không

    • Cái này có lẽ cần thay đổi ở llm-gguf hoặc llm-llama-server
      ... tôi vừa thử nghiệm thì thấy cách thứ hai hoạt động
      brew install llama.cpp
      llama-server --jinja -hf unsloth/gemma-3-4b-it-GGUF:Q4_K_XL
      
      Và ở một cửa sổ khác
      llm install llm-llama-server
      llm -m llama-server-tools -T llm_time 'what time is it?' --td
      
      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ố

    • Sáng nay tôi cũng có thử nghịch MCP một chút
      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ó