<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sebastian Petrus</title>
    <description>The latest articles on DEV Community by Sebastian Petrus (@sebbasstian).</description>
    <link>https://dev.to/sebbasstian</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818120%2F250bf99a-8038-4501-b069-c6b622112b06.png</url>
      <title>DEV Community: Sebastian Petrus</title>
      <link>https://dev.to/sebbasstian</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sebbasstian"/>
    <language>en</language>
    <item>
      <title>Cách sử dụng Kimi K3 để lập trình với Kimi Code</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Fri, 17 Jul 2026 08:04:24 +0000</pubDate>
      <link>https://dev.to/sebbasstian/cach-su-dung-kimi-k3-de-lap-trinh-voi-kimi-code-24b9</link>
      <guid>https://dev.to/sebbasstian/cach-su-dung-kimi-k3-de-lap-trinh-voi-kimi-code-24b9</guid>
      <description>&lt;p&gt;Moonshot AI xây dựng Kimi K3 cho các tác vụ lập trình không thể hoàn thành chỉ bằng một lời nhắc: đọc kho lưu trữ lớn, chỉnh sửa tệp, chạy công cụ, thực thi kiểm thử, phân tích nhật ký và ảnh chụp màn hình, rồi lặp lại đến khi hoàn tất. Để làm việc này, bạn chạy K3 trong &lt;strong&gt;Kimi Code&lt;/strong&gt; — tác nhân lập trình terminal và IDE của Moonshot. Bài viết này hướng dẫn cách thiết lập quy trình, giao việc hiệu quả, kiểm chứng đầu ra và hiểu các giới hạn thực tế của K3.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Dùng thử Apidog ngay hôm nay&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR: Chạy Kimi K3 để lập trình
&lt;/h2&gt;

&lt;p&gt;Kimi K3 là mẫu flagship của Moonshot AI, ra mắt ngày 16 tháng 7 năm 2026, có cửa sổ ngữ cảnh 1 triệu token và được điều chỉnh cho công việc quy mô kho lưu trữ. Bạn sử dụng nó qua Kimi Code bằng cách chọn mô hình với &lt;code&gt;/model&lt;/code&gt;, sau đó giao một nhiệm vụ cụ thể.&lt;/p&gt;

&lt;p&gt;K3 phù hợp với các tác vụ cần:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Điều hướng codebase lớn.&lt;/li&gt;
&lt;li&gt;Đọc/ghi tệp và chạy lệnh shell.&lt;/li&gt;
&lt;li&gt;Gỡ lỗi dựa trên log, stack trace và kết quả kiểm thử.&lt;/li&gt;
&lt;li&gt;Lặp lại sau phản hồi thời gian chạy hoặc ảnh chụp màn hình.&lt;/li&gt;
&lt;li&gt;Duy trì ngữ cảnh dài trong các phiên kỹ thuật nhiều bước.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;K3 có lợi thế chi phí cho các vòng lặp dùng nhiều bộ nhớ đệm, với tỷ lệ cache hit được báo cáo trên 90%. Tuy nhiên, tốc độ khoảng 62 token/giây không phải nhanh nhất, và Moonshot thừa nhận K3 vẫn kém Claude Fable 5 và GPT-5.6 Sol về năng lực thô.&lt;/p&gt;

&lt;p&gt;Nếu K3 xây dựng API cho bạn, hãy dùng &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; để gửi request thật, kiểm tra status code, schema phản hồi và hành vi xác thực. Để xem thông tin nền về mô hình, bắt đầu với &lt;a href="https://apidog.com/vi/blog/what-is-kimi-k3?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K3 là gì&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kimi Code là gì?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.kimi.com/code/en" rel="noopener noreferrer"&gt;Kimi Code&lt;/a&gt; là tác nhân lập trình của Moonshot. Nó chạy trong terminal, có thể tích hợp IDE, đọc và ghi tệp, thực thi shell command, chạy kiểm thử và quản lý một phiên kỹ thuật hoàn chỉnh thay vì chỉ trả lời câu hỏi về mã.&lt;/p&gt;

&lt;p&gt;Quy trình cơ bản:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mở Kimi Code trong thư mục dự án.&lt;/li&gt;
&lt;li&gt;Mô tả nhiệm vụ với tiêu chí hoàn thành rõ ràng.&lt;/li&gt;
&lt;li&gt;Để tác nhân đọc codebase và lập kế hoạch.&lt;/li&gt;
&lt;li&gt;Cho phép nó chỉnh sửa, chạy kiểm thử và đọc phản hồi.&lt;/li&gt;
&lt;li&gt;Kiểm tra diff trước khi merge hoặc triển khai.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Mô hình K3 xử lý văn bản và gọi công cụ; Kimi Code cung cấp môi trường làm việc như filesystem, shell, đầu ra kiểm thử và ảnh chụp màn hình. Kết hợp này biến một mô hình sinh mã thành tác nhân có thể xử lý một ticket kỹ thuật nhiều bước.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe0axvzyp3q14hurncutd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe0axvzyp3q14hurncutd.png" alt="Kimi Code" width="714" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Kimi Code không chỉ hỗ trợ K3; dòng Kimi K2 trước đây cũng dùng cùng tác nhân này. Xem &lt;a href="https://apidog.com/vi/blog/kimi-code-cli?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn CLI của Kimi Code&lt;/a&gt; để cài đặt từ đầu, hoặc &lt;a href="https://apidog.com/vi/blog/how-to-use-kimi-cli?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;cách sử dụng Kimi CLI&lt;/a&gt; để tham khảo thêm về dòng lệnh.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chạy Kimi K3 trong Kimi Code
&lt;/h2&gt;

&lt;p&gt;Cú pháp cài đặt và cờ lệnh có thể thay đổi khi Moonshot cập nhật công cụ. Hãy dùng quy trình dưới đây như một checklist, sau đó xác nhận câu lệnh hiện tại trong &lt;a href="https://www.kimi.com" rel="noopener noreferrer"&gt;tài liệu chính thức của Kimi&lt;/a&gt; hoặc &lt;a href="https://apidog.com/vi/blog/kimi-code-cli?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn CLI của Kimi Code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F07%2Fimage-186.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F07%2Fimage-186.png" alt="Thiết lập Kimi Code" width="799" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Cài đặt tác nhân và xác thực
&lt;/h3&gt;

&lt;p&gt;Bạn cần tài khoản Kimi và API key từ &lt;a href="https://platform.kimi.ai" rel="noopener noreferrer"&gt;nền tảng nhà phát triển Kimi&lt;/a&gt;. Không hard-code khóa vào file cấu hình có thể bị commit. Thay vào đó, dùng biến môi trường:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Chỉ mang tính minh họa. Kiểm tra tài liệu Kimi để có cú pháp hiện tại.&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;KIMI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-key-here"&lt;/span&gt;

&lt;span class="c"&gt;# Khởi chạy tác nhân trong thư mục hiện tại&lt;/span&gt;
kimi-code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Khuyến nghị thực tế:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lưu API key trong secret manager hoặc file &lt;code&gt;.env&lt;/code&gt; đã được thêm vào &lt;code&gt;.gitignore&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Không gửi API key vào prompt.&lt;/li&gt;
&lt;li&gt;Chỉ cấp quyền cần thiết cho thư mục dự án đang xử lý.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Khởi chạy trong thư mục gốc của dự án
&lt;/h3&gt;

&lt;p&gt;Mở terminal tại repository cần làm việc:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;path/to/your-project
kimi-code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thư mục hiện tại là workspace của tác nhân. Nếu bạn khởi chạy sai cấp thư mục, Kimi Code có thể không nhìn thấy các tệp cấu hình, package workspace hoặc module liên quan.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Chọn Kimi K3
&lt;/h3&gt;

&lt;p&gt;Trong phiên Kimi Code, chọn K3:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/model kimi-k3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bạn có thể dùng cùng cơ chế này để chuyển sang các mô hình khác, chẳng hạn &lt;a href="https://apidog.com/vi/blog/what-is-kimi-k2-7-code?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K2.7 Code&lt;/a&gt;, khi cần so sánh chất lượng hoặc tốc độ trên cùng một nhiệm vụ.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Chọn mức nỗ lực suy luận phù hợp
&lt;/h3&gt;

&lt;p&gt;K3 hỗ trợ cấu hình nỗ lực suy luận, bao gồm mức “tối đa”.&lt;/p&gt;

&lt;p&gt;Dùng mức cao hơn cho:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gỡ lỗi lỗi khó tái tạo.&lt;/li&gt;
&lt;li&gt;Refactor nhiều module.&lt;/li&gt;
&lt;li&gt;Phân tích dependency phức tạp.&lt;/li&gt;
&lt;li&gt;Sửa lỗi cần đọc log, test và code ở nhiều lớp.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dùng mức thấp hơn cho:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Đổi tên biến hoặc hàm.&lt;/li&gt;
&lt;li&gt;Chỉnh sửa tài liệu.&lt;/li&gt;
&lt;li&gt;Thay đổi nhỏ, có phạm vi rõ ràng.&lt;/li&gt;
&lt;li&gt;Tạo test case đơn giản.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sau khi chọn mô hình và workspace, bạn có thể giao nhiệm vụ. Nếu muốn thử K3 mà không cần cài Kimi Code hoặc cần lựa chọn miễn phí, xem &lt;a href="https://apidog.com/vi/blog/how-to-use-kimi-k3-for-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;cách sử dụng Kimi K3 miễn phí&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quy trình lập trình tác nhân thực tế
&lt;/h2&gt;

&lt;p&gt;Dù bạn sửa bug hay xây tính năng, quy trình nên luôn có ba phần:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mô tả nhiệm vụ cụ thể.&lt;/li&gt;
&lt;li&gt;Cho tác nhân thu thập ngữ cảnh và thực thi.&lt;/li&gt;
&lt;li&gt;Yêu cầu bằng chứng khách quan: test, build, log hoặc HTTP response.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Giao nhiệm vụ có thể kiểm thử
&lt;/h3&gt;

&lt;p&gt;Tránh prompt chung chung như:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Cải thiện mô-đun xác thực.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Thay vào đó, cung cấp lỗi, phạm vi và tiêu chí hoàn thành:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Endpoint /login trả về HTTP 500 khi trường password rỗng.

Hãy:
1. Tái tạo lỗi.
2. Xác định nguyên nhân gốc.
3. Sửa lỗi theo quy ước hiện có của dự án.
4. Thêm test cho trường hợp password rỗng.
5. Chạy toàn bộ test liên quan.
6. Tóm tắt các tệp đã thay đổi và kết quả test.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Một prompt tốt nên trả lời được các câu hỏi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lỗi hoặc yêu cầu chính xác là gì?&lt;/li&gt;
&lt;li&gt;Phạm vi code nào có thể bị ảnh hưởng?&lt;/li&gt;
&lt;li&gt;Điều kiện hoàn thành là gì?&lt;/li&gt;
&lt;li&gt;Những kiểm thử nào phải chạy?&lt;/li&gt;
&lt;li&gt;Có ràng buộc nào về API, tương thích ngược hoặc bảo mật không?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ngữ cảnh 1M token của K3 giúp việc làm việc với toàn bộ repository trở nên thực tế hơn. Tác nhân có thể theo dõi luồng gọi từ route handler qua service layer mà không yêu cầu bạn chỉ định thủ công từng tệp.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cho phép tác nhân dùng công cụ và đọc phản hồi
&lt;/h3&gt;

&lt;p&gt;Trong Kimi Code, K3 có thể chạy shell command, tìm kiếm codebase, build dự án, khởi động dịch vụ và chạy test. Vòng lặp tiêu chuẩn là:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Đọc các tệp liên quan.&lt;/li&gt;
&lt;li&gt;Hình thành giả thuyết về nguyên nhân lỗi.&lt;/li&gt;
&lt;li&gt;Chỉnh sửa mã.&lt;/li&gt;
&lt;li&gt;Chạy test hoặc khởi động ứng dụng.&lt;/li&gt;
&lt;li&gt;Đọc lỗi, log hoặc stack trace.&lt;/li&gt;
&lt;li&gt;Điều chỉnh giải pháp.&lt;/li&gt;
&lt;li&gt;Lặp lại đến khi kiểm tra thành công.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ví dụ prompt cho lỗi backend:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Kiểm tra lỗi timeout khi POST /orders với payload lớn.

Yêu cầu:
- Tái tạo lỗi bằng test hoặc request cục bộ.
- Theo dõi request từ route đến service và database layer.
- Không thay đổi public API nếu không cần thiết.
- Thêm regression test.
- Chạy test module liên quan.
- Báo cáo nguyên nhân gốc, thay đổi và kết quả xác minh.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Điểm quan trọng: đừng yêu cầu mô hình “đúng ngay lần đầu”. Hãy yêu cầu nó &lt;strong&gt;quan sát, kiểm tra và sửa lại&lt;/strong&gt; như một kỹ sư đang làm việc trong repository.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lặp lại dựa trên ảnh chụp màn hình và đầu ra thời gian chạy
&lt;/h3&gt;

&lt;p&gt;Phản hồi không chỉ là text.&lt;/p&gt;

&lt;p&gt;Với frontend, bạn có thể yêu cầu tác nhân:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cập nhật form đăng nhập để hiển thị lỗi validation dưới từng trường.

Tiêu chí:
- Không thay đổi layout trên màn hình desktop.
- Password rỗng phải hiển thị thông báo rõ ràng.
- Chụp ảnh màn hình sau khi render.
- Điều chỉnh CSS nếu thông báo bị tràn hoặc lệch.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vòng lặp UI thường là:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Chỉnh sửa HTML/CSS/JS.&lt;/li&gt;
&lt;li&gt;Render giao diện.&lt;/li&gt;
&lt;li&gt;Chụp ảnh màn hình.&lt;/li&gt;
&lt;li&gt;Kiểm tra hiển thị.&lt;/li&gt;
&lt;li&gt;Điều chỉnh và lặp lại.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Với backend, phản hồi tương ứng là:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Test report.&lt;/li&gt;
&lt;li&gt;Application log.&lt;/li&gt;
&lt;li&gt;Stack trace.&lt;/li&gt;
&lt;li&gt;HTTP response.&lt;/li&gt;
&lt;li&gt;Database error.&lt;/li&gt;
&lt;li&gt;Metrics hoặc trace cục bộ.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Giữ vòng lặp đáng tin cậy bằng kiểm thử
&lt;/h3&gt;

&lt;p&gt;Test là tiêu chí “xong” rõ ràng nhất cho một tác nhân.&lt;/p&gt;

&lt;p&gt;Trước khi giao tác vụ, hãy xác định:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Test hiện có nào cần chạy.&lt;/li&gt;
&lt;li&gt;Test mới nào phải được thêm.&lt;/li&gt;
&lt;li&gt;Những hành vi không được regression.&lt;/li&gt;
&lt;li&gt;Lệnh build hoặc lint nào là bắt buộc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ví dụ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Trước khi hoàn tất:
- Chạy unit test của auth module.
- Chạy lint cho các tệp đã sửa.
- Thêm test regression cho password rỗng.
- Không bỏ qua test hoặc xóa assertion để làm test xanh.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nếu không có test, vòng lặp tự động có thể đi lệch hướng và gây lỗi ở module khác mà không phát hiện.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kimi K3 so với Claude Code và Cursor
&lt;/h2&gt;

&lt;p&gt;Dưới đây là so sánh thực tế giữa ba cách chạy tác nhân trên codebase vào giữa năm 2026.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tiêu chí&lt;/th&gt;
&lt;th&gt;Kimi Code (Kimi K3)&lt;/th&gt;
&lt;th&gt;Claude Code (Fable 5)&lt;/th&gt;
&lt;th&gt;Cursor&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Yếu tố hình thức&lt;/td&gt;
&lt;td&gt;Tác nhân lập trình terminal và IDE&lt;/td&gt;
&lt;td&gt;Tác nhân lập trình terminal&lt;/td&gt;
&lt;td&gt;Trình chỉnh sửa mã AI-native&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mô hình mặc định&lt;/td&gt;
&lt;td&gt;Kimi K3, chuyển qua &lt;code&gt;/model&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Claude Fable 5 và các mô hình Claude khác&lt;/td&gt;
&lt;td&gt;Tự mang mô hình hoặc dùng mô hình tích hợp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cửa sổ ngữ cảnh&lt;/td&gt;
&lt;td&gt;1M token&lt;/td&gt;
&lt;td&gt;Lớn, tùy mô hình&lt;/td&gt;
&lt;td&gt;Tùy mô hình&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Điều hướng repository&lt;/td&gt;
&lt;td&gt;Mạnh, hướng tới tác vụ quy mô lớn và dài hạn&lt;/td&gt;
&lt;td&gt;Mạnh, có quyền truy cập tệp và shell theo tác nhân&lt;/td&gt;
&lt;td&gt;Lập chỉ mục và truy xuất mạnh trong editor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sử dụng công cụ&lt;/td&gt;
&lt;td&gt;Tool calling, shell, test, ảnh chụp màn hình&lt;/td&gt;
&lt;td&gt;Tool calling, shell, MCP&lt;/td&gt;
&lt;td&gt;Công cụ editor, terminal, MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Đòn bẩy chi phí&lt;/td&gt;
&lt;td&gt;Có lợi cho vòng lặp cache-heavy với cache hit 90%+&lt;/td&gt;
&lt;td&gt;Tính phí theo token Claude&lt;/td&gt;
&lt;td&gt;Đăng ký cộng chi phí sử dụng mô hình&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trọng số mở&lt;/td&gt;
&lt;td&gt;Dự kiến khoảng 27 tháng 7 năm 2026&lt;/td&gt;
&lt;td&gt;Đóng&lt;/td&gt;
&lt;td&gt;Editor độc quyền, mô hình đa dạng&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phù hợp nhất&lt;/td&gt;
&lt;td&gt;Tác vụ agent dài, repository lớn, tối ưu chi phí&lt;/td&gt;
&lt;td&gt;Suy luận và độ tin cậy hàng đầu&lt;/td&gt;
&lt;td&gt;Developer muốn agent hoạt động trong editor&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Một số lựa chọn thực tế:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nếu ưu tiên độ tin cậy thô cho tác vụ khó, Fable 5 trong &lt;a href="https://apidog.com/vi/blog/claude-fable-5-claude-code?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Claude Code&lt;/a&gt; là lựa chọn Moonshot cũng thừa nhận vượt K3.&lt;/li&gt;
&lt;li&gt;Nếu muốn agent tích hợp sâu trong editor, Cursor hoặc Cline thường phù hợp hơn.&lt;/li&gt;
&lt;li&gt;Nếu cần chạy mô hình mở trong các môi trường này, xem hướng dẫn &lt;a href="https://apidog.com/vi/blog/glm-5-2-claude-code-cline-cursor?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;GLM-5.2 trong Claude Code, Cline và Cursor&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Nếu cần xử lý repository lớn với vòng lặp dài và quan tâm đến chi phí, K3 có lợi thế nhờ context 1M token và cơ chế cache.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Điểm mạnh và hạn chế thực tế
&lt;/h2&gt;

&lt;h3&gt;
  
  
  K3 giỏi về điều gì?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Ngữ cảnh quy mô repository.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Cửa sổ 1M token giúp tác nhân giữ nhiều phần của codebase trong cùng một phiên, đặc biệt hữu ích với monorepo hoặc thay đổi xuyên nhiều package.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sử dụng công cụ và tự chủ dài hạn.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
K3 được điều chỉnh để duy trì phiên kỹ thuật kéo dài, chạy terminal command, đọc output và tự điều chỉnh theo phản hồi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chi phí trong vòng lặp nặng bộ nhớ đệm.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Lập trình tác nhân thường gửi lại cùng ngữ cảnh ở mỗi bước: cấu trúc tệp, system instruction và lịch sử nhiệm vụ. Giá input cache hit của K3 là 0,30 USD cho mỗi triệu token, so với 3,00 USD khi cache miss — chênh lệch 10 lần. Mooncake inference của Moonshot được báo cáo đạt cache hit trên 90% trong tác vụ lập trình. Xem &lt;a href="https://apidog.com/vi/blog/kimi-k3-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;phân tích giá Kimi K3&lt;/a&gt; để biết thêm số liệu.&lt;/p&gt;
&lt;h3&gt;
  
  
  Những hạn chế của K3
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Không phải mô hình dẫn đầu tuyệt đối.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Moonshot cho biết K3 vẫn kém các mô hình độc quyền mạnh nhất như Claude Fable 5 và GPT-5.6 Sol. Theo các benchmark Moonshot công bố:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Terminal Bench 2.1: K3 đạt 88.3, GPT-5.6 Sol đạt 88.8.&lt;/li&gt;
&lt;li&gt;DeepSWE: K3 đạt 67.5, Fable 5 đạt 70.0, GPT-5.6 Sol đạt 73.0.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kết quả cạnh tranh, nhưng K3 không đứng đầu. Xem &lt;a href="https://apidog.com/vi/blog/kimi-k3-benchmarks?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;phân tích benchmark Kimi K3&lt;/a&gt; để xem chi tiết.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Không phải lựa chọn nhanh nhất.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Theo &lt;a href="https://artificialanalysis.ai/models/kimi-k3" rel="noopener noreferrer"&gt;Artificial Analysis&lt;/a&gt;, K3 tạo khoảng 62 token/giây, thấp hơn trung bình trong phân khúc giá của nó. Nếu cần phản hồi tương tác nhanh, hãy benchmark thêm mô hình khác trên chính tác vụ của bạn.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Khả năng “mở” vẫn phụ thuộc lịch phát hành.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Trọng số đầy đủ dự kiến vào khoảng ngày 27 tháng 7 năm 2026, không phải ngày ra mắt. Nếu chiến lược của bạn phụ thuộc vào self-hosting, đây là mốc cần theo dõi.&lt;/p&gt;

&lt;p&gt;Để so sánh trực tiếp, xem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://apidog.com/vi/blog/kimi-k3-vs-claude-opus-4-8?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K3 so với Claude Opus 4.8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidog.com/vi/blog/kimi-k3-vs-gpt-5-6-sol?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K3 so với GPT-5.6 Sol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidog.com/vi/blog/kimi-k3-vs-kimi-k2-7-code?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K3 so với Kimi K2.7 Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Các trường hợp sử dụng thực tế
&lt;/h2&gt;

&lt;p&gt;K3 phù hợp nhất khi nhiệm vụ có nhiều bước, cần đọc nhiều ngữ cảnh và có tín hiệu xác minh rõ ràng.&lt;/p&gt;
&lt;h3&gt;
  
  
  Refactor lớn trong monorepo
&lt;/h3&gt;

&lt;p&gt;Ví dụ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Tách module billing khỏi package monolith hiện tại.

Yêu cầu:
- Xác định toàn bộ import và dependency liên quan.
- Không thay đổi API công khai.
- Cập nhật test, build config và tài liệu nội bộ nếu cần.
- Chạy build và test cho tất cả package bị ảnh hưởng.
- Liệt kê các thay đổi có rủi ro cần review thủ công.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Gỡ lỗi kéo dài
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Có memory leak khi worker xử lý queue chạy liên tục hơn 30 phút.

Hãy:
- Tìm code khởi tạo worker và lifecycle cleanup.
- Kiểm tra timer, event listener, connection và cache.
- Tái tạo bằng test hoặc script tối thiểu nếu khả thi.
- Đề xuất và triển khai bản vá nhỏ nhất.
- Đưa ra bằng chứng từ test, log hoặc profiling output.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Xây dựng API có kiểm chứng
&lt;/h3&gt;

&lt;p&gt;K3 có thể tạo handler, route, validation và test. Nhưng sau khi test code chạy xanh, bạn vẫn nên xác minh API như một client thực.&lt;/p&gt;

&lt;h2&gt;
  
  
  Xác minh API mà K3 xây dựng
&lt;/h2&gt;

&lt;p&gt;Unit test xác nhận mã có chạy. Tuy nhiên, chúng không luôn đảm bảo endpoint hoạt động đúng theo kỳ vọng của client:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Status code có đúng không?&lt;/li&gt;
&lt;li&gt;Response body có đúng schema không?&lt;/li&gt;
&lt;li&gt;Header có đầy đủ không?&lt;/li&gt;
&lt;li&gt;Token không hợp lệ có bị từ chối không?&lt;/li&gt;
&lt;li&gt;Payload sai có trả lỗi validation nhất quán không?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Đây là lúc &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; hữu ích. Sau khi K3 tạo hoặc chỉnh sửa API, hãy gửi request thực đến endpoint và thêm assertion cho status code, header và JSON body.&lt;/p&gt;

&lt;p&gt;Ví dụ checklist kiểm thử endpoint &lt;code&gt;/login&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST /login

Kiểm tra:
- Password rỗng trả về lỗi validation, không phải HTTP 500.
- Sai mật khẩu trả về status code phù hợp.
- Response không chứa dữ liệu nhạy cảm.
- Token hợp lệ được trả về theo schema đã định nghĩa.
- Header Content-Type đúng.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nếu tác nhân tạo OpenAPI spec, hãy import spec vào Apidog để tạo request collection và kiểm thử theo contract thay vì kiểm tra thủ công.&lt;/p&gt;

&lt;p&gt;Khi làm việc với môi trường chia sẻ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lưu secret trong biến môi trường của Apidog.&lt;/li&gt;
&lt;li&gt;Không hard-code token vào collection.&lt;/li&gt;
&lt;li&gt;Không commit API key vào repository.&lt;/li&gt;
&lt;li&gt;Tách biến môi trường local, staging và production.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Apidog cũng cung cấp giao diện MCP, giúp kết nối công cụ API vào ngữ cảnh tác nhân. Xem hướng dẫn &lt;a href="https://apidog.com/vi/blog/from-apis-to-ai-agents-visual-debugging-with-apidog-mcp-client?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;gỡ lỗi trực quan bằng client MCP của Apidog&lt;/a&gt; và &lt;a href="https://apidog.com/vi/blog/use-apidog-inside-vscode?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog trong VS Code&lt;/a&gt; để giữ vòng lặp kiểm thử gần với code mà K3 viết. Bạn có thể &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;tải Apidog&lt;/a&gt; để kiểm tra đầu ra API ngay khi được tạo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bạn sẽ nhận được gì?
&lt;/h2&gt;

&lt;p&gt;Kimi K3 trong Kimi Code là lựa chọn thực tế cho các repository lớn, vòng lặp tự động dài và tác vụ cần lặp lại theo test, log hoặc ảnh chụp màn hình. Context 1M token và mô hình chi phí dựa trên cache giúp nó phù hợp với công việc nhiều bước mà các mô hình tính token khác có thể trở nên đắt đỏ.&lt;/p&gt;

&lt;p&gt;Để bắt đầu hiệu quả:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Khởi chạy Kimi Code tại thư mục gốc của repository.&lt;/li&gt;
&lt;li&gt;Chọn K3 bằng &lt;code&gt;/model kimi-k3&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Giao một nhiệm vụ có thể kiểm thử.&lt;/li&gt;
&lt;li&gt;Yêu cầu tác nhân chạy test, build hoặc request thật.&lt;/li&gt;
&lt;li&gt;Review diff trước khi merge.&lt;/li&gt;
&lt;li&gt;Xác minh API bằng &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; trước khi triển khai.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Các câu hỏi thường gặp
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Làm cách nào để sử dụng Kimi K3 để lập trình?
&lt;/h3&gt;

&lt;p&gt;Chạy K3 trong Kimi Code, tác nhân lập trình terminal và IDE của Moonshot. Cài đặt tác nhân, mở nó trong thư mục dự án, chọn mô hình bằng:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/model kimi-k3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sau đó giao một nhiệm vụ cụ thể, có thể kiểm thử. Để tác nhân đọc tệp, chạy công cụ, thực thi test và lặp lại dựa trên kết quả. Xem &lt;a href="https://apidog.com/vi/blog/kimi-code-cli?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn CLI của Kimi Code&lt;/a&gt; để cài đặt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kimi K3 có tốt cho lập trình tác nhân không?
&lt;/h3&gt;

&lt;p&gt;Có. K3 được điều chỉnh cho việc điều hướng repository lớn, dùng công cụ, gỡ lỗi và lặp lại dựa trên test, log và phản hồi thời gian chạy trong context 1M token. Nó cạnh tranh trên benchmark lập trình, dù vẫn kém Fable 5 và GPT-5.6 Sol ở một số chỉ số.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kimi K3 có hỗ trợ gọi công cụ cho quy trình tác nhân không?
&lt;/h3&gt;

&lt;p&gt;Có. K3 API hỗ trợ tool calling, ràng buộc lựa chọn công cụ, JSON mode, structured output, tìm kiếm internet, tải công cụ động và nỗ lực suy luận có thể cấu hình. Những khả năng này cho phép tác nhân chạy test, thực thi shell command và điều phối vòng lặp kỹ thuật trong Kimi Code. Xem &lt;a href="https://apidog.com/vi/blog/kimi-k3-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn API Kimi K3&lt;/a&gt; để biết chi tiết.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tôi có thể kiểm thử API mà Kimi K3 viết không?
&lt;/h3&gt;

&lt;p&gt;Có, và nên làm như vậy. Test của tác nhân chỉ xác nhận code chạy; chúng không luôn xác nhận endpoint trả đúng status code, schema phản hồi và hành vi xác thực như client thực mong đợi. Hãy gửi request thật trong &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;, thêm assertion và import OpenAPI spec do tác nhân tạo để xác thực theo contract.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Kimi K3 vs GPT-5.6 Sol: AI Nguồn Mở Thách Thức Đỉnh Cao Công Nghệ</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Fri, 17 Jul 2026 07:22:17 +0000</pubDate>
      <link>https://dev.to/sebbasstian/kimi-k3-vs-gpt-56-sol-ai-nguon-mo-thach-thuc-dinh-cao-cong-nghe-2ikj</link>
      <guid>https://dev.to/sebbasstian/kimi-k3-vs-gpt-56-sol-ai-nguon-mo-thach-thuc-dinh-cao-cong-nghe-2ikj</guid>
      <description>&lt;p&gt;Moonshot AI đã phát hành Kimi K3 vào ngày 16 tháng 7 năm 2026 và định vị đây là mô hình mở đầu tiên trong phân khúc 3 nghìn tỷ tham số. Câu hỏi thực tế cho đội ngũ kỹ thuật là: liệu trọng số mở, ngữ cảnh dài và chi phí thấp hơn có đủ để cạnh tranh với mô hình đóng hàng đầu? Trong &lt;a href="https://www.kimi.com/blog/kimi-k3" rel="noopener noreferrer"&gt;bài đăng ra mắt Kimi K3&lt;/a&gt;, Moonshot thừa nhận K3 vẫn kém Claude Fable 5 và GPT-5.6 Sol về chất lượng tổng thể. Vì vậy, đây không phải bài toán “mô hình nào thắng tuyệt đối”, mà là chọn giữa chất lượng tiên phong của Sol và quyền kiểm soát, ngữ cảnh, chi phí của K3.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Dùng thử Apidog ngay hôm nay&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;GPT-5.6 Sol là phiên bản tiên phong của OpenAI trong dòng GPT-5.6, cùng Terra và Luna. Kimi K3 là lựa chọn mô hình mở mạnh trong phân khúc, xếp thứ tư trên Chỉ số Thông minh của Artificial Analysis. Cả hai cung cấp API tương thích với OpenAI, nên bạn có thể chạy cùng một prompt trên &lt;code&gt;kimi-k3&lt;/code&gt; và &lt;code&gt;gpt-5.6-sol&lt;/code&gt; trong &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;, sau đó so sánh chất lượng, độ trễ và mức dùng token.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR: cách chọn nhanh
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chọn GPT-5.6 Sol&lt;/strong&gt; nếu ưu tiên hàng đầu là suy luận, coding agent và chất lượng tối đa trong hệ sinh thái OpenAI được quản lý.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chọn Kimi K3&lt;/strong&gt; nếu cần trọng số mở, tự lưu trữ, ngữ cảnh 1 triệu token hoặc kiểm soát chi phí đầu vào.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Đừng chỉ dựa vào benchmark của nhà cung cấp.&lt;/strong&gt; Hiện chưa có kết quả độc lập, khách quan so sánh trực tiếp K3 và Sol.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hãy chạy A/B test bằng workload thật.&lt;/strong&gt; Vì cả hai dùng API tương thích OpenAI, chi phí chuyển đổi khi thử nghiệm song song rất thấp.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Gặp gỡ hai mô hình
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Kimi K3
&lt;/h3&gt;

&lt;p&gt;Kimi K3 là mô hình Mixture-of-Experts (MoE) của Moonshot AI, với tổng cộng 2,8 nghìn tỷ tham số. Kiến trúc sử dụng Kimi Delta Attention, Attention Residuals và Stable LatentMoE; mỗi token kích hoạt 16 trong số 896 chuyên gia.&lt;/p&gt;

&lt;p&gt;Moonshot chưa công bố số tham số hoạt động. Đây là chỉ số thường ảnh hưởng trực tiếp đến chi phí và tốc độ suy luận, vì vậy không nên xem con số 2,8T là lượng tính toán cho mỗi token.&lt;/p&gt;

&lt;p&gt;Các đặc điểm cần biết khi tích hợp:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Model ID: &lt;code&gt;kimi-k3&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Đầu vào: văn bản và hình ảnh&lt;/li&gt;
&lt;li&gt;Đầu ra: văn bản&lt;/li&gt;
&lt;li&gt;Cửa sổ ngữ cảnh: 1.000.000 token&lt;/li&gt;
&lt;li&gt;Trọng số dự kiến mở vào khoảng ngày 27 tháng 7 năm 2026&lt;/li&gt;
&lt;li&gt;API tương thích OpenAI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Xem thêm: &lt;a href="https://apidog.com/vi/blog/what-is-kimi-k3?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K3 là gì?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F07%2Fimage-185.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F07%2Fimage-185.png" alt="Kimi K3" width="799" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  GPT-5.6 Sol
&lt;/h3&gt;

&lt;p&gt;GPT-5.6 Sol là mô hình tiên phong đóng của OpenAI trong thế hệ GPT-5.6. Bạn có thể gọi model qua API hoặc sản phẩm OpenAI, nhưng không thể tải trọng số về để kiểm tra, tinh chỉnh hoặc tự triển khai.&lt;/p&gt;

&lt;p&gt;OpenAI định vị Sol là model mạnh nhất trong dòng GPT-5.6. Terra và Luna phục vụ các điểm cân bằng khác nhau về chi phí và độ trễ.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Model ID: &lt;code&gt;gpt-5.6-sol&lt;/code&gt; — cần xác nhận trong tài liệu OpenAI trước khi triển khai.&lt;/li&gt;
&lt;li&gt;Truy cập: API và sản phẩm OpenAI.&lt;/li&gt;
&lt;li&gt;Trọng số: không công khai.&lt;/li&gt;
&lt;li&gt;Vận hành: được OpenAI quản lý.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tham khảo: &lt;a href="https://apidog.com/vi/blog/gpt-5-6-sol-vs-terra-vs-luna?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;GPT-5.6 Sol so với Terra so với Luna&lt;/a&gt; và &lt;a href="https://platform.openai.com/docs/models" rel="noopener noreferrer"&gt;tài liệu model của OpenAI&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  So sánh nhanh
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Khía cạnh&lt;/th&gt;
&lt;th&gt;Kimi K3&lt;/th&gt;
&lt;th&gt;GPT-5.6 Sol&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Nhà phát triển&lt;/td&gt;
&lt;td&gt;Moonshot AI&lt;/td&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ra mắt&lt;/td&gt;
&lt;td&gt;16 tháng 7 năm 2026&lt;/td&gt;
&lt;td&gt;Dòng GPT-5.6, 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cách truy cập&lt;/td&gt;
&lt;td&gt;Trọng số mở, dự kiến khoảng 27 tháng 7 năm 2026&lt;/td&gt;
&lt;td&gt;Đóng, qua API và sản phẩm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kiến trúc&lt;/td&gt;
&lt;td&gt;MoE, 2,8T tổng tham số, 16/896 chuyên gia hoạt động&lt;/td&gt;
&lt;td&gt;Chưa công bố&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chất lượng hàng đầu&lt;/td&gt;
&lt;td&gt;Dẫn đầu nhóm mô hình mở; Chỉ số Thông minh AA 57, xếp #4/189&lt;/td&gt;
&lt;td&gt;Được Moonshot định vị cao hơn K3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cửa sổ ngữ cảnh&lt;/td&gt;
&lt;td&gt;1.000.000 token&lt;/td&gt;
&lt;td&gt;Lớn; kiểm tra tài liệu OpenAI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Đầu vào&lt;/td&gt;
&lt;td&gt;Văn bản và hình ảnh&lt;/td&gt;
&lt;td&gt;Đa phương thức; kiểm tra tài liệu OpenAI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tốc độ đầu ra&lt;/td&gt;
&lt;td&gt;Khoảng 62 token/giây theo Artificial Analysis&lt;/td&gt;
&lt;td&gt;Phụ thuộc cấp độ và tải&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Giá đầu vào&lt;/td&gt;
&lt;td&gt;$0,30/M cache-hit, $3,00/M cache-miss&lt;/td&gt;
&lt;td&gt;Kiểm tra giá hiện tại của OpenAI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Giá đầu ra&lt;/td&gt;
&lt;td&gt;$15,00/M token&lt;/td&gt;
&lt;td&gt;Kiểm tra giá hiện tại của OpenAI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tự lưu trữ&lt;/td&gt;
&lt;td&gt;Có, khi trọng số được phát hành&lt;/td&gt;
&lt;td&gt;Không&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hệ sinh thái&lt;/td&gt;
&lt;td&gt;Kimi, Kimi Code, Kimi Work, API tương thích OpenAI&lt;/td&gt;
&lt;td&gt;SDK, công cụ và tích hợp OpenAI&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Hai lưu ý quan trọng:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Điểm Chỉ số Thông minh 57 đưa K3 lên hạng 4 trong 189 model do &lt;a href="https://artificialanalysis.ai/models/kimi-k3" rel="noopener noreferrer"&gt;Artificial Analysis&lt;/a&gt; theo dõi. Đây là kết quả đáng chú ý cho mô hình mở, nhưng không chứng minh K3 vượt Sol tổng thể.&lt;/li&gt;
&lt;li&gt;Các số liệu đối đầu hiện có đến từ Moonshot. Hãy xem đây là chỉ dấu ban đầu, không phải kết luận độc lập. Theo dõi các cập nhật tại &lt;a href="https://apidog.com/vi/blog/kimi-k3-benchmarks?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;điểm chuẩn Kimi K3&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Chất lượng suy luận và coding
&lt;/h2&gt;

