Tool & Function Calling
Tool & Function Calling
Tool calls (còn gọi là function calls) cho phép một LLM truy cập các tool bên ngoài. LLM không trực tiếp gọi tool, mà chỉ đề xuất tool cần gọi. Người dùng sẽ tự gọi tool bằng cách riêng rồi đưa kết quả trở lại cho LLM. Cuối cùng, LLM dựa vào kết quả đó để tạo ra câu trả lời cho câu hỏi ban đầu của người dùng.
Trạm AI chuẩn hóa giao diện tool calling trên mọi model và provider, giúp người dùng dễ dàng tích hợp tool bên ngoài với bất kỳ model nào được hỗ trợ.
Model được hỗ trợ: Người dùng có thể tìm model hỗ trợ tool calling bằng cách lọc tại tram.ai/models?supported_parameters=tools.
Ví dụ về Request Body
Tool calling với Trạm AI gồm ba bước chính. Dưới đây là định dạng request body cốt lõi cho từng bước:
Bước 1: Inference Request kèm Tools
Bước 2: Tool Execution (phía Client)
Sau khi nhận được response của model kèm tool_calls, hãy thực thi tool được yêu cầu ngay tại máy cục bộ và chuẩn bị kết quả:
Bước 3: Inference Request kèm Kết quả Tool
Lưu ý: Tham số tools phải có mặt trong mọi request (Bước 1 và Bước 3) để router xác thực được schema của tool ở từng lần gọi.
Ví dụ về Tool Calling
Dưới đây là đoạn code Python cho phép LLM gọi một API bên ngoài — ở đây là Project Gutenberg, để tìm kiếm sách.
Trước tiên, hãy thiết lập một vài phần cài đặt cơ bản:
Định nghĩa Tool
Tiếp theo, chúng ta định nghĩa tool muốn gọi. Hãy nhớ rằng tool do LLM yêu cầu, nhưng đoạn code chúng ta viết ở đây mới là phần thực sự thực thi lệnh gọi và trả kết quả về cho LLM.
Lưu ý rằng “tool” chỉ là một function bình thường. Tiếp đó chúng ta viết một “spec” JSON tương thích với tham số function calling của OpenAI, rồi truyền spec đó cho LLM để nó biết tool này khả dụng và biết cách dùng. Khi cần, LLM sẽ yêu cầu tool kèm theo các arguments. Cuối cùng, chúng ta xử lý lệnh gọi tool tại máy cục bộ, thực thi function, và trả kết quả về cho LLM.
Sử dụng tool và kết quả tool
Hãy thực hiện lệnh gọi Trạm AI API đầu tiên tới model:
LLM trả về finish reason là tool_calls, kèm một mảng tool_calls. Trong một trình xử lý response LLM tổng quát, hãy kiểm tra finish_reason trước khi xử lý tool call, nhưng ở đây, hãy cứ giả định đó đúng là trường hợp này. Hãy tiếp tục với việc xử lý tool call:
Mảng messages giờ đã có:
- Request ban đầu
- Response của LLM (chứa một yêu cầu gọi tool)
- Kết quả của tool call (một json trả về từ Project Gutenberg API)
Giờ chúng ta có thể thực hiện lệnh gọi Trạm AI API thứ hai, và hy vọng nhận được kết quả!
Đầu ra sẽ trông giống như:
Hoàn tất! Chúng ta đã sử dụng thành công một tool trong prompt.
Interleaved Thinking
Interleaved thinking cho phép model lập luận xen giữa các tool call, nhờ đó đưa ra quyết định tinh tế hơn sau khi nhận được kết quả tool. Tính năng này giúp model nối nhiều tool call với các bước lập luận xen kẽ, và ra quyết định có chiều sâu hơn dựa trên kết quả trung gian.
Quan trọng: Interleaved thinking làm tăng mức sử dụng token và độ trễ của response. Hãy cân nhắc budget và yêu cầu hiệu năng trước khi bật tính năng này.
Cách Interleaved Thinking hoạt động
Với interleaved thinking, model có thể:
- Lập luận về kết quả của một tool call trước khi quyết định bước tiếp theo
- Nối nhiều tool call với các bước lập luận xen kẽ
- Đưa ra quyết định có chiều sâu hơn dựa trên kết quả trung gian
- Trình bày minh bạch quá trình lập luận khi lựa chọn tool
Ví dụ: Nghiên cứu nhiều bước kèm lập luận
Dưới đây là ví dụ minh họa cách một model dùng interleaved thinking để nghiên cứu một chủ đề trên nhiều nguồn:
Request ban đầu:
Lập luận và Tool Calls của Model:
- Suy nghĩ ban đầu: “Tôi cần nghiên cứu tác động môi trường của xe điện. Hãy bắt đầu với các bài báo học thuật để có nghiên cứu đã được bình duyệt.”
- Tool Call đầu tiên:
search_academic_papers({"query": "electric vehicle lifecycle environmental impact", "field": "environmental science"}) - Sau Kết quả Tool đầu tiên: “Các bài báo cho thấy kết quả trái chiều về tác động của khâu sản xuất. Tôi cần số liệu thống kê hiện tại để bổ sung cho nghiên cứu học thuật này.”
- Tool Call thứ hai:
get_latest_statistics({"topic": "electric vehicle carbon footprint", "year": 2024}) - Sau Kết quả Tool thứ hai: “Giờ tôi đã có cả nghiên cứu học thuật lẫn dữ liệu hiện tại. Hãy tìm các nghiên cứu chuyên về khâu sản xuất để giải quyết những khoảng trống mà tôi đã phát hiện.”
- Tool Call thứ ba:
search_academic_papers({"query": "electric vehicle battery manufacturing environmental cost", "field": "materials science"}) - Phân tích cuối cùng: Tổng hợp toàn bộ thông tin đã thu thập thành một response toàn diện.
Các thực hành tốt nhất cho Interleaved Thinking
- Mô tả Tool rõ ràng: Cung cấp mô tả chi tiết để model lập luận được về thời điểm nên dùng từng tool
- Tham số có cấu trúc: Dùng schema tham số được định nghĩa rõ ràng để model thực hiện tool call chính xác
- Bảo toàn ngữ cảnh: Duy trì ngữ cảnh hội thoại qua nhiều lần tương tác với tool
- Xử lý lỗi: Thiết kế tool sao cho trả về thông báo lỗi có ý nghĩa, giúp model điều chỉnh cách tiếp cận
Những điều cần cân nhắc khi triển khai
Khi triển khai interleaved thinking:
- Model có thể mất nhiều thời gian phản hồi hơn do các bước lập luận bổ sung
- Mức sử dụng token sẽ cao hơn vì quá trình lập luận
- Chất lượng lập luận phụ thuộc vào năng lực của model
- Một số model phù hợp với cách tiếp cận này hơn các model khác
Một vòng lặp Agentic đơn giản
Trong ví dụ trên, các lệnh gọi được thực hiện một cách tường minh và tuần tự. Để xử lý nhiều loại đầu vào khác nhau của người dùng cùng các tool call khác nhau, người dùng có thể dùng một vòng lặp agentic.
Dưới đây là ví dụ về một vòng lặp agentic đơn giản (dùng cùng tools và messages ban đầu như ở trên):
Các thực hành tốt nhất và mẫu thiết kế nâng cao
Hướng dẫn định nghĩa Function
Khi định nghĩa tool cho LLM, hãy tuân theo những thực hành tốt nhất sau:
Tên rõ ràng và mang tính mô tả: Dùng tên function mang tính mô tả, thể hiện rõ mục đích của tool.
Mô tả đầy đủ: Cung cấp mô tả chi tiết giúp model hiểu khi nào và dùng tool như thế nào.
Streaming với Tool Calls
Khi dùng response streaming kèm tool call, hãy xử lý phù hợp với từng content type khác nhau:
Cấu hình Tool Choice
Kiểm soát việc dùng tool bằng tham số tool_choice:
Parallel Tool Calls
Kiểm soát việc nhiều tool có được gọi đồng thời hay không bằng tham số parallel_tool_calls (mặc định là true với hầu hết model):
Khi parallel_tool_calls là false, mỗi lần model chỉ yêu cầu một tool call, thay vì có thể thực hiện nhiều lệnh gọi song song.
Quy trình làm việc đa Tool
Thiết kế các tool phối hợp tốt với nhau:
Cách này cho phép model nối các thao tác một cách tự nhiên: tìm kiếm → lấy chi tiết → kiểm tra tồn kho.
Theo dõi độ tin cậy
Trạm AI theo dõi độ tin cậy của mỗi provider khi hoàn thành tool call và thể hiện thông tin này dưới dạng Tool Call Error Rate trên tab Performance của mọi trang model. Cùng tín hiệu đó cũng quyết định thứ tự provider của Auto Exacto đối với các request tool calling. Để tìm hiểu về validator chính xác, bản nháp JSON Schema, ngữ nghĩa regex, và cách phân loại theo từng tool call, hãy xem How Tool-Calling Success Rate Is Measured.
Để biết thêm chi tiết về định dạng message và tham số tool của Trạm AI, hãy xem API Reference.