Source: https://ailoot.ai/models/vi/mistralai-ministral-3b-2512/
Canonical: https://ailoot.ai/models/vi/mistralai-ministral-3b-2512/
Language: vi

# Mistral: Ministral 3 3B 2512

[Markdown](https://ailoot.ai/models/vi/mistralai-ministral-3b-2512/index.md) · [JSON](https://ailoot.ai/models/vi/mistralai-ministral-3b-2512/facts.json)

## [Mistral: Ministral 3 3B 2512](https://ailoot.ai/models/vi/mistralai-ministral-3b-2512/)

Ministral 3 3B Instruct 2512 là mô hình văn bản và hình ảnh đa ngôn ngữ nhỏ gọn, dành cho phân loại, trích xuất, chú thích ảnh và nội dung ngắn. Thành phần ngôn ngữ 3,4 tỷ tham số và bộ mã hóa thị giác 0,4 tỷ tham số hỗ trợ chỉ dẫn hệ thống, JSON, gọi hàm và cửa sổ ngữ cảnh 256k do nhà sản xuất công bố.

- [**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `mistralai/ministral-3b-2512`](https://ailoot.ai/models/vi/mistralai-ministral-3b-2512/#method-0)
- [**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `mistralai/ministral-3b-2512`](https://ailoot.ai/models/vi/mistralai-ministral-3b-2512/#method-1)

Về mô hình

Mô tả này trình bày khả năng của mô hình. Đầu vào, đầu ra và tùy chọn có trên Ailoot được liệt kê bên dưới cho phương thức đã chọn.

Ministral 3 3B Instruct 2512 là phiên bản được tinh chỉnh để làm theo chỉ dẫn nhỏ nhất trong dòng Ministral 3 của Mistral AI. Nhà sản xuất định vị mô hình cho các ứng dụng nhỏ gọn hoạt động theo chỉ dẫn, bao gồm chú thích ảnh, phân loại văn bản, trích xuất dữ liệu, dịch thuật và nội dung ngắn. Bản trọng số phát hành sử dụng độ chính xác FP8 và kết hợp xử lý văn bản với một thành phần tiếp nhận hình ảnh.

Thành phần và khả năng của mô hình

Thẻ mô hình liệt kê mô hình ngôn ngữ 3,4 tỷ tham số và bộ mã hóa thị giác 0,4 tỷ tham số. Tài liệu mô tả cửa sổ ngữ cảnh 256k, với độ dài cấu hình mặc định là 262.144 trong ghi chú sử dụng. Số tham số của các thành phần này thuộc phiên bản 3B, không phải các thành viên 8B hay 14B cùng dòng. Mô hình nhận văn bản và hình ảnh, đồng thời tạo văn bản, bao gồm bản ghi định dạng JSON hoặc các lời gọi hàm được đề xuất.

Nhà sản xuất mô tả khả năng hỗ trợ hàng chục ngôn ngữ, bao gồm tiếng Anh, Pháp, Tây Ban Nha, Đức, Ý, Bồ Đào Nha, Hà Lan, Trung, Nhật, Hàn và Ả Rập. Họ cũng nhấn mạnh khả năng tuân thủ lời nhắc hệ thống. Hãy chỉ rõ ngôn ngữ đầu ra cần dùng và những nhãn hoặc thuật ngữ phải giữ nguyên. Nhờ vậy, phần giải thích đã dịch hoặc bản ghi được trích xuất sẽ phù hợp với mục đích sử dụng của ứng dụng.

Phân loại và trích xuất có trọng tâm

Đối với tác vụ phân loại, hãy cung cấp các nhãn được phép, quy tắc phân biệt chúng và thông điệp cần phân loại. Yêu cầu chọn một nhãn và giải thích ngắn dựa trên thông điệp đã cung cấp. Nếu các nhãn còn mơ hồ, hãy xác định thông tin nào giúp phân biệt chúng, thay vì chỉ dựa vào tên nhãn. Cách này tạo ra kết quả gọn, có thể sử dụng nhất quán trong một quy trình lớn hơn.

Đối với trích xuất, hãy liệt kê các trường cùng kiểu dữ liệu và nêu cách biểu diễn thông tin còn thiếu. Một yêu cầu có thể đề nghị mã định danh mặt hàng, tình trạng được mô tả rõ ràng và hành động người dùng đang yêu cầu. Yêu cầu giữ nguyên câu chữ nguồn khi cách diễn đạt chính xác có ý nghĩa, hoặc trả về giá trị chuẩn hóa khi ứng dụng cung cấp quy tắc chuẩn hóa. Đầu ra JSON sắp xếp kết quả; thiết kế trường vẫn là một phần của tác vụ, chứ không phải lược đồ phổ quát được tích hợp sẵn.

Thẻ mô hình cũng nêu khả năng chú thích ảnh và tạo nội dung ngắn. Với chú thích, hãy xác định khía cạnh của ảnh cần mô tả và đối tượng đọc. Với phần giải thích ngắn, hãy cung cấp những dữ kiện phải giữ lại và độ dài mong muốn. Câu trả lời hỗ trợ có thể dùng câu hỏi gốc cùng hướng dẫn được cung cấp để tạo ra bước tiếp theo súc tích, kèm điều kiện để áp dụng bước đó.

Chuẩn bị hình ảnh và nội dung đa ngôn ngữ

Ghép hình ảnh với một câu hỏi văn bản rõ ràng. Với trường dữ liệu trong tài liệu, hãy giữ lại nhãn, giá trị và ngữ cảnh xung quanh cần thiết để diễn giải. Với mô tả vật thể, hãy chỉ rõ đặc điểm nhìn thấy nào là quan trọng. Nhà sản xuất khuyến nghị tỷ lệ ảnh gần 1:1 và tránh đầu vào quá hẹp hoặc quá rộng; hãy cắt ảnh khi cần mà không bỏ đi bằng chứng làm cơ sở cho câu hỏi.

Đối với dịch thuật, hãy cung cấp văn bản gốc, ngôn ngữ đích và danh sách thuật ngữ nếu có. Yêu cầu phần dịch tách biệt với phần giải thích tùy chọn. Tác vụ phân loại đa ngôn ngữ có thể giữ nguyên các nhãn của ứng dụng, đồng thời giải thích nhãn được chọn bằng ngôn ngữ của người đọc. Đây là các đầu ra được xác định rõ, thay vì yêu cầu thảo luận chung chung về một thông điệp hoặc hình ảnh.

Công cụ và thiết lập được khuyến nghị

Khả năng gọi hàm gốc cho phép ứng dụng kết nối cuộc hội thoại với một thao tác đã được mô tả. Mô hình chuẩn bị các đối số hàm, ứng dụng thực thi hàm và kết quả trở thành thông tin cho câu trả lời tiếp theo. Một thao tác tra cứu có thể cung cấp giá trị còn thiếu, hoặc công cụ tính toán có thể xử lý các giá trị nhận diện từ ảnh. Bản thân mô hình văn bản không thực thi hàm chỉ bằng việc tạo ra tên và đối số của hàm.

Nhà sản xuất khuyến nghị dùng chỉ dẫn hệ thống xác định môi trường và trường hợp sử dụng, bao gồm hướng dẫn dùng công cụ. Giữ mô tả công cụ rõ ràng và giới hạn bộ công cụ ở những thao tác liên quan tối thiểu. Với một trợ lý có phạm vi hẹp, tác vụ trích xuất hoặc tra cứu cụ thể có thể dễ diễn giải hơn một lời nhắc chứa nhiều hàm không liên quan và không có quy tắc lựa chọn.

Thẻ mô hình đưa ra hướng dẫn về temperature thấp: dưới 0.1 cho sử dụng hằng ngày và theo kiểu môi trường vận hành thực tế, cùng temperature khởi điểm 0.1 cho phần lớn trường hợp sử dụng trong ghi chú lấy mẫu riêng. Có thể thử các giá trị cao hơn cho nội dung sáng tạo. Các khuyến nghị này có phạm vi áp dụng được nêu khác nhau; chúng không bảo đảm một thiết lập lấy mẫu sẽ khiến mọi giá trị trích xuất hay kết quả phân loại đều chính xác.

Phạm vi phiên bản và ngữ cảnh

Ministral 3 có các bản phát hành Base, Instruct và Reasoning riêng ở mỗi kích cỡ mô hình. Mục này xác định bản trọng số Instruct 2512, không phải chế độ suy luận được tự động bật hay bản cơ sở tiền huấn luyện. Nhà sản xuất liệt kê chuyên biệt hóa và tinh chỉnh là những ứng dụng khả thi, trong khi tác vụ làm theo chỉ dẫn hiện tại vẫn cần đầu vào, quy tắc và đầu ra được xác định rõ.

Giữ tài liệu nguồn và hội thoại liên quan trong ngữ cảnh được cấu hình, đồng thời yêu cầu kết quả gọn mà bước tiếp theo của ứng dụng cần. Ghi chú sử dụng cho phép giảm độ dài ngữ cảnh cấu hình với các tác vụ không cần toàn bộ cửa sổ. Ví dụ tạo 512 token và mức cho phép tạo lớn trong ví dụ không phải những dung lượng đầu ra tối đa được tài liệu xác nhận độc lập. Việc tạo ảnh, xuất âm thanh và hành động bên ngoài đòi hỏi các thành phần khác ngoài mô hình trả kết quả văn bản này.

Tác vụ thực tế

### Tác vụ thực tế

Ví dụ kỹ thuật bằng tiếng Anh

```
Extract a return-request record

Extract the item code, stated condition and requested action from this message: 'Hello, the handle of kettle KT8 is loose. It arrived today. Please arrange an exchange, not a refund.' Return those three fields and quote the wording supporting the requested action. Use 'not supplied' for any field absent from the message.
```

#### Kết quả mong đợi

```
A compact three-field extraction record plus the supporting request quote.
```

#### Kiểm tra kết quả

```
Check that exchange is retained as the request and is not rewritten as a completed action.
```

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `mistralai/ministral-3b-2512`

[`mistralai/ministral-3b-2512`](https://ailoot.ai/models/vi/#m=mistralai%2Fministral-3b-2512&route=Ultra&caller=mistralai%2Fministral-3b-2512&fmt=chat)

Mistral /`mistralai/ministral-3b-2512`

### Bắt đầu

Ministral 3 3B Instruct 2512 là mô hình văn bản và hình ảnh đa ngôn ngữ nhỏ gọn, dành cho phân loại, trích xuất, chú thích ảnh và nội dung ngắn. Thành phần ngôn ngữ 3,4 tỷ tham số và bộ mã hóa thị giác 0,4 tỷ tham số hỗ trợ chỉ dẫn hệ thống, JSON, gọi hàm và cửa sổ ngữ cảnh 256k do nhà sản xuất công bố.

Đầu vào được chấp nhận

Văn bản

Kết quả

Văn bản

### Có trên Ailoot · đầu vào & phương thức

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions`

Đầu vào

`text`

Đầu ra

`text`

Định dạng đầu ra

json hoặc SSE

| Trường | Loại | Yêu cầu | Giá trị & giới hạn | Mặc định |
| --- | --- | --- | --- | --- |
| Trường`model` | Loại`string` | Yêu cầuBắt buộc | Giá trị & giới hạn mistralai/ministral-3b-2512 | Mặc định— |
| Trường`messages` | Loại`message[]` | Yêu cầuBắt buộc | Giá trị & giới hạn Số mục tối thiểu: 1 | Mặc định— |
| Trường`messages[].role` | Loại`string` | Yêu cầuBắt buộc | Giá trị & giới hạn Ví dụ: system, user, assistant, tool, function Điều kiện: Các vai trò này được biểu diễn rõ trong các kiểu tương thích của mã nguồn; tập vai trò chính xác vẫn tùy từng mô hình. Tùy thuộc vào mô hình | Mặc định— |
| Trường`messages[].content` | Loại`string\|content_part[]\|null` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc định— |
| Trường`messages[].tool_calls` | Loại`tool_call[]` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc định— |
| Trường`messages[].tool_call_id` | Loại`string` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Áp dụng khi: role=tool; dùng ID thực tế được trả về | Mặc định— |
| Trường`messages[].name` | Loại`string` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc định— |
| Trường`messages[].reasoning_content` | Loại`string` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Áp dụng khi: Gửi lại dữ liệu suy luận thực tế đã được trả về khi mô hình này sử dụng dữ liệu đó | Mặc định— |
| Trường`messages[].reasoning_details` | Loại`object\|array` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
| Trường`max_tokens` | Loại`integer` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tối thiểu: 1 Tùy thuộc vào mô hình | Mặc định— |
| Trường`max_completion_tokens` | Loại`integer` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tối thiểu: 1 Tùy thuộc vào mô hình | Mặc định— |
| Trường`stream` | Loại`boolean` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc địnhfalse |
| Trường`stream_options.include_usage` | Loại`boolean` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
| Trường`temperature` | Loại`number` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
| Trường`top_p` | Loại`number` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
| Trường`stop` | Loại`string\|string[]` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
| Trường`tools` | Loại`function_tool[]` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
| Trường`tools[].type` | Loại`string` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn function Tùy thuộc vào mô hình | Mặc định— |
| Trường`tools[].function.name` | Loại`string` | Yêu cầuBắt buộc | Giá trị & giới hạn Áp dụng khi: Có cung cấp công cụ hàm | Mặc định— |
| Trường`tools[].function.description` | Loại`string` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc định— |
| Trường`tools[].function.parameters` | Loại`JSON_schema` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc định— |
| Trường`tool_choice` | Loại`string\|object` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
| Trường`parallel_tool_calls` | Loại`boolean` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
| Trường`response_format` | Loại`object` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
| Trường`reasoning_effort` | Loại`string` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
| Trường`reasoning` | Loại`object` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
| Trường`service_tier` | Loại`string` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
| Trường`instructions` | Loại`string` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Trường tương thích | Mặc định— |
| Trường`functions` | Loại`function[]` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
| Trường`function_call` | Loại`string\|object` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
| Trường`prompt_cache_options` | Loại`object` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
| Trường`modalities` | Loại`string[]` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn text | Mặc định— |
| Trường`provider` | Loại`object` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Điều kiện: provider.options bị từ chối trên tuyến văn bản Ultra này | Mặc định— |
| Trường`cache_control.ttl` | Loại`string` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Điều kiện: 1h bị từ chối tại các vị trí lưu đệm prompt thực tế | Mặc định— |

Tổ hợp tư liệu đầu vào

**Văn bản** · Văn bản UTF8

`messages[].content`

Tham số phương thức và vòng đời

| Tham số | Hợp đồng |
| --- | --- |
| Tham số`content_type` | Hợp đồngapplication/json |
| Tham số`required` | Hợp đồngmodel, messages |
| Tham số`material_types` | Hợp đồngtext |
| Tham số`messages` | Hợp đồngMảng thông điệp có cấu trúc role/content |
| Tham số`file_material` | Hợp đồngTài liệu UTF-8 thực tế được chèn nguyên dạng văn bản; không suy ra ID tệp |
| Tham số`optional_controls` | Hợp đồngstream, temperature, top\_p, stop, max\_tokens, max\_completion\_tokens, reasoning, response\_format, tools, tool\_choice |
| Tham số`control_scope` | Hợp đồngTùy từng mô hình; công cụ hàm của người dùng khác với công cụ do dịch vụ cung cấp |
| Tham số`output_modalities` | Hợp đồngtext |
| Tham số`hosted_operations` | Hợp đồngfalse |
| Tham số`multimodal_input_binding` | Hợp đồngnull |

Vòng đời: `synchronous_or_streamed`

Gửi ID mô hình chính xác cùng messages.

Độ dài ngữ cảnh không phải giới hạn đầu ra.

Tệp văn bản có thể cung cấp nguyên văn nội dung; đầu vào hình ảnh, âm thanh hoặc đối tượng tệp cần có liên kết chính xác.

### Bảng giá

Thông tin biểu giá không bổ sung tùy chọn yêu cầu. Các tham số được hỗ trợ nằm trong phương thức đã chọn.

Chế độ nhanh

Mức giá tiêu chuẩn Khi chọn chế độ nhanh

Chế độ Flex

Mức giá tiêu chuẩn Khi chọn chế độ flex

Mức độ suy luận tối đa

Mức giá tiêu chuẩn Khi áp dụng mức điều chỉnh mặc định (default) cho mức độ suy luận tối đa

#### Mức phí Ailoot

#### Giá theo cấu hình

Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.

| Cấu hình | Biểu mức phí | Token ngữ cảnh, lớn hơn | Token ngữ cảnh, tối đa và bao gồm | Phí |
| --- | --- | --- | --- | --- |
| Cấu hìnhGiá cơ sở cho token | Biểu mức phíMức phí cơ bản | Token ngữ cảnh, lớn hơn— | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào **$0.00066** / 1K token Đầu ra · Token đầu ra **$0.00066** / 1K token Đầu vào · Đọc bộ nhớ đệm **$0.00002** / 1K token Đầu vào · Ghi bộ nhớ đệm **$0** / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ **—** / 1K token |
| Cấu hìnhBậc 1 theo độ dài yêu cầu | Biểu mức phí— | Token ngữ cảnh, lớn hơn0 | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào **$0.00066** / 1K token Đầu ra · Token đầu ra **$0.00066** / 1K token Đầu vào · Đọc bộ nhớ đệm **$0.00002** / 1K token Đầu vào · Ghi bộ nhớ đệm **$0** / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ **—** / 1K token |

Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. [Cách hoạt động của cơ chế tạm giữ và quyết toán →](https://ailoot.ai/docs/vi/billing/reserve/)

### Ví dụ yêu cầu

#### Ailoot Ultra · OpenAI Chat

curlPython SDKLuồng Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "mistralai/ministral-3b-2512", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='mistralai/ministral-3b-2512',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))
```

```python
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='mistralai/ministral-3b-2512',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Nhận và lưu kết quả

#### Ailoot Ultra · OpenAI Chat

json hoặc SSE

##### Lưu tất cả kết quả đã hoàn tất

Lưu mọi phản hồi hoàn chỉnh, tệp và phần nội dung được trả về.

Giữ mọi phương án trả lời cùng nội dung, lệnh gọi công cụ và dữ liệu suy luận của phương án đó. Với SSE, ghép các phần thay đổi theo chỉ số phương án và công cụ, giữ lý do kết thúc cuối cùng cùng dữ liệu sử dụng.

##### Nếu cần kiểm tra phản hồi gốc

Giữ ID và header của yêu cầu, phản hồi. Không cung cấp URL chung để truy xuất tác vụ văn bản.

Trường phản hồi

| Trường | Loại |
| --- | --- |
| Trường`choices[].index` | Loạiinteger |
| Trường`choices[].message.content` | Loạistring\|null |
| Trường`choices[].message.tool_calls` | Loạitool\_call\[\] |
| Trường`choices[].message.reasoning_content` | Loạistring |
| Trường`choices[].message.reasoning_details` | Loạiobject\|array |
| Trường`choices[].finish_reason` | Loạistring\|null |
| Trường`usage` | Loạiobject |

Lỗi và bước tiếp theo

| Phản hồi | Điều kiện | Bước tiếp theo |
| --- | --- | --- |
| Phản hồi400 · `invalid_request_error` | Điều kiệnTrường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ | Bước tiếp theoSửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới. |

### Bí danh

#### Bí danh mô hình

**Ailoot Ultra** [`mistralai/ministral-3b-2512`](https://ailoot.ai/models/vi/#m=mistralai%2Fministral-3b-2512&route=Ultra&caller=mistralai%2Fministral-3b-2512&fmt=chat)

#### Bí danh đường dẫn phương thức

Dùng các đường dẫn phương thức hiển thị ở trên.

#### ID gọi liên quan

[`mistralai/ministral-3b-2512`](https://ailoot.ai/models/vi/#m=mistralai%2Fministral-3b-2512&route=Ultra&caller=mistralai%2Fministral-3b-2512&fmt=chat)

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `mistralai/ministral-3b-2512`

[`mistralai/ministral-3b-2512`](https://ailoot.ai/models/vi/#m=mistralai%2Fministral-3b-2512&route=Ultra&caller=mistralai%2Fministral-3b-2512&fmt=messages)

Mistral /`mistralai/ministral-3b-2512`

### Bắt đầu

Ministral 3 3B Instruct 2512 là mô hình văn bản và hình ảnh đa ngôn ngữ nhỏ gọn, dành cho phân loại, trích xuất, chú thích ảnh và nội dung ngắn. Thành phần ngôn ngữ 3,4 tỷ tham số và bộ mã hóa thị giác 0,4 tỷ tham số hỗ trợ chỉ dẫn hệ thống, JSON, gọi hàm và cửa sổ ngữ cảnh 256k do nhà sản xuất công bố.

Đầu vào được chấp nhận

Văn bản

Kết quả

json · sse

### Có trên Ailoot · đầu vào & phương thức

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages`

Đầu vào

`text`

Đầu ra

`json`, `sse`

Định dạng đầu ra

JSON hoặc SSE

| Trường | Loại | Yêu cầu | Giá trị & giới hạn | Mặc định |
| --- | --- | --- | --- | --- |
| Trường`model` | Loại`string` | Yêu cầuBắt buộc | Giá trị & giới hạn mistralai/ministral-3b-2512 | Mặc định— |
| Trường`messages` | Loại`message[]` | Yêu cầuBắt buộc | Giá trị & giới hạn | Mặc định— |
| Trường`messages[].role` | Loại`string` | Yêu cầuBắt buộc | Giá trị & giới hạn user, assistant | Mặc định— |
| Trường`messages[].content` | Loại`string` | Yêu cầuBắt buộc | Giá trị & giới hạn | Mặc định— |
| Trường`max_tokens` | Loại`integer` | Yêu cầuBắt buộc | Giá trị & giới hạn | Mặc định— |
| Trường`stream` | Loại`boolean` | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc địnhfalse |

Tổ hợp tư liệu đầu vào

**Văn bản** · Văn bản UTF-8

`Chuỗi messages[].content`

Tham số phương thức và vòng đời

| Tham số | Hợp đồng |
| --- | --- |
| Tham số`content_type` | Hợp đồngapplication/json |
| Tham số`required` | Hợp đồngmodel, messages, max\_tokens |
| Tham số`optional_controls` | Hợp đồngstream |
| Tham số`material_types` | Hợp đồngtext |
| Tham số`text_file_material` | Hợp đồngĐọc tài liệu UTF-8 thực tế và đặt nội dung văn bản vào chuỗi đầu vào hoặc nội dung thông điệp được chỉ định. |

Vòng đời: `synchronous_or_streamed`

### Bảng giá

Thông tin biểu giá không bổ sung tùy chọn yêu cầu. Các tham số được hỗ trợ nằm trong phương thức đã chọn.

Chế độ nhanh

Mức giá tiêu chuẩn Khi chọn chế độ nhanh

Chế độ Flex

Mức giá tiêu chuẩn Khi chọn chế độ flex

Mức độ suy luận tối đa

Mức giá tiêu chuẩn Khi áp dụng mức điều chỉnh mặc định (default) cho mức độ suy luận tối đa

#### Mức phí Ailoot

#### Giá theo cấu hình

Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.

| Cấu hình | Biểu mức phí | Token ngữ cảnh, lớn hơn | Token ngữ cảnh, tối đa và bao gồm | Phí |
| --- | --- | --- | --- | --- |
| Cấu hìnhGiá cơ sở cho token | Biểu mức phíMức phí cơ bản | Token ngữ cảnh, lớn hơn— | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào **$0.00066** / 1K token Đầu ra · Token đầu ra **$0.00066** / 1K token Đầu vào · Đọc bộ nhớ đệm **$0.00002** / 1K token Đầu vào · Ghi bộ nhớ đệm **$0** / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ **—** / 1K token |
| Cấu hìnhBậc 1 theo độ dài yêu cầu | Biểu mức phí— | Token ngữ cảnh, lớn hơn0 | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào **$0.00066** / 1K token Đầu ra · Token đầu ra **$0.00066** / 1K token Đầu vào · Đọc bộ nhớ đệm **$0.00002** / 1K token Đầu vào · Ghi bộ nhớ đệm **$0** / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ **—** / 1K token |

Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. [Cách hoạt động của cơ chế tạm giữ và quyết toán →](https://ailoot.ai/docs/vi/billing/reserve/)

### Ví dụ yêu cầu

#### Ailoot Ultra · Anthropic Messages

Nội dung yêu cầu JSON tối thiểu, đầy đủcurl · dùng tài liệu UTF-8 của bạnPython · lưu kết quả đầy đủ

```json
{
  "model": "mistralai/ministral-3b-2512",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'mistralai/ministral-3b-2512', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
```

```python
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'mistralai/ministral-3b-2512', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
```

### Nhận và lưu kết quả

#### Ailoot Ultra · Anthropic Messages

JSON hoặc SSE

##### Lưu tất cả kết quả đã hoàn tất

Lưu mọi phản hồi hoàn chỉnh, tệp và phần nội dung được trả về.

Giữ mọi khối nội dung, chữ ký suy nghĩ và ID sử dụng công cụ thực tế. Ghép tất cả các phần thay đổi của khối SSE; khối văn bản đầu tiên không phải toàn bộ đầu ra.

##### Nếu cần kiểm tra phản hồi gốc

Giữ ID và header của yêu cầu, phản hồi. Không cung cấp URL chung để truy xuất tác vụ văn bản.

Trường phản hồi

| Trường | Loại |
| --- | --- |
| Trường`id` | Loạistring |
| Trường`model` | Loạistring |
| Trường`content[]` | Loạitext\|thinking\|tool\_use\|other content block |
| Trường`stop_reason` | Loạistring\|null |
| Trường`usage` | Loạiobject |

Lỗi và bước tiếp theo

| Phản hồi | Điều kiện | Bước tiếp theo |
| --- | --- | --- |
| Phản hồi400 · `invalid_request_error` | Điều kiệnTrường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ | Bước tiếp theoSửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới. |

### Bí danh

#### Bí danh mô hình

**Ailoot Ultra** [`mistralai/ministral-3b-2512`](https://ailoot.ai/models/vi/#m=mistralai%2Fministral-3b-2512&route=Ultra&caller=mistralai%2Fministral-3b-2512&fmt=messages)

#### Bí danh đường dẫn phương thức

Dùng các đường dẫn phương thức hiển thị ở trên.

#### ID gọi liên quan

[`mistralai/ministral-3b-2512`](https://ailoot.ai/models/vi/#m=mistralai%2Fministral-3b-2512&route=Ultra&caller=mistralai%2Fministral-3b-2512&fmt=messages)

FAQ · Mistral: Ministral 3 3B 2512

Có những đầu vào và kết quả nào?

`POST /v1/chat/completions` · `mistralai/ministral-3b-2512`: `text` → `text` `POST /v1/messages` · `mistralai/ministral-3b-2512`: `text` → `json`, `sse`

Yêu cầu sử dụng những trường nào?

`POST /v1/chat/completions` · `mistralai/ministral-3b-2512`: `model`, `messages`, `stream`, `modalities`, `provider` `POST /v1/messages` · `mistralai/ministral-3b-2512`: `model`, `messages`, `max_tokens`, `stream`

Áp dụng những giới hạn nào?

`POST /v1/chat/completions` · `mistralai/ministral-3b-2512`: `messages.min_items`: `1`

Kết nối Ailoot với Claude Code, OpenCode, Hermes hoặc ứng dụng của bạn.

## Công ty và danh mục dự án của công ty

Công ty và danh mục dự án của công ty: hàng triệu khách hàng; doanh số hàng tỷ mỗi tháng.

## Mua token với giá ưu đãi.

Ưu đãi thuê bao cho nhu cầu thường xuyên. Mã khuyến mãi giảm đến 50% khi mua token.

Thuê bao

Chọn gói ưu đãi cho các yêu cầu thường xuyên của bạn.

Mã giảm đến 50%

Nhập mã khi mua. Giá được tính lại theo chương trình đang áp dụng.

Chi phí trong lịch sử

Mô hình, token và số tiền được lưu cho mỗi yêu cầu.

[Chọn gói thuê bao](https://ailoot.ai/docs/vi/billing/subscriptions/) · [Xem giá mô hình](https://ailoot.ai/models/vi/)

## Kết nối API vào sản phẩm bạn đang bán.

SaaS, ứng dụng và bot — theo đề nghị giao kết chính thức và thỏa thuận cấp phép Ailoot. Muốn bán lại, hãy yêu cầu giấy phép bán lại.

Ứng dụng thương mại

Tích hợp tạo văn bản, ảnh, video và âm thanh vào các tính năng trả phí của dịch vụ.

Giấy phép bán lại

Gửi mô tả dự án và cách cung cấp quyền truy cập. Yêu cầu điều khoản sử dụng và bán lại bằng văn bản.

Tài liệu trên website

Đề nghị giao kết, thỏa thuận cấp phép và chính sách xử lý dữ liệu có sẵn trước khi kết nối.

[Yêu cầu giấy phép bán lại](mailto:support@ailoot.ai) · [Đề nghị giao kết và thỏa thuận cấp phép](https://ailoot.ai/legal/offer?lang=vi)

## Ailoot · Công ty và danh mục dự án của công ty





Ailoot dựa trên kinh nghiệm vận hành tích lũy, cơ sở khách hàng lớn, dịch vụ ổn định và việc kiểm soát KPI liên tục.





Công ty và danh mục dự án của công ty: hàng triệu khách hàng; doanh số hàng tỷ mỗi tháng.





Ailoot áp dụng kinh nghiệm vận hành này để cung cấp quyền truy cập API vào các tính năng AI trong sản phẩm của khách hàng, tác tử, ứng dụng và quy trình tự động hóa.