&lt;p&gt;Sol phù hợp hơn khi workload nằm sát giới hạn khả năng của model hiện tại:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lập kế hoạch agent nhiều bước.&lt;/li&gt;
&lt;li&gt;Tái cấu trúc codebase lớn.&lt;/li&gt;
&lt;li&gt;Xử lý nhiệm vụ lập trình tác nhân khó.&lt;/li&gt;
&lt;li&gt;Suy luận cần độ ổn định cao qua nhiều vòng gọi tool.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Moonshot cũng định vị Sol cao hơn K3 về năng lực tổng thể. Nếu sản phẩm của bạn bán “chất lượng tốt nhất có thể”, Sol là lựa chọn ít rủi ro hơn.&lt;/p&gt;

&lt;p&gt;Tuy nhiên, K3 không phải lựa chọn yếu. Với các tác vụ sản xuất phổ biến như:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tóm tắt tài liệu.&lt;/li&gt;
&lt;li&gt;Phân loại nội dung.&lt;/li&gt;
&lt;li&gt;Trả lời RAG.&lt;/li&gt;
&lt;li&gt;Soạn thảo nội dung.&lt;/li&gt;
&lt;li&gt;Trợ lý lập trình hằng ngày.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…khoảng cách giữa model hạng tư và model dẫn đầu có thể không dễ nhận biết trong bài kiểm tra mù. Đây là lúc tính mở, ngữ cảnh và chi phí trở thành tiêu chí quyết định.&lt;/p&gt;

&lt;p&gt;Moonshot công bố bảng benchmark sau, chạy với cấu hình suy luận tối đa:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Điểm chuẩn&lt;/th&gt;
&lt;th&gt;Kimi K3&lt;/th&gt;
&lt;th&gt;GPT-5.6 Sol&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Terminal-Bench 2.1&lt;/td&gt;
&lt;td&gt;88,3&lt;/td&gt;
&lt;td&gt;88,8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSWE&lt;/td&gt;
&lt;td&gt;67,5&lt;/td&gt;
&lt;td&gt;73,0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BrowseComp&lt;/td&gt;
&lt;td&gt;91,2&lt;/td&gt;
&lt;td&gt;90,4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automation Bench&lt;/td&gt;
&lt;td&gt;30,8&lt;/td&gt;
&lt;td&gt;29,7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SpreadsheetBench 2&lt;/td&gt;
&lt;td&gt;34,8&lt;/td&gt;
&lt;td&gt;32,4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;K3 thắng 3 trên 5 benchmark trong bảng này: BrowseComp, Automation Bench và SpreadsheetBench 2. Sol dẫn trước nhẹ ở Terminal-Bench 2.1 và rõ rệt hơn ở DeepSWE, với 73,0 so với 67,5.&lt;/p&gt;

&lt;p&gt;Điều cần rút ra: lợi thế của Sol có xu hướng xuất hiện ở các bài toán agentic coding khó nhất. Điều này phù hợp với nhận định của Moonshot rằng K3 vẫn kém Sol về năng lực tổng thể.&lt;/p&gt;

&lt;p&gt;Artificial Analysis cũng gắn cờ K3 có xu hướng dài dòng: model tạo khoảng 130 triệu token đầu ra trong quá trình chạy Chỉ số Thông minh, trong khi mức trung bình là 63 triệu. Với giá đầu ra $15/M token, hãy chủ động giới hạn độ dài câu trả lời:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Trả lời tối đa 8 gạch đầu dòng.
Không lặp lại yêu cầu.
Nếu thiếu dữ liệu, chỉ nêu câu hỏi cần làm rõ.
Giới hạn phần giải thích dưới 300 từ.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Để xem thêm góc nhìn về coding, đọc &lt;a href="https://apidog.com/vi/blog/kimi-k3-coding?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K3 để lập trình&lt;/a&gt; và &lt;a href="https://apidog.com/vi/blog/kimi-k3-vs-claude-opus-4-8?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K3 so với Claude Opus 4.8&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tính mở và tự lưu trữ
&lt;/h2&gt;

&lt;p&gt;Đây là lợi thế rõ rệt nhất của Kimi K3.&lt;/p&gt;

&lt;p&gt;Khi trọng số được mở, bạn có thể:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chạy model trong hạ tầng riêng.&lt;/li&gt;
&lt;li&gt;Giữ prompt và dữ liệu nhạy cảm trong mạng nội bộ.&lt;/li&gt;
&lt;li&gt;Tinh chỉnh theo dữ liệu hoặc miền chuyên biệt.&lt;/li&gt;
&lt;li&gt;Ghim một phiên bản model để tránh thay đổi hành vi ngoài ý muốn.&lt;/li&gt;
&lt;li&gt;Loại bỏ phí API theo token ở quy mô lớn.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;K3 phù hợp khi bạn làm việc trong môi trường:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Có yêu cầu lưu trú dữ liệu.&lt;/li&gt;
&lt;li&gt;Bị hạn chế gửi dữ liệu sang API bên ngoài.&lt;/li&gt;
&lt;li&gt;Cần triển khai air-gapped.&lt;/li&gt;
&lt;li&gt;Cần kiểm soát phiên bản model dài hạn.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ngược lại, GPT-5.6 Sol là dịch vụ đóng và được lưu trữ. Bạn đổi quyền kiểm soát lấy sự tiện lợi: OpenAI quản lý hạ tầng, độ tin cậy và công cụ, nhưng bạn không thể kiểm tra hoặc sửa trọng số model.&lt;/p&gt;

&lt;p&gt;Lưu ý thực tế: tự vận hành một model 3 nghìn tỷ tham số đòi hỏi GPU, hạ tầng suy luận và năng lực vận hành đáng kể. “Trọng số mở” không đồng nghĩa “triển khai rẻ hoặc đơn giản”.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ngữ cảnh dài và phân tích tài liệu
&lt;/h2&gt;

&lt;p&gt;Kimi K3 có cửa sổ ngữ cảnh 1 triệu token, tương đương khoảng 1.500 trang trong một request. Điều này có thể giảm nhu cầu phân đoạn dữ liệu trong các trường hợp như:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phân tích codebase lớn.&lt;/li&gt;
&lt;li&gt;Rà soát hợp đồng dài.&lt;/li&gt;
&lt;li&gt;Tổng hợp bộ tài liệu nội bộ.&lt;/li&gt;
&lt;li&gt;Theo dõi lịch sử tác nhân dài.&lt;/li&gt;
&lt;li&gt;Đọc log hoặc dữ liệu vận hành nhiều phần.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GPT-5.6 Sol cũng hỗ trợ cửa sổ ngữ cảnh lớn, nhưng hãy kiểm tra tài liệu OpenAI để biết giới hạn hiện tại thay vì dựa vào số liệu cũ.&lt;/p&gt;

&lt;p&gt;Dù model có ngữ cảnh lớn, hãy luôn đo chất lượng retrieval và recall trên tài liệu thật của bạn. Một cửa sổ 1M token là dung lượng xử lý, không phải bảo đảm model sẽ ghi nhớ hoàn hảo mọi chi tiết.&lt;/p&gt;

&lt;h2&gt;
  
  
  Giá cả và kiểm soát chi phí
&lt;/h2&gt;

&lt;p&gt;Kimi K3 có giá:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Loại token&lt;/th&gt;
&lt;th&gt;Giá&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Đầu vào cache-hit&lt;/td&gt;
&lt;td&gt;$0,30/M token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Đầu vào cache-miss&lt;/td&gt;
&lt;td&gt;$3,00/M token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Đầu ra&lt;/td&gt;
&lt;td&gt;$15,00/M token&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Lợi thế lớn nằm ở cache-hit. Nếu ứng dụng thường xuyên tái sử dụng system prompt lớn, tài liệu nền ổn định hoặc context cố định, chi phí đầu vào có thể giảm đáng kể.&lt;/p&gt;

&lt;p&gt;Ví dụ, dùng một system prompt chung cho mọi request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bạn là trợ lý hỗ trợ nội bộ.
Chỉ trả lời dựa trên tài liệu được cung cấp.
Nếu không có bằng chứng trong tài liệu, trả lời: "Không đủ dữ liệu".
Trả lời bằng tiếng Việt, ngắn gọn và có nguồn trích dẫn.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Để tận dụng cache tốt hơn:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Đặt phần prompt tĩnh ở đầu request.&lt;/li&gt;
&lt;li&gt;Giữ nguyên thứ tự và nội dung của phần tĩnh.&lt;/li&gt;
&lt;li&gt;Chỉ thêm câu hỏi người dùng và dữ liệu thay đổi ở cuối.&lt;/li&gt;
&lt;li&gt;Theo dõi token input/output thực tế theo endpoint.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Xem thêm &lt;a href="https://apidog.com/vi/blog/kimi-k3-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;phân tích giá Kimi K3&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Giá GPT-5.6 Sol do OpenAI công bố và có thể thay đổi theo thời gian. So sánh giá bằng tỷ lệ token thật của workload, không chỉ bằng đơn giá đầu vào. Nếu Sol vượt ngân sách, Terra hoặc Luna có thể là lựa chọn phù hợp hơn. Tham khảo &lt;a href="https://apidog.com/vi/blog/gpt-5-6-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn định giá GPT-5.6&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hệ sinh thái, công cụ và tốc độ
&lt;/h2&gt;

&lt;p&gt;Sol có lợi thế khi đội ngũ của bạn đã dùng OpenAI SDK, function calling hoặc structured output. Việc chuyển sang Sol thường chỉ cần đổi model ID.&lt;/p&gt;

&lt;p&gt;K3 giảm chi phí chuyển đổi nhờ API tương thích OpenAI. Trong nhiều ứng dụng, bạn chỉ cần thay base URL và model ID.&lt;/p&gt;

&lt;p&gt;Ví dụ request tương thích OpenAI cho Kimi K3:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.moonshot.ai/v1/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$MOONSHOT_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "kimi-k3",
    "messages": [
      {
        "role": "user",
        "content": "Tóm tắt tài liệu này thành 5 ý chính."
      }
    ]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ví dụ request cho GPT-5.6 Sol:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.openai.com/v1/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$OPENAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "gpt-5.6-sol",
    "messages": [
      {
        "role": "user",
        "content": "Tóm tắt tài liệu này thành 5 ý chính."
      }
    ]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Xác nhận endpoint, model ID và tham số hỗ trợ trong tài liệu chính thức của từng nhà cung cấp trước khi đưa vào production.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Về tốc độ, Artificial Analysis đo K3 ở khoảng 62 token/giây, với thời gian đến token đầu tiên gần 2 giây. Thông lượng của Sol phụ thuộc cấp độ dịch vụ và tải hệ thống.&lt;/p&gt;

&lt;p&gt;Đừng benchmark bằng một request đơn lẻ. Hãy đo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Time to first token.&lt;/li&gt;
&lt;li&gt;Tổng thời gian phản hồi.&lt;/li&gt;
&lt;li&gt;Token/giây.&lt;/li&gt;
&lt;li&gt;Tỷ lệ lỗi.&lt;/li&gt;
&lt;li&gt;P95/P99 latency.&lt;/li&gt;
&lt;li&gt;Chi phí trung bình cho mỗi tác vụ hoàn thành.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tham khảo thêm &lt;a href="https://apidog.com/vi/blog/how-to-use-gpt-5-6-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;cách sử dụng API GPT-5.6&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ma trận quyết định
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nếu ưu tiên của bạn là…&lt;/th&gt;
&lt;th&gt;Nghiêng về&lt;/th&gt;
&lt;th&gt;Lý do&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chất lượng suy luận tối đa&lt;/td&gt;
&lt;td&gt;GPT-5.6 Sol&lt;/td&gt;
&lt;td&gt;Moonshot định vị Sol cao hơn K3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trọng số mở và khả năng kiểm tra&lt;/td&gt;
&lt;td&gt;Kimi K3&lt;/td&gt;
&lt;td&gt;Trọng số dự kiến mở&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tự lưu trữ hoặc triển khai cách ly&lt;/td&gt;
&lt;td&gt;Kimi K3&lt;/td&gt;
&lt;td&gt;Sol chỉ có dạng dịch vụ đóng&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kiểm soát dữ liệu và quyền riêng tư&lt;/td&gt;
&lt;td&gt;Kimi K3&lt;/td&gt;
&lt;td&gt;Có thể chạy trong hạ tầng riêng&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ngữ cảnh rất dài&lt;/td&gt;
&lt;td&gt;Kimi K3&lt;/td&gt;
&lt;td&gt;Công bố cửa sổ 1M token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SDK và công cụ trưởng thành&lt;/td&gt;
&lt;td&gt;GPT-5.6 Sol&lt;/td&gt;
&lt;td&gt;Hệ sinh thái OpenAI rộng&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Đầu vào rẻ khi tái sử dụng prompt&lt;/td&gt;
&lt;td&gt;Kimi K3&lt;/td&gt;
&lt;td&gt;Cache-hit $0,30/M token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Không muốn vận hành hạ tầng&lt;/td&gt;
&lt;td&gt;GPT-5.6 Sol&lt;/td&gt;
&lt;td&gt;Dịch vụ được quản lý&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tinh chỉnh theo miền riêng&lt;/td&gt;
&lt;td&gt;Kimi K3&lt;/td&gt;
&lt;td&gt;Trọng số mở hỗ trợ khả năng này&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agentic coding khó&lt;/td&gt;
&lt;td&gt;GPT-5.6 Sol&lt;/td&gt;
&lt;td&gt;Lợi thế chất lượng ở tác vụ khó&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Các trường hợp sử dụng thực tế
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Trợ lý tài liệu nội bộ trong fintech
&lt;/h3&gt;

&lt;p&gt;Nếu chính sách tuân thủ cấm gửi dữ liệu khách hàng ra API bên ngoài, Sol không phù hợp. Kimi K3 là lựa chọn logic khi trọng số mở, vì nhóm có thể triển khai sau tường lửa, giữ dữ liệu nội bộ và tận dụng ngữ cảnh dài cho hồ sơ hoặc tài liệu phức tạp.&lt;/p&gt;

&lt;h3&gt;
  
  
  Copilot lập trình cho startup
&lt;/h3&gt;

&lt;p&gt;Nếu giá trị sản phẩm nằm ở khả năng xử lý tái cấu trúc khó, giải quyết bug phức tạp hoặc điều phối agent nhiều bước, Sol là lựa chọn an toàn hơn. Đội ngũ có thể chấp nhận chi phí cao hơn để đổi lấy chất lượng suy luận và hệ sinh thái OpenAI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thử nghiệm Kimi K3 và GPT-5.6 Sol trong Apidog
&lt;/h2&gt;

&lt;p&gt;Đừng chọn model chỉ dựa trên benchmark công khai. Hãy chạy workload thật của bạn trên cả hai.&lt;/p&gt;

&lt;p&gt;Trong &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;, tạo hai request &lt;code&gt;POST&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Một request đến API Moonshot với model &lt;code&gt;kimi-k3&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Một request đến API OpenAI với model &lt;code&gt;gpt-5.6-sol&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Dùng cùng system prompt, user prompt và dữ liệu đầu vào.&lt;/li&gt;
&lt;li&gt;Lưu API key bằng biến môi trường.&lt;/li&gt;
&lt;li&gt;So sánh response, token usage, latency và chi phí.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ví dụ biến môi trường:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MOONSHOT_API_KEY=your_moonshot_key
OPENAI_API_KEY=your_openai_key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ví dụ body dùng chung:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{model_id}}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"temperature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"messages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"system"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bạn là trợ lý kỹ thuật. Trả lời ngắn gọn, chính xác và nêu rõ giả định."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{prompt}}"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Để đánh giá công bằng, hãy chuẩn bị bộ test gồm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompt RAG có nguồn.&lt;/li&gt;
&lt;li&gt;Tác vụ tóm tắt tài liệu dài.&lt;/li&gt;
&lt;li&gt;Tác vụ phân loại có schema cố định.&lt;/li&gt;
&lt;li&gt;Bài toán coding từ repository thật.&lt;/li&gt;
&lt;li&gt;Tác vụ gọi tool hoặc lập kế hoạch nhiều bước.&lt;/li&gt;
&lt;li&gt;Prompt cần kiểm soát độ dài đầu ra.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tải &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; để thiết lập môi trường test. Nếu bạn làm việc trong editor, &lt;a href="https://apidog.com/vi/blog/use-apidog-inside-vscode?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog trong VS Code&lt;/a&gt; giúp giữ vòng lặp API test cạnh mã nguồn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kết luận
&lt;/h2&gt;

&lt;p&gt;Kimi K3 và GPT-5.6 Sol tối ưu cho hai hệ giá trị khác nhau.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GPT-5.6 Sol&lt;/strong&gt; phù hợp khi bạn cần chất lượng tiên phong, khả năng suy luận cao và dịch vụ được quản lý.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kimi K3&lt;/strong&gt; phù hợp khi bạn cần trọng số mở, tự lưu trữ, dữ liệu nội bộ, ngữ cảnh 1 triệu token hoặc tối ưu chi phí bằng cache-hit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu không chắc, đừng cam kết sớm. Vì cả hai hỗ trợ API tương thích OpenAI, hãy gửi cùng một prompt, đo chất lượng và chi phí trên dữ liệu thực tế, rồi để số liệu quyết định.&lt;/p&gt;

&lt;h2&gt;
  
  
  Câu hỏi thường gặp
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Kimi K3 có tốt hơn GPT-5.6 Sol không?
&lt;/h3&gt;

&lt;p&gt;Không phải về chất lượng hàng đầu tổng thể. Moonshot cho biết K3 vẫn kém Claude Fable 5 và GPT-5.6 Sol về năng lực tổng thể. K3 mạnh hơn về tính mở, ngữ cảnh 1M token và khả năng kiểm soát chi phí.&lt;/p&gt;

&lt;h3&gt;
  
  
  Có benchmark trực tiếp giữa K3 và Sol không?
&lt;/h3&gt;

&lt;p&gt;Có, nhưng hiện chỉ có bảng do Moonshot tự công bố. K3 thắng BrowseComp, Automation Bench và SpreadsheetBench 2; Sol thắng Terminal-Bench 2.1 và DeepSWE. Hãy xem đây là số liệu định hướng cho đến khi có thử nghiệm độc lập.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tôi có thể tự lưu trữ Kimi K3 không?
&lt;/h3&gt;

&lt;p&gt;Có, khi trọng số được mở vào khoảng ngày 27 tháng 7 năm 2026. Khi đó, bạn có thể chạy K3 trên hạ tầng riêng, tinh chỉnh theo miền và giữ dữ liệu nội bộ. GPT-5.6 Sol chỉ có dạng model đóng được lưu trữ.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kimi K3 có giá bao nhiêu?
&lt;/h3&gt;

&lt;p&gt;K3 có giá $0,30/M token đầu vào cache-hit, $3,00/M token đầu vào cache-miss và $15,00/M token đầu ra. Cache-hit đặc biệt hữu ích cho workload tái sử dụng prompt hoặc context cố định. Với GPT-5.6 Sol, hãy kiểm tra bảng giá hiện tại của OpenAI.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Điểm chuẩn Kimi K3: Số liệu Moonshot so với Kiểm tra độc lập</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Fri, 17 Jul 2026 05:19:54 +0000</pubDate>
      <link>https://dev.to/sebbasstian/diem-chuan-kimi-k3-so-lieu-moonshot-so-voi-kiem-tra-doc-lap-3b83</link>
      <guid>https://dev.to/sebbasstian/diem-chuan-kimi-k3-so-lieu-moonshot-so-voi-kiem-tra-doc-lap-3b83</guid>
      <description>&lt;p&gt;Khi một mô hình mới ra mắt, thường có hai nhóm số liệu không hoàn toàn khớp nhau: số liệu do phòng thí nghiệm công bố và kết quả từ kiểm thử viên độc lập. Kimi K3, được Moonshot AI phát hành vào ngày 16 tháng 7 năm 2026, là ví dụ rõ ràng cho cách đọc hai nhóm dữ liệu này. Theo nguồn độc lập, mô hình có năng lực tốt nhưng không nhanh; theo Moonshot, K3 đạt “cấp độ tiên tiến” trên bộ đánh giá của họ nhưng vẫn kém các hệ thống độc quyền hàng đầu. Bài viết này tách từng tuyên bố để bạn biết số liệu nào đã được xác minh, số liệu nào là do nhà cung cấp công bố và phần nào vẫn cần tự kiểm thử.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Dùng thử Apidog ngay hôm nay&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR: Kimi K3 thực sự được đánh giá như thế nào
&lt;/h2&gt;

&lt;p&gt;Trên &lt;a href="https://artificialanalysis.ai/models/kimi-k3" rel="noopener noreferrer"&gt;Chỉ số Thông minh của Artificial Analysis&lt;/a&gt;, Kimi K3 đạt &lt;strong&gt;57 điểm&lt;/strong&gt;, xếp hạng &lt;strong&gt;#4 trong 189 mô hình&lt;/strong&gt;. Đây là kết quả độc lập và là chỉ dấu đáng tin cậy nhất về năng lực tổng quát.&lt;/p&gt;

&lt;p&gt;Tuy nhiên, tốc độ xuất liệu của K3 vào khoảng &lt;strong&gt;62 token/giây&lt;/strong&gt;, thấp hơn mức trung vị &lt;strong&gt;72,7 token/giây&lt;/strong&gt; trong phân khúc giá. Điều đó khiến K3 phù hợp hơn với tác vụ lập luận, xử lý theo lô hoặc phân tích hơn là luồng tương tác yêu cầu phản hồi nhanh.&lt;/p&gt;

&lt;p&gt;Moonshot công bố K3 có “hiệu suất cấp độ tiên tiến trên bộ đánh giá của chúng tôi”, nhưng cũng thừa nhận K3 vẫn kém Claude Fable 5 và GPT-5.6 Sol ở năng lực tổng thể. Các điểm chuẩn tác nhân như BrowseComp, Automation Bench và SpreadsheetBench 2 có kết quả mạnh, nhưng đây là số liệu do nhà cung cấp tự chạy và chưa được tái kiểm chứng độc lập.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Điểm chuẩn quan trọng nhất là điểm bạn tự chạy trên khối lượng công việc của mình.&lt;/strong&gt; Hãy dùng một client tương thích OpenAI như Apidog để trỏ tới điểm cuối &lt;code&gt;kimi-k3&lt;/code&gt;, sau đó đo độ trễ, chi phí và chất lượng đầu ra trên các prompt thực tế. Kết quả đó có giá trị hơn bất kỳ bảng xếp hạng công khai nào khi quyết định có đưa K3 vào hệ thống hay không.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Ba tuyên bố, được tách bạch
&lt;/h2&gt;

&lt;p&gt;Các buổi ra mắt mô hình thường trộn ba loại tuyên bố vào cùng một thông điệp tiếp thị. Tách chúng ra giúp bạn đánh giá chính xác hơn. Nếu cần thông tin về kiến trúc và giá, xem bài viết &lt;a href="https://apidog.com/vi/blog/what-is-kimi-k3?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K3 là gì&lt;/a&gt;; phần này tập trung vào dữ liệu đánh giá.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F07%2Fimage-181.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F07%2Fimage-181.png" alt="Biểu đồ điểm chuẩn Kimi K3" width="799" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F07%2Fimage-182.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F07%2Fimage-182.png" alt="So sánh hiệu năng Kimi K3" width="800" height="644"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Tuyên bố 1: điểm neo độc lập từ Artificial Analysis
&lt;/h3&gt;

&lt;p&gt;Artificial Analysis là bên thứ ba: họ mua quyền truy cập API, chạy bộ đánh giá cố định và công bố kết quả mà không có sự can thiệp từ phòng thí nghiệm. Vì vậy, đây là nhóm số liệu có trọng lượng cao nhất.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F09cx3yn5ks2eexyfafjj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F09cx3yn5ks2eexyfafjj.png" alt="Điểm Artificial Analysis của Kimi K3" width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Các số liệu độc lập chính của Kimi K3:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chỉ số Thông minh: 57&lt;/strong&gt; — chỉ số tổng hợp cho lập luận, kiến thức và mã hóa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Xếp hạng: #4 trong 189 mô hình&lt;/strong&gt; — chỉ có ba mô hình đạt điểm cao hơn tại thời điểm viết bài.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tốc độ xuất liệu: khoảng 62 token/giây&lt;/strong&gt; — thấp hơn trung vị phân khúc là 72,7 token/giây.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thời gian đến token đầu tiên: khoảng 2 giây&lt;/strong&gt; — có độ trễ khởi đầu trước khi mô hình bắt đầu sinh nội dung.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Các con số này cho thấy K3 &lt;strong&gt;mạnh về năng lực tổng quát nhưng không tối ưu về tốc độ&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Điều đó ảnh hưởng trực tiếp đến cách triển khai:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Với xử lý theo lô qua đêm, tốc độ thấp hơn thường không phải vấn đề lớn.&lt;/li&gt;
&lt;li&gt;Với chatbot, copilot hoặc trợ lý lập trình tương tác, 62 token/giây có thể tạo cảm giác chậm khi phản hồi dài.&lt;/li&gt;
&lt;li&gt;Với API cần SLA độ trễ chặt, hãy kiểm thử bằng prompt và độ dài đầu ra thực tế thay vì chỉ dựa vào tốc độ trung bình.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tuyên bố 2: những gì Moonshot công bố
&lt;/h3&gt;

&lt;p&gt;Bài đăng ra mắt của Moonshot là tài liệu từ nhà cung cấp. Họ mô tả K3 có “hiệu suất cấp độ tiên tiến trên bộ đánh giá của chúng tôi, liên tục vượt trội các mô hình khác đã được thử nghiệm”.&lt;/p&gt;

&lt;p&gt;Cụm từ quan trọng là &lt;strong&gt;“bộ đánh giá của chúng tôi”&lt;/strong&gt;. Việc một nhà cung cấp chọn benchmark phù hợp không đồng nghĩa với gian lận, nhưng đó vẫn là một lợi thế sân nhà. Hãy xem các kết quả này là tín hiệu định hướng, không phải kết luận cuối cùng.&lt;/p&gt;

&lt;p&gt;Một tuyên bố phụ từ các báo cáo ra mắt cho biết K3 đứng đầu 4 trong 8 benchmark tự động hóa thực tế, gồm Automation Bench, SpreadsheetBench 2 và BrowseComp, đồng thời xếp sau Claude Fable 5 ở nhiều benchmark khác. Vì chưa có bên độc lập tái kiểm chứng, hãy phân loại dữ liệu này là:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thú vị, có số liệu công khai, nhưng chưa được xác nhận độc lập.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Tuyên bố 3: giới hạn mà Moonshot thừa nhận
&lt;/h3&gt;

&lt;p&gt;Câu đáng chú ý nhất trong bài đăng ra mắt là Moonshot thừa nhận hiệu suất tổng thể của K3 vẫn kém Claude Fable 5 và GPT-5.6 Sol.&lt;/p&gt;

&lt;p&gt;Đây là thông tin cần dùng để đặt kỳ vọng triển khai:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Với các tác vụ khó nhất, Moonshot tự xác nhận các mô hình độc quyền hàng đầu vẫn có lợi thế về năng lực thô.&lt;/li&gt;
&lt;li&gt;Giá trị của K3 không phải là “đánh bại mọi mô hình”, mà là đưa chất lượng cận tiên phong vào một mô hình mở với chi phí thấp hơn.&lt;/li&gt;
&lt;li&gt;Nếu workload của bạn yêu cầu năng lực cực đại, hãy benchmark K3 cùng các mô hình độc quyền trước khi chuyển đổi.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Xem thêm các bài so sánh trực tiếp:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://apidog.com/vi/blog/kimi-k3-vs-gpt-5-6-sol?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K3 vs GPT-5.6 Sol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidog.com/vi/blog/kimi-k3-vs-claude-opus-4-8?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K3 vs Claude Opus 4.8&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Số liệu độc lập và số liệu nhà cung cấp
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tuyên bố&lt;/th&gt;
&lt;th&gt;Ai công bố&lt;/th&gt;
&lt;th&gt;Điều được đo&lt;/th&gt;
&lt;th&gt;Mức độ đáng tin cậy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chỉ số Thông minh 57, xếp hạng #4/189&lt;/td&gt;
&lt;td&gt;Artificial Analysis&lt;/td&gt;
&lt;td&gt;Năng lực tổng quát&lt;/td&gt;
&lt;td&gt;Cao: bên thứ ba, bộ đánh giá cố định&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Đầu ra khoảng 62 token/giây, trung vị phân khúc 72,7&lt;/td&gt;
&lt;td&gt;Artificial Analysis&lt;/td&gt;
&lt;td&gt;Thông lượng sinh nội dung&lt;/td&gt;
&lt;td&gt;Cao: được đo và có thể tái kiểm chứng&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thời gian đến token đầu tiên khoảng 2 giây&lt;/td&gt;
&lt;td&gt;Artificial Analysis&lt;/td&gt;
&lt;td&gt;Khả năng phản hồi&lt;/td&gt;
&lt;td&gt;Cao: số liệu đo lường trực tiếp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Hiệu suất cấp độ tiên phong trên bộ đánh giá của chúng tôi”&lt;/td&gt;
&lt;td&gt;Moonshot&lt;/td&gt;
&lt;td&gt;Benchmark do nhà cung cấp chọn&lt;/td&gt;
&lt;td&gt;Có tính định hướng&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dẫn đầu BrowseComp, Automation Bench, SpreadsheetBench 2; thứ 2 Terminal-Bench 2.1; thứ 3 DeepSWE&lt;/td&gt;
&lt;td&gt;Moonshot&lt;/td&gt;
&lt;td&gt;Hiệu năng tác vụ tác nhân&lt;/td&gt;
&lt;td&gt;Trung bình: có số liệu nhưng chưa được tái kiểm chứng&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kém Claude Fable 5 và GPT-5.6 Sol nói chung&lt;/td&gt;
&lt;td&gt;Moonshot&lt;/td&gt;
&lt;td&gt;Giới hạn so với mô hình độc quyền&lt;/td&gt;
&lt;td&gt;Cao: nhà cung cấp tự thừa nhận giới hạn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Điểm mã hóa tái kiểm chứng và SWE-bench Verified cổ điển&lt;/td&gt;
&lt;td&gt;Chưa có&lt;/td&gt;
&lt;td&gt;Năng lực mã hóa cụ thể&lt;/td&gt;
&lt;td&gt;Chưa được công bố độc lập&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Mẫu hình quan trọng là:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dữ liệu độc lập xác nhận năng lực tổng quát và tốc độ.&lt;/li&gt;
&lt;li&gt;Dữ liệu cấp tác vụ có tồn tại nhưng chủ yếu do Moonshot tự chạy.&lt;/li&gt;
&lt;li&gt;Khoảng trống giữa hai nhóm này là nơi benchmark nội bộ của bạn có giá trị nhất.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bảng sau là kết quả Moonshot công bố ở cấu hình lập luận tối đa:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Điểm chuẩn&lt;/th&gt;
&lt;th&gt;Kimi K3&lt;/th&gt;
&lt;th&gt;Claude Fable 5&lt;/th&gt;
&lt;th&gt;GPT-5.6 Sol&lt;/th&gt;
&lt;th&gt;Claude Opus 4.8&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Terminal-Bench 2.1&lt;/td&gt;
&lt;td&gt;88,3&lt;/td&gt;
&lt;td&gt;84,6&lt;/td&gt;
&lt;td&gt;88,8&lt;/td&gt;
&lt;td&gt;84,6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSWE&lt;/td&gt;
&lt;td&gt;67,5&lt;/td&gt;
&lt;td&gt;70,0&lt;/td&gt;
&lt;td&gt;73,0&lt;/td&gt;
&lt;td&gt;59,0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BrowseComp&lt;/td&gt;
&lt;td&gt;91,2&lt;/td&gt;
&lt;td&gt;88,0&lt;/td&gt;
&lt;td&gt;90,4&lt;/td&gt;
&lt;td&gt;84,3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automation Bench&lt;/td&gt;
&lt;td&gt;30,8&lt;/td&gt;
&lt;td&gt;29,1&lt;/td&gt;
&lt;td&gt;29,7&lt;/td&gt;
&lt;td&gt;27,2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SpreadsheetBench 2&lt;/td&gt;
&lt;td&gt;34,8&lt;/td&gt;
&lt;td&gt;34,7&lt;/td&gt;
&lt;td&gt;32,4&lt;/td&gt;
&lt;td&gt;31,6&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;K3 vượt Claude Fable 5 và Claude Opus 4.8 trên bốn trong năm benchmark này, đồng thời vượt GPT-5.6 Sol trên BrowseComp, Automation Bench và SpreadsheetBench 2.&lt;/p&gt;

&lt;p&gt;Tuy vậy, ở DeepSWE — benchmark mã hóa tác nhân khó nhất trong bảng — K3 đứng sau cả Sol và Fable 5. Điều này phù hợp với nhận định của Moonshot rằng K3 vẫn kém các mô hình độc quyền hàng đầu về năng lực tổng thể.&lt;/p&gt;

&lt;h2&gt;
  
  
  Những gì vẫn còn thiếu
&lt;/h2&gt;

&lt;p&gt;Một đánh giá trung thực cần nêu rõ phần chưa biết. Với Kimi K3, các khoảng trống chính gồm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Điểm mã hóa độc lập&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Moonshot đã công bố Terminal-Bench 2.1 và DeepSWE, nhưng Artificial Analysis chỉ đưa mã hóa vào chỉ số tổng hợp. Hiện chưa có điểm &lt;a href="https://www.swebench.com/" rel="noopener noreferrer"&gt;SWE-bench Verified&lt;/a&gt; độc lập cho K3. Nếu gặp phần trăm SWE-bench cụ thể, hãy kiểm tra xem đó là kết quả Moonshot tự chạy hay ước tính.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kết quả tự động hóa được tái kiểm chứng&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Một bên thứ ba vẫn cần chạy lại Automation Bench, SpreadsheetBench 2 và BrowseComp với phương pháp công khai. Benchmark tác nhân nhạy cảm với scaffolding, định dạng prompt và cơ chế retry, nên kết quả giữa các tổ chức có thể khác nhau đáng kể.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Chất lượng ngữ cảnh dài ở 1 triệu token&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Cửa sổ ngữ cảnh 1 triệu token không tự động đảm bảo khả năng truy xuất chính xác trên toàn bộ ngữ cảnh. Nếu ứng dụng của bạn xử lý tài liệu dài, hãy kiểm tra trực tiếp ở độ dài 32K, 128K, 500K hoặc mức bạn thực sự sử dụng.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Moonshot cũng cam kết phát hành toàn bộ trọng số mở sau khi ra mắt. Khi đó, benchmark cộng đồng có thể xác nhận hoặc làm thay đổi nhận định ban đầu.&lt;/p&gt;

&lt;p&gt;Không có số liệu không có nghĩa là số liệu xấu — chỉ có nghĩa là chưa có ai công bố dữ liệu độc lập.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cách đọc benchmark của nhà cung cấp
&lt;/h2&gt;

&lt;p&gt;Dùng checklist sau trước khi đưa một số liệu benchmark vào quyết định kỹ thuật:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ai thực hiện benchmark?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Bên thứ ba đáng tin hơn tự báo cáo. Nếu phòng thí nghiệm tự chạy, hãy giả định việc chọn cấu hình có thể có lợi cho họ.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tên benchmark và phiên bản có rõ ràng không?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
“SWE-bench Verified” có thể được tái tạo. “Bộ công cụ mã hóa nội bộ” thì không.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Có chỉ số nào bị bỏ qua không?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Biểu đồ chỉ hiển thị ba chiến thắng không nói lên kết quả ở các benchmark còn lại.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nhà cung cấp có nêu giới hạn không?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Việc Moonshot nêu rõ K3 kém Fable 5 và Sol đáng tin hơn một tuyên bố chiến thắng tuyệt đối.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tuyên bố có khớp với nguồn độc lập không?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Khi dữ liệu nhà cung cấp và nguồn trung lập mâu thuẫn, ưu tiên nguồn trung lập.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Áp dụng checklist này cho K3:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chỉ số độc lập xác nhận K3 có năng lực tổng quát mạnh.&lt;/li&gt;
&lt;li&gt;Moonshot thừa nhận giới hạn của mô hình.&lt;/li&gt;
&lt;li&gt;Các tuyên bố về tự động hóa chưa vượt qua bước kiểm tra độc lập.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tham khảo thêm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://apidog.com/vi/blog/glm-5-2-benchmarks?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Phân tích điểm chuẩn GLM-5.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidog.com/vi/blog/gpt-5-6-vs-claude-fable-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;GPT-5.6 vs Claude Fable 5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Thử nghiệm thực tế: đánh giá K3 cho tác vụ của bạn
&lt;/h2&gt;

&lt;p&gt;Bảng xếp hạng công khai trả lời câu hỏi chung: mô hình này mạnh đến đâu trên trung bình?&lt;/p&gt;

&lt;p&gt;Quyết định triển khai cần trả lời câu hỏi cụ thể hơn: &lt;strong&gt;mô hình này thực hiện workload của bạn tốt đến đâu?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dùng quy trình sau để benchmark K3:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tạo golden set gồm 20–50 prompt thực tế&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Thu thập ticket thật, thay đổi mã thật, câu hỏi hỗ trợ thật hoặc tài liệu thật. Nếu có thể, lưu đầu ra kỳ vọng hoặc tiêu chí chấm điểm.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cố định cấu hình&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ghim model ID &lt;code&gt;kimi-k3&lt;/code&gt;, &lt;code&gt;temperature&lt;/code&gt;, system prompt và &lt;code&gt;max_tokens&lt;/code&gt;. Chỉ thay đổi một biến cho mỗi lần thử nghiệm.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Đo bốn nhóm chỉ số cho mỗi prompt&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chất lượng: đầu ra có giải quyết được tác vụ không?&lt;/li&gt;
&lt;li&gt;Độ trễ: thời gian đến token đầu tiên và tổng thời gian hoàn thành.&lt;/li&gt;
&lt;li&gt;Chi phí: token đầu vào + token đầu ra nhân với giá.&lt;/li&gt;
&lt;li&gt;Tính nhất quán: chạy nhiều lần để phát hiện biến động.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;So sánh với mô hình hiện tại&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Chạy cùng golden set với mô hình bạn đang dùng. Chỉ chuyển đổi khi K3 tốt hơn ở chỉ số thực sự quan trọng với sản phẩm.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ví dụ, bạn có thể gửi cùng một yêu cầu tương thích OpenAI tới nhiều endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.example.com/v1/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "kimi-k3",
    "temperature": 0,
    "max_tokens": 1200,
    "messages": [
      {
        "role": "system",
        "content": "Bạn là trợ lý lập trình. Chỉ trả về thay đổi cần thiết."
      },
      {
        "role": "user",
        "content": "Tối ưu hàm xử lý danh sách sau..."
      }
    ]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lưu lại các trường sau cho từng lần chạy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"kimi-k3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prompt_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bugfix-014"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ttft_ms"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"total_latency_ms"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"input_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;920&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"output_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;740&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"quality_score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"passed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; giúp bạn tổ chức quy trình này bằng cách lưu golden set thành collection có thể tái sử dụng, ghim tham số yêu cầu, theo dõi phản hồi streaming và đọc số token để tính chi phí. Bạn có thể chạy lại toàn bộ collection với model khác chỉ bằng cách đổi endpoint.&lt;/p&gt;

&lt;p&gt;Nếu bạn làm việc trong IDE, hãy gửi các yêu cầu tương tự từ &lt;a href="https://apidog.com/vi/blog/use-apidog-inside-vscode?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;bên trong VS Code&lt;/a&gt;. Khi sẵn sàng, hãy &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;tải xuống Apidog&lt;/a&gt; và tạo request mới trỏ tới endpoint của Moonshot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsa0xyhaw0isig0i9irgv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsa0xyhaw0isig0i9irgv.png" alt="Ví dụ kiểm thử API với Apidog" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Chọn chỉ số theo dạng tác vụ
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Trợ lý lập trình&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Độ trễ là chỉ số chi phối. Với khoảng 62 token/giây, completion dài sẽ có thời gian hiển thị đáng kể. Hãy benchmark bằng độ dài completion trung bình thực tế của bạn và so sánh với một mô hình nhanh hơn.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Trích xuất dữ liệu theo lô&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Thông lượng thường ít quan trọng hơn chất lượng và chi phí mỗi token. Đây là trường hợp K3 có thể phù hợp nếu năng lực lập luận giúp giảm lỗi trích xuất.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Phân tích tài liệu dài&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Kiểm tra tại độ dài ngữ cảnh thực tế. Đừng chỉ kiểm tra ở 32K nếu production của bạn dùng 500K token. Cửa sổ 1M là giới hạn hỗ trợ, không phải bảo đảm về chất lượng.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tự động hóa tác nhân&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Đây là khu vực có tuyên bố “4 trên 8” chưa được xác minh. Hãy xây dựng một agent loop tối giản với task thực tế, chạy nhiều lần và đo tỷ lệ hoàn thành thay vì dựa vào quảng cáo.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bạn cũng có thể gọi K3 qua một bộ tổng hợp nếu không muốn quản lý khóa trực tiếp. &lt;a href="https://openrouter.ai/moonshotai/kimi-k3" rel="noopener noreferrer"&gt;Danh sách OpenRouter cho moonshotai/kimi-k3&lt;/a&gt; cung cấp cùng mô hình qua tuyến tương thích OpenAI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vị trí thực sự của K3
&lt;/h2&gt;

&lt;p&gt;Bỏ qua sự ồn ào của ngày ra mắt, Kimi K3 là một mô hình tổng quát mạnh với giới hạn rõ ràng:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Đánh giá độc lập xác nhận năng lực cao: &lt;strong&gt;#4 trong 189 mô hình&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Tốc độ là điểm yếu thực tế: khoảng &lt;strong&gt;62 token/giây&lt;/strong&gt;, ảnh hưởng rõ tới workload tương tác.&lt;/li&gt;
&lt;li&gt;Các chiến thắng benchmark tác nhân do Moonshot công bố là tín hiệu tích cực, nhưng chưa phải bằng chứng độc lập.&lt;/li&gt;
&lt;li&gt;Moonshot tự thừa nhận K3 vẫn kém Claude Fable 5 và GPT-5.6 Sol ở năng lực tổng thể.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hãy coi bản phát hành là điểm bắt đầu của bằng chứng, không phải kết luận cuối cùng. Đo K3 trên workload của bạn, với prompt, độ trễ, cấu hình và tiêu chí chất lượng thực tế. Sau đó, để dữ liệu nội bộ quyết định.&lt;/p&gt;

&lt;p&gt;Để cân nhắc giá trị theo chi phí, xem thêm bài phân tích &lt;a href="https://apidog.com/vi/blog/kimi-k3-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;giá của Kimi K3&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Các câu hỏi thường gặp
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Điểm benchmark của Kimi K3 là bao nhiêu?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Trên Chỉ số Thông minh độc lập của Artificial Analysis, Kimi K3 đạt 57 điểm và xếp #4 trong 189 mô hình. Moonshot cũng công bố điểm Terminal-Bench 2.1 và DeepSWE, nhưng chưa có bên độc lập tái kiểm chứng đầy đủ các benchmark mã hóa của K3. Vì vậy, Chỉ số Thông minh hiện là số liệu trung lập tốt nhất.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kimi K3 có nhanh hơn các mô hình khác không?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Không. Tốc độ xuất liệu đo được vào khoảng 62 token/giây, thấp hơn mức trung vị 72,7 token/giây của phân khúc giá. Thời gian đến token đầu tiên khoảng 2 giây. K3 phù hợp hơn với xử lý theo lô và phân tích so với tác vụ tương tác nhạy cảm với độ trễ.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kimi K3 có đánh bại Claude Fable 5 hoặc GPT-5.6 Sol không?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Không phải trên năng lực tổng thể, theo chính Moonshot. K3 có kết quả tốt trên một số benchmark tự động hóa do Moonshot công bố, nhưng các kết quả đó chưa được xác nhận độc lập. Với các tác vụ tiên phong khó nhất, Fable 5 và Sol vẫn dẫn trước theo mô tả của Moonshot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tôi nên đánh giá Kimi K3 cho use case của mình như thế nào?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tạo golden set gồm 20–50 prompt thực tế, cố định model ID và tham số, sau đó đo chất lượng, độ trễ, chi phí và tính nhất quán. Chạy cùng bộ prompt trên &lt;code&gt;kimi-k3&lt;/code&gt; và mô hình hiện tại để có so sánh công bằng. Các công cụ như &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; có thể lưu các request này thành collection tái sử dụng và giúp bạn chạy lại benchmark nhất quán.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cách sử dụng Kimi K3 miễn phí</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Fri, 17 Jul 2026 05:11:38 +0000</pubDate>
      <link>https://dev.to/sebbasstian/cach-su-dung-kimi-k3-mien-phi-p7b</link>
      <guid>https://dev.to/sebbasstian/cach-su-dung-kimi-k3-mien-phi-p7b</guid>
      <description>&lt;p&gt;Moonshot AI đã ra mắt Kimi K3 vào ngày 16 tháng 7 năm 2026. Đây được mô tả là mô hình mã nguồn mở 3T-class đầu tiên: kiến trúc mixture-of-experts (MoE) với 2,8 nghìn tỷ tham số và cửa sổ ngữ cảnh 1 triệu token. Câu hỏi thực tế hơn là: có thể dùng Kimi K3 miễn phí không? Có, nhưng mỗi lựa chọn đều có giới hạn về hạn mức, độ ổn định hoặc chi phí hạ tầng.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Dùng thử Apidog ngay hôm nay&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Hướng dẫn này liệt kê các cách tiếp cận miễn phí hoặc gần miễn phí, cách kiểm tra giới hạn thực tế và cách gọi API mà không lãng phí hạn mức. Nếu bạn từng làm theo hướng dẫn &lt;a href="https://apidog.com/vi/blog/how-to-use-kimi-k2-7-code-for-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;sử dụng Kimi K2.7 Code miễn phí&lt;/a&gt;, quy trình phân phối của Moonshot sẽ khá quen thuộc.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Cách nhanh nhất là dùng gói miễn phí trên ứng dụng Kimi hoặc &lt;a href="http://Kimi.com" rel="noopener noreferrer"&gt;Kimi.com&lt;/a&gt;. Đăng nhập, trò chuyện và dùng Kimi Code/Kimi Work trong hạn mức hiện tại của tài khoản.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openrouter.ai/moonshotai/kimi-k3" rel="noopener noreferrer"&gt;OpenRouter&lt;/a&gt; cung cấp &lt;code&gt;moonshotai/kimi-k3&lt;/code&gt; qua API tương thích OpenAI. Kiểm tra xem tại thời điểm gọi có lộ trình miễn phí hoặc khuyến mãi hay không.&lt;/li&gt;
&lt;li&gt;Tự lưu trữ chưa khả thi vào ngày ra mắt. Moonshot cho biết trọng số đầy đủ dự kiến phát hành ngày 27 tháng 7 năm 2026. Mô hình MoE 2,8T vẫn cần hạ tầng GPU rất mạnh.&lt;/li&gt;
&lt;li&gt;API Kimi có thể có tín dụng dùng thử hoặc ưu đãi cho tài khoản mới. Kiểm tra trực tiếp trong dashboard thay vì dựa vào số dư được đăng trên blog.&lt;/li&gt;
&lt;li&gt;Khi đã có API key, hãy dùng &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; để kiểm tra request, lưu biến môi trường và tái sử dụng payload thay vì thử đi thử lại trong ứng dụng Kimi.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F07%2Fimage-176.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F07%2Fimage-176.png" alt="Kimi K3" width="799" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Lưu ý: Theo bài đăng ra mắt của Moonshot, K3 vẫn đứng sau Claude Fable 5 và GPT-5.6 Sol trong các benchmark của họ. Trên Artificial Analysis, mô hình đạt Chỉ số Thông minh 57 và đứng thứ tư trong 189 mô hình được theo dõi. Hãy đánh giá K3 bằng workload thực tế của bạn thay vì chỉ dựa vào thông số.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  “Miễn phí” thực sự nghĩa là gì?
&lt;/h2&gt;

&lt;p&gt;Với mô hình ngôn ngữ lớn, “miễn phí” hiếm khi đồng nghĩa với không giới hạn. Thường sẽ thuộc một trong bốn dạng sau:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Giới hạn tỷ lệ:&lt;/strong&gt; Có hạn mức theo giờ, ngày, số tin nhắn hoặc token. Khi chạm giới hạn, bạn phải chờ hoặc chuyển sang trả phí.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Định tuyến được trợ cấp:&lt;/strong&gt; Nhà tổng hợp như OpenRouter có thể cung cấp route khuyến mãi hoặc giá rất thấp. Route này có thể biến mất hoặc thay đổi giới hạn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dùng phần cứng của bạn:&lt;/strong&gt; Không mất phí theo token, nhưng bạn trả tiền GPU, điện, lưu trữ và vận hành.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tín dụng dùng thử:&lt;/strong&gt; Được cấp số dư ban đầu để đánh giá API. Số dư này có thể hết hạn hoặc bị giới hạn.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ngoài chi phí, hãy xem xét chính sách dữ liệu. Nếu bạn gửi mã độc quyền hoặc dữ liệu khách hàng, hãy đọc điều khoản lưu giữ dữ liệu trước khi dùng gói tiêu dùng miễn phí. Để hiểu thêm về kiến trúc và định vị mô hình, xem bài &lt;a href="https://apidog.com/vi/blog/what-is-kimi-k3?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K3 là gì&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phương pháp 1: Dùng ứng dụng Kimi hoặc Kimi.com
&lt;/h2&gt;

&lt;p&gt;Đây là lựa chọn nên thử đầu tiên nếu bạn chỉ muốn kiểm tra khả năng của K3 mà chưa cần tích hợp API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiqijlomro6leenjsk741.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiqijlomro6leenjsk741.png" alt="Ứng dụng Kimi" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Cách bắt đầu
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Cài đặt hoặc cập nhật ứng dụng Kimi trên iOS, Android hoặc HarmonyOS.&lt;/li&gt;
&lt;li&gt;Hoặc truy cập &lt;a href="https://www.kimi.com/blog/kimi-k3" rel="noopener noreferrer"&gt;kimi.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Đăng nhập bằng tài khoản Kimi.&lt;/li&gt;
&lt;li&gt;Kiểm tra mô hình đang được sử dụng và chỉ báo hạn mức trong ứng dụng trước khi chạy các tác vụ dài.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Bạn nhận được gì?
&lt;/h3&gt;

&lt;p&gt;Gói miễn phí bao gồm trò chuyện tổng quát và các giao diện chuyên biệt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Kimi Code:&lt;/strong&gt; Làm việc với mã trong terminal. Dùng lệnh &lt;code&gt;/model&lt;/code&gt; bên trong công cụ để chọn mô hình. Quy trình tương tự như trong &lt;a href="https://apidog.com/vi/blog/how-to-use-kimi-cli?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn Kimi CLI&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kimi Work:&lt;/strong&gt; Ứng dụng năng suất cho desktop, yêu cầu phiên bản 3.1.0 trở lên và hỗ trợ Windows cùng máy Mac Apple silicon.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cách tránh hết hạn mức quá nhanh
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Dùng prompt ngắn trước, chỉ mở rộng ngữ cảnh khi cần.&lt;/li&gt;
&lt;li&gt;Chia công việc lớn thành các tác vụ nhỏ.&lt;/li&gt;
&lt;li&gt;Không liên tục gửi toàn bộ repository hoặc log dài vào mỗi lượt.&lt;/li&gt;
&lt;li&gt;Kiểm tra chỉ báo sử dụng trực tiếp trong ứng dụng vì Moonshot không công bố một hạn mức token miễn phí cố định.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Phù hợp nhất cho:&lt;/strong&gt; thử mô hình, chat hàng ngày và hỗ trợ code nhẹ.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phương pháp 2: Gọi &lt;code&gt;moonshotai/kimi-k3&lt;/code&gt; qua OpenRouter
&lt;/h2&gt;

&lt;p&gt;Nếu cần gọi K3 từ ứng dụng hoặc workflow, &lt;a href="https://openrouter.ai/moonshotai/kimi-k3" rel="noopener noreferrer"&gt;OpenRouter&lt;/a&gt; là con đường API ngắn nhất. Mô hình được cung cấp qua slug:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;moonshotai/kimi-k3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;API tương thích định dạng OpenAI, nên bạn chủ yếu cần thay base URL và API key.&lt;/p&gt;

&lt;h3&gt;
  
  
  Request tối thiểu với cURL
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://openrouter.ai/api/v1/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$OPENROUTER_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "moonshotai/kimi-k3",
    "messages": [
      {
        "role": "user",
        "content": "Refactor this function for readability."
      }
    ]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Ví dụ JavaScript
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://openrouter.ai/api/v1/chat/completions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OPENROUTER_API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;moonshotai/kimi-k3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Refactor this function for readability.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;?.[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]?.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Cách kiểm tra khả năng dùng miễn phí
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Mở trang model trên OpenRouter.&lt;/li&gt;
&lt;li&gt;Kiểm tra các provider route, giá và nhãn khuyến mãi hiện tại.&lt;/li&gt;
&lt;li&gt;Đọc rate limit trước khi đưa route vào workflow.&lt;/li&gt;
&lt;li&gt;Chuẩn bị fallback model hoặc route trả phí nếu request quan trọng.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Route miễn phí trên nền tảng tổng hợp có thể bị điều tiết, xếp hàng hoặc rút lại mà không báo trước. Không nên dùng route miễn phí làm hạ tầng production duy nhất.&lt;/p&gt;

&lt;p&gt;Để xem thêm về xác thực, endpoint và request của bên thứ nhất, đọc &lt;a href="https://apidog.com/vi/blog/kimi-k3-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn API Kimi K3&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phương pháp 3: Tự lưu trữ sau khi phát hành trọng số
&lt;/h2&gt;

&lt;p&gt;Kimi K3 được giới thiệu là mô hình mã nguồn mở 3T-class, nhưng cần phân biệt rõ giữa thông báo ra mắt và thời điểm phát hành trọng số.&lt;/p&gt;

&lt;p&gt;Theo Moonshot, trọng số đầy đủ dự kiến được phát hành ngày &lt;strong&gt;27 tháng 7 năm 2026&lt;/strong&gt;. Điều đó có nghĩa là tự lưu trữ chưa phải lựa chọn có thể thực hiện ngay tại ngày ra mắt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cần theo dõi ở đâu?
&lt;/h3&gt;

&lt;p&gt;Khi phát hành chính thức, hãy theo dõi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://huggingface.co/moonshotai" rel="noopener noreferrer"&gt;Trang Moonshot AI trên Hugging Face&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Blog chính thức của Kimi&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Không tải “trọng số K3” từ nguồn không chính thức trước thông báo phát hành. Các file như vậy không thể được xác minh là trọng số chính thức.&lt;/p&gt;

&lt;h3&gt;
  
  
  Thực tế phần cứng
&lt;/h3&gt;

&lt;p&gt;K3 là mô hình MoE 2,8T tham số. Dù chỉ kích hoạt 16 trong 896 chuyên gia cho mỗi token, hệ thống vẫn cần đủ bộ nhớ để chứa toàn bộ tập tham số.&lt;/p&gt;

&lt;p&gt;Với hầu hết cá nhân, chạy đầy đủ độ chính xác tại nhà là không thực tế. Lựa chọn khả thi hơn sau khi phát hành thường là:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Chờ bản lượng tử hóa từ cộng đồng.&lt;/li&gt;
&lt;li&gt;Đánh giá đánh đổi chất lượng so với dung lượng VRAM/RAM.&lt;/li&gt;
&lt;li&gt;Chạy thử bằng GPU thuê trước khi đầu tư hạ tầng dài hạn.&lt;/li&gt;
&lt;li&gt;Chỉ tự host nếu yêu cầu quyền riêng tư hoặc kiểm soát dữ liệu đủ quan trọng.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nếu bạn đã từng chạy các model Kimi trước đó, xem &lt;a href="https://apidog.com/vi/blog/run-kimi-k2-5-locally?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn chạy Kimi K2.5 cục bộ&lt;/a&gt; để hiểu các công cụ và đánh đổi thường gặp.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Điểm chính:&lt;/strong&gt; tự host loại bỏ phí theo token, nhưng thay bằng chi phí GPU, setup và vận hành. Nó chỉ “miễn phí” nếu bạn đã có phần cứng phù hợp.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phương pháp 4: Tín dụng dùng thử hoặc khuyến mãi API Kimi
&lt;/h2&gt;

&lt;p&gt;API Kimi của bên thứ nhất là dịch vụ trả phí. Các mức giá được nêu gồm:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Loại token&lt;/th&gt;
&lt;th&gt;Giá&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Token đầu vào có cache hit&lt;/td&gt;
&lt;td&gt;0,30 USD / 1 triệu token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token đầu vào không có cache hit&lt;/td&gt;
&lt;td&gt;3,00 USD / 1 triệu token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token đầu ra&lt;/td&gt;
&lt;td&gt;15,00 USD / 1 triệu token&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Đây không phải gói miễn phí. Tuy nhiên, tài khoản mới có thể nhận tín dụng khởi đầu hoặc ưu đãi ra mắt tùy từng thời điểm.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cách kiểm tra tín dụng hiện có
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Đăng nhập dashboard nhà phát triển Kimi.&lt;/li&gt;
&lt;li&gt;Tạo hoặc mở API key.&lt;/li&gt;
&lt;li&gt;Kiểm tra số dư tài khoản.&lt;/li&gt;
&lt;li&gt;Kiểm tra khu vực promotion, billing hoặc trial credits.&lt;/li&gt;
&lt;li&gt;Xác nhận ngày hết hạn trước khi tích hợp vào workflow.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Đừng lập kế hoạch ngân sách dựa trên một con số đọc từ bài blog. Chỉ số dư hiển thị trong dashboard của bạn tại thời điểm hiện tại mới đáng tin cậy.&lt;/p&gt;

&lt;p&gt;Tín dụng dùng thử phù hợp để đánh giá endpoint chính thức, đo độ trễ và kiểm tra hành vi production. Nó không phù hợp cho workload dài hạn. Xem thêm bài phân tích &lt;a href="https://apidog.com/vi/blog/kimi-k3-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;giá Kimi K3&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  So sánh các lựa chọn
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phương pháp&lt;/th&gt;
&lt;th&gt;Chi phí thực tế&lt;/th&gt;
&lt;th&gt;Nỗ lực thiết lập&lt;/th&gt;
&lt;th&gt;Tính ổn định&lt;/th&gt;
&lt;th&gt;Phù hợp nhất cho&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ứng dụng Kimi / &lt;a href="http://Kimi.com" rel="noopener noreferrer"&gt;Kimi.com&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Miễn phí, có rate limit&lt;/td&gt;
&lt;td&gt;Chỉ cần đăng nhập&lt;/td&gt;
&lt;td&gt;Ổn định trong hạn mức&lt;/td&gt;
&lt;td&gt;Dùng thử, chat, code nhẹ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenRouter &lt;code&gt;moonshotai/kimi-k3&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Route miễn phí hoặc chi phí thấp&lt;/td&gt;
&lt;td&gt;Thấp, đổi base URL&lt;/td&gt;
&lt;td&gt;Route miễn phí có thể bị điều tiết hoặc biến mất&lt;/td&gt;
&lt;td&gt;Prototype API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tự lưu trữ&lt;/td&gt;
&lt;td&gt;Không phí theo token, phần cứng đắt&lt;/td&gt;
&lt;td&gt;Cao&lt;/td&gt;
&lt;td&gt;Bạn tự vận hành&lt;/td&gt;
&lt;td&gt;Quyền riêng tư, team có GPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tín dụng dùng thử API Kimi&lt;/td&gt;
&lt;td&gt;Miễn phí đến khi hết tín dụng&lt;/td&gt;
&lt;td&gt;Thấp, tạo API key&lt;/td&gt;
&lt;td&gt;Có giới hạn và có thể hết hạn&lt;/td&gt;
&lt;td&gt;Đánh giá endpoint chính thức&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Quy luật chung rất đơn giản:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Con đường dễ nhất thường chạm giới hạn nhanh nhất.&lt;/li&gt;
&lt;li&gt;Con đường kiểm soát cao nhất thường đòi hỏi phần cứng hoặc thời gian nhiều nhất.&lt;/li&gt;
&lt;li&gt;Không có lựa chọn nào đồng thời miễn phí, không giới hạn và phù hợp production.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Kiểm tra API Kimi K3 bằng Apidog
&lt;/h2&gt;

&lt;p&gt;Khi có API key từ OpenRouter hoặc Kimi, đừng dùng chat UI để thử từng biến thể request. Hãy tạo request có thể tái sử dụng trong một API client để tiết kiệm hạn mức.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp0giifto1yunjbu0m3k1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp0giifto1yunjbu0m3k1.png" alt="Kiểm tra API bằng Apidog" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Trong &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;, bạn có thể:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tạo request &lt;code&gt;POST&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Đặt endpoint OpenRouter:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   https://openrouter.ai/api/v1/chat/completions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Thêm header:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;   Authorization: Bearer {{OPENROUTER_API_KEY}}
   Content-Type: application/json
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Lưu API key dưới dạng biến môi trường thay vì ghi trực tiếp vào request.&lt;/li&gt;
&lt;li&gt;Đặt body JSON:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"moonshotai/kimi-k3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"messages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Explain this API response and suggest error handling."&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Gửi request, kiểm tra response và lưu request thành template để dùng lại.&lt;/li&gt;
&lt;li&gt;Khi request hoạt động, chuyển nó thành tài liệu chia sẻ hoặc test case.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Với API Kimi của bên thứ nhất, giữ nguyên cấu trúc request theo tài liệu endpoint của Kimi và thay model ID tương ứng, chẳng hạn &lt;code&gt;kimi-k3&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Cùng workflow này cũng có thể dùng qua &lt;a href="https://apidog.com/vi/blog/use-apidog-inside-vscode?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;tiện ích mở rộng Apidog trong VS Code&lt;/a&gt;. Bạn có thể &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;tải Apidog&lt;/a&gt; để lưu request, quản lý biến môi trường và kiểm tra API mà không lãng phí hạn mức vào thao tác thủ công.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kết luận
&lt;/h2&gt;

&lt;p&gt;Nếu chỉ muốn thử Kimi K3, hãy bắt đầu bằng ứng dụng Kimi hoặc Kimi.com. Nếu đang xây dựng ứng dụng, hãy kiểm tra route &lt;code&gt;moonshotai/kimi-k3&lt;/code&gt; trên OpenRouter và dùng API client để chuẩn hóa request. Nếu quyền riêng tư là yêu cầu bắt buộc, hãy theo dõi thời điểm phát hành trọng số và chuẩn bị kế hoạch GPU trước khi tự host.&lt;/p&gt;

&lt;p&gt;Tóm lại:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dùng ứng dụng Kimi&lt;/strong&gt; cho thử nghiệm nhanh.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dùng OpenRouter&lt;/strong&gt; cho prototype qua API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kiểm tra trial credits của Kimi&lt;/strong&gt; nếu cần đánh giá API chính thức.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chờ trọng số chính thức&lt;/strong&gt; nếu muốn tự host.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dùng &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;&lt;/strong&gt; để mỗi token miễn phí được dùng cho việc kiểm thử thực tế thay vì lặp lại thao tác cấu hình.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Kimi K3 có miễn phí sử dụng không?
&lt;/h3&gt;

&lt;p&gt;Có. Ứng dụng Kimi và &lt;a href="http://Kimi.com" rel="noopener noreferrer"&gt;Kimi.com&lt;/a&gt; có gói miễn phí cho trò chuyện, Kimi Code và Kimi Work, nhưng bị giới hạn bởi rate limit có thể thay đổi. API Kimi của bên thứ nhất là trả phí, dù tài khoản mới có thể có tín dụng dùng thử.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tôi có thể tải trọng số Kimi K3 và tự chạy ngay không?
&lt;/h3&gt;

&lt;p&gt;Không phải tại thời điểm ra mắt. Moonshot cho biết trọng số đầy đủ dự kiến phát hành vào ngày 27 tháng 7 năm 2026. Sau đó, hãy theo dõi trang Moonshot trên Hugging Face và blog Kimi chính thức. Do đây là mô hình MoE 2,8T, hầu hết cá nhân sẽ cần chờ bản lượng tử hóa từ cộng đồng.&lt;/p&gt;

&lt;h3&gt;
  
  
  API Kimi K3 giá bao nhiêu khi hết hạn mức miễn phí?
&lt;/h3&gt;

&lt;p&gt;Giá được nêu là 0,30 USD cho 1 triệu token đầu vào có cache hit, 3,00 USD cho 1 triệu token đầu vào không có cache hit và 15,00 USD cho 1 triệu token đầu ra. Cache prompt có thể giảm chi phí thực tế.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kimi K3 so với các model độc quyền hàng đầu như thế nào?
&lt;/h3&gt;

&lt;p&gt;K3 mạnh, nhưng không được Moonshot định vị là model dẫn đầu tuyệt đối. Theo bài đăng ra mắt, nó vẫn đứng sau Claude Fable 5 và GPT-5.6 Sol trong benchmark của họ. Hãy benchmark bằng dữ liệu và tác vụ thực tế của dự án.&lt;/p&gt;

&lt;h3&gt;
  
  
  Khác gì so với việc dùng Kimi K2.7 miễn phí?
&lt;/h3&gt;

&lt;p&gt;Các cửa truy cập miễn phí phần lớn tương tự. Nếu bạn đã làm theo hướng dẫn &lt;a href="https://apidog.com/vi/blog/how-to-use-kimi-k2-7-code-for-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;dùng Kimi K2.7 Code miễn phí&lt;/a&gt;, hãy thay model ID thành &lt;code&gt;kimi-k3&lt;/code&gt; và tiếp tục lưu ý về rate limit, độ ổn định của route và chi phí API.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Giá Kimi K3: Chi phí API và Bài toán Cache-Hit</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Fri, 17 Jul 2026 03:19:08 +0000</pubDate>
      <link>https://dev.to/sebbasstian/gia-kimi-k3-chi-phi-api-va-bai-toan-cache-hit-5c3j</link>
      <guid>https://dev.to/sebbasstian/gia-kimi-k3-chi-phi-api-va-bai-toan-cache-hit-5c3j</guid>
      <description>&lt;p&gt;Kimi K3 ra mắt vào ngày 16 tháng 7 năm 2026, và bảng giá có vẻ đơn giản cho đến khi bạn nhận thấy nó có hai mức giá đầu vào khác nhau. Moonshot AI niêm yết $0,30 cho mỗi triệu token đối với đầu vào trúng bộ nhớ đệm (&lt;em&gt;cache hit&lt;/em&gt;), $3,00 cho mỗi triệu token đối với đầu vào trượt bộ nhớ đệm (&lt;em&gt;cache miss&lt;/em&gt;), và $15,00 cho mỗi triệu token đầu ra. Tuy nhiên, con số quyết định hóa đơn hàng tháng không chỉ là giá niêm yết mà là tỷ lệ đầu vào hỗn hợp bạn thực sự trả. Với tác vụ lập trình, tỷ lệ này có thể gần mức $0,30 hơn nhiều so với $3,00. Bài viết này hướng dẫn cách tính chi phí hiệu quả, phân tích một tác vụ cụ thể và so sánh Kimi K3 với Claude Opus 4.8, GPT-5.6 Sol và DeepSeek V4.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Dùng thử Apidog ngay hôm nay&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  TÓM TẮT
&lt;/h2&gt;

&lt;p&gt;Kimi K3 có giá:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;$0,30 / 1M token&lt;/strong&gt; cho đầu vào trúng bộ nhớ đệm&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$3,00 / 1M token&lt;/strong&gt; cho đầu vào trượt bộ nhớ đệm&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$15,00 / 1M token&lt;/strong&gt; cho đầu ra&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Moonshot cung cấp mô hình qua kiến trúc suy luận phân tán Mooncake và báo cáo tỷ lệ trúng bộ nhớ đệm trên 90% cho các tác vụ lập trình. Nếu tỷ lệ này phù hợp với workload của bạn, chi phí đầu vào thực tế sẽ gần mức $0,30 hơn mức $3,00.&lt;/p&gt;

&lt;p&gt;Điểm cần tối ưu không phải là đầu vào đã được cache, mà là &lt;strong&gt;đầu ra&lt;/strong&gt;. Tận dụng cache, giữ tiền tố prompt ổn định và giới hạn phản hồi để kiểm soát chi phí. Bạn có thể kiểm tra token usage trên từng phản hồi bằng &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; khi thử nghiệm mô hình.&lt;/p&gt;

&lt;h2&gt;
  
  
  Giá niêm yết trong một bảng
&lt;/h2&gt;

&lt;p&gt;Moonshot công bố mức giá sau cho model &lt;code&gt;kimi-k3&lt;/code&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Loại token&lt;/th&gt;
&lt;th&gt;Giá trên 1 triệu token&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Đầu vào trúng bộ nhớ đệm&lt;/td&gt;
&lt;td&gt;$0,30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Đầu vào trượt bộ nhớ đệm&lt;/td&gt;
&lt;td&gt;$3,00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Đầu ra&lt;/td&gt;
&lt;td&gt;$15,00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Chênh lệch giá là yếu tố quan trọng:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Đầu vào trượt cache đắt gấp &lt;strong&gt;10 lần&lt;/strong&gt; đầu vào trúng cache.&lt;/li&gt;
&lt;li&gt;Đầu ra đắt gấp &lt;strong&gt;5 lần&lt;/strong&gt; đầu vào trượt cache.&lt;/li&gt;
&lt;li&gt;Đầu ra đắt gấp &lt;strong&gt;50 lần&lt;/strong&gt; đầu vào trúng cache.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu giả định mọi token đầu vào đều bị trượt cache, bạn sẽ đánh giá quá cao chi phí đầu vào. Ngược lại, nếu xem đầu ra là chi phí nhỏ, bạn sẽ bỏ qua phần thường chi phối hóa đơn.&lt;/p&gt;

&lt;p&gt;Để xem tổng quan về model và vị trí của nó trong bối cảnh hiện tại, hãy đọc &lt;a href="https://apidog.com/vi/blog/what-is-kimi-k3?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;bài giải thích Kimi K3&lt;/a&gt;. Nếu cần cấu hình request, base URL và SDK, xem &lt;a href="https://apidog.com/vi/blog/kimi-k3-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn API Kimi K3&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkd5eeplt0nd4fxdh2z80.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkd5eeplt0nd4fxdh2z80.png" alt="Kimi K3 pricing overview" width="663" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Vì sao giá cache hit thay đổi phép tính
&lt;/h2&gt;

&lt;p&gt;Prompt caching là khác biệt giữa giá bạn nhìn thấy và giá bạn thực sự trả.&lt;/p&gt;

&lt;p&gt;Khi gửi request, nhà cung cấp lưu tiền tố prompt đã được token hóa. Nếu request tiếp theo tái sử dụng cùng tiền tố đó, model có thể đọc từ cache thay vì xử lý lại toàn bộ ngữ cảnh. Các token tái sử dụng sẽ được tính theo giá cache hit thay vì cache miss.&lt;/p&gt;

&lt;p&gt;Moonshot cho biết Kimi K3 sử dụng kiến trúc suy luận phân tán Mooncake, tách riêng giai đoạn &lt;em&gt;prefill&lt;/em&gt; và &lt;em&gt;decode&lt;/em&gt; để tái sử dụng tiền tố cache hiệu quả hơn. Công ty báo cáo tỷ lệ cache hit trên 90% với tác vụ lập trình.&lt;/p&gt;

&lt;h3&gt;
  
  
  Công thức tính giá đầu vào hỗn hợp
&lt;/h3&gt;

&lt;p&gt;Gọi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;h&lt;/code&gt; là tỷ lệ cache hit&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;1 - h&lt;/code&gt; là tỷ lệ cache miss&lt;/li&gt;
&lt;li&gt;&lt;code&gt;P_hit = $0,30 / 1M token&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;P_miss = $3,00 / 1M token&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Khi đó:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Giá đầu vào hỗn hợp =
  (h × P_hit) + ((1 - h) × P_miss)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Với tỷ lệ cache hit 90%:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0,90 × $0,30 = $0,27
0,10 × $3,00 = $0,30
----------------------
Giá đầu vào hỗn hợp = $0,57 / 1M token
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Như vậy, thay vì lập ngân sách theo mức $3,00 / 1M token đầu vào, bạn có thể bắt đầu với mức ước tính khoảng &lt;strong&gt;$0,57 / 1M token&lt;/strong&gt; nếu workload thực tế đạt 90% cache hit.&lt;/p&gt;

&lt;p&gt;Với tỷ lệ cache hit 95%:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0,95 × $0,30 = $0,285
0,05 × $3,00 = $0,150
-----------------------
Giá đầu vào hỗn hợp = $0,435 / 1M token
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Con số 90% là số liệu Moonshot báo cáo cho tác vụ lập trình. Tỷ lệ thực tế của bạn phụ thuộc vào độ ổn định của prompt prefix. Chat có prompt thay đổi liên tục thường cache kém hơn agent liên tục làm việc với cùng kho mã nguồn.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Ví dụ: chi phí của một tác vụ lập trình tự động
&lt;/h2&gt;

&lt;p&gt;Giả sử bạn chạy một phiên lập trình tự động trên một repository cỡ trung bình.&lt;/p&gt;

&lt;p&gt;Trong toàn bộ phiên:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Model đọc &lt;strong&gt;2.000.000 token đầu vào&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Model sinh &lt;strong&gt;200.000 token đầu ra&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Context được gửi lại qua nhiều lượt, nên tổng token đầu vào cao&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Trường hợp 1: Không có cache hit
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Đầu vào:
2.000.000 × $3,00 / 1.000.000 = $6,00

Đầu ra:
200.000 × $15,00 / 1.000.000 = $3,00

Tổng chi phí = $9,00
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Trường hợp 2: Cache hit 90%
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Đầu vào cache hit:
1.800.000 × $0,30 / 1.000.000 = $0,54

Đầu vào cache miss:
200.000 × $3,00 / 1.000.000 = $0,60

Tổng đầu vào = $1,14

Đầu ra:
200.000 × $15,00 / 1.000.000 = $3,00

Tổng chi phí = $4,14
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kết quả:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Hạng mục&lt;/th&gt;
&lt;th&gt;Không cache&lt;/th&gt;
&lt;th&gt;Cache hit 90%&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chi phí đầu vào&lt;/td&gt;
&lt;td&gt;$6,00&lt;/td&gt;
&lt;td&gt;$1,14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chi phí đầu ra&lt;/td&gt;
&lt;td&gt;$3,00&lt;/td&gt;
&lt;td&gt;$3,00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tổng chi phí&lt;/td&gt;
&lt;td&gt;$9,00&lt;/td&gt;
&lt;td&gt;$4,14&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Caching giảm tổng chi phí từ $9,00 xuống $4,14, tương đương khoảng &lt;strong&gt;54%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Lưu ý: cache chỉ giảm chi phí đầu vào. Token đầu ra vẫn có giá $15,00 / 1M token trong cả hai trường hợp.&lt;/p&gt;

&lt;h2&gt;
  
  
  Đầu vào rẻ, đầu ra là phần cao cấp
&lt;/h2&gt;

&lt;p&gt;Với Kimi K3, đầu ra là phần cần kiểm soát chặt nhất:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Đầu ra $15,00 / 1M token đắt gấp 50 lần đầu vào cache hit.&lt;/li&gt;
&lt;li&gt;Đầu ra đắt gấp 5 lần đầu vào cache miss.&lt;/li&gt;
&lt;li&gt;Tối ưu đầu ra thường tạo tác động lớn hơn việc cắt giảm context đã được cache.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Việc nên làm
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Yêu cầu phản hồi ngắn gọn, ví dụ: chỉ trả về diff, patch hoặc checklist.&lt;/li&gt;
&lt;li&gt;Đặt &lt;code&gt;max_tokens&lt;/code&gt; khi API hoặc SDK hỗ trợ.&lt;/li&gt;
&lt;li&gt;Giữ system prompt, tool schema và context prefix ổn định theo byte.&lt;/li&gt;
&lt;li&gt;Gộp các lệnh gọi liên quan vào cùng một phiên có prefix đã “ấm”.&lt;/li&gt;
&lt;li&gt;Dùng cùng format prompt giữa các lượt thay vì thay đổi thứ tự hoặc chỉnh sửa nhỏ không cần thiết.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ví dụ, thay vì yêu cầu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Phân tích toàn bộ lỗi, giải thích nguyên nhân chi tiết,
đề xuất các phương án, rồi viết code hoàn chỉnh.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bạn có thể tách thành yêu cầu kiểm soát đầu ra tốt hơn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Chỉ trả về unified diff để sửa lỗi.
Không giải thích. Tối đa 500 token.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Việc ít hiệu quả hơn bạn nghĩ
&lt;/h3&gt;

&lt;p&gt;Cắt giảm context đầu vào chỉ để tiết kiệm token thường không phải chiến lược tốt khi context đó đang được cache. Việc loại bỏ thông tin hữu ích có thể:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Làm model thiếu ngữ cảnh.&lt;/li&gt;
&lt;li&gt;Tăng số lượt hỏi-đáp để làm rõ yêu cầu.&lt;/li&gt;
&lt;li&gt;Khiến phản hồi dài hơn và đắt hơn.&lt;/li&gt;
&lt;li&gt;Làm giảm chất lượng diff hoặc code được sinh ra.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Với mô hình có cấu trúc giá như Kimi K3, hãy cấp input đủ tốt, sau đó kiểm soát đầu ra bằng prompt và giới hạn token.&lt;/p&gt;

&lt;h2&gt;
  
  
  So sánh giá: Kimi K3 đứng ở đâu
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mô hình&lt;/th&gt;
&lt;th&gt;Đầu vào trên 1M token&lt;/th&gt;
&lt;th&gt;Đầu ra trên 1M token&lt;/th&gt;
&lt;th&gt;Ghi chú&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Kimi K3&lt;/td&gt;
&lt;td&gt;$0,30 cache hit / $3,00 cache miss&lt;/td&gt;
&lt;td&gt;$15,00&lt;/td&gt;
&lt;td&gt;Context 1M, trọng số mở gần 27 tháng 7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 4.8&lt;/td&gt;
&lt;td&gt;$5,00&lt;/td&gt;
&lt;td&gt;$25,00&lt;/td&gt;
&lt;td&gt;Mức cao cấp; cần kiểm tra giá hiện tại&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Sol&lt;/td&gt;
&lt;td&gt;Khoảng $5,00&lt;/td&gt;
&lt;td&gt;Khoảng $30,00&lt;/td&gt;
&lt;td&gt;Mức flagship; có các mức GPT-5.6 rẻ hơn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4&lt;/td&gt;
&lt;td&gt;Mức giá trị&lt;/td&gt;
&lt;td&gt;Mức giá trị&lt;/td&gt;
&lt;td&gt;Xác nhận tỷ giá hiện tại&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  So với Claude Opus 4.8
&lt;/h3&gt;

&lt;p&gt;Theo &lt;a href="https://apidog.com/vi/blog/claude-opus-4-8-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;giá Claude Opus 4.8&lt;/a&gt;, đầu vào là $5,00 / 1M token và đầu ra là $25,00 / 1M token.&lt;/p&gt;

&lt;p&gt;Với tác vụ mẫu 2M token đầu vào và 200K token đầu ra:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Opus 4.8:
2M đầu vào × $5,00 / 1M = $10,00
200K đầu ra × $25,00 / 1M = $5,00
Tổng = $15,00
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Trong khi đó, Kimi K3 với 90% cache hit có tổng chi phí khoảng $4,14.&lt;/p&gt;

&lt;p&gt;So sánh này mang tính định hướng vì Anthropic cũng có prompt caching, có thể làm giảm chi phí thực tế của Opus. Tuy nhiên, theo giá niêm yết, Kimi K3 vẫn rẻ hơn ở cả đầu vào lẫn đầu ra.&lt;/p&gt;

&lt;h3&gt;
  
  
  So với GPT-5.6 Sol
&lt;/h3&gt;

&lt;p&gt;Theo &lt;a href="https://apidog.com/vi/blog/gpt-5-6-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;giá GPT-5.6&lt;/a&gt;, GPT-5.6 Sol có giá khoảng $5 đầu vào và $30 đầu ra.&lt;/p&gt;

&lt;p&gt;Kimi K3 rẻ hơn GPT-5.6 Sol ở mức giá này. Tuy nhiên, GPT-5.6 có các tier Terra và Luna rẻ hơn, nên lựa chọn phụ thuộc vào khả năng bạn cần và mức giá hiện tại.&lt;/p&gt;

&lt;h3&gt;
  
  
  So với DeepSeek V4
&lt;/h3&gt;

&lt;p&gt;Theo &lt;a href="https://apidog.com/vi/blog/deepseek-v4-api-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;giá DeepSeek V4&lt;/a&gt;, DeepSeek V4 là một lựa chọn định vị ở phân khúc giá trị.&lt;/p&gt;

&lt;p&gt;DeepSeek có thể có giá đầu ra thô thấp hơn Kimi K3. Ngược lại, Kimi K3 có context 1M và chiết khấu sâu cho đầu vào cache hit. Nếu workload của bạn nặng về input và tái sử dụng prefix tốt, Kimi K3 có thể thu hẹp hoặc đảo ngược khoảng cách chi phí.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kiểm tra token usage với Apidog
&lt;/h2&gt;

&lt;p&gt;Phép tính cache chỉ hữu ích khi bạn đo được dữ liệu thực tế của mình. Mỗi phản hồi từ Kimi K3 trả về đối tượng usage, bao gồm token đầu vào, token đầu ra và phần token trúng cache.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4p92rlalf8pnaudkwqyu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4p92rlalf8pnaudkwqyu.png" alt="Kiểm tra mức sử dụng token Kimi K3" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bạn có thể dùng &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; để gửi request đại diện và kiểm tra phản hồi.&lt;/p&gt;

&lt;p&gt;Kimi K3 tương thích OpenAI SDK, vì vậy cấu hình request tương tự API kiểu OpenAI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Base URL của Kimi K3&lt;/li&gt;
&lt;li&gt;Bearer token&lt;/li&gt;
&lt;li&gt;Model ID: &lt;code&gt;kimi-k3&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ví dụ request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$KIMI_BASE_URL&lt;/span&gt;&lt;span class="s2"&gt;/chat/completions"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$KIMI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "kimi-k3",
    "messages": [
      {
        "role": "system",
        "content": "Bạn là trợ lý lập trình. Chỉ trả về unified diff."
      },
      {
        "role": "user",
        "content": "Sửa lỗi null pointer trong hàm parseConfig."
      }
    ],
    "max_tokens": 800
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Cách đo tỷ lệ cache hit của bạn
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Gửi một request đại diện lần đầu.&lt;/li&gt;
&lt;li&gt;Gửi lại request đó với system prompt và context prefix không thay đổi.&lt;/li&gt;
&lt;li&gt;So sánh trường usage trong hai phản hồi.&lt;/li&gt;
&lt;li&gt;Ghi lại token cache hit, cache miss và output token.&lt;/li&gt;
&lt;li&gt;Dùng tỷ lệ cache hit thực tế trong công thức chi phí hỗn hợp.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Bạn cũng có thể lưu cùng một request cho &lt;code&gt;kimi-k3&lt;/code&gt; và model hiện tại, sau đó A/B test phản hồi và token usage cạnh nhau. Nếu làm việc trong editor, hãy xem hướng dẫn chạy &lt;a href="https://apidog.com/vi/blog/use-apidog-inside-vscode?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog bên trong VS Code&lt;/a&gt;. Bạn có thể &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;tải xuống Apidog&lt;/a&gt; để bắt đầu thử nghiệm.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phán quyết trung thực
&lt;/h2&gt;

&lt;p&gt;Kimi K3 rẻ ở đầu vào và đắt ở đầu ra.&lt;/p&gt;

&lt;p&gt;Mức $0,30 cho cache hit, kết hợp với tỷ lệ trúng cache trên 90% mà Moonshot báo cáo cho tác vụ lập trình, khiến chi phí đầu vào hiệu quả có thể tiến gần mức sàn. Phần cần quản lý chặt hơn là output ở mức $15,00 / 1M token.&lt;/p&gt;

&lt;p&gt;So với các đối thủ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rẻ hơn Claude Opus 4.8 theo giá niêm yết.&lt;/li&gt;
&lt;li&gt;Rẻ hơn GPT-5.6 Sol theo mức giá được nêu.&lt;/li&gt;
&lt;li&gt;Có thể cạnh tranh với DeepSeek V4, tùy tỷ trọng input và hiệu quả caching.&lt;/li&gt;
&lt;li&gt;Có context 1M và lợi thế lớn khi workload tái sử dụng cùng prompt prefix.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Moonshot xếp Kimi K3 sau Claude Fable 5 và GPT-5.6 Sol về khả năng, đồng thời model chạy chậm hơn một chút so với mức trung bình trong phân khúc giá. Tuy nhiên, nếu workload của bạn phù hợp với caching, Kimi K3 là lựa chọn đáng cân nhắc về chi phí.&lt;/p&gt;

&lt;p&gt;Quy trình thực tế nên là:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Giữ system prompt và context prefix ổn định.&lt;/li&gt;
&lt;li&gt;Đo cache hit rate trên traffic đại diện.&lt;/li&gt;
&lt;li&gt;Giới hạn &lt;code&gt;max_tokens&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Yêu cầu đầu ra đúng định dạng cần dùng.&lt;/li&gt;
&lt;li&gt;So sánh chi phí theo token usage thực tế, không chỉ theo bảng giá.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Để xác định tỷ lệ đầu vào hỗn hợp trước khi triển khai, hãy &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;tải xuống Apidog&lt;/a&gt;, gửi vài request đại diện đến &lt;code&gt;kimi-k3&lt;/code&gt; và kiểm tra phân tách token cache hit trực tiếp trong usage object.&lt;/p&gt;

&lt;h2&gt;
  
  
  Câu hỏi thường gặp
&lt;/h2&gt;

&lt;h3&gt;
  
  
  API Kimi K3 có giá bao nhiêu?
&lt;/h3&gt;

&lt;p&gt;Kimi K3 có giá $0,30 cho mỗi triệu token đầu vào trúng bộ nhớ đệm, $3,00 cho mỗi triệu token đầu vào trượt bộ nhớ đệm và $15,00 cho mỗi triệu token đầu ra trên API trực tiếp của Moonshot.&lt;/p&gt;

&lt;p&gt;Các bên thứ ba như OpenRouter có thể hiển thị mức giá cố định $3,00 đầu vào và $15,00 đầu ra mà không tách riêng giá cache hit. Xem &lt;a href="https://apidog.com/vi/blog/kimi-k3-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn API Kimi K3&lt;/a&gt; để thiết lập request.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tỷ lệ cache hit là gì và tại sao nó quan trọng?
&lt;/h3&gt;

&lt;p&gt;Cache hit là phần token đầu vào được tái sử dụng từ prompt prefix đã lưu. Những token này có giá $0,30 thay vì $3,00 mỗi triệu token.&lt;/p&gt;

&lt;p&gt;Moonshot báo cáo cache hit trên 90% cho tác vụ lập trình. Với tỷ lệ này, giá đầu vào hỗn hợp rơi vào khoảng $0,57 / 1M token.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kimi K3 có rẻ hơn Claude Opus 4.8 không?
&lt;/h3&gt;

&lt;p&gt;Có, dựa trên giá niêm yết. Đầu ra của Kimi K3 là $15,00 / 1M token, trong khi Claude Opus 4.8 là $25,00 / 1M token. Đầu vào của Kimi K3 cũng thấp hơn.&lt;/p&gt;

&lt;p&gt;Trong tác vụ mẫu với 2M token đầu vào và 200K token đầu ra, Kimi K3 với cache hit 90% có giá khoảng $4,14, trong khi Opus theo giá niêm yết khoảng $15,00.&lt;/p&gt;

&lt;p&gt;Anthropic có prompt caching riêng, nên hãy coi đây là so sánh định hướng. Xem &lt;a href="https://apidog.com/vi/blog/claude-opus-4-8-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;giá Claude Opus 4.8&lt;/a&gt; và &lt;a href="https://apidog.com/vi/blog/kimi-k3-vs-claude-opus-4-8?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;so sánh Kimi K3 với Claude Opus 4.8&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Giá Kimi K3 so với GPT-5.6 và DeepSeek V4 như thế nào?
&lt;/h3&gt;

&lt;p&gt;Kimi K3 rẻ hơn GPT-5.6 Sol, model flagship có giá khoảng $5 đầu vào và $30 đầu ra. Tuy nhiên, GPT-5.6 có các tier Terra và Luna rẻ hơn.&lt;/p&gt;

&lt;p&gt;DeepSeek V4 là một lựa chọn giá trị khác và có thể có giá đầu ra thô thấp hơn Kimi K3. Hãy kiểm tra trực tiếp &lt;a href="https://apidog.com/vi/blog/gpt-5-6-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;giá GPT-5.6&lt;/a&gt; và &lt;a href="https://apidog.com/vi/blog/deepseek-v4-api-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;giá DeepSeek V4&lt;/a&gt; trước khi quyết định.&lt;/p&gt;

&lt;h3&gt;
  
  
  Làm thế nào để giảm hóa đơn Kimi K3?
&lt;/h3&gt;

&lt;p&gt;Tập trung vào đầu ra:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Đặt &lt;code&gt;max_tokens&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Yêu cầu phản hồi ngắn gọn.&lt;/li&gt;
&lt;li&gt;Chỉ yêu cầu format cần thiết, chẳng hạn unified diff hoặc JSON.&lt;/li&gt;
&lt;li&gt;Giữ system prompt và context prefix ổn định theo byte.&lt;/li&gt;
&lt;li&gt;Gộp các request liên quan để tận dụng prefix đã cache.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cắt giảm input đã cache thường ít hiệu quả vì token cache hit đã rất rẻ. Loại bỏ context hữu ích thậm chí có thể khiến output dài hơn và tốn kém hơn.&lt;/p&gt;

&lt;h3&gt;
  
  
  Làm thế nào để xác minh tỷ lệ cache hit thực tế?
&lt;/h3&gt;

&lt;p&gt;Kiểm tra usage object trả về trên từng phản hồi Kimi K3. Đối tượng này báo cáo token đầu vào, đầu ra và token trúng cache.&lt;/p&gt;

&lt;p&gt;Gửi cùng một request qua &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; hai lần, sau đó so sánh số token cache hit giữa hai phản hồi. Tỷ lệ quan sát được là số bạn nên dùng trong công thức chi phí hỗn hợp của mình.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cách sử dụng API Kimi K3</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Fri, 17 Jul 2026 02:12:37 +0000</pubDate>
      <link>https://dev.to/sebbasstian/cach-su-dung-api-kimi-k3-307e</link>
      <guid>https://dev.to/sebbasstian/cach-su-dung-api-kimi-k3-307e</guid>
      <description>&lt;p&gt;Moonshot AI đã ra mắt Kimi K3 vào ngày 16 tháng 7 năm 2026 và gọi đây là mô hình có khả năng nhất của họ cho đến nay: mô hình 3T-class mã nguồn mở đầu tiên trên thế giới, với thiết kế Mixture-of-Experts (MoE) 2.8T tham số và cửa sổ ngữ cảnh 1.048.576 token. Điều đáng quan tâm với nhà phát triển không chỉ là kích thước, mà là API: Kimi K3 sử dụng định dạng tương thích OpenAI SDK. Nếu bạn đã gọi GPT hoặc endpoint tương thích OpenAI, bạn chỉ cần trỏ client sang &lt;code&gt;kimi-k3&lt;/code&gt; để nhận phản hồi streaming trong vài phút. Hướng dẫn này trình bày cách lấy khóa API, gọi API bằng Python, JavaScript và cURL, xử lý streaming, tool calls, JSON mode, &lt;code&gt;reasoning_effort&lt;/code&gt;, context caching và gỡ lỗi yêu cầu thô bằng &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Dùng thử Apidog ngay hôm nay&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Tóm tắt
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ID mô hình API là &lt;code&gt;kimi-k3&lt;/code&gt;. Trên OpenRouter, slug là &lt;code&gt;moonshotai/kimi-k3&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Endpoint tương thích OpenAI SDK: cấu hình &lt;code&gt;base_url&lt;/code&gt;, &lt;code&gt;api_key&lt;/code&gt; và &lt;code&gt;model="kimi-k3"&lt;/code&gt;. Xác nhận URL cơ sở trong console tại &lt;a href="https://platform.kimi.ai" rel="noopener noreferrer"&gt;platform.kimi.ai&lt;/a&gt;; Kimi trước đây đã sử dụng &lt;code&gt;https://api.moonshot.ai/v1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cửa sổ ngữ cảnh là 1M token. Giá: $0.30 cho mỗi triệu token đầu vào cache-hit, $3.00 cho mỗi triệu token đầu vào cache-miss và $15.00 cho mỗi triệu token đầu ra.&lt;/li&gt;
&lt;li&gt;Streaming, tool calls, JSON mode, structured output và &lt;code&gt;reasoning_effort&lt;/code&gt; (&lt;code&gt;max&lt;/code&gt; hiện có sẵn) hoạt động theo định dạng chat completions tiêu chuẩn.&lt;/li&gt;
&lt;li&gt;Với tác vụ lập trình thông thường hoặc ngân sách hạn chế, dòng K2.7 có thể phù hợp hơn.&lt;/li&gt;
&lt;li&gt;Dùng Apidog để kiểm tra streaming, gỡ lỗi tool calls, lưu khóa API dưới dạng biến môi trường và so sánh A/B &lt;code&gt;kimi-k3&lt;/code&gt; với &lt;code&gt;kimi-k2-7-code&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Bạn nên gọi mô hình Kimi nào?
&lt;/h2&gt;

&lt;p&gt;Hãy chọn mô hình theo loại workload trước khi viết code. Kimi K3 là mô hình tiên tiến nhất trong dòng sản phẩm: một MoE lớn hướng đến lập trình phức tạp, tác vụ agentic dài hạn và công việc kiến thức trên ngữ cảnh dài. Tuy nhiên, chi phí token đầu ra của nó cao nhất trong dòng sản phẩm. &lt;a href="https://www.kimi.com/blog/kimi-k3" rel="noopener noreferrer"&gt;Bài đăng ra mắt&lt;/a&gt; của Moonshot cũng nêu rằng K3 xếp sau Claude Fable 5 và GPT-5.6 Sol trong các so sánh nội bộ của họ.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3s59fp430il70ysku0jb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3s59fp430il70ysku0jb.png" alt="So sánh Kimi K3" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nếu workload của bạn là trợ lý mã hóa lưu lượng cao, trình tạo kiểm thử CI hoặc tác vụ cần gọi API ở quy mô lớn, dòng K2.7 Code cũ hơn thường tối ưu chi phí hơn. Bắt đầu với &lt;a href="https://apidog.com/vi/blog/kimi-k2-7-code-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn API Kimi K2.7 Code&lt;/a&gt; và bài viết &lt;a href="https://apidog.com/vi/blog/what-is-kimi-k2-7-code?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K2.7 Code là gì&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Dùng &lt;code&gt;kimi-k3&lt;/code&gt; khi bạn cần:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Suy luận sâu hơn.&lt;/li&gt;
&lt;li&gt;Ngữ cảnh đầy đủ 1M token.&lt;/li&gt;
&lt;li&gt;Điều phối công cụ cho tác nhân.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Chuyển sang K2.7 khi tác vụ thông thường và có khối lượng lớn. Để so sánh trực tiếp, xem &lt;a href="https://apidog.com/vi/blog/kimi-k3-vs-kimi-k2-7-code?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K3 vs Kimi K2.7 Code&lt;/a&gt;. Nếu cần hiểu thêm về kiến trúc, xem &lt;a href="https://apidog.com/vi/blog/what-is-kimi-k3?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K3 là gì&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lấy khóa API trên nền tảng Kimi
&lt;/h2&gt;

&lt;p&gt;Truy cập &lt;a href="https://platform.kimi.ai" rel="noopener noreferrer"&gt;platform.kimi.ai&lt;/a&gt; và đăng nhập. Console là nơi tạo khóa API, theo dõi mức sử dụng và xác nhận URL cơ sở cho tài khoản.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9c3h1r2ki8bjalfn2sqi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9c3h1r2ki8bjalfn2sqi.png" alt="Kimi platform console" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mở phần API keys trong console và tạo khóa mới.&lt;/li&gt;
&lt;li&gt;Sao chép khóa ngay khi được hiển thị và lưu ở nơi an toàn. Bạn sẽ không thể xem lại toàn bộ giá trị này.&lt;/li&gt;
&lt;li&gt;Thêm tín dụng hoặc xác nhận gói thanh toán để lệnh gọi &lt;code&gt;kimi-k3&lt;/code&gt; không bị từ chối do số dư không đủ.&lt;/li&gt;
&lt;li&gt;Ghi lại URL cơ sở trong console. Kimi trước đây đã sử dụng &lt;code&gt;https://api.moonshot.ai/v1&lt;/code&gt;, nhưng console là nguồn thông tin chính xác cho tài khoản của bạn.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Xuất khóa thành biến môi trường thay vì ghi trực tiếp vào mã nguồn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;KIMI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"sk-your-key-here"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;KIMI_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://api.moonshot.ai/v1"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cách này giúp tránh lộ khóa trong Git history, log hoặc ảnh chụp màn hình. Khi kiểm tra bằng Apidog, hãy lưu cùng khóa đó trong environment thay vì dán vào request body.&lt;/p&gt;

&lt;p&gt;Để xem chi tiết chi phí cache-hit và cache-miss, đọc &lt;a href="https://apidog.com/vi/blog/kimi-k3-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn định giá Kimi K3&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bắt đầu nhanh: lệnh gọi &lt;code&gt;kimi-k3&lt;/code&gt; đầu tiên
&lt;/h2&gt;

&lt;p&gt;Kimi API tuân theo hợp đồng OpenAI chat completions. Với OpenAI SDK, bạn chỉ cần thay đổi &lt;code&gt;base_url&lt;/code&gt;, &lt;code&gt;api_key&lt;/code&gt; và &lt;code&gt;model&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Python
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;KIMI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="c1"&gt;# Xác nhận URL cơ sở chính xác trong console tại platform.kimi.ai.
&lt;/span&gt;    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;KIMI_BASE_URL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kimi-k3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a precise coding assistant.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Explain what a token bucket rate limiter does in one paragraph.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  JavaScript / TypeScript
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;OpenAI&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;openai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;KIMI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// Xác nhận URL cơ sở trong console tại platform.kimi.ai.&lt;/span&gt;
  &lt;span class="na"&gt;baseURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;KIMI_BASE_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;kimi-k3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are a precise coding assistant.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Explain what a token bucket rate limiter does in one paragraph.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  cURL
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$KIMI_BASE_URL&lt;/span&gt;&lt;span class="s2"&gt;/chat/completions"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$KIMI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "kimi-k3",
    "messages": [
      {
        "role": "user",
        "content": "Explain what a token bucket rate limiter does in one paragraph."
      }
    ]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nếu nhận lỗi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;401&lt;/strong&gt;: kiểm tra &lt;code&gt;KIMI_API_KEY&lt;/code&gt;, biến môi trường hoặc quyền truy cập của khóa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;404&lt;/strong&gt;: kiểm tra &lt;code&gt;KIMI_BASE_URL&lt;/code&gt; và đường dẫn &lt;code&gt;/chat/completions&lt;/code&gt;; thường đây là lỗi URL cơ sở, không phải lỗi model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/openai/openai-python" rel="noopener noreferrer"&gt;Tài liệu OpenAI Python SDK&lt;/a&gt; có thêm tùy chọn client. Các tùy chọn tương thích với định dạng OpenAI đều có thể áp dụng ở đây.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phản hồi streaming
&lt;/h2&gt;

&lt;p&gt;Với chat UI hoặc agent chạy lâu, hãy bật streaming để nhận token ngay khi chúng được tạo thay vì chờ toàn bộ phản hồi.&lt;/p&gt;

&lt;h3&gt;
  
  
  Python
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;stream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kimi-k3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write a 6-line poem about flaky tests.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;delta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luồng này sử dụng server-sent events (SSE). Mỗi khung thường có tiền tố &lt;code&gt;data:&lt;/code&gt; chứa JSON, và luồng kết thúc bằng:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;data: [DONE]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SDK giúp bạn không phải tự parse SSE, nhưng khi stream lỗi giữa chừng, xem khung SSE thô sẽ hữu ích để xác định lỗi ở client, proxy hay endpoint.&lt;/p&gt;

&lt;h3&gt;
  
  
  JavaScript
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;kimi-k3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Write a 6-line poem about flaky tests.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;await &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;chunk&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]?.&lt;/span&gt;&lt;span class="nx"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Gọi công cụ (function calling)
&lt;/h2&gt;

&lt;p&gt;Kimi K3 hỗ trợ tool calls, ràng buộc lựa chọn công cụ và tải công cụ động. Bạn khai báo công cụ bằng JSON Schema, mô hình trả về tên hàm cùng đối số JSON, còn ứng dụng của bạn thực thi hành động thực tế.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;function&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;function&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get_weather&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Get the current weather for a city.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;parameters&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;city&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;string&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;City name, e.g. Singapore&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;required&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;city&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;messages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s the weather in Singapore right now?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kimi-k3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tool_choice&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;auto&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;tool_call&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool_calls&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tool_call&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;       &lt;span class="c1"&gt;# get_weather
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tool_call&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# {"city": "Singapore"}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mô hình không chạy hàm &lt;code&gt;get_weather&lt;/code&gt;. Bạn cần thực hiện lệnh gọi API hoặc logic nghiệp vụ trong ứng dụng, rồi gửi kết quả trở lại model.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="c1"&gt;# Thêm message của assistant yêu cầu tool call.
&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Thêm kết quả do ứng dụng của bạn thực thi.
&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tool&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tool_call_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;tool_call&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;city&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Singapore&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;temp_c&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;31&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sky&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;humid&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="n"&gt;final&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kimi-k3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;final&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Các chế độ &lt;code&gt;tool_choice&lt;/code&gt; hữu ích:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Ép model phải gọi một tool.
&lt;/span&gt;&lt;span class="n"&gt;tool_choice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;required&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# Ép model gọi đúng một hàm.
&lt;/span&gt;&lt;span class="n"&gt;tool_choice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;function&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;function&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get_weather&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Với agent đa lượt, hãy giữ toàn bộ lịch sử tin nhắn, bao gồm các lượt tool call và phản hồi tool. Nếu cắt bỏ các lượt nội bộ của assistant, chất lượng sinh có thể không ổn định.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chế độ JSON và đầu ra có cấu trúc
&lt;/h2&gt;

&lt;p&gt;Khi ứng dụng cần dữ liệu có thể parse bằng máy, yêu cầu JSON trực tiếp thay vì parse văn bản tự do.&lt;/p&gt;

&lt;h3&gt;
  
  
  JSON object
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kimi-k3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Return only valid JSON. No prose, no markdown.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Extract name and role from: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Ada Lovelace, mathematician&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;response_format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;json_object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# {"name": "Ada Lovelace", "role": "mathematician"}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  JSON Schema
&lt;/h3&gt;

&lt;p&gt;Nếu SDK và tài khoản của bạn hỗ trợ &lt;code&gt;json_schema&lt;/code&gt;, khai báo schema để ràng buộc cấu trúc đầu ra:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kimi-k3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Extract name and role from: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Ada Lovelace, mathematician&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;response_format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;json_schema&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;json_schema&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;person&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;schema&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;string&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;string&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;required&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Xác nhận hỗ trợ &lt;code&gt;json_schema&lt;/code&gt; trong console trước khi dùng ở production. Nếu không chắc chắn, dùng &lt;code&gt;json_object&lt;/code&gt; và validate dữ liệu ở phía ứng dụng là phương án dự phòng an toàn.&lt;/p&gt;

&lt;p&gt;Kimi cũng cung cấp partial mode và tìm kiếm internet, hữu ích khi cần điền trước phản hồi hoặc dựa vào dữ liệu mới.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nỗ lực suy luận có thể cấu hình
&lt;/h2&gt;

&lt;p&gt;Kimi K3 có tham số &lt;code&gt;reasoning_effort&lt;/code&gt; để kiểm soát mức độ suy nghĩ trước khi trả lời. Hiện tại, cấp độ sẵn có là &lt;code&gt;max&lt;/code&gt;, cũng là giá trị mặc định. Suy luận sâu hơn có thể tăng token đầu ra và độ trễ, nên chỉ dùng cho tác vụ thực sự cần thiết.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kimi-k3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Plan a migration from REST to GraphQL for a 40-endpoint API.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;reasoning_effort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;max&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nếu phiên bản OpenAI SDK chưa hỗ trợ trường này, truyền qua &lt;code&gt;extra_body&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kimi-k3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Plan a migration from REST to GraphQL.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reasoning_effort&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;max&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;extra_body&lt;/code&gt; phù hợp cho các trường dành riêng cho nhà cung cấp mà SDK gốc chưa mô hình hóa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kiểm tra và gỡ lỗi &lt;code&gt;kimi-k3&lt;/code&gt; trong Apidog
&lt;/h2&gt;

&lt;p&gt;SDK che giấu chi tiết HTTP và SSE, điều này tiện lợi cho đến khi tool call trả về dữ liệu sai định dạng hoặc streaming bị ngắt. Khi đó, hãy kiểm tra request thô bằng &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;: gửi đúng request &lt;code&gt;kimi-k3&lt;/code&gt;, xem SSE theo từng khung và giữ API key ngoài request body.&lt;/p&gt;

&lt;p&gt;Nếu bạn muốn kiểm tra API không phụ thuộc vào terminal, xem &lt;a href="https://apidog.com/vi/blog/api-testing-without-postman-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn kiểm thử API không dùng Postman&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft75mgml3ye99312o7p26.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft75mgml3ye99312o7p26.png" alt="Gỡ lỗi Kimi K3 bằng Apidog" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thiết lập request trong Apidog theo các bước sau:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tạo một HTTP request mới.&lt;/li&gt;
&lt;li&gt;Đặt phương thức là &lt;code&gt;POST&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Đặt URL thành:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   {{KIMI_BASE_URL}}/chat/completions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Trong environment, thêm:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;KIMI_API_KEY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;KIMI_BASE_URL&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Thêm headers:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   Authorization: Bearer {{KIMI_API_KEY}}
   Content-Type: application/json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Dùng request body cơ bản:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"kimi-k3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"messages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Explain what a token bucket rate limiter does in one paragraph."&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Gửi request và kiểm tra:

&lt;ul&gt;
&lt;li&gt;Nội dung phản hồi.&lt;/li&gt;
&lt;li&gt;Usage token.&lt;/li&gt;
&lt;li&gt;Thông tin cache-hit và cache-miss nếu được trả về.&lt;/li&gt;
&lt;li&gt;HTTP status và response headers.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Để kiểm tra streaming, thêm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"stream"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;hoặc gộp vào request body hiện có:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"kimi-k3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"stream"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"messages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Write a 6-line poem about flaky tests."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kiểm tra các khung &lt;code&gt;data:&lt;/code&gt; để xác định stream có bị dừng trước &lt;code&gt;[DONE]&lt;/code&gt; hay không.&lt;/p&gt;

&lt;p&gt;Để gỡ lỗi tool calls:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Gửi request có trường &lt;code&gt;tools&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Kiểm tra mảng &lt;code&gt;tool_calls&lt;/code&gt; trong phản hồi assistant.&lt;/li&gt;
&lt;li&gt;Xác minh &lt;code&gt;function.name&lt;/code&gt; có đúng với tool đã khai báo.&lt;/li&gt;
&lt;li&gt;Parse và validate &lt;code&gt;function.arguments&lt;/code&gt; trước khi chạy logic nghiệp vụ.&lt;/li&gt;
&lt;li&gt;Nếu arguments không hợp lệ, cải thiện &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;parameters&lt;/code&gt; và danh sách &lt;code&gt;required&lt;/code&gt; trong JSON Schema.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Bạn cũng nên chạy A/B test giữa K3 và K2.7:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sao chép request trong Apidog.&lt;/li&gt;
&lt;li&gt;Chỉ đổi trường model từ &lt;code&gt;kimi-k3&lt;/code&gt; sang &lt;code&gt;kimi-k2-7-code&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Gửi cùng prompt.&lt;/li&gt;
&lt;li&gt;So sánh độ trễ, chất lượng đầu ra và chi phí.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Apidog có thể nhập trực tiếp request tương thích OpenAI từ lệnh cURL, giúp biến request thủ công thành test case có thể chạy lại. Nếu agent của bạn giao tiếp qua MCP, xem &lt;a href="https://apidog.com/vi/blog/from-apis-to-ai-agents-visual-debugging-with-apidog-mcp-client?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn gỡ lỗi trực quan với client Apidog MCP&lt;/a&gt;. Bạn có thể &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;tải xuống Apidog&lt;/a&gt; để thực hiện quy trình này với API key của mình.&lt;/p&gt;

&lt;h2&gt;
  
  
  Các trường hợp sử dụng thực tế
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;kimi-k3&lt;/code&gt; phù hợp với các workload sau:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent mã hóa quy mô repository:&lt;/strong&gt; Ngữ cảnh 1M token và tool orchestration giúp model đọc cơ sở mã lớn, chạy kiểm thử, đọc log và lặp lại. Giữ bản tóm tắt repository ở phần đầu prompt để tăng cache hit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Công việc kiến thức với tài liệu dài:&lt;/strong&gt; Đưa toàn bộ đặc tả, hợp đồng hoặc tài liệu nghiên cứu vào ngữ cảnh và yêu cầu trích xuất bằng &lt;code&gt;json_schema&lt;/code&gt;. Đặt tài liệu dùng chung ở đầu prompt để tái sử dụng cache.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lập kế hoạch di chuyển và tái cấu trúc:&lt;/strong&gt; Dùng &lt;code&gt;reasoning_effort="max"&lt;/code&gt; trong bước lập kế hoạch, sau đó chuyển sang model rẻ hơn cho các thay đổi cơ học.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trả lời nghiên cứu có căn cứ:&lt;/strong&gt; Kết hợp tìm kiếm internet và tool calls để lấy dữ liệu mới, phù hợp với trợ lý không thể chỉ dựa vào kiến thức huấn luyện cũ.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quy trình nên là:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Xây dựng request bằng SDK.&lt;/li&gt;
&lt;li&gt;Xác minh request và phản hồi thô trong Apidog.&lt;/li&gt;
&lt;li&gt;Đo chi phí, độ trễ và chất lượng với prompt thực tế.&lt;/li&gt;
&lt;li&gt;Chỉ tích hợp vào production sau khi đã có test case lặp lại được.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Tổng kết
&lt;/h2&gt;

&lt;p&gt;Để gọi Kimi K3, bạn chỉ cần cấu hình ba giá trị trong client tương thích OpenAI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;URL cơ sở từ Kimi console.&lt;/li&gt;
&lt;li&gt;API key.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;model="kimi-k3"&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sau đó, bạn có thể dùng streaming, tool calls, JSON mode, structured output và &lt;code&gt;reasoning_effort&lt;/code&gt; theo hợp đồng chat completions quen thuộc.&lt;/p&gt;

&lt;p&gt;Hai điểm quan trọng cần theo dõi:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Context caching:&lt;/strong&gt; Giữ system prompt và ngữ cảnh dùng chung ổn định ở đầu request để biến chi phí đầu vào cache-miss $3.00 thành cache-hit $0.30 trên mỗi triệu token.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chi phí so với năng lực:&lt;/strong&gt; K3 phù hợp cho suy luận sâu và ngữ cảnh dài; với tác vụ mã hóa thông thường, lưu lượng cao, K2.7 thường kinh tế hơn.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Xây dựng request trong mã, kiểm chứng bằng Apidog và đo lường trên workload thực tế trước khi triển khai.&lt;/p&gt;

&lt;h2&gt;
  
  
  Câu hỏi thường gặp
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ID mô hình API cho Kimi K3 là gì?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Đó là &lt;code&gt;kimi-k3&lt;/code&gt; trên nền tảng Kimi. Nếu gọi qua OpenRouter, slug là &lt;code&gt;moonshotai/kimi-k3&lt;/code&gt;. Xem danh sách model tại &lt;a href="https://openrouter.ai/moonshotai/kimi-k3" rel="noopener noreferrer"&gt;openrouter.ai/moonshotai/kimi-k3&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tôi sử dụng URL cơ sở nào?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Xác nhận trong console tại &lt;a href="https://platform.kimi.ai" rel="noopener noreferrer"&gt;platform.kimi.ai&lt;/a&gt;. Kimi trước đây đã sử dụng &lt;code&gt;https://api.moonshot.ai/v1&lt;/code&gt;, nhưng bạn nên lưu URL này dưới dạng biến &lt;code&gt;KIMI_BASE_URL&lt;/code&gt; thay vì hard-code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kimi K3 có tương thích OpenAI SDK không?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Có. API tuân theo định dạng OpenAI chat completions, nên OpenAI SDK cho Python và JavaScript hoạt động sau khi đổi &lt;code&gt;base_url&lt;/code&gt; và &lt;code&gt;model&lt;/code&gt;. Các trường riêng của nhà cung cấp có thể truyền qua &lt;code&gt;extra_body&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API Kimi K3 có giá bao nhiêu?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;$0.30 cho mỗi triệu token đầu vào cache-hit, $3.00 cho mỗi triệu token đầu vào cache-miss và $15.00 cho mỗi triệu token đầu ra. Xem &lt;a href="https://apidog.com/vi/blog/kimi-k3-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn định giá Kimi K3&lt;/a&gt; để biết chi tiết.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context caching thực sự làm gì?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Khi token ở phần đầu request trùng với request trước đó, endpoint có thể tái sử dụng trạng thái đã tính toán thay vì tính lại. Điều này giảm chi phí phần đầu vào đó từ $3.00 xuống $0.30 cho mỗi triệu token. Hãy giữ system prompt và ngữ cảnh chia sẻ ở đầu prompt, ổn định giữa các lần gọi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tôi có thể kiểm soát mức độ mô hình suy nghĩ không?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Có, bằng &lt;code&gt;reasoning_effort&lt;/code&gt;. Cấp độ hiện có là &lt;code&gt;max&lt;/code&gt;, cũng là mặc định. Nỗ lực cao hơn có thể dùng nhiều token đầu ra hơn và tăng độ trễ.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tôi nên dùng Kimi K3 hay Kimi K2.7 Code?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dùng &lt;code&gt;kimi-k3&lt;/code&gt; khi cần suy luận sâu, ngữ cảnh 1M token hoặc agentic tool orchestration. Với tác vụ mã hóa thông thường, lưu lượng cao, K2.7 thường rẻ hơn. Xem &lt;a href="https://apidog.com/vi/blog/kimi-k3-vs-kimi-k2-7-code?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K3 vs Kimi K2.7 Code&lt;/a&gt; và &lt;a href="https://apidog.com/vi/blog/kimi-k2-7-code-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn API Kimi K2.7 Code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Làm cách nào để gỡ lỗi streaming hoặc tool call lỗi?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gửi request thô trong Apidog với &lt;code&gt;"stream": true&lt;/code&gt; để đọc từng khung SSE, hoặc kiểm tra mảng &lt;code&gt;tool_calls&lt;/code&gt; để xem model có trả về JSON sai định dạng không. Lưu API key trong environment để tránh đưa bí mật vào request body.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Kimi K3 là gì? Siêu phẩm 2.8T Open của Moonshot</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Fri, 17 Jul 2026 02:08:36 +0000</pubDate>
      <link>https://dev.to/sebbasstian/kimi-k3-la-gi-sieu-pham-28t-open-cua-moonshot-2g2c</link>
      <guid>https://dev.to/sebbasstian/kimi-k3-la-gi-sieu-pham-28t-open-cua-moonshot-2g2c</guid>
      <description>&lt;p&gt;Moonshot AI đã ra mắt Kimi K3 vào ngày 16 tháng 7 năm 2026 và gọi đây là “mô hình mã nguồn mở hạng 3T đầu tiên trên thế giới”. Về kỹ thuật, K3 là mô hình Mixture-of-Experts (MoE) có 2,8 nghìn tỷ tham số, cửa sổ ngữ cảnh 1 triệu token, cơ chế attention mới và mức giá nhắm đến đội ngũ phát triển phần mềm. Mô hình được triển khai ngay ngày ra mắt trên &lt;a href="http://Kimi.com" rel="noopener noreferrer"&gt;Kimi.com&lt;/a&gt;, Kimi Work, Kimi Code và Kimi API; Moonshot cam kết phát hành toàn bộ trọng số trước ngày 27 tháng 7 năm 2026. Bài viết này tập trung vào cách đánh giá, tích hợp và kiểm thử Kimi K3 trước khi đưa vào production.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Dùng thử Apidog ngay hôm nay&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR: Kimi K3 là gì?
&lt;/h2&gt;

&lt;p&gt;Kimi K3 là mô hình ngôn ngữ lớn chủ lực của Moonshot AI, phát hành ngày 16 tháng 7 năm 2026.&lt;/p&gt;

&lt;p&gt;Các thông số chính:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kiến trúc: Mixture-of-Experts, tổng cộng 2,8 nghìn tỷ tham số&lt;/li&gt;
&lt;li&gt;Chuyên gia hoạt động: 16 trên 896 chuyên gia cho mỗi token&lt;/li&gt;
&lt;li&gt;Cửa sổ ngữ cảnh: 1.048.576 token (1M)&lt;/li&gt;
&lt;li&gt;ID model API: &lt;code&gt;kimi-k3&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;API: tương thích OpenAI SDK&lt;/li&gt;
&lt;li&gt;Giá input cache-hit: 0,30 USD / 1 triệu token&lt;/li&gt;
&lt;li&gt;Giá input cache-miss: 3,00 USD / 1 triệu token&lt;/li&gt;
&lt;li&gt;Giá output: 15,00 USD / 1 triệu token&lt;/li&gt;
&lt;li&gt;Artificial Analysis Intelligence Index: 57 điểm, xếp thứ 4 trong 189 model&lt;/li&gt;
&lt;li&gt;Thời điểm dự kiến mở trọng số: khoảng ngày 27 tháng 7 năm 2026&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Moonshot cho biết K3 vẫn kém Claude Fable 5 và GPT-5.6 Sol. Vì vậy, hãy xem K3 là một model trọng số mở mạnh, gần nhóm “biên giới” công nghệ, thay vì model tốt nhất tuyệt đối.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vì sao Kimi K3 đáng chú ý với developer?
&lt;/h2&gt;

&lt;p&gt;Điểm đáng chú ý không chỉ là benchmark. Với đội ngũ xây dựng sản phẩm AI, K3 có ba yếu tố cần kiểm tra:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Chất lượng gần nhóm model dẫn đầu&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Giá input cache-hit thấp hơn 10 lần cache-miss&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lộ trình phát hành trọng số để tự lưu trữ&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nếu Moonshot phát hành trọng số đúng cam kết, K3 có thể trở thành một lựa chọn đáng cân nhắc khi bạn cần so sánh:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chi phí API so với chi phí cụm GPU&lt;/li&gt;
&lt;li&gt;Quyền kiểm soát hạ tầng so với API độc quyền&lt;/li&gt;
&lt;li&gt;Context window dài so với chi phí gửi lại prompt lặp lại&lt;/li&gt;
&lt;li&gt;Chất lượng agentic so với độ trễ phản hồi&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp31gxu12ypg1zmevoy6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp31gxu12ypg1zmevoy6w.png" alt="Kimi K3" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Về tích hợp, câu hỏi quan trọng nhất là: bạn có thể giữ nguyên client theo chuẩn OpenAI và chỉ đổi model sang &lt;code&gt;kimi-k3&lt;/code&gt; hay không?&lt;/p&gt;

&lt;p&gt;Câu trả lời là có, vì Moonshot cung cấp API tương thích OpenAI SDK. Điều này giúp bạn tái sử dụng phần lớn code hiện có cho:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chat completion&lt;/li&gt;
&lt;li&gt;Streaming&lt;/li&gt;
&lt;li&gt;Tool calling&lt;/li&gt;
&lt;li&gt;Structured output&lt;/li&gt;
&lt;li&gt;Agent framework&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bạn cũng có thể kiểm thử endpoint tương thích OpenAI bằng &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;, bao gồm streaming SSE, request có tool và payload &lt;code&gt;tool_calls&lt;/code&gt;, trước khi đưa model vào luồng production.&lt;/p&gt;

&lt;p&gt;Để đi sâu theo từng chủ đề, xem thêm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://apidog.com/vi/blog/kimi-k3-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Hướng dẫn API Kimi K3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidog.com/vi/blog/kimi-k3-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Phân tích giá Kimi K3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidog.com/vi/blog/kimi-k3-benchmarks?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Phân tích benchmark Kimi K3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxpn3i4jqzg4rtpbyzjwr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxpn3i4jqzg4rtpbyzjwr.png" alt="Tổng quan Kimi K3" width="800" height="612"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Danh tính: model mạnh nhất của Moonshot
&lt;/h2&gt;

&lt;p&gt;Moonshot AI định vị K3 là “mô hình mạnh mẽ nhất của chúng tôi”, kế nhiệm dòng Kimi K2.&lt;/p&gt;

&lt;p&gt;Nếu bạn đã dùng:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://apidog.com/vi/blog/kimi-k2?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidog.com/vi/blog/what-is-kimi-k2-7-code?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K2.7 Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;thì K3 là thế hệ tiếp theo, được xây dựng lại từ lớp attention trở lên.&lt;/p&gt;

&lt;p&gt;Tuyên bố “mô hình mã nguồn mở hạng 3T đầu tiên trên thế giới” cần được hiểu đúng:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;“Mã nguồn mở”&lt;/strong&gt;: không có ngay tại thời điểm phát hành. Khi ra mắt, K3 chỉ truy cập được qua sản phẩm được lưu trữ và API trả phí. Moonshot cam kết phát hành toàn bộ trọng số trước ngày 27 tháng 7 năm 2026.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;“Hạng 3T”&lt;/strong&gt;: đề cập đến tổng số 2,8 nghìn tỷ tham số. Tuy nhiên, model chỉ kích hoạt một phần chuyên gia cho mỗi token, giúp giảm chi phí inference.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu bạn cần tự host, không nên lập kế hoạch dựa trên giả định rằng trọng số đã có sẵn ngay ngày đầu. Hãy coi đây là một mốc phát hành được lên lịch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kiến trúc Kimi K3: những điểm cần biết
&lt;/h2&gt;

&lt;p&gt;K3 không chỉ là K2 với số tham số lớn hơn. Moonshot nêu ra một số thay đổi kiến trúc ảnh hưởng trực tiếp đến context dài, routing MoE và hiệu quả inference.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kimi Delta Attention (KDA)
&lt;/h3&gt;

&lt;p&gt;KDA là cơ chế linear attention lai. Theo Moonshot, cơ chế này giúp kiểm soát mức tăng bộ nhớ và chi phí tính toán khi context dài hơn.&lt;/p&gt;

&lt;p&gt;Ý nghĩa thực tế: context window 1M token trở nên khả dụng hơn cho các workload như:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phân tích codebase lớn&lt;/li&gt;
&lt;li&gt;Trợ lý nghiên cứu dùng tài liệu dài&lt;/li&gt;
&lt;li&gt;Agent cần giữ trạng thái lớn&lt;/li&gt;
&lt;li&gt;Phân tích log hoặc transcript nhiều giờ&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Attention Residuals (AttnRes)
&lt;/h3&gt;

&lt;p&gt;AttnRes được Moonshot mô tả là thay thế trực tiếp cho residual connection tiêu chuẩn.&lt;/p&gt;

&lt;p&gt;Mục tiêu là cho phép model truy xuất có chọn lọc biểu diễn từ các lớp trước ở những lớp sâu hơn. Hiểu đơn giản: kiến trúc này nhằm giảm việc mất ngữ cảnh khi thông tin đi qua nhiều lớp của network.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stable LatentMoE
&lt;/h3&gt;

&lt;p&gt;Đây là lớp routing Mixture-of-Experts của K3:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;896 chuyên gia tổng cộng&lt;/li&gt;
&lt;li&gt;16 chuyên gia hoạt động trên mỗi token&lt;/li&gt;
&lt;li&gt;Dùng Quantile Balancing để giữ routing ổn định trong quá trình huấn luyện&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sparse activation là lý do K3 có thể mang tổng số tham số rất lớn nhưng không phải kích hoạt toàn bộ model ở mỗi bước inference.&lt;/p&gt;

&lt;p&gt;Moonshot cũng đề cập các thành phần bổ trợ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Per-Head Muon&lt;/li&gt;
&lt;li&gt;Sigmoid Tanh Unit (SiTU)&lt;/li&gt;
&lt;li&gt;Gated MLA&lt;/li&gt;
&lt;li&gt;Trọng số MXFP4&lt;/li&gt;
&lt;li&gt;Kích hoạt MXFP8&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Thông số kỹ thuật Kimi K3
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Thông số&lt;/th&gt;
&lt;th&gt;Kimi K3&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Nhà phát triển&lt;/td&gt;
&lt;td&gt;Moonshot AI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ngày phát hành&lt;/td&gt;
&lt;td&gt;16 tháng 7 năm 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tổng tham số&lt;/td&gt;
&lt;td&gt;2,8 nghìn tỷ (Mixture-of-Experts)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chuyên gia hoạt động&lt;/td&gt;
&lt;td&gt;16 trong số 896 trên mỗi token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cửa sổ ngữ cảnh&lt;/td&gt;
&lt;td&gt;1.048.576 token (1M)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ID model API&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kimi-k3&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenRouter slug&lt;/td&gt;
&lt;td&gt;&lt;code&gt;moonshotai/kimi-k3&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tương thích API&lt;/td&gt;
&lt;td&gt;Tương thích OpenAI SDK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Input cache-hit&lt;/td&gt;
&lt;td&gt;0,30 USD / 1 triệu token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Input cache-miss&lt;/td&gt;
&lt;td&gt;3,00 USD / 1 triệu token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;15,00 USD / 1 triệu token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tốc độ output&lt;/td&gt;
&lt;td&gt;~62 token/giây&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thời gian đến token đầu tiên&lt;/td&gt;
&lt;td&gt;~1,99 giây&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intelligence Index&lt;/td&gt;
&lt;td&gt;57, xếp thứ 4 trong 189&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trọng số mở&lt;/td&gt;
&lt;td&gt;Dự kiến khoảng 27 tháng 7 năm 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Để ước tính chi phí theo lưu lượng token của ứng dụng, xem &lt;a href="https://apidog.com/vi/blog/kimi-k3-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn định giá Kimi K3&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context 1M token: tối ưu chi phí bằng cache-hit
&lt;/h2&gt;

&lt;p&gt;Context window 1.048.576 token cho phép bạn đưa vào một prompt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Toàn bộ codebase&lt;/li&gt;
&lt;li&gt;Tài liệu nghiên cứu dài&lt;/li&gt;
&lt;li&gt;Cây thư mục lớn&lt;/li&gt;
&lt;li&gt;Prompt hệ thống phức tạp&lt;/li&gt;
&lt;li&gt;Transcript dài nhiều giờ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tuy nhiên, điểm đáng chú ý hơn là chênh lệch giá input:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Loại input&lt;/th&gt;
&lt;th&gt;Giá / 1 triệu token&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cache-hit&lt;/td&gt;
&lt;td&gt;0,30 USD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cache-miss&lt;/td&gt;
&lt;td&gt;3,00 USD&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Đây là chênh lệch 10 lần.&lt;/p&gt;

&lt;p&gt;Moonshot cho biết hệ thống inference Mooncake có thể đạt cache-hit trên 90% cho tác vụ lập trình. Điều này đặc biệt có lợi nếu ứng dụng của bạn liên tục gửi lại cùng một phần context, ví dụ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompt hệ thống lớn dùng chung&lt;/li&gt;
&lt;li&gt;Metadata repository&lt;/li&gt;
&lt;li&gt;Hướng dẫn cố định cho agent&lt;/li&gt;
&lt;li&gt;Cây thư mục dự án&lt;/li&gt;
&lt;li&gt;Context code được tái sử dụng qua nhiều vòng lặp agent&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cách đánh giá lợi ích cache trong workload của bạn
&lt;/h3&gt;

&lt;p&gt;Trước khi chọn model, hãy đo ba chỉ số:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tổng số input token trên mỗi request&lt;/li&gt;
&lt;li&gt;Phần input lặp lại giữa các request&lt;/li&gt;
&lt;li&gt;Tỷ lệ cache-hit thực tế trong workload&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nếu agent gửi lại 500.000 token repository context ở mỗi bước, chi phí sẽ khác biệt đáng kể giữa cache-hit và cache-miss.&lt;/p&gt;

&lt;h3&gt;
  
  
  Đánh đổi: tốc độ output
&lt;/h3&gt;

&lt;p&gt;Artificial Analysis đo K3 ở khoảng:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;62 token output/giây&lt;/li&gt;
&lt;li&gt;1,99 giây đến token đầu tiên&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tốc độ output này thấp hơn mức trung bình 72,7 token/giây của phân khúc giá tương ứng. Vì vậy, K3 phù hợp hơn với workload cần suy luận sâu, context dài và agentic workflow hơn là giao diện cần phản hồi tức thời.&lt;/p&gt;

&lt;p&gt;Nếu latency là ưu tiên hàng đầu, hãy benchmark trực tiếp với model nhanh hơn trước khi cam kết.&lt;/p&gt;

&lt;h2&gt;
  
  
  Định vị thực tế: mạnh, mở, nhưng không dẫn đầu tuyệt đối
&lt;/h2&gt;

&lt;p&gt;Moonshot thừa nhận trong &lt;a href="https://www.kimi.com/blog/kimi-k3" rel="noopener noreferrer"&gt;blog ra mắt Kimi K3&lt;/a&gt; rằng K3 vẫn kém các model độc quyền mạnh nhất là Claude Fable 5 và GPT-5.6 Sol.&lt;/p&gt;

&lt;p&gt;Theo &lt;a href="https://artificialanalysis.ai/models/kimi-k3" rel="noopener noreferrer"&gt;Artificial Analysis&lt;/a&gt;, K3 đạt 57 điểm trên Intelligence Index và xếp thứ 4 trong 189 model. Chỉ số này tổng hợp chín bài đánh giá về:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agentic tasks&lt;/li&gt;
&lt;li&gt;Coding&lt;/li&gt;
&lt;li&gt;Scientific reasoning&lt;/li&gt;
&lt;li&gt;General reasoning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cách định vị phù hợp cho K3 là:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Model trọng số mở mạnh gần nhóm frontier&lt;/li&gt;
&lt;li&gt;Lựa chọn đáng cân nhắc cho self-hosting sau khi phát hành trọng số&lt;/li&gt;
&lt;li&gt;Lựa chọn có chi phí input hiệu quả khi tận dụng cache&lt;/li&gt;
&lt;li&gt;Không phải model tốt nhất tuyệt đối cho các tác vụ suy luận khó nhất&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Để so sánh trực tiếp với các model đóng, xem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://apidog.com/vi/blog/kimi-k3-vs-claude-opus-4-8?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K3 vs Claude Opus 4.8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidog.com/vi/blog/kimi-k3-vs-gpt-5-6-sol?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K3 vs GPT-5.6 Sol&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Bạn có thể dùng Kimi K3 ở đâu?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nền tảng&lt;/th&gt;
&lt;th&gt;Bạn nhận được gì&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://Kimi.com" rel="noopener noreferrer"&gt;Kimi.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Ứng dụng chat web, K3 là model mặc định&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi Work&lt;/td&gt;
&lt;td&gt;Sản phẩm không gian làm việc nhóm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi Code&lt;/td&gt;
&lt;td&gt;Agent lập trình chạy trong terminal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi API&lt;/td&gt;
&lt;td&gt;Truy cập lập trình qua model ID &lt;code&gt;kimi-k3&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ứng dụng di động&lt;/td&gt;
&lt;td&gt;iOS, Android và HarmonyOS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Desktop&lt;/td&gt;
&lt;td&gt;Kimi Work phiên bản 3.1.0 trở lên&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://openrouter.ai/moonshotai/kimi-k3" rel="noopener noreferrer"&gt;OpenRouter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Truy cập qua &lt;code&gt;moonshotai/kimi-k3&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nếu làm việc trong terminal, bạn có thể bắt đầu với Kimi Code. Xem &lt;a href="https://apidog.com/vi/blog/kimi-code-cli?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn Kimi Code CLI&lt;/a&gt; để tham khảo quy trình thiết lập từ thời K2.&lt;/p&gt;

&lt;p&gt;Các tài nguyên liên quan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://apidog.com/vi/blog/kimi-k3-vs-kimi-k2-7-code?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K3 vs Kimi K2.7 Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidog.com/vi/blog/how-to-use-kimi-k3-for-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách sử dụng Kimi K3 miễn phí&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Khả năng API của Kimi K3
&lt;/h2&gt;

&lt;p&gt;Kimi K3 hỗ trợ các tính năng cần thiết cho ứng dụng agentic và workflow có cấu trúc:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Context caching&lt;/li&gt;
&lt;li&gt;Tool calling&lt;/li&gt;
&lt;li&gt;Ràng buộc lựa chọn tool&lt;/li&gt;
&lt;li&gt;JSON mode&lt;/li&gt;
&lt;li&gt;Structured output&lt;/li&gt;
&lt;li&gt;Partial mode để kiểm soát completion&lt;/li&gt;
&lt;li&gt;Internet search&lt;/li&gt;
&lt;li&gt;Dynamic tool loading&lt;/li&gt;
&lt;li&gt;Cấu hình reasoning effort, bao gồm mức “maximum”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vì API tương thích OpenAI SDK, bạn có thể bắt đầu bằng cách giữ nguyên cấu trúc client hiện có và chỉ thay endpoint cùng model ID.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_KIMI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_KIMI_OPENAI_COMPATIBLE_BASE_URL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kimi-k3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Phân tích các rủi ro chính trong thay đổi này.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Trước khi hard-code URL cơ sở, hãy xác nhận endpoint chính xác trong &lt;a href="http://platform.kimi.ai" rel="noopener noreferrer"&gt;platform.kimi.ai&lt;/a&gt;, vì Moonshot đã chuyển sang tên miền mới khi ra mắt.&lt;/p&gt;

&lt;p&gt;Để tích hợp tool calling, giữ nguyên schema OpenAI-style hiện có và kiểm tra payload trả về từ &lt;code&gt;tool_calls&lt;/code&gt; trong môi trường test trước.&lt;/p&gt;

&lt;p&gt;Xem &lt;a href="https://apidog.com/vi/blog/kimi-k3-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn API Kimi K3&lt;/a&gt; để biết chi tiết request và response.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kiểm thử &lt;code&gt;kimi-k3&lt;/code&gt; trước khi triển khai
&lt;/h2&gt;

&lt;p&gt;Đừng đưa K3 trực tiếp vào agent loop chỉ dựa trên benchmark. Trước tiên, hãy xác minh các hành vi API quan trọng:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Streaming hoạt động đúng với parser của bạn&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tool_calls&lt;/code&gt; có đúng schema bạn mong đợi&lt;/li&gt;
&lt;li&gt;JSON output có ổn định với dữ liệu thật&lt;/li&gt;
&lt;li&gt;Context caching hoạt động đúng trên request lặp lại&lt;/li&gt;
&lt;li&gt;Latency phù hợp với SLO của ứng dụng&lt;/li&gt;
&lt;li&gt;Reasoning effort tối đa có ảnh hưởng thế nào đến chi phí và thời gian phản hồi&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhzxy31q5nndgubloetev.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhzxy31q5nndgubloetev.png" alt="Kiểm thử Kimi K3 API" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bạn có thể dùng &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; để kiểm thử endpoint theo quy trình sau:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tạo request chat completion tương thích OpenAI.&lt;/li&gt;
&lt;li&gt;Lưu API key dưới dạng biến môi trường, không đặt trực tiếp trong collection chia sẻ.&lt;/li&gt;
&lt;li&gt;Đặt model là &lt;code&gt;kimi-k3&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Gửi request với &lt;code&gt;stream: true&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Kiểm tra các sự kiện Server-Sent Events khi token được trả về.&lt;/li&gt;
&lt;li&gt;Gửi request có tools để xem payload &lt;code&gt;tool_calls&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Xác thực arguments của tool theo JSON schema trước khi nối vào agent runtime.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ví dụ payload streaming:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"kimi-k3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"stream"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"messages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Tóm tắt thay đổi trong repository này."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ví dụ request có tool:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"kimi-k3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"messages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Kiểm tra trạng thái triển khai mới nhất."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tools"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"function"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"function"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"get_deployment_status"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Lấy trạng thái triển khai theo môi trường."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"parameters"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"object"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"environment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="nl"&gt;"enum"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"development"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"staging"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"production"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"required"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"environment"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mục tiêu của bước này không phải prompt engineering. Đây là kiểm thử hợp đồng API: xác minh chính xác dữ liệu model trả về trước khi code agent được chạy trong production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Các câu hỏi thường gặp
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Kimi K3 là gì?
&lt;/h3&gt;

&lt;p&gt;Kimi K3 là model ngôn ngữ lớn chủ lực của Moonshot AI, ra mắt ngày 16 tháng 7 năm 2026. Đây là model MoE 2,8 nghìn tỷ tham số, context window 1M token và được phục vụ qua API model ID &lt;code&gt;kimi-k3&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kimi K3 có bao nhiêu tham số?
&lt;/h3&gt;

&lt;p&gt;K3 có tổng cộng 2,8 nghìn tỷ tham số. Model kích hoạt 16 trong số 896 chuyên gia trên mỗi token.&lt;/p&gt;

&lt;p&gt;Moonshot chưa công bố số tham số hoạt động chính xác. Vì vậy, không nên trích dẫn một con số “active parameters” cụ thể như dữ kiện.&lt;/p&gt;

&lt;h3&gt;
  
  
  API Kimi K3 có giá bao nhiêu?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Input cache-hit: 0,30 USD / 1 triệu token&lt;/li&gt;
&lt;li&gt;Input cache-miss: 3,00 USD / 1 triệu token&lt;/li&gt;
&lt;li&gt;Output: 15,00 USD / 1 triệu token&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Xem &lt;a href="https://apidog.com/vi/blog/kimi-k3-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;phân tích giá Kimi K3&lt;/a&gt; để lập mô hình chi phí theo lượng token của ứng dụng.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kimi K3 có phải mã nguồn mở không?
&lt;/h3&gt;

&lt;p&gt;Không phải ngay ngày ra mắt. Moonshot cam kết phát hành toàn bộ trọng số trước ngày 27 tháng 7 năm 2026.&lt;/p&gt;

&lt;p&gt;Trước thời điểm đó, bạn truy cập K3 qua các sản phẩm được lưu trữ và API trả phí. Sau khi trọng số được phát hành, bạn có thể cân nhắc tự host.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kimi K3 có tốt hơn Claude Fable 5 hoặc GPT-5.6 Sol không?
&lt;/h3&gt;

&lt;p&gt;Không. Moonshot nói rõ rằng K3 vẫn kém các model độc quyền mạnh nhất là Claude Fable 5 và GPT-5.6 Sol.&lt;/p&gt;

&lt;p&gt;Tuy nhiên, K3 đạt 57 điểm trên Artificial Analysis Intelligence Index và xếp thứ 4 trong 189 model, nên vẫn là một lựa chọn mạnh trong nhóm model gần frontier.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tôi có thể dùng Kimi K3 với OpenAI SDK không?
&lt;/h3&gt;

&lt;p&gt;Có. API Moonshot tương thích OpenAI SDK.&lt;/p&gt;

&lt;p&gt;Bạn cần:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Xác nhận base URL trên &lt;a href="http://platform.kimi.ai" rel="noopener noreferrer"&gt;platform.kimi.ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Cấu hình client trỏ đến endpoint tương thích OpenAI&lt;/li&gt;
&lt;li&gt;Đặt model là &lt;code&gt;kimi-k3&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Kiểm thử chat completion, streaming và tool calling&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Bạn có thể xác minh request/response trước bằng &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kimi K3 nhanh đến mức nào?
&lt;/h3&gt;

&lt;p&gt;Artificial Analysis đo khoảng 62 token output/giây, thấp hơn mức trung bình phân khúc là 72,7 token/giây. Thời gian đến token đầu tiên gần 1,99 giây.&lt;/p&gt;

&lt;p&gt;K3 ưu tiên độ sâu suy luận hơn tốc độ phản hồi. Nếu latency là ràng buộc chính, hãy benchmark với model nhanh hơn trên workload thực tế.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kimi K3 khác Kimi K2.7 Code thế nào?
&lt;/h3&gt;

&lt;p&gt;K3 là model chủ lực thế hệ tiếp theo của dòng K2, với cơ chế attention được xây dựng lại và hiệu quả mở rộng tốt hơn khoảng 2,5 lần so với K2 theo Moonshot.&lt;/p&gt;

&lt;p&gt;K2.7 Code vẫn là model mạnh dành riêng cho coding. Xem &lt;a href="https://apidog.com/vi/blog/kimi-k3-vs-kimi-k2-7-code?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K3 vs Kimi K2.7 Code&lt;/a&gt; để so sánh trực tiếp.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cách sử dụng Scripts trước yêu cầu và sau phản hồi trong Apidog</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Thu, 16 Jul 2026 09:25:31 +0000</pubDate>
      <link>https://dev.to/sebbasstian/cach-su-dung-scripts-truoc-yeu-cau-va-sau-phan-hoi-trong-apidog-4644</link>
      <guid>https://dev.to/sebbasstian/cach-su-dung-scripts-truoc-yeu-cau-va-sau-phan-hoi-trong-apidog-4644</guid>
      <description>&lt;p&gt;Một số yêu cầu cần được xử lý trước khi rời khỏi máy của bạn, và một số cần được xử lý ngay khi nhận được phản hồi. Một API thanh toán muốn có chữ ký HMAC được tính toán từ một dấu thời gian và khóa bí mật của bạn. Một điểm cuối đăng nhập trả về một mã thông báo mà mọi cuộc gọi sau đó đều cần. Một quy trình thanh toán phải xác nhận rằng phản hồi thực sự trả về mã &lt;code&gt;200&lt;/code&gt; và ID đơn hàng chính xác. Bạn có thể tự làm tất cả những điều này, nhưng sẽ rất tốn thời gian và dễ bị lỗi khi chia sẻ yêu cầu với đồng đội.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Dùng thử Apidog ngay hôm nay&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Script giải quyết vấn đề này. Trong &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;, bạn có thể đính kèm các đoạn &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript" rel="noopener noreferrer"&gt;JavaScript&lt;/a&gt; nhỏ vào một yêu cầu để chúng tự động chạy: một nhóm trước khi yêu cầu được gửi và một nhóm khác sau khi phản hồi quay về. Nếu đã từng viết script Postman, bạn vẫn có thể dùng API đối tượng &lt;code&gt;pm&lt;/code&gt; quen thuộc vì engine của Apidog tương thích với API này.&lt;/p&gt;

&lt;p&gt;Bài viết này triển khai một luồng thực tế:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ký yêu cầu bằng HMAC trong &lt;strong&gt;Pre Processors&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Trích xuất mã thông báo trong &lt;strong&gt;Post Processors&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Xác nhận mã trạng thái và dữ liệu phản hồi.&lt;/li&gt;
&lt;li&gt;Tái sử dụng logic bằng &lt;strong&gt;Public Scripts&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Chạy kịch bản trong CI với Apidog CLI.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Hành vi scripting được mô tả trong &lt;a href="https://docs.apidog.com/" rel="noopener noreferrer"&gt;tài liệu scripting của Apidog&lt;/a&gt;, nhưng tên tab và một số chi tiết khác với Postman cần được lưu ý.&lt;/p&gt;

&lt;h2&gt;
  
  
  Script tiền xử lý và hậu xử lý thực sự làm gì?
&lt;/h2&gt;

&lt;p&gt;Apidog chạy script theo hai giai đoạn.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pre Processors: chuẩn bị yêu cầu trước khi gửi
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Pre Processors&lt;/strong&gt; chạy trước khi yêu cầu được gửi đến máy chủ. Dùng chúng để:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tạo dấu thời gian.&lt;/li&gt;
&lt;li&gt;Tính chữ ký HMAC.&lt;/li&gt;
&lt;li&gt;Sinh ID đơn hàng hoặc request ID.&lt;/li&gt;
&lt;li&gt;Đọc biến và chuyển thành header.&lt;/li&gt;
&lt;li&gt;Chuẩn bị dữ liệu body hoặc query parameter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ở thời điểm này, phản hồi chưa tồn tại. Vì vậy, bạn không thể kiểm tra &lt;code&gt;pm.response&lt;/code&gt; trong Pre Processor.&lt;/p&gt;

&lt;h3&gt;
  
  
  Post Processors: kiểm tra và tái sử dụng phản hồi
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Post Processors&lt;/strong&gt; chạy sau khi nhận phản hồi. Dùng chúng để:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kiểm tra mã trạng thái.&lt;/li&gt;
&lt;li&gt;Xác nhận cấu trúc JSON.&lt;/li&gt;
&lt;li&gt;Trích xuất token xác thực.&lt;/li&gt;
&lt;li&gt;Lưu ID tài nguyên vừa tạo.&lt;/li&gt;
&lt;li&gt;Lưu cursor phân trang cho yêu cầu tiếp theo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ví dụ, &lt;code&gt;pm.response&lt;/code&gt; với các thuộc tính như &lt;code&gt;code&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;headers&lt;/code&gt;, &lt;code&gt;responseTime&lt;/code&gt;, &lt;code&gt;responseSize&lt;/code&gt;, &lt;code&gt;text()&lt;/code&gt; và &lt;code&gt;json()&lt;/code&gt; chỉ hoạt động trong &lt;strong&gt;Post Processors&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Hai giai đoạn trao đổi dữ liệu thông qua biến:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pre Processor → thiết lập biến → request sử dụng biến → Post Processor đọc hoặc cập nhật biến
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nếu chuyển từ Postman, hãy chú ý tên tab:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Postman&lt;/th&gt;
&lt;th&gt;Apidog&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pre-request Script&lt;/td&gt;
&lt;td&gt;Pre Processors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tests&lt;/td&gt;
&lt;td&gt;Post Processors&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Hành vi tương tự, nhưng vị trí trên giao diện khác nhau.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thiết lập: mở yêu cầu và tìm các tab script
&lt;/h2&gt;

&lt;p&gt;Tải &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; nếu bạn chưa cài đặt. Công cụ chạy trên macOS, Windows và Linux.&lt;/p&gt;

&lt;p&gt;Sau đó:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mở một API request trong Apidog.&lt;/li&gt;
&lt;li&gt;Tìm tab &lt;strong&gt;Pre Processors&lt;/strong&gt; hoặc &lt;strong&gt;Post Processors&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Chọn &lt;strong&gt;add a Custom Script&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Viết JavaScript sử dụng đối tượng &lt;code&gt;pm&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Trước khi bắt đầu, cần hiểu thứ tự ưu tiên của biến trong Apidog:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Biến cục bộ (Local Variables) &amp;gt; Biến môi trường (Environment Variables) &amp;gt; Biến toàn cục chia sẻ trong dự án (Global Variables Shared within Project) &amp;gt; Biến toàn cục chia sẻ trong nhóm (Global Variables Shared within Team).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nếu một biến không có giá trị như mong đợi, hãy kiểm tra xem biến có cùng tên ở cấp ưu tiên cao hơn hay không.&lt;/p&gt;

&lt;p&gt;Với cấu hình ổn định, dùng chung cho dự án, bạn có thể lưu trong &lt;a href="https://apidog.com/vi/blog/how-to-set-global-parameters-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;các tham số toàn cục của Apidog&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ví dụ Pre Processor: ký yêu cầu bằng HMAC
&lt;/h2&gt;

&lt;p&gt;Giả sử bạn gọi một API thanh toán yêu cầu chữ ký HMAC-SHA256 cho từng request.&lt;/p&gt;

&lt;p&gt;Mẫu phổ biến là:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;payload = timestamp + "\n" + raw_request_body
signature = HMAC_SHA256(payload, secret)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nhiều nhà cung cấp API dùng mẫu tương tự để xác thực webhook. &lt;a href="https://docs.stripe.com/webhooks/signatures" rel="noopener noreferrer"&gt;Tài liệu chữ ký webhook của Stripe&lt;/a&gt; mô tả rõ cách máy chủ xác minh timestamp, payload và secret.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 1: Tạo biến môi trường
&lt;/h3&gt;

&lt;p&gt;Tạo biến môi trường:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;payments_api_secret = your-secret-key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Không hard-code khóa bí mật trực tiếp trong script.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 2: Thêm HMAC script vào Pre Processors
&lt;/h3&gt;

&lt;p&gt;Mở &lt;strong&gt;Pre Processors&lt;/strong&gt; → &lt;strong&gt;add a Custom Script&lt;/strong&gt;, sau đó thêm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Pre Processor: ký yêu cầu trước khi nó được gửi&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CryptoJS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;crypto-js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Dấu thời gian Unix hiện tại, tính bằng giây&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;timestamp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Đọc khóa bí mật từ biến môi trường&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;secret&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;payments_api_secret&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Xây dựng payload: timestamp + xuống dòng + body thô&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;timestamp&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Tính HMAC-SHA256 và mã hóa hexadecimal&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;signature&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;CryptoJS&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;HmacSHA256&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;CryptoJS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;enc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Hex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Lưu giá trị để request sử dụng&lt;/span&gt;
&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x_timestamp&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x_signature&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Đã ký yêu cầu vào &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Bước 3: Dùng biến trong request headers
&lt;/h3&gt;

&lt;p&gt;Mở tab &lt;strong&gt;Headers&lt;/strong&gt; và thêm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;X-Timestamp: {{x_timestamp}}
X-Signature: {{x_signature}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Khi gửi request, thứ tự chạy sẽ là:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pre Processor tạo timestamp.&lt;/li&gt;
&lt;li&gt;Pre Processor tính signature.&lt;/li&gt;
&lt;li&gt;Apidog lưu các giá trị vào environment.&lt;/li&gt;
&lt;li&gt;Apidog thay &lt;code&gt;{{x_timestamp}}&lt;/code&gt; và &lt;code&gt;{{x_signature}}&lt;/code&gt; vào headers.&lt;/li&gt;
&lt;li&gt;Request được gửi đến máy chủ.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Lưu ý: Apidog hỗ trợ import toàn bộ module:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CryptoJS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;crypto-js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Không dùng đường dẫn submodule như:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;crypto-js/sha256&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Các thao tác biến chỉ cập nhật giá trị hiện tại, không phải giá trị ban đầu được nhập trong trình chỉnh sửa môi trường. Đây là hành vi phù hợp với timestamp và chữ ký ngắn hạn.&lt;/p&gt;

&lt;p&gt;Nếu cần chuyển đổi từ script Postman, xem thêm bài viết về &lt;a href="https://apidog.com/vi/blog/postman-pre-request-scripts?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;script tiền yêu cầu của Postman&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ví dụ Post Processor: trích xuất token và xác nhận phản hồi
&lt;/h2&gt;

&lt;p&gt;Giả sử endpoint đăng nhập trả về:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"token"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4812&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dana@example.com"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"expires_in"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3600&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mục tiêu là:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Xác nhận HTTP status là &lt;code&gt;200&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Kiểm tra &lt;code&gt;token&lt;/code&gt; tồn tại và là chuỗi.&lt;/li&gt;
&lt;li&gt;Kiểm tra &lt;code&gt;user.id&lt;/code&gt; là số.&lt;/li&gt;
&lt;li&gt;Lưu token để dùng trong các request tiếp theo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mở &lt;strong&gt;Post Processors&lt;/strong&gt; → &lt;strong&gt;add a Custom Script&lt;/strong&gt; và thêm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Post Processor: xác minh phản hồi, sau đó trích xuất mã thông báo&lt;/span&gt;
&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Trạng thái là 200&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;have&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;jsonData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Phản hồi trả về một mã thông báo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jsonData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;a&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;and&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;not&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ID người dùng có mặt&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jsonData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;a&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;number&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Lưu token để các request khác sử dụng&lt;/span&gt;
&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;auth_token&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;jsonData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Đã lưu mã thông báo cho người dùng &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;jsonData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sau đó, trong các endpoint cần xác thực, thêm header:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Authorization: Bearer {{auth_token}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kết quả: bạn không cần sao chép token thủ công từ phản hồi đăng nhập sang từng request khác.&lt;/p&gt;

&lt;p&gt;Các khối &lt;code&gt;pm.test()&lt;/code&gt; biến thao tác gửi request thủ công thành một bài kiểm thử có thể lặp lại. Apidog hỗ trợ các matcher kiểu Chai thông qua &lt;code&gt;pm.expect()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Để tìm hiểu thêm về assertion, xem hướng dẫn &lt;a href="https://apidog.com/vi/blog/api-assertions?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;xác nhận API trong Apidog&lt;/a&gt;. Nếu cần tạo dữ liệu giả, bạn có thể kết hợp với &lt;a href="https://apidog.com/vi/blog/faker-js-and-how-to-use-it-in-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Faker.js trong Apidog&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lưu ý trong Post Processors
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;pm.iterationData&lt;/code&gt; là chỉ đọc. Bạn có thể đọc dữ liệu kiểm thử nhưng không thể ghi lại vào đó.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pm.cookies&lt;/code&gt; trả về cookie trong phản hồi từ máy chủ, không phải cookie đã gửi đi cùng request.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tái sử dụng logic với Public Scripts
&lt;/h2&gt;

&lt;p&gt;Nếu cần dùng cùng một logic HMAC cho nhiều endpoint, không nên sao chép script vào từng request. Khi thuật toán hoặc payload thay đổi, bạn sẽ phải sửa ở nhiều nơi.&lt;/p&gt;

&lt;p&gt;Thay vào đó, dùng &lt;strong&gt;Public Scripts&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cách tạo Public Script
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Mở &lt;strong&gt;Settings &amp;gt; Public Scripts&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Tạo script dùng chung.&lt;/li&gt;
&lt;li&gt;Đính kèm script vào &lt;strong&gt;Pre Processors&lt;/strong&gt; hoặc &lt;strong&gt;Post Processors&lt;/strong&gt; của request.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Thứ tự chạy rất quan trọng:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Public Scripts chạy trước Custom Scripts trong cùng danh sách.&lt;/li&gt;
&lt;li&gt;Nếu có nhiều Public Scripts, chúng chạy từ trên xuống dưới theo thứ tự hiển thị.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Chia sẻ hàm giữa Public Script và Custom Script
&lt;/h3&gt;

&lt;p&gt;Nếu Custom Script cần gọi một hàm từ Public Script, hàm đó phải là biến toàn cục.&lt;/p&gt;

&lt;p&gt;Trong Public Script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Biến sign() thành hàm toàn cục bằng cách không dùng var, let hoặc const&lt;/span&gt;
&lt;span class="nx"&gt;sign&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CryptoJS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;crypto-js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;CryptoJS&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;HmacSHA256&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;CryptoJS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;enc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Hex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Trong Custom Script đặt bên dưới Public Script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;timestamp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;secret&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;payments_api_secret&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x_timestamp&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x_signature&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;sign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nếu khai báo hàm với &lt;code&gt;const&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt;, &lt;code&gt;var&lt;/code&gt; hoặc đặt Custom Script trước Public Script, bạn có thể gặp lỗi hàm không xác định.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thư viện, gói bên ngoài và gỡ lỗi
&lt;/h2&gt;

&lt;p&gt;Apidog có sẵn một số thư viện để dùng trực tiếp qua &lt;code&gt;require()&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/brix/crypto-js" rel="noopener noreferrer"&gt;&lt;code&gt;crypto-js&lt;/code&gt;&lt;/a&gt; (v3.1.9-1) để băm và HMAC.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;jsrsasign&lt;/code&gt; (v10.3.0) cho JWT và RSA, yêu cầu Apidog 1.4.5 trở lên.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.chaijs.com/" rel="noopener noreferrer"&gt;&lt;code&gt;chai&lt;/code&gt;&lt;/a&gt; (v4.2.0) cho assertion matcher.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lodash&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;moment&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uuid&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;xml2js&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cheerio&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;postman-collection&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;atob&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;btoa&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;csv-parse/lib/sync&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tv4&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ajv&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ngoài ra còn có các thư viện tích hợp của Node như:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;path, assert, buffer, util, url, querystring, stream, events
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Tải gói ngoài bằng &lt;code&gt;$$.liveRequire()&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Nếu package không có sẵn, dùng &lt;code&gt;$$.liveRequire()&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;liveRequire&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nanoid&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nanoid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nanoid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;nanoid&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;request_id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cách này yêu cầu kết nối internet vì Apidog tải package khi script chạy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gỡ lỗi bằng console
&lt;/h3&gt;

&lt;p&gt;Dùng một trong hai cách:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Giá trị biến:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;auth_token&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hoặc:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Chữ ký đã tạo:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cả &lt;code&gt;pm.console.log()&lt;/code&gt; và &lt;code&gt;console.log()&lt;/code&gt; đều in ra console của Apidog. Đây là cách nhanh nhất để kiểm tra payload, signature, token hoặc dữ liệu phản hồi.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hai giới hạn cần lưu ý
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;pm.sendRequest()&lt;/code&gt; dùng callback thay vì Promise. Không dùng &lt;code&gt;await&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://example.com/api&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ngoài ra, &lt;code&gt;pm.nextRequest()&lt;/code&gt; của Postman không được hỗ trợ.&lt;/p&gt;

&lt;p&gt;Khi cần điều phối workflow có nhánh, điều kiện hoặc nhiều bước, hãy dùng &lt;a href="https://apidog.com/vi/blog/how-to-write-test-scenario-with-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kịch bản kiểm thử (Test Scenarios)&lt;/a&gt;. Bạn có thể sắp xếp request trực quan với các bước Condition và If-Else.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tự động hóa workflow với Apidog CLI
&lt;/h2&gt;

&lt;p&gt;Script không chỉ chạy khi bạn nhấn nút Send. Khi đóng gói request và assertion trong một Test Scenario đã lưu, bạn có thể chạy toàn bộ kịch bản bằng Apidog CLI, bao gồm cả Pre Processors và Post Processors.&lt;/p&gt;

&lt;p&gt;Cài đặt CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; apidog-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Đăng nhập bằng access token:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog login &lt;span class="nt"&gt;--with-token&lt;/span&gt; &amp;lt;YOUR_ACCESS_TOKEN&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Chạy một test scenario:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog run &lt;span class="nt"&gt;--access-token&lt;/span&gt; &lt;span class="nv"&gt;$APIDOG_ACCESS_TOKEN&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; &amp;lt;SCENARIO_ID&amp;gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &amp;lt;ENV_ID&amp;gt; &lt;span class="nt"&gt;-r&lt;/span&gt; cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ý nghĩa các cờ:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cờ&lt;/th&gt;
&lt;th&gt;Ý nghĩa&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-t&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ID của Test Scenario&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-e&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ID môi trường&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-r&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reporter: &lt;code&gt;cli&lt;/code&gt;, &lt;code&gt;html&lt;/code&gt; hoặc &lt;code&gt;junit&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Bạn có thể dùng nhiều reporter, phân tách bằng dấu phẩy.&lt;/p&gt;

&lt;p&gt;Tạo access token trong cài đặt tài khoản Apidog, xuất thành biến &lt;code&gt;APIDOG_ACCESS_TOKEN&lt;/code&gt;, rồi chạy command này trong CI.&lt;/p&gt;

&lt;p&gt;Lưu ý: script phụ thuộc vào tài nguyên chỉ có trên máy local, chẳng hạn tệp cục bộ hoặc package chỉ từng được tải thủ công, có thể chạy trong desktop app nhưng thất bại trong CLI. Để script chạy nhất quán, ưu tiên thư viện tích hợp sẵn hoặc &lt;code&gt;$$.liveRequire()&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Câu hỏi thường gặp
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Script Apidog có tương thích với script Postman hiện có không?
&lt;/h3&gt;

&lt;p&gt;Phần lớn là có. Apidog sử dụng cùng API đối tượng &lt;code&gt;pm&lt;/code&gt;, nên các lệnh sau hoạt động theo cách quen thuộc:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Khác biệt chính là tên tab:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apidog: &lt;strong&gt;Pre Processors&lt;/strong&gt; và &lt;strong&gt;Post Processors&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Postman: &lt;strong&gt;Pre-request Script&lt;/strong&gt; và &lt;strong&gt;Tests&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Một số API như &lt;code&gt;pm.nextRequest()&lt;/code&gt; không được hỗ trợ.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vì sao &lt;code&gt;pm.response&lt;/code&gt; là &lt;code&gt;undefined&lt;/code&gt; trong Pre Processor?
&lt;/h3&gt;

&lt;p&gt;Vì phản hồi chưa tồn tại. Pre Processors chạy trước khi request được gửi.&lt;/p&gt;

&lt;p&gt;Mọi code đọc status, body hoặc header từ &lt;code&gt;pm.response&lt;/code&gt; phải nằm trong Post Processors. Nếu cần dữ liệu ở giai đoạn trước, lấy từ &lt;code&gt;pm.request&lt;/code&gt;, biến môi trường hoặc thư viện phù hợp. Xem thêm cách &lt;a href="https://apidog.com/vi/blog/retrieve-request-params-in-pre-post-request-scripts?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;lấy request params trong pre/post request scripts&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Làm cách nào để chia sẻ script cho nhiều request?
&lt;/h3&gt;

&lt;p&gt;Dùng &lt;strong&gt;Public Scripts&lt;/strong&gt; tại &lt;strong&gt;Settings &amp;gt; Public Scripts&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Viết logic một lần, sau đó đính kèm vào Pre Processors hoặc Post Processors của từng request. Public Script chạy trước Custom Script trong cùng danh sách.&lt;/p&gt;

&lt;p&gt;Nếu Custom Script cần gọi hàm từ Public Script, khai báo hàm ở phạm vi toàn cục:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;myFunction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// logic dùng chung&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Tôi có thể dùng package npm không có sẵn trong Apidog không?
&lt;/h3&gt;

&lt;p&gt;Có. Dùng:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;liveRequire&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tên-gói&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pkg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// sử dụng pkg&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lệnh này tải package khi chạy nên cần internet.&lt;/p&gt;

&lt;p&gt;Với package tích hợp sẵn như &lt;code&gt;crypto-js&lt;/code&gt;, &lt;code&gt;moment&lt;/code&gt; hoặc &lt;code&gt;uuid&lt;/code&gt;, chỉ cần dùng &lt;code&gt;require()&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CryptoJS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;crypto-js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bạn phải import toàn bộ module, không dùng đường dẫn submodule.&lt;/p&gt;

&lt;h3&gt;
  
  
  Xem log từ script ở đâu?
&lt;/h3&gt;

&lt;p&gt;Dùng:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;debug message&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hoặc:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;debug message&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sau khi gửi request, xem kết quả trong console của Apidog.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tóm lại
&lt;/h2&gt;

&lt;p&gt;Pre Processors và Post Processors giúp request tự chuẩn bị và tự xác minh:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ký request trước khi gửi.&lt;/li&gt;
&lt;li&gt;Trích xuất token sau khi nhận phản hồi.&lt;/li&gt;
&lt;li&gt;Xác nhận status code và cấu trúc dữ liệu.&lt;/li&gt;
&lt;li&gt;Lưu biến để tái sử dụng trong các request tiếp theo.&lt;/li&gt;
&lt;li&gt;Đưa logic dùng chung vào Public Scripts.&lt;/li&gt;
&lt;li&gt;Chạy toàn bộ kịch bản trong CI bằng Apidog CLI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mở &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;, chọn một request và thêm Custom Script đầu tiên để tự động hóa luồng API của bạn.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>AI Đang Viết Code. Vậy Ai Quản Lý API?</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Thu, 16 Jul 2026 06:43:10 +0000</pubDate>
      <link>https://dev.to/sebbasstian/ai-dang-viet-code-vay-ai-quan-ly-api-5dc5</link>
      <guid>https://dev.to/sebbasstian/ai-dang-viet-code-vay-ai-quan-ly-api-5dc5</guid>
      <description>&lt;p&gt;Các tác nhân mã hóa AI đang thay đổi cách phần mềm được xây dựng. Chỉ trong vài phút, Claude Code, Cursor, Codex, GitHub Copilot, Windsurf, Trae, Cline và các công cụ tương tự có thể tạo route, handler, logic nghiệp vụ, truy vấn cơ sở dữ liệu, xác thực, kiểm thử và tích hợp frontend.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Dùng thử Apidog ngay hôm nay&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Tốc độ này rất hữu ích, nhưng cũng đặt ra một câu hỏi vận hành quan trọng:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI có thể viết mã. Nhưng ai quản lý API?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;API không chỉ là mã. API là hợp đồng giữa frontend, backend, ứng dụng di động, dịch vụ bên thứ ba và đôi khi là khách hàng bên ngoài. Nếu AI thay đổi API nhưng tài liệu, schema, mock, môi trường, kiểm thử và quy trình review không được cập nhật cùng lúc, tốc độ phát triển sẽ nhanh hơn nhưng hệ thống lại khó vận hành hơn.&lt;/p&gt;

&lt;p&gt;Đây là lúc &lt;a href="https://apidog.com/apidog-cli/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog CLI&lt;/a&gt; trở nên hữu ích. Công cụ này đưa các tác vụ quản lý API vào terminal để nhà phát triển, tác nhân AI và pipeline CI/CD có thể làm việc với tài liệu, mock, kiểm thử, môi trường, báo cáo, nhập/xuất và cộng tác nhánh.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tóm tắt
&lt;/h2&gt;

&lt;p&gt;Tác nhân AI có thể tạo mã API nhanh, nhưng vẫn cần một vòng đời API có cấu trúc:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Thiết kế hoặc cập nhật hợp đồng API.&lt;/li&gt;
&lt;li&gt;Đồng bộ tài liệu, schema và mock.&lt;/li&gt;
&lt;li&gt;Chạy kiểm thử API theo hành vi thực tế.&lt;/li&gt;
&lt;li&gt;Xác thực thay đổi trong pull request và CI/CD.&lt;/li&gt;
&lt;li&gt;Review API như một hợp đồng sản phẩm, không chỉ là diff mã nguồn.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Apidog CLI có thể đóng vai trò lớp quản lý API giữa mã do AI tạo và phần mềm sẵn sàng cho production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tạo mã không phải là quản lý API
&lt;/h2&gt;

&lt;p&gt;Tác nhân AI có thể tạo nhanh:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Route Express&lt;/li&gt;
&lt;li&gt;Handler FastAPI&lt;/li&gt;
&lt;li&gt;Controller Spring Boot&lt;/li&gt;
&lt;li&gt;Truy vấn cơ sở dữ liệu&lt;/li&gt;
&lt;li&gt;Trình xác thực request&lt;/li&gt;
&lt;li&gt;Đối tượng response&lt;/li&gt;
&lt;li&gt;Lệnh gọi API từ frontend&lt;/li&gt;
&lt;li&gt;Kiểm thử đơn vị và tích hợp&lt;/li&gt;
&lt;li&gt;Mô tả theo phong cách OpenAPI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tuy nhiên, một API có thể vận hành ổn định cần nhiều hơn việc tạo file. Nhóm cần quản lý:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Path và HTTP method&lt;/li&gt;
&lt;li&gt;Tham số request, query và header&lt;/li&gt;
&lt;li&gt;Schema request/response&lt;/li&gt;
&lt;li&gt;Quy tắc xác thực và phân quyền&lt;/li&gt;
&lt;li&gt;Định dạng lỗi&lt;/li&gt;
&lt;li&gt;Biến và môi trường&lt;/li&gt;
&lt;li&gt;Mock server&lt;/li&gt;
&lt;li&gt;Tài liệu API&lt;/li&gt;
&lt;li&gt;Test case, kịch bản và test suite&lt;/li&gt;
&lt;li&gt;Báo cáo kiểm thử&lt;/li&gt;
&lt;li&gt;Xác thực CI/CD&lt;/li&gt;
&lt;li&gt;Review, versioning và cộng tác nhánh&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Khi một lập trình viên thêm endpoint, họ thường biết cần cập nhật tài liệu và kiểm thử. Khi tác nhân AI thêm mười endpoint trong một phiên, các bước đó rất dễ bị bỏ qua.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rủi ro của API do AI tạo
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Endpoint không có tài liệu
&lt;/h3&gt;

&lt;p&gt;AI có thể thêm endpoint sau:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /api/orders/refund
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Route có thể hoạt động, nhưng nếu tài liệu không cập nhật, các nhóm khác sẽ không biết:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request body nào là bắt buộc&lt;/li&gt;
&lt;li&gt;Trường nào là tùy chọn&lt;/li&gt;
&lt;li&gt;Mã trạng thái nào có thể trả về&lt;/li&gt;
&lt;li&gt;Định dạng lỗi là gì&lt;/li&gt;
&lt;li&gt;Endpoint có yêu cầu xác thực không&lt;/li&gt;
&lt;li&gt;Frontend hoặc mobile có thể tích hợp như thế nào&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Endpoint tồn tại, nhưng hợp đồng API lại không hiển thị.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Schema không nhất quán
&lt;/h3&gt;

&lt;p&gt;Một endpoint có thể trả về:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"userId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"u_123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"fullName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Alex Chen"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"emailAddress"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alex@example.com"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Trong khi endpoint khác trả về:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"u_123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Alex Chen"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alex@example.com"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cả hai đều có thể hợp lệ trong phạm vi cục bộ. Nhưng sự khác biệt này làm tăng chi phí:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend phải ánh xạ nhiều kiểu dữ liệu&lt;/li&gt;
&lt;li&gt;SDK cần thêm logic chuyển đổi&lt;/li&gt;
&lt;li&gt;Kiểm thử dễ hỏng&lt;/li&gt;
&lt;li&gt;Tài liệu trở nên khó đọc&lt;/li&gt;
&lt;li&gt;Người dùng API mất niềm tin&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tính nhất quán không tự xảy ra; nó cần hợp đồng và quy trình làm việc dùng chung.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Mock lỗi thời
&lt;/h3&gt;

&lt;p&gt;Mock rất quan trọng khi frontend và backend phát triển song song. Nếu AI thay đổi backend mà mock không được cập nhật, frontend có thể được xây dựng dựa trên giả định cũ.&lt;/p&gt;

&lt;p&gt;Ví dụ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mock trả về &lt;code&gt;status: "success"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;API thực tế trả về &lt;code&gt;state: "completed"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Frontend chạy tốt với mock nhưng lỗi khi tích hợp môi trường thật&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Kiểm thử không phản ánh hợp đồng API
&lt;/h3&gt;

&lt;p&gt;Kiểm thử do AI tạo có thể chỉ xác minh một luồng thành công trong mã. Kiểm thử API nên bao phủ cả hành vi hợp đồng:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trường bắt buộc&lt;/li&gt;
&lt;li&gt;Input không hợp lệ&lt;/li&gt;
&lt;li&gt;Xác thực&lt;/li&gt;
&lt;li&gt;Phân quyền&lt;/li&gt;
&lt;li&gt;Mã trạng thái&lt;/li&gt;
&lt;li&gt;Schema response&lt;/li&gt;
&lt;li&gt;Response lỗi&lt;/li&gt;
&lt;li&gt;Kịch bản nhiều bước&lt;/li&gt;
&lt;li&gt;Hành vi theo từng môi trường&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Điểm mù CI/CD
&lt;/h3&gt;

&lt;p&gt;Một pull request do AI hỗ trợ có thể bao gồm endpoint mới, payload thay đổi, trường response bị xóa hoặc định dạng lỗi mới. Nếu API chỉ được kiểm tra thủ công, thay đổi có thể được merge trước khi bất kỳ ai xác thực API như một hợp đồng sản phẩm.&lt;/p&gt;

&lt;h2&gt;
  
  
  Câu hỏi đúng cho nhóm kỹ thuật
&lt;/h2&gt;

&lt;p&gt;Câu hỏi không còn là:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI có thể viết mã không?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nó có thể.&lt;/p&gt;

&lt;p&gt;Câu hỏi quan trọng hơn là:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Nhóm của bạn có thể quản lý các thay đổi API mà AI tạo ra không?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Trước khi merge một thay đổi API, hãy kiểm tra:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hợp đồng API có rõ ràng không?&lt;/li&gt;
&lt;li&gt;Tài liệu đã được cập nhật chưa?&lt;/li&gt;
&lt;li&gt;Mock có còn khớp không?&lt;/li&gt;
&lt;li&gt;Kiểm thử API có vượt qua không?&lt;/li&gt;
&lt;li&gt;Môi trường đã được cấu hình chưa?&lt;/li&gt;
&lt;li&gt;CI/CD có xác thực thay đổi này không?&lt;/li&gt;
&lt;li&gt;Nhóm có thể review thay đổi không?&lt;/li&gt;
&lt;li&gt;Tác nhân AI trong tương lai có đủ ngữ cảnh để tiếp tục làm việc không?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Apidog CLI cho phát triển AI-native
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://apidog.com/apidog-cli/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog CLI&lt;/a&gt; đưa các &lt;a href="https://docs.apidog.com/collaboration-workflow-646333m0?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;quy trình cộng tác cốt lõi của Apidog&lt;/a&gt; vào terminal, tác nhân AI và pipeline CI/CD.&lt;/p&gt;

&lt;p&gt;Bạn có thể sử dụng CLI để làm việc với:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tài liệu API&lt;/li&gt;
&lt;li&gt;Schema dữ liệu&lt;/li&gt;
&lt;li&gt;API mock&lt;/li&gt;
&lt;li&gt;Môi trường và biến&lt;/li&gt;
&lt;li&gt;API test case&lt;/li&gt;
&lt;li&gt;Kịch bản và test suite&lt;/li&gt;
&lt;li&gt;Báo cáo kiểm thử&lt;/li&gt;
&lt;li&gt;Nhập/xuất&lt;/li&gt;
&lt;li&gt;Cộng tác nhánh&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thay vì chỉ giao cho tác nhân một yêu cầu như:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tạo endpoint hoàn tiền.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hãy giao một nhiệm vụ hoàn chỉnh hơn:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Xây dựng endpoint hoàn tiền, cập nhật hợp đồng API, đồng bộ tài liệu và mock, sau đó chạy kiểm thử API.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Xem đầy đủ các khả năng trong &lt;a href="https://docs.apidog.com/apidog-cli-commands-options-609656m0?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;tài liệu Lệnh &amp;amp; Tùy chọn của Apidog CLI&lt;/a&gt; hoặc bắt đầu với &lt;a href="https://docs.apidog.com/installing-and-running-apidog-cli-605135m0?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn cài đặt và chạy Apidog CLI&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Nếu dự án được lưu trữ tại Apidog Europe, chỉ định API base URL của EU:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;--api-base-url&lt;/span&gt; https://api.eu.apidog.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Quy trình làm việc API khi dùng tác nhân AI
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Bước 1: Giao nhiệm vụ tính năng cho AI
&lt;/h3&gt;

&lt;p&gt;Ví dụ:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thêm endpoint để tạo yêu cầu hoàn tiền.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Tác nhân có thể tạo logic backend, validation và các file liên quan. Tuy nhiên, đó chỉ là bước triển khai.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 2: Thiết kế hoặc cập nhật hợp đồng API
&lt;/h3&gt;

&lt;p&gt;Trước khi endpoint trở thành một phần của sản phẩm, xác định rõ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Path&lt;/li&gt;
&lt;li&gt;Method&lt;/li&gt;
&lt;li&gt;Request body&lt;/li&gt;
&lt;li&gt;Query parameter&lt;/li&gt;
&lt;li&gt;Header&lt;/li&gt;
&lt;li&gt;Response body&lt;/li&gt;
&lt;li&gt;Response lỗi&lt;/li&gt;
&lt;li&gt;Quy tắc xác thực&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu muốn quản lý bước này qua terminal, hãy xem &lt;a href="https://apidog.com/vi/blog/how-to-design-apis-in-cli/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách thiết kế API trong CLI&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 3: Cập nhật tài liệu
&lt;/h3&gt;

&lt;p&gt;Mỗi endpoint mới cần trả lời rõ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Endpoint này làm gì?&lt;/li&gt;
&lt;li&gt;Gọi endpoint như thế nào?&lt;/li&gt;
&lt;li&gt;Cần gửi những trường nào?&lt;/li&gt;
&lt;li&gt;Response có ý nghĩa gì?&lt;/li&gt;
&lt;li&gt;Cần xử lý lỗi nào?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Xem hướng dẫn: &lt;a href="https://apidog.com/vi/blog/how-to-document-apis-in-cli/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách tài liệu hóa API trong CLI&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 4: Đồng bộ mock với hợp đồng
&lt;/h3&gt;

&lt;p&gt;Mock giúp frontend, backend, QA và tác nhân AI cùng làm việc dựa trên hành vi API thống nhất.&lt;/p&gt;

&lt;p&gt;Khi hợp đồng thay đổi, hãy cập nhật mock trong cùng pull request. Tìm hiểu thêm tại &lt;a href="https://apidog.com/vi/blog/how-to-mock-apis-in-cli/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách tạo API Mock trong CLI&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 5: Chạy kiểm thử API từ terminal
&lt;/h3&gt;

&lt;p&gt;Đừng chỉ kiểm thử mã nguồn. Hãy kiểm thử endpoint theo hành vi thực tế:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Status code có đúng không?&lt;/li&gt;
&lt;li&gt;Schema response có khớp không?&lt;/li&gt;
&lt;li&gt;Input không hợp lệ có bị từ chối không?&lt;/li&gt;
&lt;li&gt;Authentication và authorization có hoạt động không?&lt;/li&gt;
&lt;li&gt;Kịch bản nhiều bước có chạy thành công không?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Apidog CLI hỗ trợ chạy test case, kịch bản và test suite từ dòng lệnh, phù hợp cho:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phát triển cục bộ&lt;/li&gt;
&lt;li&gt;Quy trình làm việc của tác nhân AI&lt;/li&gt;
&lt;li&gt;Kiểm tra pull request&lt;/li&gt;
&lt;li&gt;Pipeline CI/CD&lt;/li&gt;
&lt;li&gt;Xác thực trước phát hành&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bắt đầu tại &lt;a href="https://apidog.com/vi/blog/apidog-cli-complete-guide/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Hướng dẫn đầy đủ về Apidog CLI&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 6: Chạy quy trình không cần giao diện
&lt;/h3&gt;

&lt;p&gt;Tác nhân AI và CI/CD cần lệnh có thể lặp lại, không phải thao tác nhấp qua UI. Một quy trình API không cần giao diện có thể chạy trong:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Terminal&lt;/li&gt;
&lt;li&gt;Build pipeline&lt;/li&gt;
&lt;li&gt;Container&lt;/li&gt;
&lt;li&gt;Môi trường phát triển từ xa&lt;/li&gt;
&lt;li&gt;Phiên mã hóa AI&lt;/li&gt;
&lt;li&gt;Tác vụ tự động theo lịch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Xem thêm: &lt;a href="https://apidog.com/vi/blog/headless-api-management-tool/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Công cụ quản lý API không cần giao diện&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dùng Apidog CLI với tác nhân mã hóa AI
&lt;/h2&gt;

&lt;p&gt;Apidog CLI cung cấp một đường dẫn dòng lệnh để các tác nhân AI tham gia vào vòng đời API, không chỉ chỉnh sửa file nguồn.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Công cụ mã hóa AI&lt;/th&gt;
&lt;th&gt;Hướng dẫn&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apidog.com/vi/blog/apidog-cli-in-claude-code/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách sử dụng Apidog CLI trong Claude Code&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cursor&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apidog.com/vi/blog/apidog-cli-in-cursor/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách sử dụng Apidog CLI trong Cursor&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apidog.com/vi/blog/apidog-cli-in-codex/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách sử dụng Apidog CLI trong Codex&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Copilot&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apidog.com/vi/blog/apidog-cli-in-github-copilot/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách sử dụng Apidog CLI trong GitHub Copilot&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windsurf&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apidog.com/vi/blog/apidog-cli-in-windsurf/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách sử dụng Apidog CLI trong Windsurf&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trae&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apidog.com/vi/blog/apidog-cli-in-trae/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách sử dụng Apidog CLI trong Trae&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cline&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apidog.com/vi/blog/apidog-cli-in-cline/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách sử dụng Apidog CLI trong Cline&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Antigravity&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apidog.com/vi/blog/apidog-cli-in-antigravity/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách sử dụng Apidog CLI trong Antigravity&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenClaw&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apidog.com/vi/blog/apidog-cli-in-openclaw/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách sử dụng Apidog CLI trong OpenClaw&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hermes Agent&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apidog.com/vi/blog/apidog-cli-in-hermes-agent/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách sử dụng Apidog CLI trong Hermes Agent&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nguyên tắc chung là:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tác nhân AI không chỉ nên tạo mã. Nó nên giúp duy trì quy trình API lành mạnh.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Đưa kiểm tra API vào CI/CD
&lt;/h2&gt;

&lt;p&gt;Mã do AI tạo không nên đi thẳng từ trình soạn thảo đến production. Nó cần trải qua cùng quy trình xác thực như mã do con người viết.&lt;/p&gt;

&lt;p&gt;Trong CI/CD, bạn có thể dùng Apidog CLI để:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chạy kịch bản kiểm thử API sau pull request&lt;/li&gt;
&lt;li&gt;Xác thực endpoint quan trọng trước triển khai&lt;/li&gt;
&lt;li&gt;Tạo báo cáo kiểm thử API&lt;/li&gt;
&lt;li&gt;Kiểm tra hành vi theo môi trường&lt;/li&gt;
&lt;li&gt;Gắn kiểm thử API với quy trình phát hành&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tham khảo &lt;a href="https://docs.apidog.com/cicd-in-apidog-609698m0?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;tài liệu tích hợp CI/CD của Apidog&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checklist thực tế khi AI thay đổi API
&lt;/h2&gt;

&lt;p&gt;Áp dụng checklist này cho mọi pull request có thay đổi API:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kiểm tra hợp đồng&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Path, method, request schema, response schema và error response phải rõ ràng.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cập nhật tài liệu&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Không merge endpoint mới nếu người dùng API chưa biết cách gọi nó.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Đồng bộ mock&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Mock phải phản ánh hợp đồng hiện tại, không phải JSON mẫu cũ.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Chạy kiểm thử API&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Kiểm tra happy path, validation, authentication, authorization và error case.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tự động hóa bằng CLI&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Biến các bước lặp lại thành lệnh để developer, AI agent và CI đều có thể chạy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bắt buộc kiểm tra trong CI/CD&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Những endpoint quan trọng cần được xác thực trước khi phát hành.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Review hành vi API, không chỉ review mã&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Hỏi rõ thay đổi có breaking không, tài liệu đã cập nhật chưa và người dùng có bị ảnh hưởng không.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Tại sao quản lý API quan trọng hơn khi có AI
&lt;/h2&gt;

&lt;p&gt;AI tăng lượng mã mà nhóm có thể tạo. Đồng thời, nó cũng tăng số endpoint, schema, tích hợp và thay đổi API mà nhóm cần hiểu, review, kiểm thử và tài liệu hóa.&lt;/p&gt;

&lt;p&gt;Khi tốc độ phát triển tăng, khả năng phối hợp càng quan trọng. Nếu không có một quy trình API trung tâm, nhiều endpoint, nhiều branch, nhiều mock và nhiều thay đổi backend sẽ nhanh chóng trở thành nhiễu loạn.&lt;/p&gt;

&lt;p&gt;Apidog CLI giúp công việc API duy trì khả năng hiển thị, kiểm thử và lặp lại trong terminal, tác nhân AI và CI/CD.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tư duy sản phẩm đằng sau Apidog CLI
&lt;/h2&gt;

&lt;p&gt;Apidog CLI phản ánh sự dịch chuyển từ quy trình thao tác thủ công qua UI sang quy trình ưu tiên tự động hóa và được điều khiển bởi tác nhân.&lt;/p&gt;

&lt;p&gt;Một nền tảng API hiện đại không chỉ là nơi con người nhấp nút. Nó cũng cần cung cấp workflow mà script, terminal, tác nhân AI và CI/CD có thể gọi.&lt;/p&gt;

&lt;p&gt;Đọc thêm về bối cảnh sản phẩm tại &lt;a href="https://apidog.com/vi/blog/apidog-cli-journey-workflow?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Hành trình phát triển của Apidog CLI&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tương lai: AI agent cần công cụ API, không chỉ trình soạn thảo mã
&lt;/h2&gt;

&lt;p&gt;Khi tác nhân AI ngày càng giỏi viết mã, chúng cần quyền truy cập tốt hơn vào các hệ thống xung quanh mã:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nền tảng API&lt;/li&gt;
&lt;li&gt;Công cụ kiểm thử&lt;/li&gt;
&lt;li&gt;Hệ thống tài liệu&lt;/li&gt;
&lt;li&gt;Mock server&lt;/li&gt;
&lt;li&gt;Quy trình CI/CD&lt;/li&gt;
&lt;li&gt;Pipeline triển khai&lt;/li&gt;
&lt;li&gt;Công cụ giám sát&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Các nhóm hiệu quả nhất sẽ không chỉ yêu cầu AI viết nhiều mã hơn. Họ sẽ kết nối AI với các quy trình giúp phần mềm đáng tin cậy hơn.&lt;/p&gt;

&lt;p&gt;Với API, điều đó có nghĩa là tác nhân cần làm việc được với hợp đồng, tài liệu, mock, kiểm thử và báo cáo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kết luận
&lt;/h2&gt;

&lt;p&gt;AI có thể viết mã, nhưng mã chỉ là một phần của phát triển phần mềm.&lt;/p&gt;

&lt;p&gt;API vẫn cần hợp đồng rõ ràng, tài liệu, mock, kiểm thử, môi trường, báo cáo và quy trình cộng tác. Nếu thiếu các thành phần này, mã do AI tạo có thể tăng sự nhầm lẫn nhanh hơn giá trị mà nó mang lại.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/apidog-cli/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog CLI&lt;/a&gt; đưa quản lý API vào dòng lệnh, nơi developer, tác nhân AI và hệ thống CI/CD đều có thể sử dụng.&lt;/p&gt;

&lt;p&gt;AI có thể viết mã. Apidog CLI giúp nhóm của bạn quản lý các API đằng sau nó.&lt;/p&gt;

&lt;h2&gt;
  
  
  Câu hỏi thường gặp về Apidog CLI
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Apidog CLI là gì?
&lt;/h3&gt;

&lt;p&gt;Apidog CLI là công cụ dòng lệnh cho phép developer và tác nhân AI sử dụng các khả năng của Apidog bên ngoài ứng dụng, bao gồm tài liệu API, schema, mock, môi trường, biến, test case, kịch bản, test suite, báo cáo, nhập/xuất và cộng tác nhánh.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tại sao quản lý API quan trọng khi AI viết mã?
&lt;/h3&gt;

&lt;p&gt;AI có thể tạo API nhanh, nhưng nhóm vẫn cần hợp đồng rõ ràng, tài liệu cập nhật, mock chính xác, kiểm thử đáng tin cậy và xác thực CI/CD. Nếu không, endpoint có thể không nhất quán, không có tài liệu hoặc không được kiểm thử đầy đủ.&lt;/p&gt;

&lt;h3&gt;
  
  
  Apidog CLI có hoạt động với tác nhân mã hóa AI không?
&lt;/h3&gt;

&lt;p&gt;Có. Apidog CLI được thiết kế cho workflow dòng lệnh và tác nhân AI, bao gồm Claude Code, Cursor, Codex, GitHub Copilot, Windsurf, Trae, Cline, Antigravity, OpenClaw và Hermes Agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tôi có thể chạy kiểm thử API bằng Apidog CLI không?
&lt;/h3&gt;

&lt;p&gt;Có. Apidog CLI hỗ trợ chạy API test case, kịch bản, test suite và báo cáo từ dòng lệnh, phù hợp với phát triển cục bộ, workflow của AI agent và CI/CD.&lt;/p&gt;

&lt;h3&gt;
  
  
  Apidog CLI có hỗ trợ tài liệu API không?
&lt;/h3&gt;

&lt;p&gt;Có. Apidog CLI hỗ trợ quy trình tài liệu API qua dòng lệnh, giúp nhóm giữ tài liệu phù hợp với các thay đổi trong quá trình phát triển.&lt;/p&gt;

&lt;h3&gt;
  
  
  Apidog CLI có thể tạo hoặc quản lý API mock không?
&lt;/h3&gt;

&lt;p&gt;Có. Apidog CLI hỗ trợ workflow mock để frontend, backend, QA và AI agent làm việc dựa trên hành vi API nhất quán.&lt;/p&gt;

&lt;h3&gt;
  
  
  Apidog CLI có hữu ích cho CI/CD không?
&lt;/h3&gt;

&lt;p&gt;Có. Vì chạy từ dòng lệnh, Apidog CLI có thể được dùng trong CI/CD để chạy kiểm thử API, tạo báo cáo và tự động xác thực hành vi API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Làm cách nào để dùng Apidog CLI với Apidog Europe?
&lt;/h3&gt;

&lt;p&gt;Nếu dự án của bạn được lưu trữ tại Apidog Europe, chỉ định API base URL của EU khi chạy lệnh:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
--api-base-url https://api.eu.apidog.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
    <item>
      <title>Cách sinh mã client từ API Spec trong Apidog</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Thu, 16 Jul 2026 06:24:44 +0000</pubDate>
      <link>https://dev.to/sebbasstian/cach-sinh-ma-client-tu-api-spec-trong-apidog-3g72</link>
      <guid>https://dev.to/sebbasstian/cach-sinh-ma-client-tu-api-spec-trong-apidog-3g72</guid>
      <description>&lt;p&gt;Bạn đã định nghĩa một endpoint và muốn gọi nó từ ứng dụng của mình. Phần tẻ nhạt là chuyển đổi đặc tả thành mã hoạt động: URL chính xác, tiêu đề, mã thông báo xác thực, chuỗi truy vấn — tất cả được kết nối vào một lệnh gọi &lt;code&gt;requests&lt;/code&gt; hoặc &lt;code&gt;fetch&lt;/code&gt;. Sao chép sai một ký tự và bạn có thể mất hai mươi phút để tìm lý do máy chủ trả về mã &lt;code&gt;401&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Dùng thử Apidog ngay hôm nay&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Bạn không cần viết tay những đoạn mã trùng lặp đó. Nếu API được thiết kế trong &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;, nền tảng sẽ đọc đặc tả endpoint và cung cấp đoạn mã yêu cầu sẵn sàng để dán bằng ngôn ngữ bạn đang dùng: cURL để kiểm tra nhanh trong terminal, Python &lt;code&gt;requests&lt;/code&gt; cho script, JavaScript &lt;code&gt;fetch&lt;/code&gt; hoặc Axios cho frontend.&lt;/p&gt;

&lt;p&gt;Bài viết này hướng dẫn cách:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tạo mã yêu cầu từ một endpoint thực tế.&lt;/li&gt;
&lt;li&gt;Gửi yêu cầu trước để đưa giá trị thực tế vào đoạn mã.&lt;/li&gt;
&lt;li&gt;Cập nhật mã khi đặc tả API thay đổi.&lt;/li&gt;
&lt;li&gt;Kiểm tra endpoint trong CI bằng Apidog CLI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu muốn xem thêm các lựa chọn khác, hãy tham khảo bài tổng hợp về &lt;a href="https://apidog.com/vi/blog/api-code-generation-tools?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;các công cụ tạo mã API&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ý tưởng này dựa trên nguyên tắc đặc tả là nguồn chân lý duy nhất — cũng là nguyên tắc đằng sau &lt;a href="https://www.openapis.org/" rel="noopener noreferrer"&gt;OpenAPI Specification&lt;/a&gt;. Định nghĩa đúng một lần, rồi tạo mã yêu cầu từ cùng định nghĩa đó.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trình tạo mã client thực sự làm gì?
&lt;/h2&gt;

&lt;p&gt;Apidog biến định nghĩa endpoint thành đoạn mã yêu cầu theo ngôn ngữ và thư viện HTTP bạn chọn.&lt;/p&gt;

&lt;p&gt;Ví dụ, với endpoint &lt;code&gt;GET /orders&lt;/code&gt;, khi chọn Python và thư viện Requests, Apidog tạo mã gọi đúng đường dẫn cùng các tiêu đề và tham số được khai báo trong đặc tả.&lt;/p&gt;

&lt;p&gt;Đây là &lt;strong&gt;trình tạo yêu cầu cho từng endpoint&lt;/strong&gt;, không phải trình tạo SDK đầy đủ hoặc package client có phiên bản. Bạn có thể dùng nó để tạo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Một lệnh cURL để chạy trong terminal.&lt;/li&gt;
&lt;li&gt;Một khối Python &lt;code&gt;requests&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Một đoạn JavaScript &lt;code&gt;fetch&lt;/code&gt; hoặc Axios.&lt;/li&gt;
&lt;li&gt;Mã tương ứng cho nhiều ngôn ngữ và thư viện HTTP khác.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu bạn cần SDK được gõ kiểu đầy đủ, model dữ liệu hoặc tiện ích phân trang tích hợp sẵn, tính năng này không nhằm thay thế các công cụ tạo SDK chuyên dụng.&lt;/p&gt;

&lt;p&gt;Quy trình này phù hợp với &lt;a href="https://apidog.com/vi/blog/design-first-api-development?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;phát triển API thiết kế trước&lt;/a&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Định nghĩa hợp đồng API.&lt;/li&gt;
&lt;li&gt;Tạo mã yêu cầu trực tiếp từ hợp đồng.&lt;/li&gt;
&lt;li&gt;Đảm bảo mọi consumer bắt đầu từ cùng một định nghĩa.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Hai cách để mở trình tạo mã
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; có hai điểm truy cập vào trình tạo mã client.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cách 1: Từ tab Tài liệu
&lt;/h3&gt;

&lt;p&gt;Dùng cách này khi bạn đang đọc tài liệu endpoint:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mở &lt;strong&gt;tab Tài liệu&lt;/strong&gt; của API.&lt;/li&gt;
&lt;li&gt;Chọn endpoint cần dùng.&lt;/li&gt;
&lt;li&gt;Nhấp &lt;strong&gt;Tạo mã Client&lt;/strong&gt; ở phía bên phải.&lt;/li&gt;
&lt;li&gt;Chọn ngôn ngữ và thư viện HTTP.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Cách 2: Từ tab Chạy
&lt;/h3&gt;

&lt;p&gt;Dùng cách này khi bạn đã cấu hình hoặc kiểm thử yêu cầu:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mở endpoint trong &lt;strong&gt;tab Chạy&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Nhấp biểu tượng mã &lt;code&gt;&amp;lt;/&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Chọn ngôn ngữ và biến thể thư viện.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cả hai cách đều mở cùng một bảng điều khiển tạo mã.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tạo lệnh gọi Python cho &lt;code&gt;GET /orders&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Ví dụ dưới đây dùng endpoint &lt;code&gt;GET /orders&lt;/code&gt; để liệt kê đơn hàng, có lọc theo trạng thái và phân trang.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 1: Mở endpoint và chọn ngôn ngữ
&lt;/h3&gt;

&lt;p&gt;Mở endpoint trong &lt;strong&gt;tab Tài liệu&lt;/strong&gt;, sau đó nhấp &lt;strong&gt;Tạo mã Client&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Apidog hỗ trợ nhiều ngôn ngữ và biến thể:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shell&lt;/strong&gt;: cURL, cURL-Windows, Httpie, wget, PowerShell&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript&lt;/strong&gt;: Fetch, Axios, jQuery, XHR, Native, Request, Unirest&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python&lt;/strong&gt;: &lt;code&gt;http.client&lt;/code&gt;, Requests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Java&lt;/strong&gt;: Unirest, OkHttp&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Go&lt;/strong&gt;: Native&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PHP&lt;/strong&gt;: cURL, Guzzle, pecl_http, HTTP_Request2&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Khác&lt;/strong&gt;: Swift (URLSession), C (libcurl), C#, Objective-C, Ruby, OCaml, Dart, R và HTTP thô&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Trong ví dụ này, chọn &lt;strong&gt;Python&lt;/strong&gt; và &lt;strong&gt;Requests&lt;/strong&gt;. Apidog sẽ tạo đoạn mã tương tự:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.example.com/orders&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;querystring&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;shipped&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;page&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Accept&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;querystring&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bạn có thể sao chép đoạn mã này vào script và chạy ngay, miễn là endpoint không yêu cầu thông tin xác thực bổ sung.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 2: Hiểu mã được tạo từ đặc tả
&lt;/h3&gt;

&lt;p&gt;Mã tạo trực tiếp từ đặc tả API chỉ chứa thông tin có trong đặc tả:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;URL và HTTP method.&lt;/li&gt;
&lt;li&gt;Header được khai báo.&lt;/li&gt;
&lt;li&gt;Tham số truy vấn hoặc đường dẫn.&lt;/li&gt;
&lt;li&gt;Giá trị ví dụ nếu đặc tả có định nghĩa.&lt;/li&gt;
&lt;li&gt;Cấu trúc body yêu cầu nếu có.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mã này &lt;strong&gt;không tự động chứa&lt;/strong&gt; mã thông báo xác thực thực tế hoặc giá trị tham số bạn đã nhập khi chạy request.&lt;/p&gt;

&lt;p&gt;Ví dụ, đoạn mã từ đặc tả có thể không bao gồm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Authorization: Bearer &amp;lt;your-token&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Điều này phù hợp nếu endpoint không cần xác thực hoặc bạn muốn tự quản lý token trong mã nguồn. Nhưng với endpoint được bảo vệ như &lt;code&gt;GET /orders&lt;/code&gt;, bạn thường cần tạo mã từ một yêu cầu đã gửi thực tế.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 3: Gửi yêu cầu để lấy giá trị thực tế
&lt;/h3&gt;

&lt;p&gt;Để tạo mã có cả tham số và header xác thực thực tế:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mở endpoint trong &lt;strong&gt;tab Chạy&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Điền tham số yêu cầu.&lt;/li&gt;
&lt;li&gt;Thêm token xác thực.&lt;/li&gt;
&lt;li&gt;Nhấp &lt;strong&gt;Gửi&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Mở &lt;strong&gt;tab Yêu cầu Thực tế&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Cuộn xuống phần mã client và chọn ngôn ngữ cần dùng.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nếu làm việc theo hướng thiết kế trước, các tham số từ đặc tả sẽ được điền tự động trong tab Chạy. Nếu đang thiết lập yêu cầu thủ công, hãy nhập chúng trực tiếp.&lt;/p&gt;

&lt;p&gt;Sau khi gửi yêu cầu, đoạn Python được tạo có thể trông như sau:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.example.com/orders&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;querystring&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;shipped&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;page&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Accept&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer sk_live_51H8xY2...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;querystring&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Khác biệt chính là:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nguồn tạo mã&lt;/th&gt;
&lt;th&gt;Nội dung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Từ đặc tả&lt;/td&gt;
&lt;td&gt;Cấu trúc endpoint và giá trị ví dụ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Từ &lt;strong&gt;Yêu cầu Thực tế&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Giá trị tham số và header đã thực sự gửi&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Không commit token hoặc khóa API từ đoạn mã được tạo vào Git. Hãy xử lý chúng như bí mật, tương tự khuyến nghị trong &lt;a href="https://docs.stripe.com/keys" rel="noopener noreferrer"&gt;tài liệu Stripe về API keys&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Xử lý request body cho POST và PUT
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;GET /orders&lt;/code&gt; không có request body. Tuy nhiên, với &lt;code&gt;POST /orders&lt;/code&gt; hoặc &lt;code&gt;PUT /orders/{id}&lt;/code&gt;, bạn cần tạo body trước khi sinh mã client.&lt;/p&gt;

&lt;p&gt;Trong &lt;strong&gt;tab Chạy&lt;/strong&gt;, Apidog hỗ trợ tạo body JSON hoặc XML từ hai nguồn:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ví dụ request đã được định nghĩa trong đặc tả.&lt;/li&gt;
&lt;li&gt;Tùy chọn &lt;strong&gt;Tự động tạo&lt;/strong&gt; dựa trên schema.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Menu &lt;strong&gt;Tự động tạo&lt;/strong&gt; có hai chế độ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ví dụ&lt;/strong&gt;: chọn thủ công một body mẫu đã được định nghĩa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tạo mỗi lần&lt;/strong&gt;: tạo lại dữ liệu cho mỗi lần sử dụng dựa trên quy tắc mock và schema.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bạn cũng có thể cấu hình ưu tiên tại &lt;strong&gt;Tùy chọn Tự động tạo&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sử dụng Giá trị Ví dụ trước&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sử dụng Giá trị Mặc định trước&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sử dụng Giá trị Mock&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chỉ tạo Tên trường&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sử dụng Ví dụ Yêu cầu&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Chọn &lt;strong&gt;Sử dụng Giá trị Ví dụ trước&lt;/strong&gt; khi đặc tả đã có dữ liệu ví dụ chất lượng. Chọn &lt;strong&gt;Sử dụng Giá trị Mock&lt;/strong&gt; khi cần dữ liệu mẫu hợp lệ cho từng trường.&lt;/p&gt;

&lt;p&gt;Các tùy chọn &lt;strong&gt;Tự động tạo&lt;/strong&gt; cho request body yêu cầu Apidog 2.7.0 trở lên. Nếu không thấy chúng, hãy cập nhật ứng dụng.&lt;/p&gt;

&lt;p&gt;Một schema có mô tả tốt, kiểu dữ liệu rõ ràng và ví dụ phù hợp sẽ giúp tạo body chính xác hơn. Bạn có thể cải thiện chất lượng đặc tả bằng cách &lt;a href="https://apidog.com/vi/blog/auto-generate-api-docs-swagger-openapi?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;tự động tạo tài liệu API từ OpenAPI&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Khi cần giá trị thay đổi theo từng yêu cầu, chẳng hạn timestamp hoặc ID ngẫu nhiên:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Nhấp biểu tượng &lt;strong&gt;đũa thần&lt;/strong&gt; cạnh trường tham số.&lt;/li&gt;
&lt;li&gt;Hoặc dùng &lt;strong&gt;Chèn Giá trị Động&lt;/strong&gt; trong body JSON/XML.&lt;/li&gt;
&lt;li&gt;Gửi yêu cầu.&lt;/li&gt;
&lt;li&gt;Lấy mã hoàn chỉnh từ &lt;strong&gt;tab Yêu cầu Thực tế&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Khi nào dùng đoạn mã yêu cầu thay vì mã trong mô hình nghiệp vụ?
&lt;/h2&gt;

&lt;p&gt;Chọn lượng mã cần sao chép dựa trên nơi đoạn mã sẽ được sử dụng.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dùng đoạn mã đơn lẻ cho tác vụ một lần
&lt;/h3&gt;

&lt;p&gt;Chọn cURL, &lt;code&gt;fetch&lt;/code&gt; đơn giản hoặc &lt;code&gt;requests.get&lt;/code&gt; khi bạn cần:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gỡ lỗi endpoint trả về &lt;code&gt;403&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Chia sẻ request có thể tái tạo trong ticket.&lt;/li&gt;
&lt;li&gt;Kiểm tra nhanh từ terminal.&lt;/li&gt;
&lt;li&gt;Thêm ví dụ vào tài liệu nội bộ.&lt;/li&gt;
&lt;li&gt;Xác minh nhanh header, query string hoặc body.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ví dụ cURL phù hợp để tái hiện một lỗi ngay lập tức:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;--request&lt;/span&gt; GET &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--url&lt;/span&gt; &lt;span class="s1"&gt;'https://api.example.com/orders?status=shipped&amp;amp;page=1'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s1"&gt;'Accept: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s1"&gt;'Authorization: Bearer &amp;lt;TOKEN&amp;gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Dùng mã có cấu trúc trong ứng dụng
&lt;/h3&gt;

&lt;p&gt;Khi endpoint được gọi từ logic ứng dụng, hãy đóng gói mã được tạo vào service hoặc module.&lt;/p&gt;

&lt;p&gt;Ví dụ với Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;API_BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;API_TOKEN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;API_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_orders&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/orders&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Accept&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_TOKEN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;page&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cách này phù hợp hơn khi &lt;code&gt;GET /orders&lt;/code&gt; được dùng ở nhiều nơi vì bạn có thể:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tập trung xử lý xác thực.&lt;/li&gt;
&lt;li&gt;Thêm timeout và xử lý lỗi.&lt;/li&gt;
&lt;li&gt;Tái sử dụng logic.&lt;/li&gt;
&lt;li&gt;Không lặp token trong từng request.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu nhiều endpoint dùng chung xác thực hoặc tham số, hãy cấu hình chúng tập trung. Hướng dẫn về &lt;a href="https://apidog.com/vi/blog/how-to-set-global-parameters-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;cách đặt tham số toàn cục trong Apidog&lt;/a&gt; cho thấy cách định nghĩa header và biến dùng chung một lần để các request kế thừa cấu hình đó.&lt;/p&gt;

&lt;h2&gt;
  
  
  Giữ mã được tạo chính xác với quy trình thiết kế trước
&lt;/h2&gt;

&lt;p&gt;Mã được tạo chỉ chính xác khi đặc tả phía sau nó còn chính xác.&lt;/p&gt;

&lt;p&gt;Ví dụ, nếu bạn thêm tham số truy vấn &lt;code&gt;region&lt;/code&gt; vào &lt;code&gt;GET /orders&lt;/code&gt; nhưng vẫn dùng đoạn mã cũ, request có thể thiếu tham số cần thiết mà không có cảnh báo rõ ràng.&lt;/p&gt;

&lt;p&gt;Hãy áp dụng quy trình sau:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cập nhật đặc tả endpoint.&lt;/li&gt;
&lt;li&gt;Kiểm tra endpoint trong tab Chạy.&lt;/li&gt;
&lt;li&gt;Gửi request với dữ liệu thực tế.&lt;/li&gt;
&lt;li&gt;Tạo lại đoạn mã client.&lt;/li&gt;
&lt;li&gt;Cập nhật service hoặc tài liệu đang dùng đoạn mã cũ.&lt;/li&gt;
&lt;li&gt;Chạy test để xác minh hợp đồng.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://apidog.com/vi/blog/apidog-spec-first-mode-guide?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Chế độ thiết kế trước của Apidog&lt;/a&gt; giúp giữ định nghĩa API làm nguồn chính thức, để mã yêu cầu luôn phản ánh hợp đồng hiện tại.&lt;/p&gt;

&lt;p&gt;Với các đoạn JavaScript được tạo, hãy tham khảo &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API" rel="noopener noreferrer"&gt;tài liệu MDN về Fetch API&lt;/a&gt; nếu cần điều chỉnh cú pháp hoặc xử lý response.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tự động hóa quy trình với Apidog CLI
&lt;/h2&gt;

&lt;p&gt;Tạo mã client là thao tác trong GUI: bạn mở bảng mã và sao chép đoạn mã cần dùng. Không có lệnh CLI riêng chỉ để xuất mã client.&lt;/p&gt;

&lt;p&gt;Tuy nhiên, &lt;a href="https://apidog.com/vi/blog/apidog-cli-installation-guide?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog CLI&lt;/a&gt; giúp tự động hóa hai phần quan trọng:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Giữ đặc tả API được cập nhật.&lt;/li&gt;
&lt;li&gt;Chạy test để xác minh endpoint vẫn hoạt động đúng hợp đồng.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cài đặt CLI bằng Node.js v16 trở lên:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; apidog-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Xác thực bằng access token:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog login &lt;span class="nt"&gt;--with-token&lt;/span&gt; &amp;lt;YOUR_ACCESS_TOKEN&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Chạy kịch bản kiểm tra đã lưu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog run &lt;span class="nt"&gt;--access-token&lt;/span&gt; &lt;span class="nv"&gt;$APIDOG_ACCESS_TOKEN&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; &amp;lt;scenario_id&amp;gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &amp;lt;env_id&amp;gt; &lt;span class="nt"&gt;-r&lt;/span&gt; cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Trong đó:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;-t&lt;/code&gt;: ID kịch bản kiểm tra.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-e&lt;/code&gt;: ID môi trường.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-r&lt;/code&gt;: định dạng báo cáo, gồm &lt;code&gt;cli&lt;/code&gt;, &lt;code&gt;html&lt;/code&gt; hoặc &lt;code&gt;junit&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tích hợp lệnh này vào CI để mỗi lần push đều xác minh endpoint vẫn đáp ứng đặc tả trước khi đội ngũ tạo lại mã client. Xem thêm hướng dẫn &lt;a href="https://apidog.com/vi/blog/apidog-cli-github-actions?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog CLI với GitHub Actions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;CLI không trực tiếp viết mã client, nhưng nó bảo vệ hợp đồng mà mã client dựa vào.&lt;/p&gt;

&lt;h2&gt;
  
  
  Câu hỏi thường gặp
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Mã được tạo có bao gồm API key và token không?
&lt;/h3&gt;

&lt;p&gt;Không theo mặc định. Mã tạo trực tiếp từ đặc tả không chứa giá trị tham số thực tế hoặc thông tin xác thực đang dùng.&lt;/p&gt;

&lt;p&gt;Để lấy đoạn mã có token và tham số thật:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cấu hình request trong &lt;strong&gt;tab Chạy&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Gửi request.&lt;/li&gt;
&lt;li&gt;Mở &lt;strong&gt;tab Yêu cầu Thực tế&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Sao chép mã client từ request đã gửi.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Không đưa token trong đoạn mã đó vào repository công khai hoặc commit trực tiếp vào Git.&lt;/p&gt;

&lt;h3&gt;
  
  
  Apidog có thể tạo mã cho ngôn ngữ và thư viện nào?
&lt;/h3&gt;

&lt;p&gt;Apidog hỗ trợ nhiều lựa chọn, bao gồm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shell: cURL, Httpie, wget, PowerShell.&lt;/li&gt;
&lt;li&gt;JavaScript: Fetch, Axios, jQuery, XHR và các biến thể khác.&lt;/li&gt;
&lt;li&gt;Python: &lt;code&gt;http.client&lt;/code&gt;, Requests.&lt;/li&gt;
&lt;li&gt;Java: Unirest, OkHttp.&lt;/li&gt;
&lt;li&gt;Go, PHP, Swift, C, C#, Ruby, Dart, R và các ngôn ngữ khác.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bạn chọn ngôn ngữ và thư viện cụ thể trong bảng tạo mã.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tại sao tôi không thấy tùy chọn Tự động tạo cho request body?
&lt;/h3&gt;

&lt;p&gt;Các tùy chọn này yêu cầu Apidog 2.7.0 trở lên.&lt;/p&gt;

&lt;p&gt;Sau khi cập nhật, bạn sẽ thấy chúng trong &lt;strong&gt;tab Chạy&lt;/strong&gt; khi tạo body JSON hoặc XML. Menu &lt;strong&gt;Tự động tạo&lt;/strong&gt; cung cấp các chế độ &lt;strong&gt;Ví dụ&lt;/strong&gt; và &lt;strong&gt;Tạo mỗi lần&lt;/strong&gt;, cùng các tùy chọn ưu tiên cho giá trị được tạo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tính năng tạo mã client có phải là tính năng trả phí không?
&lt;/h3&gt;

&lt;p&gt;Tài liệu Apidog không phân định rõ giữa miễn phí/trả phí hoặc cloud/tự lưu trữ đối với tính năng tạo mã client.&lt;/p&gt;

&lt;p&gt;Yêu cầu phiên bản được nêu rõ là tùy chọn body &lt;strong&gt;Tự động tạo&lt;/strong&gt; cần Apidog 2.7.0 trở lên. Bạn có thể &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;tải xuống Apidog&lt;/a&gt; và thử trình tạo mã.&lt;/p&gt;

&lt;h3&gt;
  
  
  Làm thế nào để đảm bảo lệnh gọi được tạo thực sự hoạt động?
&lt;/h3&gt;

&lt;p&gt;Sau khi tạo mã:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lưu một kịch bản kiểm tra cho endpoint.&lt;/li&gt;
&lt;li&gt;Chạy kịch bản trong Apidog.&lt;/li&gt;
&lt;li&gt;Chạy lại bằng CLI trong CI.&lt;/li&gt;
&lt;li&gt;Chỉ cập nhật mã client sau khi test xác nhận endpoint hoạt động đúng.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Xem hướng dẫn về &lt;a href="https://apidog.com/vi/blog/how-to-write-test-scenario-with-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;cách viết kịch bản kiểm tra với Apidog&lt;/a&gt; để thiết lập test cho endpoint.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tóm tắt
&lt;/h2&gt;

&lt;p&gt;Tạo mã client trong Apidog giúp biến đặc tả endpoint thành request sẵn sàng dán bằng ngôn ngữ và thư viện bạn đang dùng.&lt;/p&gt;

&lt;p&gt;Quy trình thực tế:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Định nghĩa endpoint trong đặc tả.&lt;/li&gt;
&lt;li&gt;Mở &lt;strong&gt;Tạo mã Client&lt;/strong&gt; để lấy cấu trúc request.&lt;/li&gt;
&lt;li&gt;Gửi request trong tab Chạy nếu cần token và giá trị thực tế.&lt;/li&gt;
&lt;li&gt;Sao chép mã từ &lt;strong&gt;tab Yêu cầu Thực tế&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Không commit secret vào mã nguồn.&lt;/li&gt;
&lt;li&gt;Tạo lại mã khi đặc tả thay đổi.&lt;/li&gt;
&lt;li&gt;Dùng test và CLI để xác minh endpoint trong CI.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Tải xuống Apidog&lt;/a&gt;, định nghĩa endpoint &lt;code&gt;GET /orders&lt;/code&gt; và tạo một lệnh gọi client hoạt động chỉ trong vài cú nhấp chuột.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Hướng dẫn kiểm thử API mTLS bằng Apidog</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Thu, 16 Jul 2026 06:14:23 +0000</pubDate>
      <link>https://dev.to/sebbasstian/huong-dan-kiem-thu-api-mtls-bang-apidog-1847</link>
      <guid>https://dev.to/sebbasstian/huong-dan-kiem-thu-api-mtls-bang-apidog-1847</guid>
      <description>&lt;p&gt;Bạn gọi một API đối tác với payload đúng định dạng và token hợp lệ nhưng vẫn nhận lỗi &lt;code&gt;TLS handshake failure&lt;/code&gt;. Nguyên nhân có thể là endpoint yêu cầu client chứng minh danh tính bằng chứng chỉ &lt;strong&gt;trước khi&lt;/strong&gt; bất kỳ yêu cầu HTTP nào được gửi đi. Đây là TLS song phương (mutual TLS hoặc mTLS), và việc cấu hình sai chứng chỉ có thể chặn toàn bộ quá trình tích hợp.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Dùng thử Apidog ngay hôm nay&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Hướng dẫn này trình bày cách cấu hình chứng chỉ client và chứng chỉ CA trong &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; để kiểm thử API bảo vệ bằng mTLS. Bạn sẽ liên kết chứng chỉ client với một host, thêm CA cho chứng chỉ tự ký hoặc root nội bộ, rồi gửi yêu cầu HTTPS đã được Apidog tự động ký. Nếu bạn mới làm việc với chứng chỉ, hãy đọc thêm về &lt;a href="https://apidog.com/vi/blog/ssl-certificate-verification?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;xác minh chứng chỉ SSL&lt;/a&gt;. Để hiểu giao thức nền tảng, xem &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Security/Transport_Layer_Security" rel="noopener noreferrer"&gt;tài liệu TLS của MDN&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  TLS song phương là gì và tại sao API yêu cầu nó?
&lt;/h2&gt;

&lt;p&gt;Với HTTPS thông thường, việc xác minh diễn ra một chiều:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Máy chủ gửi chứng chỉ của nó.&lt;/li&gt;
&lt;li&gt;Client xác minh chứng chỉ đó.&lt;/li&gt;
&lt;li&gt;Kết nối mã hóa được thiết lập.&lt;/li&gt;
&lt;li&gt;Client gửi token hoặc API key trong yêu cầu để xác thực ở tầng ứng dụng.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Với mTLS, máy chủ cũng yêu cầu client gửi chứng chỉ:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Máy chủ trình bày chứng chỉ TLS.&lt;/li&gt;
&lt;li&gt;Client xác minh chứng chỉ máy chủ.&lt;/li&gt;
&lt;li&gt;Client trình bày chứng chỉ client.&lt;/li&gt;
&lt;li&gt;Máy chủ xác minh chứng chỉ client.&lt;/li&gt;
&lt;li&gt;Chỉ khi cả hai bên được tin cậy, yêu cầu HTTP mới được gửi.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nếu chứng chỉ client không được ký bởi CA mà máy chủ tin cậy, quá trình bắt tay thất bại. Khi đó sẽ không có header, body hay token nào được truyền đi.&lt;/p&gt;

&lt;p&gt;mTLS thường xuất hiện trong các trường hợp sau:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ngân hàng và thanh toán:&lt;/strong&gt; API ngân hàng mở hoặc hệ thống xử lý thẻ thường yêu cầu chứng chỉ client bên cạnh OAuth. &lt;a href="https://docs.stripe.com/" rel="noopener noreferrer"&gt;Tài liệu Stripe&lt;/a&gt; mô tả mô hình thông tin xác thực nhiều lớp cho endpoint tài chính nhạy cảm.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Giao tiếp nội bộ giữa các dịch vụ:&lt;/strong&gt; Môi trường zero-trust yêu cầu dịch vụ xác minh danh tính bằng chứng chỉ thay vì chỉ dựa vào mạng nội bộ.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API đối tác B2B:&lt;/strong&gt; Đối tác có thể cấp chứng chỉ client trong quá trình onboarding để giới hạn quyền truy cập cho các máy hoặc hệ thống đã đăng ký.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu API sử dụng cả OAuth và mTLS, hai cơ chế này không thay thế nhau. &lt;a href="https://datatracker.ietf.org/doc/html/rfc8705" rel="noopener noreferrer"&gt;RFC 8705&lt;/a&gt; mô tả cách liên kết token OAuth với chứng chỉ client.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Chứng chỉ client xác thực ở tầng TLS/network.&lt;br&gt;&lt;br&gt;
Token, API key, OAuth và Basic Auth xác thực ở tầng HTTP/application.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Trong Apidog:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tab &lt;strong&gt;Certificates&lt;/strong&gt; dùng để cấu hình mTLS.&lt;/li&gt;
&lt;li&gt;Tab &lt;a href="https://apidog.com/vi/blog/security-schemes?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;&lt;strong&gt;Authorization&lt;/strong&gt;&lt;/a&gt; dùng cho API key, Bearer token, OAuth và Basic Auth.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bạn có thể cần cấu hình cả hai.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apidog liên kết chứng chỉ với host như thế nào?
&lt;/h2&gt;

&lt;p&gt;Apidog cấu hình chứng chỉ ở phạm vi toàn cục, không phải trên từng request. Bạn thêm chứng chỉ một lần, liên kết nó với host, và Apidog tự động sử dụng chứng chỉ đó cho mọi yêu cầu HTTPS khớp với host.&lt;/p&gt;

&lt;p&gt;Có hai loại chứng chỉ cần phân biệt:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Loại&lt;/th&gt;
&lt;th&gt;Mục đích&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Client Certificate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Chứng minh danh tính client với máy chủ trong quy trình mTLS.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CA Certificate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cho phép Apidog tin cậy máy chủ sử dụng CA nội bộ hoặc chứng chỉ tự ký.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Ví dụ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API đối tác yêu cầu mTLS → thêm &lt;strong&gt;client certificate&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Server staging dùng private root CA → thêm &lt;strong&gt;CA certificate&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;API nội bộ dùng cả mTLS và private CA → cần cả hai.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Việc khớp dựa trên &lt;strong&gt;host&lt;/strong&gt;. Nếu host cấu hình không khớp URL yêu cầu, Apidog sẽ không gửi chứng chỉ client.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thiết lập chứng chỉ client cho API mTLS
&lt;/h2&gt;

&lt;p&gt;Giả sử đối tác cấp cho bạn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Host: &lt;code&gt;partner-api.acmebank.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Endpoint: &lt;code&gt;GET /v1/settlements&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Một chứng chỉ client và private key&lt;/li&gt;
&lt;li&gt;OAuth token để xác thực yêu cầu&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bước 1: Mở phần Certificates
&lt;/h3&gt;

&lt;p&gt;Trong Apidog:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Chọn biểu tượng cài đặt ở góc trên bên phải.&lt;/li&gt;
&lt;li&gt;Mở tab &lt;strong&gt;Certificates&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Tìm phần &lt;strong&gt;Client Certificates&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Các chứng chỉ tại đây sẽ được áp dụng tự động dựa trên host, thay vì gắn vào một request riêng lẻ.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 2: Thêm client certificate
&lt;/h3&gt;

&lt;p&gt;Trong phần &lt;strong&gt;Client Certificates&lt;/strong&gt;, chọn &lt;strong&gt;Add Certificate&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ở trường &lt;strong&gt;Host&lt;/strong&gt;, chỉ nhập tên miền:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;partner-api.acmebank.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Không nhập giao thức:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://partner-api.acmebank.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nếu đối tác sử dụng cùng chứng chỉ cho nhiều subdomain, bạn có thể dùng wildcard:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*.acmebank.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ví dụ này có thể áp dụng cùng chứng chỉ cho:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;partner-api.acmebank.com
sandbox-api.acmebank.com
settlements-api.acmebank.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cổng mặc định là &lt;code&gt;443&lt;/code&gt;. Chỉ điền cổng nếu endpoint mTLS dùng cổng khác, chẳng hạn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;8443
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Bước 3: Chọn định dạng chứng chỉ
&lt;/h3&gt;

&lt;p&gt;Apidog hỗ trợ hai dạng phổ biến.&lt;/p&gt;

&lt;h4&gt;
  
  
  Cách 1: CRT và private key riêng biệt
&lt;/h4&gt;

&lt;p&gt;Chọn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File chứng chỉ, ví dụ &lt;code&gt;.crt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;File private key, ví dụ &lt;code&gt;.key&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ví dụ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;client.crt
client.key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Cách 2: File PFX
&lt;/h4&gt;

&lt;p&gt;Nếu đối tác cấp một file chứa cả chứng chỉ và private key, chọn file &lt;code&gt;.pfx&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;client-certificate.pfx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nếu private key hoặc PFX có passphrase, nhập passphrase vào trường tương ứng. Nếu không có, để trống.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 4: Lưu chứng chỉ
&lt;/h3&gt;

&lt;p&gt;Chọn &lt;strong&gt;Add&lt;/strong&gt; để lưu.&lt;/p&gt;

&lt;p&gt;Sau khi lưu, chứng chỉ được liên kết với:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;partner-api.acmebank.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Từ thời điểm này, Apidog sẽ tự động dùng chứng chỉ khi bạn gọi HTTPS đến host đó.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 5: Gửi yêu cầu mTLS
&lt;/h3&gt;

&lt;p&gt;Tạo request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET https://partner-api.acmebank.com/v1/settlements
Authorization: Bearer &amp;lt;your_oauth_token&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apidog thực hiện các bước sau:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Khớp host với cấu hình certificate.&lt;/li&gt;
&lt;li&gt;Gửi client certificate trong TLS handshake.&lt;/li&gt;
&lt;li&gt;Hoàn tất xác thực mTLS.&lt;/li&gt;
&lt;li&gt;Gửi Bearer token trong HTTP request.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ví dụ phản hồi thành công:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"settlements"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stl_88213"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;41200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"USD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cleared"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"settled_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-07-14T09:31:00Z"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"next_cursor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Chứng chỉ xác thực máy hoặc hệ thống gọi API; token xác thực phiên, ứng dụng hoặc người dùng ở tầng HTTP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thêm chứng chỉ CA cho root nội bộ hoặc chứng chỉ tự ký
&lt;/h2&gt;

&lt;p&gt;Client certificate chỉ xử lý việc máy chủ xác minh bạn. Bạn cũng cần xử lý chiều ngược lại: client phải tin cậy chứng chỉ của máy chủ.&lt;/p&gt;

&lt;p&gt;Nếu server dùng chứng chỉ được ký bởi CA nội bộ hoặc chứng chỉ tự ký, request có thể thất bại với lỗi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SSL Error: Self signed certificate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lỗi này xảy ra trước khi mTLS hoàn tất.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cách thêm CA certificate
&lt;/h3&gt;

&lt;p&gt;Trong tab &lt;strong&gt;Certificates&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Bật &lt;strong&gt;CA Certificates&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Chọn file CA ở định dạng PEM.&lt;/li&gt;
&lt;li&gt;Lưu cấu hình.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Một file PEM có thể chứa nhiều chứng chỉ, bao gồm root CA và intermediate CA:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-----BEGIN CERTIFICATE-----
MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQG...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEFTCCAv2gAwIBAgIQeM8V5x8B3QksZ4 b2VqkJTANBgkqhkiG9w0BAQ...
-----END CERTIFICATE-----
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sau khi thêm CA:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apidog có thể tin cậy server được ký bởi CA này.&lt;/li&gt;
&lt;li&gt;Client certificate cho phép server tin cậy bạn.&lt;/li&gt;
&lt;li&gt;Kết nối mTLS nội bộ có thể hoạt động từ đầu đến cuối.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Mẹo cấu hình mTLS trong Apidog
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Dùng wildcard cho nhiều subdomain
&lt;/h3&gt;

&lt;p&gt;Nếu một chứng chỉ áp dụng cho nhiều endpoint của đối tác, dùng:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*.acmebank.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thay vì thêm riêng từng host:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;partner-api.acmebank.com
sandbox-api.acmebank.com
settlements-api.acmebank.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Kiểm tra cổng không chuẩn
&lt;/h3&gt;

&lt;p&gt;Nếu API dùng cổng như &lt;code&gt;8443&lt;/code&gt; hoặc &lt;code&gt;9443&lt;/code&gt;, hãy cấu hình đúng cổng trong certificate settings.&lt;/p&gt;

&lt;p&gt;Ví dụ URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://partner-api.acmebank.com:8443/v1/settlements
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nếu bạn không cấu hình cổng phù hợp, host có thể không khớp và Apidog sẽ không gửi chứng chỉ.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chứng chỉ không thể chỉnh sửa trực tiếp
&lt;/h3&gt;

&lt;p&gt;Nếu cần thay chứng chỉ đã gia hạn hoặc sửa host:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Xóa chứng chỉ cũ.&lt;/li&gt;
&lt;li&gt;Thêm lại chứng chỉ mới.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Đưa bước này vào quy trình xoay vòng chứng chỉ để tránh gián đoạn kiểm thử.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chỉ giữ một chứng chỉ cho mỗi host
&lt;/h3&gt;

&lt;p&gt;Không nên đăng ký nhiều client certificate cho cùng một tên miền. Điều này tạo ra sự mơ hồ về chứng chỉ cần gửi trong handshake.&lt;/p&gt;

&lt;p&gt;Mỗi host nên có một certificate binding rõ ràng.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tách biệt Certificates và Authorization
&lt;/h3&gt;

&lt;p&gt;Đây là lỗi cấu hình phổ biến nhất:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cấu hình&lt;/th&gt;
&lt;th&gt;Vị trí trong Apidog&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Client certificate, CA certificate, mTLS&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Certificates&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API key, Bearer token, OAuth, Basic Auth&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Authorization&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Authorization có thể được cấu hình ở:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Từng request&lt;/li&gt;
&lt;li&gt;Folder&lt;/li&gt;
&lt;li&gt;Collection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Các request có thể kế thừa authorization từ folder hoặc collection cha.&lt;/p&gt;

&lt;p&gt;Để tìm hiểu thêm về token-based authentication, xem hướng dẫn &lt;a href="https://apidog.com/vi/blog/api-gateway-authentication?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;xác thực gateway API&lt;/a&gt;. Nếu bạn làm việc trong môi trường Windows, xem thêm bài &lt;a href="https://apidog.com/vi/blog/how-to-configure-kerberos-authentication-in-apidog-for-api-testing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;cấu hình xác thực Kerberos trong Apidog&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  mTLS chỉ hoạt động với HTTPS
&lt;/h3&gt;

&lt;p&gt;Apidog không gửi client certificate cho URL HTTP thuần túy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://partner-api.acmebank.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;URL phải dùng HTTPS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://partner-api.acmebank.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nếu endpoint bắt đầu bằng &lt;code&gt;http://&lt;/code&gt;, TLS handshake sẽ không chạy và chứng chỉ sẽ không được gửi.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tự động hóa kiểm thử mTLS bằng Apidog CLI
&lt;/h2&gt;

&lt;p&gt;Sau khi request chạy được trong giao diện Apidog, bạn có thể chạy scenario trong CI/CD bằng &lt;a href="https://apidog.com/vi/blog/apidog-cli-installation-guide?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog CLI&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Cài đặt CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; apidog-cli
apidog login &lt;span class="nt"&gt;--with-token&lt;/span&gt; &amp;lt;YOUR_ACCESS_TOKEN&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Chạy scenario đã lưu với một environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog run &lt;span class="nt"&gt;--access-token&lt;/span&gt; &lt;span class="nv"&gt;$APIDOG_ACCESS_TOKEN&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; &amp;lt;scenario_id&amp;gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &amp;lt;env_id&amp;gt; &lt;span class="nt"&gt;-r&lt;/span&gt; cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apidog CLI hỗ trợ truyền trực tiếp cấu hình chứng chỉ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--ssl-client-cert&lt;/code&gt;: đường dẫn đến chứng chỉ PEM&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--ssl-client-key&lt;/code&gt;: đường dẫn đến private key&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--ssl-client-passphrase&lt;/code&gt;: passphrase của private key&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--ssl-extra-ca-certs&lt;/code&gt;: CA bổ sung cần tin cậy&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--ssl-client-cert-list&lt;/code&gt;: file cấu hình ánh xạ chứng chỉ theo mẫu URL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ví dụ với nhiều reporter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog run &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--access-token&lt;/span&gt; &lt;span class="nv"&gt;$APIDOG_ACCESS_TOKEN&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-t&lt;/span&gt; &amp;lt;scenario_id&amp;gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &amp;lt;env_id&amp;gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-r&lt;/span&gt; html,cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bạn có thể đưa lệnh này vào pipeline để kiểm thử API mTLS trên mỗi lần push. Xem hướng dẫn chạy &lt;a href="https://apidog.com/vi/blog/apidog-cli-ci-cd-pipeline?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog CLI trong CI/CD&lt;/a&gt; để tích hợp vào pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Câu hỏi thường gặp
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tôi cần client certificate, CA certificate hay cả hai?
&lt;/h3&gt;

&lt;p&gt;Tùy vào endpoint:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cần &lt;strong&gt;client certificate&lt;/strong&gt; khi server yêu cầu mTLS.&lt;/li&gt;
&lt;li&gt;Cần &lt;strong&gt;CA certificate&lt;/strong&gt; khi server dùng CA chưa được máy bạn tin cậy, chẳng hạn private root CA.&lt;/li&gt;
&lt;li&gt;Cần &lt;strong&gt;cả hai&lt;/strong&gt; khi API nội bộ vừa dùng mTLS vừa sử dụng chứng chỉ server được ký bởi private CA.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;API công khai sử dụng CA công khai thường chỉ cần client certificate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tại sao Apidog không gửi client certificate?
&lt;/h3&gt;

&lt;p&gt;Kiểm tra các điểm sau:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Host trong cấu hình phải khớp chính xác URL request.&lt;/li&gt;
&lt;li&gt;Không thêm &lt;code&gt;https://&lt;/code&gt; vào trường Host.&lt;/li&gt;
&lt;li&gt;Cổng phải khớp nếu endpoint không dùng &lt;code&gt;443&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;URL request phải bắt đầu bằng &lt;code&gt;https://&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ví dụ host đúng:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;partner-api.acmebank.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ví dụ host sai:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://partner-api.acmebank.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  API key và Bearer token được cấu hình ở đâu?
&lt;/h3&gt;

&lt;p&gt;Cấu hình chúng trong tab &lt;strong&gt;Authorization&lt;/strong&gt;, không phải &lt;strong&gt;Certificates&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Xem thêm hướng dẫn về &lt;a href="https://apidog.com/vi/blog/security-schemes?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;sơ đồ bảo mật&lt;/a&gt; để phân biệt các loại xác thực và cách kế thừa Authorization trong collection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Một chứng chỉ có thể dùng cho nhiều subdomain không?
&lt;/h3&gt;

&lt;p&gt;Có. Dùng wildcard trong trường Host:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cấu hình này áp dụng chứng chỉ cho mọi subdomain của &lt;code&gt;example.com&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Làm cách nào để cập nhật chứng chỉ?
&lt;/h3&gt;

&lt;p&gt;Chứng chỉ không chỉnh sửa trực tiếp được. Hãy xóa certificate hiện có và thêm lại certificate mới hoặc certificate đã gia hạn.&lt;/p&gt;

&lt;p&gt;Khi quản lý nhiều môi trường, bạn cũng có thể dùng &lt;a href="https://apidog.com/vi/blog/how-to-set-global-parameters-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;tham số toàn cục trong Apidog&lt;/a&gt; để giữ URL, token và giá trị môi trường nhất quán giữa các request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tổng kết
&lt;/h2&gt;

&lt;p&gt;Để kiểm thử API mTLS trong Apidog:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Liên kết client certificate với đúng host.&lt;/li&gt;
&lt;li&gt;Thêm CA certificate nếu server dùng private root hoặc chứng chỉ tự ký.&lt;/li&gt;
&lt;li&gt;Gửi request HTTPS để Apidog tự động chọn và đính kèm chứng chỉ.&lt;/li&gt;
&lt;li&gt;Cấu hình OAuth, API key hoặc Bearer token riêng trong &lt;strong&gt;Authorization&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Giữ tách biệt giữa TLS certificate và HTTP authorization sẽ giúp bạn xác định lỗi handshake nhanh hơn và cấu hình mTLS ổn định hơn.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Tải Apidog&lt;/a&gt;, thêm chứng chỉ của đối tác và gửi request mTLS đầu tiên của bạn. Dùng thử miễn phí, không cần thẻ tín dụng.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cách kiểm thử API upload file (multipart/form-data) trong Apidog</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Thu, 16 Jul 2026 06:05:07 +0000</pubDate>
      <link>https://dev.to/sebbasstian/cach-kiem-thu-api-upload-file-multipartform-data-trong-apidog-333</link>
      <guid>https://dev.to/sebbasstian/cach-kiem-thu-api-upload-file-multipartform-data-trong-apidog-333</guid>
      <description>&lt;p&gt;Bạn đã xây dựng một endpoint nhận tệp: người dùng tải ảnh đại diện lên &lt;code&gt;POST /avatars&lt;/code&gt;, hoặc ứng dụng đẩy PDF đã ký lên &lt;code&gt;POST /documents&lt;/code&gt;. Bây giờ, bạn cần kiểm tra nó qua HTTP: chọn một tệp thực, đính kèm vào trường biểu mẫu, gửi yêu cầu và xác minh phản hồi.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Thử Apidog ngay hôm nay&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Tải tệp dùng &lt;a href="https://datatracker.ietf.org/doc/html/rfc7578" rel="noopener noreferrer"&gt;&lt;code&gt;multipart/form-data&lt;/code&gt;&lt;/a&gt;, không phải JSON. Vì vậy, bạn không thể chỉ dán nội dung vào body rồi nhấn gửi. Bạn cần một công cụ có thể đính kèm trường tệp và một quy trình kiểm thử có thể tìm thấy tệp khi chạy lại trong Runner hoặc CLI. &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; hỗ trợ cả hai.&lt;/p&gt;

&lt;p&gt;Bài viết này tập trung vào quy trình triển khai:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gửi một tệp đơn lẻ.&lt;/li&gt;
&lt;li&gt;Gửi tệp kèm JSON.&lt;/li&gt;
&lt;li&gt;Xác nhận phản hồi.&lt;/li&gt;
&lt;li&gt;Chạy lại bài kiểm thử trong Runner hoặc CLI khi tệp không còn ở máy cục bộ.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu cần tìm hiểu cấu trúc multipart trước, xem bài &lt;a href="https://apidog.com/vi/blog/file-upload-in-apis?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;tải tệp trong API&lt;/a&gt;. Tài liệu &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/FormData" rel="noopener noreferrer"&gt;MDN về FormData&lt;/a&gt; cũng hữu ích khi bạn làm việc ở phía trình duyệt.&lt;/p&gt;

&lt;h2&gt;
  
  
  multipart/form-data là gì và tại sao tác vụ tải tệp cần nó
&lt;/h2&gt;

&lt;p&gt;Body của một yêu cầu API có thể là &lt;code&gt;form-data&lt;/code&gt;, &lt;code&gt;x-www-form-urlencoded&lt;/code&gt;, JSON, XML, raw hoặc binary. Trong phần lớn trường hợp, bạn sẽ dùng JSON. Tải tệp là ngoại lệ.&lt;/p&gt;

&lt;p&gt;Khi chọn &lt;code&gt;form-data&lt;/code&gt;, Apidog tạo body với tiêu đề:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Content-Type: multipart/form-data
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Body được chia thành nhiều phần. Mỗi phần có tên và dữ liệu riêng:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Một phần có thể là chuỗi như &lt;code&gt;title&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Một phần có thể là byte thô của ảnh hoặc PDF.&lt;/li&gt;
&lt;li&gt;Các phần này được gửi trong cùng một HTTP request.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Người họ hàng gần của nó là &lt;code&gt;x-www-form-urlencoded&lt;/code&gt;. Dù đều có dạng khóa-giá trị, định dạng này chỉ phù hợp cho các trường văn bản ngắn, không chứa tệp.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quy tắc chọn nhanh:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Trường hợp&lt;/th&gt;
&lt;th&gt;Body nên dùng&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chỉ có dữ liệu JSON&lt;/td&gt;
&lt;td&gt;&lt;code&gt;JSON&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Form đơn giản, không có tệp&lt;/td&gt;
&lt;td&gt;&lt;code&gt;x-www-form-urlencoded&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Có ảnh, PDF, video hoặc tệp bất kỳ&lt;/td&gt;
&lt;td&gt;&lt;code&gt;form-data&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Trong &lt;code&gt;form-data&lt;/code&gt;, mỗi tham số có kiểu riêng như &lt;code&gt;string&lt;/code&gt;, &lt;code&gt;integer&lt;/code&gt; hoặc &lt;code&gt;file&lt;/code&gt;. Điểm quan trọng là: khi đặt kiểu thành &lt;code&gt;file&lt;/code&gt;, Apidog sẽ đính kèm nội dung tệp thay vì gửi đường dẫn dưới dạng văn bản.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gửi một tệp tải lên duy nhất và xác nhận phản hồi
&lt;/h2&gt;

&lt;p&gt;Giả sử bạn đang kiểm thử:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /avatars
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Endpoint nhận trường &lt;code&gt;avatar&lt;/code&gt; chứa ảnh và trả JSON với URL ảnh đã lưu.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Chọn Body là form-data
&lt;/h3&gt;

&lt;p&gt;Trong Apidog:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Đặt method là &lt;code&gt;POST&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Nhập URL endpoint, ví dụ &lt;code&gt;https://api.example.com/avatars&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Mở tab &lt;strong&gt;Body&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Chọn &lt;strong&gt;form-data&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Apidog sẽ tự đặt &lt;code&gt;Content-Type: multipart/form-data&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Thêm trường tệp
&lt;/h3&gt;

&lt;p&gt;Thêm một hàng tham số:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;avatar&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Chọn tệp&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Đổi kiểu của trường &lt;code&gt;avatar&lt;/code&gt; từ &lt;code&gt;string&lt;/code&gt; sang &lt;code&gt;file&lt;/code&gt;. Ô giá trị sẽ chuyển thành trình chọn tệp.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Chọn tệp cục bộ
&lt;/h3&gt;

&lt;p&gt;Nhấp &lt;strong&gt;Upload&lt;/strong&gt; trên hàng &lt;code&gt;avatar&lt;/code&gt;, sau đó chọn tệp, ví dụ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;jane-profile.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apidog lưu &lt;strong&gt;đường dẫn cục bộ&lt;/strong&gt; đến tệp, không lưu byte của tệp trên đám mây.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Gửi request
&lt;/h3&gt;

&lt;p&gt;Nhấn &lt;strong&gt;Send&lt;/strong&gt;. Apidog sẽ:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Đọc tệp từ đường dẫn cục bộ.&lt;/li&gt;
&lt;li&gt;Tạo multipart body.&lt;/li&gt;
&lt;li&gt;Gửi request đến endpoint.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Một phản hồi thành công có thể như sau:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"usr_8842"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"avatarUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://cdn.example.com/avatars/usr_8842.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sizeBytes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;48210&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"contentType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Thêm assertions
&lt;/h3&gt;

&lt;p&gt;Status &lt;code&gt;200&lt;/code&gt; không đủ để chứng minh endpoint hoạt động đúng. Hãy thêm post-request assertions để xác minh dữ liệu quan trọng:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;status code == 200
$.avatarUrl exists
$.contentType == "image/png"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Các assertion này kiểm tra:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request trả về HTTP &lt;code&gt;200&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;JSON có trường &lt;code&gt;avatarUrl&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Máy chủ nhận đúng loại MIME của tệp.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Xem thêm hướng dẫn &lt;a href="https://apidog.com/vi/blog/api-assertions?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;xác nhận API&lt;/a&gt; để biết các toán tử và cách dùng JSONPath.&lt;/p&gt;

&lt;p&gt;Tương đương với &lt;code&gt;curl&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.example.com/avatars &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s2"&gt;"avatar=@jane-profile.png"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cờ &lt;code&gt;-F&lt;/code&gt; tạo multipart request, còn &lt;code&gt;@&lt;/code&gt; yêu cầu curl đọc nội dung từ tệp. Trường &lt;code&gt;file&lt;/code&gt; trong Apidog thực hiện cùng chức năng đó qua giao diện.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gửi một tệp và JSON cùng nhau
&lt;/h2&gt;

&lt;p&gt;Các endpoint thực tế thường cần cả tệp lẫn metadata. Ví dụ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /documents
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Endpoint có thể nhận:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tệp PDF.&lt;/li&gt;
&lt;li&gt;Tiêu đề.&lt;/li&gt;
&lt;li&gt;Danh mục.&lt;/li&gt;
&lt;li&gt;Danh sách thẻ.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Trường dữ liệu đơn giản
&lt;/h3&gt;

&lt;p&gt;Với dữ liệu vô hướng, thêm các hàng &lt;code&gt;form-data&lt;/code&gt; bên cạnh trường tệp:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Ví dụ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;q3-invoice.pdf&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Q3 Invoice&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;category&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;billing&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Tất cả được gửi trong một multipart request.&lt;/p&gt;

&lt;h3&gt;
  
  
  Metadata có cấu trúc
&lt;/h3&gt;

&lt;p&gt;Nếu metadata là object lồng nhau hoặc mảng, gửi JSON dưới dạng một trường &lt;code&gt;string&lt;/code&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;q3-invoice.pdf&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;metadata&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;JSON bên dưới&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Q3 Invoice"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"billing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tags"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"invoice"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"paid"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Máy chủ sẽ:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Đọc PDF từ phần &lt;code&gt;file&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Phân tích JSON từ phần &lt;code&gt;metadata&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Đây là mẫu multipart phổ biến. Ví dụ, &lt;a href="https://docs.stripe.com/api/files/create" rel="noopener noreferrer"&gt;tài liệu tải tệp của Stripe&lt;/a&gt; minh họa một endpoint nhận phần tệp cùng các trường dữ liệu khác.&lt;/p&gt;

&lt;p&gt;Nếu đang chuyển từ Postman, xem hướng dẫn &lt;a href="https://apidog.com/vi/blog/how-to-upload-a-file-and-json-data-in-postman?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;tải tệp và dữ liệu JSON trong Postman&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Đính kèm nhiều tệp
&lt;/h3&gt;

&lt;p&gt;Không cần chế độ đa tệp riêng. Chỉ cần thêm nhiều trường kiểu &lt;code&gt;file&lt;/code&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;file&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;thumbnail&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;file&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Mỗi trường có nút &lt;strong&gt;Upload&lt;/strong&gt; riêng.&lt;/p&gt;

&lt;h2&gt;
  
  
  Biến request thành kịch bản kiểm thử có thể lặp lại
&lt;/h2&gt;

&lt;p&gt;Một lần gửi request chỉ chứng minh endpoint hoạt động tại thời điểm đó. Để phát hiện lỗi hồi quy, hãy lưu request trong test scenario.&lt;/p&gt;

&lt;p&gt;Ví dụ một luồng kiểm thử:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Gọi &lt;code&gt;POST /avatars&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Lấy &lt;code&gt;id&lt;/code&gt; từ response.&lt;/li&gt;
&lt;li&gt;Gọi &lt;code&gt;GET /users/{id}&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Xác minh &lt;code&gt;avatarUrl&lt;/code&gt; đã được lưu.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Bạn có thể lưu bước tải tệp như một bước trong scenario, sau đó truyền &lt;code&gt;id&lt;/code&gt; sang bước tiếp theo. Hướng dẫn &lt;a href="https://apidog.com/vi/blog/how-to-write-test-scenario-with-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;cách viết kịch bản kiểm thử với Apidog&lt;/a&gt; trình bày cách nối các bước và truyền giá trị giữa chúng.&lt;/p&gt;

&lt;p&gt;Sau khi tạo scenario, bạn có thể:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chạy trên staging sau mỗi lần triển khai.&lt;/li&gt;
&lt;li&gt;Thêm nhánh với &lt;a href="https://apidog.com/vi/blog/how-to-add-conditional-logic-api-test-scenarios-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;logic điều kiện trong các kịch bản kiểm thử API&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Chạy định kỳ bằng &lt;a href="https://apidog.com/vi/blog/how-to-schedule-api-tests-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;các bài kiểm thử API theo lịch trình&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tuy nhiên, có một vấn đề quan trọng: máy của bạn có tệp, nhưng Runner hoặc CLI có thể không có.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cái bẫy: tác vụ tải tệp chạy ở nơi khác
&lt;/h2&gt;

&lt;p&gt;Apidog lưu đường dẫn tệp, không lưu tệp. Trên máy cục bộ, điều này thường không gây vấn đề vì đường dẫn vẫn hợp lệ.&lt;/p&gt;

&lt;p&gt;Ví dụ, bạn chọn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/Users/jane/pics/jane-profile.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Đường dẫn này chỉ tồn tại trên máy của bạn. Khi cùng request chạy ở máy khác, nó có thể không tìm thấy tệp.&lt;/p&gt;

&lt;p&gt;Bạn thường gặp vấn đề này trong hai trường hợp.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hợp tác nhóm
&lt;/h3&gt;

&lt;p&gt;Đồng đội có thể mở request của bạn và thấy đường dẫn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/Users/jane/pics/jane-profile.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nhưng họ không thể gửi request nếu tệp không tồn tại trên máy của họ.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cách xử lý:&lt;/strong&gt; mỗi người cần có bản sao tệp và đặt đường dẫn phù hợp trên máy của mình, hoặc dùng biến môi trường cho đường dẫn.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chạy bằng Runner hoặc CLI
&lt;/h3&gt;

&lt;p&gt;Kịch bản có thể chạy thành công cục bộ nhưng thất bại trên Runner hoặc CI vì Runner không có tệp tại đường dẫn cục bộ của bạn.&lt;/p&gt;

&lt;p&gt;Nguyên tắc xử lý là:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tệp phải tồn tại trên máy thực hiện request, và trường tệp phải trỏ đến đường dẫn hợp lệ trên máy đó.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Thiết lập tệp cho Runner
&lt;/h3&gt;

&lt;p&gt;Runner đọc tệp từ thư mục máy chủ đã được mount vào volume bằng cờ &lt;code&gt;-v&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Quy trình:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mount thư mục chứa fixture khi triển khai Runner.&lt;/li&gt;
&lt;li&gt;Sao chép tệp tải lên vào thư mục đó.&lt;/li&gt;
&lt;li&gt;Mở bước tải tệp trong scenario.&lt;/li&gt;
&lt;li&gt;Nhấp &lt;strong&gt;Batch Edit&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Thay thế đường dẫn tệp bằng đường dẫn trong môi trường Runner.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ví dụ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/opt/runner/jane-profile.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Thiết lập tệp cho CLI
&lt;/h3&gt;

&lt;p&gt;Với CLI, nguyên tắc tương tự:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Đặt tệp trên máy chạy CLI hoặc CI runner.&lt;/li&gt;
&lt;li&gt;Dùng &lt;strong&gt;Batch Edit&lt;/strong&gt; để cập nhật đường dẫn.&lt;/li&gt;
&lt;li&gt;Hoặc tốt hơn, dùng biến môi trường.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ví dụ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/opt/apidog/runner/jane-profile.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Dùng biến thay vì mã hóa cứng đường dẫn
&lt;/h3&gt;

&lt;p&gt;Không nên hard-code đường dẫn trong bước kiểm thử. Thay vào đó, dùng biến, ví dụ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{{avatar_file_path}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sau đó đặt giá trị biến theo môi trường:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Môi trường&lt;/th&gt;
&lt;th&gt;&lt;code&gt;avatar_file_path&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Local&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/Users/jane/pics/jane-profile.png&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Runner&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/opt/runner/jane-profile.png&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CI&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/opt/apidog/runner/jane-profile.png&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nhờ đó, scenario không cần thay đổi khi chạy ở môi trường khác.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Runner chỉ truy cập được tệp trong thư mục đã được mount bằng &lt;code&gt;-v&lt;/code&gt; khi triển khai. Nếu tệp nằm ngoài vùng mount, không có đường dẫn nào có thể đọc được nó.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Xem &lt;a href="https://docs.apidog.com/how-do-i-upload-a-file-on-an-endpoint-request-882872m0" rel="noopener noreferrer"&gt;tài liệu Apidog về các yêu cầu tải tệp&lt;/a&gt; để biết chi tiết về mount volume và Batch Edit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tự động hóa quy trình với Apidog CLI
&lt;/h2&gt;

&lt;p&gt;Sau khi lưu scenario, bạn có thể chạy nó ở chế độ headless trong CI.&lt;/p&gt;

&lt;p&gt;Cài đặt CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; apidog-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Xác thực bằng access token:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog login &lt;span class="nt"&gt;--with-token&lt;/span&gt; &amp;lt;YOUR_ACCESS_TOKEN&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Chạy scenario theo ID và môi trường:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog run &lt;span class="nt"&gt;--access-token&lt;/span&gt; &lt;span class="nv"&gt;$APIDOG_ACCESS_TOKEN&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; &amp;lt;scenario_id&amp;gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &amp;lt;env_id&amp;gt; &lt;span class="nt"&gt;-r&lt;/span&gt; cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Trong đó:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;-t&lt;/code&gt;: ID của test scenario.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-e&lt;/code&gt;: ID của environment.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-r&lt;/code&gt;: reporter, có thể là &lt;code&gt;cli&lt;/code&gt;, &lt;code&gt;html&lt;/code&gt; hoặc &lt;code&gt;junit&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bạn có thể chỉ định nhiều reporter, phân tách bằng dấu phẩy.&lt;/p&gt;

&lt;p&gt;CLI chạy scenario từ cloud project và trả kết quả pass/fail qua exit code, vì vậy nó phù hợp để kiểm soát pipeline CI.&lt;/p&gt;

&lt;p&gt;Xem thêm &lt;a href="https://apidog.com/vi/blog/apidog-cli-installation-guide?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn cài đặt Apidog CLI&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Lưu ý quan trọng: CLI vẫn cần tệp tồn tại trên máy đang chạy. Trước khi chạy:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Chuẩn bị tệp trên CI runner.&lt;/li&gt;
&lt;li&gt;Đặt đúng đường dẫn bằng Batch Edit hoặc biến môi trường.&lt;/li&gt;
&lt;li&gt;Sau đó mới chạy scenario.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nếu bỏ qua bước này, request tải tệp sẽ thất bại dù các bước khác trong scenario vẫn đúng. Để chạy theo nhiều bộ dữ liệu, xem &lt;a href="https://apidog.com/vi/blog/apidog-cli-data-driven-testing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;kiểm thử dựa trên dữ liệu với Apidog CLI&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Câu hỏi thường gặp
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tại sao đồng đội của tôi không thể gửi request tải tệp?
&lt;/h3&gt;

&lt;p&gt;Apidog lưu đường dẫn tệp cục bộ, không lưu tệp trên đám mây. Đường dẫn của bạn trỏ đến ổ đĩa của bạn, không phải máy của đồng đội.&lt;/p&gt;

&lt;p&gt;Hãy yêu cầu họ:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tải hoặc sao chép tệp về máy.&lt;/li&gt;
&lt;li&gt;Chọn lại tệp trong trường &lt;code&gt;file&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Hoặc cấu hình biến đường dẫn riêng cho môi trường của họ.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cơ chế tương tự cũng áp dụng cho &lt;a href="https://apidog.com/vi/blog/how-to-schedule-api-tests-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;các bài kiểm thử theo lịch trình&lt;/a&gt; và Runner.&lt;/p&gt;

&lt;h3&gt;
  
  
  Làm cách nào để gửi JSON cùng với tệp trong một request?
&lt;/h3&gt;

&lt;p&gt;Giữ body là &lt;code&gt;form-data&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Thêm trường tệp với kiểu &lt;code&gt;file&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Thêm trường metadata với kiểu &lt;code&gt;string&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Dán JSON vào giá trị của trường metadata.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Máy chủ sẽ nhận tệp và chuỗi JSON trong hai phần riêng của multipart request.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tôi nên dùng đường dẫn nào cho tệp trong Runner?
&lt;/h3&gt;

&lt;p&gt;Dùng đường dẫn bên trong thư mục đã mount vào Runner bằng cờ &lt;code&gt;-v&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Ví dụ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/opt/runner/yourfile.jpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sao chép tệp vào thư mục đó, sau đó dùng &lt;strong&gt;Batch Edit&lt;/strong&gt; để đặt giá trị trường tệp.&lt;/p&gt;

&lt;p&gt;Với CLI, một đường dẫn tương tự có thể là:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/opt/apidog/runner/yourfile.jpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Apidog có giới hạn kích thước hoặc loại tệp không?
&lt;/h3&gt;

&lt;p&gt;Việc tạo request trong Apidog tập trung vào cách gửi multipart và đọc tệp từ máy cục bộ. Giới hạn kích thước và loại tệp thực tế do API của bạn quyết định.&lt;/p&gt;

&lt;p&gt;Hãy kiểm tra validation ở phía máy chủ và thêm assertion cho các trường hợp:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tệp vượt kích thước cho phép.&lt;/li&gt;
&lt;li&gt;MIME type không hợp lệ.&lt;/li&gt;
&lt;li&gt;Phần mở rộng không được hỗ trợ.&lt;/li&gt;
&lt;li&gt;Tệp bị từ chối.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Nên dùng form-data hay x-www-form-urlencoded để tải tệp?
&lt;/h3&gt;

&lt;p&gt;Dùng &lt;code&gt;form-data&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Nó ánh xạ tới &lt;code&gt;multipart/form-data&lt;/code&gt; và được thiết kế để mang tệp. &lt;code&gt;x-www-form-urlencoded&lt;/code&gt; chỉ phù hợp cho các form đơn giản gồm trường văn bản ngắn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tóm tắt
&lt;/h2&gt;

&lt;p&gt;Kiểm thử tải tệp có hai phần chính:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Xây dựng multipart request đúng cách.&lt;/li&gt;
&lt;li&gt;Đảm bảo tệp tồn tại ở bất kỳ môi trường nào chạy bài kiểm thử.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Trong &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;, quy trình cơ bản là:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Chọn Body là &lt;code&gt;form-data&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Đặt kiểu trường thành &lt;code&gt;file&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Chọn tệp bằng &lt;strong&gt;Upload&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Gửi JSON bổ sung dưới dạng trường &lt;code&gt;string&lt;/code&gt; nếu cần.&lt;/li&gt;
&lt;li&gt;Gửi request và thêm assertions.&lt;/li&gt;
&lt;li&gt;Khi chạy bằng Runner hoặc CLI, chuẩn bị tệp trên máy đích.&lt;/li&gt;
&lt;li&gt;Dùng Batch Edit hoặc biến để đặt đường dẫn theo từng môi trường.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Muốn thử với endpoint của bạn? &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Tải Apidog&lt;/a&gt;, tạo request &lt;code&gt;form-data&lt;/code&gt;, trỏ đến endpoint tải tệp và kiểm tra phản hồi.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
