<?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>Forem: Sebastian Petrus</title>
    <description>The latest articles on Forem by Sebastian Petrus (@sebbasstian).</description>
    <link>https://forem.com/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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3818120%2F250bf99a-8038-4501-b069-c6b622112b06.png</url>
      <title>Forem: Sebastian Petrus</title>
      <link>https://forem.com/sebbasstian</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sebbasstian"/>
    <language>en</language>
    <item>
      <title>Gemini 3.5 Flash đấu với GPT-5.5 và Opus 4.7: Liệu Mô Hình Nhanh Có Thắng Được Các Đối Thủ Hàng Đầu?</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Wed, 20 May 2026 02:44:29 +0000</pubDate>
      <link>https://forem.com/sebbasstian/gemini-35-flash-dau-voi-gpt-55-va-opus-47-lieu-mo-hinh-nhanh-co-thang-duoc-cac-doi-thu-hang-dau-h7p</link>
      <guid>https://forem.com/sebbasstian/gemini-35-flash-dau-voi-gpt-55-va-opus-47-lieu-mo-hinh-nhanh-co-thang-duoc-cac-doi-thu-hang-dau-h7p</guid>
      <description>&lt;p&gt;Ba bản phát hành thuộc phân khúc tiên tiến đã ra mắt trong 33 ngày: &lt;a href="http://apidog.com/blog/claude-opus-4-7?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Claude Opus 4.7&lt;/a&gt; của Anthropic ngày 16/4, &lt;a href="http://apidog.com/blog/what-is-gpt-5-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;GPT-5.5&lt;/a&gt; của OpenAI ngày 23/4, và &lt;a href="http://apidog.com/blog/what-is-gemini-3-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.5 Flash&lt;/a&gt; của Google ngày 19/5. Gemini 3.5 Pro dự kiến ra mắt vào tháng 6.&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 hôm nay&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Đây không phải là so sánh “ngang hạng”. Opus 4.7 và GPT-5.5 là mô hình hàng đầu với giá cao. Gemini 3.5 Flash là biến thể nhanh, chi phí thấp. Câu hỏi thực tế cho developer là: &lt;strong&gt;Flash có đủ tốt để chạy production workload rẻ hơn 5–10 lần không?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Câu trả lời ngắn: &lt;strong&gt;có, với nhiều workload&lt;/strong&gt;. Flash thắng về chi phí, tốc độ, ngữ cảnh dài và một số benchmark tác nhân. Opus 4.7 vẫn mạnh nhất ở refactor code khó. GPT-5.5 nổi bật ở hiệu quả token và tác nhân CLI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Câu trả lời trong 30 giây
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Câu hỏi&lt;/th&gt;
&lt;th&gt;Lựa chọn tốt nhất&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Vòng lặp tác nhân production rẻ nhất&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Gemini 3.5 Flash&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sửa lỗi đã xác minh trên SWE-Bench&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Opus 4.7&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hiệu quả token ở quy mô lớn&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;GPT-5.5&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Truy xuất ngữ cảnh dài 1M token&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Gemini 3.5 Flash&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hiểu biểu đồ và tài liệu&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Gemini 3.5 Flash&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tác nhân CLI chạy dài&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;GPT-5.5&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thực hiện hướng dẫn đa bước&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Opus 4.7&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Streaming token nhanh nhất&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Gemini 3.5 Flash&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Refactor toàn bộ repository&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Opus 4.7&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Không có một mô hình thắng mọi tình huống. Cách triển khai hợp lý là &lt;strong&gt;route workload theo loại tác vụ, chi phí và độ trễ&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Định vị từng mô hình
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Opus 4.7&lt;/strong&gt; — phát hành 16/4/2026. Mô hình suy luận hàng đầu của Anthropic, tối ưu cho code, refactor đa bước và workflow dài.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT-5.5&lt;/strong&gt; — phát hành 23/4/2026. Mô hình cơ sở được đào tạo lại hoàn toàn đầu tiên của OpenAI kể từ GPT-4.5, tập trung vào hiệu quả tác nhân và giảm token đầu ra.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini 3.5 Flash&lt;/strong&gt; — phát hành 19/5/2026. Biến thể nhanh của dòng Gemini 3.5, tập trung vào tốc độ, chi phí thấp và tác nhân production.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu bạn đang so sánh trong bối cảnh coding tool, xem thêm &lt;a href="http://apidog.com/blog/cursor-composer-2-5-vs-opus-4-7-vs-gpt-5-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cursor Composer 2.5 so với Opus 4.7 so với GPT-5.5&lt;/a&gt;. Để xem thế hệ trước cạnh tranh thế nào, xem &lt;a href="http://apidog.com/blog/gemini-3-1-pro-vs-opus-46-vs-gpt-5-3-codex?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.1 Pro so với Opus 4.6 so với GPT-5.3&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. So sánh giá
&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 / 1M token&lt;/th&gt;
&lt;th&gt;Đầu ra / 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;Gemini 3.5 Flash&lt;/td&gt;
&lt;td&gt;~1,50 USD&lt;/td&gt;
&lt;td&gt;~9,00 USD&lt;/td&gt;
&lt;td&gt;Có gói miễn phí&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.5&lt;/td&gt;
&lt;td&gt;~10 USD&lt;/td&gt;
&lt;td&gt;~30 USD&lt;/td&gt;
&lt;td&gt;Đầu vào được lưu trữ rẻ hơn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 4.7&lt;/td&gt;
&lt;td&gt;~15 USD&lt;/td&gt;
&lt;td&gt;~75 USD&lt;/td&gt;
&lt;td&gt;Giá niêm yết cao nhất&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Flash rẻ hơn khoảng &lt;strong&gt;6–10 lần ở đầu vào&lt;/strong&gt; và &lt;strong&gt;3–8 lần ở đầu ra&lt;/strong&gt;. Với agent loop chạy hàng trăm lượt trên mỗi task, khác biệt này rất lớn.&lt;/p&gt;

&lt;p&gt;Tuy nhiên, GPT-5.5 có lợi thế ở &lt;strong&gt;hiệu quả token&lt;/strong&gt;: cùng một tác vụ có thể tạo ít token đầu ra hơn đáng kể, đôi khi ít hơn 72% so với Opus 4.7. Vì vậy, khi tính chi phí production, đừng chỉ nhìn giá token; hãy đo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;chi phí / task =
(input_tokens * input_price)
+ (output_tokens * output_price)
+ retry_cost
+ tool_call_cost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tham khảo thêm &lt;a href="http://apidog.com/blog/gemini-3-5-flash-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;phân tích giá Gemini 3.5 Flash&lt;/a&gt; và &lt;a href="http://apidog.com/blog/gpt-5-5-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;giá GPT-5.5&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Benchmark coding
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2Fobe81sus75vbhgh7uhh7.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.amazonaws.com%2Fuploads%2Farticles%2Fobe81sus75vbhgh7uhh7.png" alt="Benchmark coding" width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  SWE-Bench Verified
&lt;/h3&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;Điểm số&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Opus 4.7&lt;/td&gt;
&lt;td&gt;87,6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.5&lt;/td&gt;
&lt;td&gt;~85%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.5 Flash&lt;/td&gt;
&lt;td&gt;Chưa được báo cáo riêng&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Opus 4.7 dẫn đầu ở các task sửa lỗi biệt lập. GPT-5.5 rất gần. Flash không công bố số tương đương, và thử nghiệm không chính thức cho thấy nó thấp hơn hai mô hình hàng đầu — điều hợp lý với một mô hình phân khúc nhanh.&lt;/p&gt;

&lt;h3&gt;
  
  
  SWE-Bench Pro
&lt;/h3&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;Điểm số&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Opus 4.7&lt;/td&gt;
&lt;td&gt;64,3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.5&lt;/td&gt;
&lt;td&gt;58,6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.5 Flash&lt;/td&gt;
&lt;td&gt;Chưa được báo cáo riêng&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nếu workload của bạn là refactor đa tệp, migration lớn hoặc thay đổi toàn repo, &lt;strong&gt;Opus 4.7 là lựa chọn an toàn hơn&lt;/strong&gt;. Điều này đặc biệt đúng với workflow kiểu &lt;a href="http://apidog.com/blog/cursor-composer-2-5-vs-opus-4-7-vs-gpt-5-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cursor Composer&lt;/a&gt; hoặc &lt;a href="http://apidog.com/blog/claude-code-agent-harness-architecture?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Claude Code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Flash vẫn phù hợp cho thay đổi thông thường, bug nhỏ, giải thích code, review nhanh và tạo test ở chi phí thấp.&lt;/p&gt;

&lt;h3&gt;
  
  
  Terminal-Bench 2.0 / 2.1
&lt;/h3&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;Điểm số&lt;/th&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.5&lt;/td&gt;
&lt;td&gt;82,7%&lt;/td&gt;
&lt;td&gt;Terminal-Bench 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.5 Flash&lt;/td&gt;
&lt;td&gt;76,2%&lt;/td&gt;
&lt;td&gt;Terminal-Bench 2.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Opus 4.7&lt;/td&gt;
&lt;td&gt;69,4%&lt;/td&gt;
&lt;td&gt;Terminal-Bench 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Hai benchmark 2.0 và 2.1 không hoàn toàn giống nhau, nhưng hướng chính khá rõ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPT-5.5 mạnh nhất ở agent CLI chạy dài.&lt;/li&gt;
&lt;li&gt;Flash thu hẹp phần lớn khoảng cách với chi phí thấp hơn nhiều.&lt;/li&gt;
&lt;li&gt;Opus 4.7 tốt ở chất lượng từng lượt, nhưng chậm và đắt hơn cho loop dài.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  MCP Atlas
&lt;/h3&gt;

&lt;p&gt;Gemini 3.5 Flash đạt &lt;strong&gt;83,6%&lt;/strong&gt; trên MCP Atlas, chỉ số Google dùng cho phối hợp đa công cụ. OpenAI và Anthropic chưa công bố số tương đương trên cùng benchmark, nên không nên suy luận quá xa. Nhưng về mặt triển khai, cả ba đều đủ tốt cho tool calling production nếu bạn kiểm soát schema và retry.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Cách chọn cho agent workload
&lt;/h2&gt;

&lt;p&gt;Với tác nhân chạy từ vài phút đến vài giờ, hãy ưu tiên theo thứ tự này:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Task success rate
2. Chi phí / task
3. Độ trễ end-to-end
4. Tỷ lệ retry
5. Độ ổn định schema/tool call
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Gemini 3.5 Flash phù hợp khi
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bạn chạy số lượng task lớn.&lt;/li&gt;
&lt;li&gt;Chi phí/token là ràng buộc chính.&lt;/li&gt;
&lt;li&gt;Cần streaming nhanh.&lt;/li&gt;
&lt;li&gt;Agent cần đọc nhiều tài liệu, log, transcript hoặc repo lớn.&lt;/li&gt;
&lt;li&gt;Bạn chấp nhận “đủ tốt” để đổi lấy throughput.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  GPT-5.5 phù hợp khi
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Task thiên về CLI agent.&lt;/li&gt;
&lt;li&gt;Bạn muốn output ngắn, kỷ luật token tốt.&lt;/li&gt;
&lt;li&gt;Cần giảm biến thiên chi phí giữa các lần chạy.&lt;/li&gt;
&lt;li&gt;Team đã dùng OpenAI/Codex/Responses API.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Opus 4.7 phù hợp khi
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Task khó, nhiều bước, ít được phép sai.&lt;/li&gt;
&lt;li&gt;Refactor code đa tệp hoặc thay đổi kiến trúc.&lt;/li&gt;
&lt;li&gt;Output dài, cẩn thận, có tính bàn giao.&lt;/li&gt;
&lt;li&gt;Chi phí không phải giới hạn chính.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu bạn đang xây agent tự động theo mẫu như &lt;a href="http://apidog.com/blog/goal-command-codex-claude-code-autonomous-agents?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;lệnh /goal với Codex và Claude Code&lt;/a&gt;, hãy đo chi phí theo task hoàn chỉnh, không đo từng prompt riêng lẻ.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Context window và truy xuất dài
&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 tối đa&lt;/th&gt;
&lt;th&gt;Đầu ra tối đa&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.5 Flash&lt;/td&gt;
&lt;td&gt;1M token&lt;/td&gt;
&lt;td&gt;64K token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.5&lt;/td&gt;
&lt;td&gt;400K token&lt;/td&gt;
&lt;td&gt;128K token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Opus 4.7&lt;/td&gt;
&lt;td&gt;1M token beta&lt;/td&gt;
&lt;td&gt;64K token&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Flash dẫn đầu trong bảng công bố của Google trên benchmark MRCR v2 1M token. Với các task kiểu:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tìm thông tin trong PDF dài,&lt;/li&gt;
&lt;li&gt;phân tích nhiều tài liệu,&lt;/li&gt;
&lt;li&gt;đọc log lớn,&lt;/li&gt;
&lt;li&gt;hỏi đáp trên codebase,&lt;/li&gt;
&lt;li&gt;tổng hợp transcript hoặc report,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Flash là lựa chọn mặc định thực dụng nhất vì kết hợp &lt;strong&gt;1M context + giá thấp + tốc độ cao&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Opus 4.7 có cửa sổ 1M token ở beta, nhưng chi phí cao hơn. GPT-5.5 có 400K token, đủ rộng cho nhiều use case, nhưng không bằng Flash về quy mô thô.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Đa phương thức
&lt;/h2&gt;

&lt;p&gt;Flash dẫn đầu ở khả năng suy luận biểu đồ và tài liệu:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CharXiv Reasoning&lt;/strong&gt;: 84,2%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MMMU-Pro&lt;/strong&gt;: 83,6%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu workload của bạn gồm PDF scan, biểu đồ, dashboard screenshot, tài liệu kỹ thuật có hình, hoặc phân tích UI, Flash là lựa chọn mạnh.&lt;/p&gt;

&lt;p&gt;Nếu bạn route cả phần tạo ảnh trong pipeline, xem thêm &lt;a href="http://apidog.com/blog/gemini-image-vs-seedream-comparison-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;so sánh Gemini 3 Pro Image vs Seedream&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Tốc độ output
&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;Tốc độ đầu ra tương đối&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3.5 Flash&lt;/td&gt;
&lt;td&gt;~4x baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.5&lt;/td&gt;
&lt;td&gt;baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Opus 4.7&lt;/td&gt;
&lt;td&gt;~0,7x baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Số cụ thể thay đổi theo khu vực và tải hệ thống, nhưng hướng nhất quán là: &lt;strong&gt;Flash streaming nhanh hơn rõ rệt&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Điều này quan trọng với:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;chatbot có streaming response,&lt;/li&gt;
&lt;li&gt;coding assistant trực tiếp,&lt;/li&gt;
&lt;li&gt;agent UI có log realtime,&lt;/li&gt;
&lt;li&gt;dashboard phân tích tài liệu,&lt;/li&gt;
&lt;li&gt;sản phẩm cần cảm giác phản hồi tức thì.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8. Suy luận, toán học và viết dài
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Điểm chuẩn / khả năng&lt;/th&gt;
&lt;th&gt;Flash&lt;/th&gt;
&lt;th&gt;GPT-5.5&lt;/th&gt;
&lt;th&gt;Opus 4.7&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPQA Diamond&lt;/td&gt;
&lt;td&gt;Mạnh theo bảng Google&lt;/td&gt;
&lt;td&gt;Cao&lt;/td&gt;
&lt;td&gt;Cao&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Suy luận toán học&lt;/td&gt;
&lt;td&gt;Mạnh&lt;/td&gt;
&lt;td&gt;Mạnh&lt;/td&gt;
&lt;td&gt;Mạnh&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Viết dài&lt;/td&gt;
&lt;td&gt;Tốt&lt;/td&gt;
&lt;td&gt;Tốt&lt;/td&gt;
&lt;td&gt;Tốt nhất&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Ba mô hình đều mạnh về reasoning. Khác biệt lớn hơn nằm ở style output:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flash: nhanh, thực dụng, tốt cho xử lý khối lượng lớn.&lt;/li&gt;
&lt;li&gt;GPT-5.5: gọn, hiệu quả token.&lt;/li&gt;
&lt;li&gt;Opus 4.7: văn phong dài, cẩn thận, phù hợp output chất lượng cao.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  9. Hệ sinh thái công cụ
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Opus 4.7&lt;/strong&gt;: Claude Code, MCP, Anthropic API, hệ sinh thái tool trưởng thành, &lt;a href="http://apidog.com/blog/bitwarden-agent-access-ai-coding-agents?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Bitwarden Agent&lt;/a&gt;, hỗ trợ IDE rộng.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT-5.5&lt;/strong&gt;: OpenAI Codex, Responses API, tích hợp ChatGPT, lịch sử function calling dài.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini 3.5 Flash&lt;/strong&gt;: Antigravity, Gemini Agent Platform, &lt;a href="http://apidog.com/blog/gemini-cli-google-open-source-claude-code-alternative?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini CLI&lt;/a&gt;, Android Studio, Google Cloud/Workspace.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anthropic có hệ sinh thái adapter bên thứ ba sâu. OpenAI có mức độ chấp nhận developer rộng. Google đang bắt kịp nhanh với Gemini CLI, Antigravity và nền tảng tác nhân.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Ma trận chọn mô hình
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Chọn Gemini 3.5 Flash khi
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bạn cần chi phí thấp trên mỗi task.&lt;/li&gt;
&lt;li&gt;UI cần streaming nhanh.&lt;/li&gt;
&lt;li&gt;Input dài tới 1M token.&lt;/li&gt;
&lt;li&gt;Task có biểu đồ, PDF, screenshot.&lt;/li&gt;
&lt;li&gt;Agent workload lớn và cần throughput.&lt;/li&gt;
&lt;li&gt;Bạn đang dùng Google Cloud hoặc Workspace.&lt;/li&gt;
&lt;li&gt;“Đủ tốt, nhanh, rẻ” quan trọng hơn “tối ưu tuyệt đối”.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Chọn GPT-5.5 khi
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Hiệu quả token là ưu tiên.&lt;/li&gt;
&lt;li&gt;Task là CLI agent hoặc automation nhiều bước.&lt;/li&gt;
&lt;li&gt;Bạn cần output gọn và ít lan man.&lt;/li&gt;
&lt;li&gt;Team đã dùng ChatGPT/OpenAI.&lt;/li&gt;
&lt;li&gt;Bạn muốn thiết lập API theo hướng dẫn &lt;a href="http://apidog.com/blog/how-to-use-gpt-5-5-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.5&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Chọn Opus 4.7 khi
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Task là refactor đa tệp hoặc thay đổi toàn repo.&lt;/li&gt;
&lt;li&gt;Chất lượng từng lượt quan trọng hơn tốc độ.&lt;/li&gt;
&lt;li&gt;Output dài, cẩn thận là sản phẩm bàn giao.&lt;/li&gt;
&lt;li&gt;Bạn đã dùng &lt;a href="http://apidog.com/blog/claude-agent-sdk-with-claude-plan-setup-guide?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Claude Code với gói Claude&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Chi phí không phải ràng buộc chính.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Chọn kết hợp khi
&lt;/h3&gt;

&lt;p&gt;Production stack thường không nên chỉ dùng một mô hình. Một số pattern thực tế:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flash để truy xuất và chuẩn bị, Opus để quyết định cuối&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT-5.5 cho CLI agent, Flash cho phân tích tài liệu/biểu đồ&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flash xử lý 80% traffic, Opus hoặc GPT-5.5 xử lý 20% task khó&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Router mỏng&lt;/strong&gt; chọn model theo loại task, độ dài input và ngân sách.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;code_refactor&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cli_agent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;doc_qa&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;vision_doc&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;chat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;inputTokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;priority&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cost&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;quality&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;latency&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;selectModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Task&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;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;code_refactor&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;priority&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;quality&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="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;claude-opus-4.7&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cli_agent&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="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gpt-5.5&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;doc_qa&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
    &lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;vision_doc&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
    &lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;inputTokens&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="nx"&gt;_000&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
    &lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;priority&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cost&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
    &lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;priority&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;latency&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="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gemini-3.5-flash&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="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gemini-3.5-flash&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;
  
  
  11. Gói miễn phí
&lt;/h2&gt;

&lt;p&gt;Cả ba đều có đường dùng thử:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemini 3.5 Flash&lt;/strong&gt;: API key từ AI Studio, khoảng 1.500 request/ngày. Xem &lt;a href="http://apidog.com/blog/how-to-use-gemini-3-5-for-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn miễn phí Flash&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT-5.5&lt;/strong&gt;: truy vấn miễn phí có giới hạn trong ChatGPT và các cổng được nêu trong &lt;a href="http://apidog.com/blog/how-to-use-gpt-5-5-api-for-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn miễn phí GPT-5.5&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Opus 4.7&lt;/strong&gt;: giới hạn hằng ngày trên &lt;a href="http://Claude.ai" rel="noopener noreferrer"&gt;Claude.ai&lt;/a&gt;, cộng với các cách trong &lt;a href="http://apidog.com/blog/claude-opus-4-7-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn miễn phí Opus 4.7&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Trong ba lựa chọn, đường API miễn phí của Flash thân thiện với developer nhất vì AI Studio cung cấp key hoạt động mà không cần thẻ tín dụng và có hạn ngạch hữu ích.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Cách tự benchmark với workload của bạn
&lt;/h2&gt;

&lt;p&gt;Benchmark công khai chỉ cho biết mô hình hoạt động trung bình. Bạn cần đánh giá trên dữ liệu thật.&lt;/p&gt;

&lt;p&gt;Tạo một eval nhỏ theo các bước sau:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Chọn 20 task đại diện từ workload thật.&lt;/li&gt;
&lt;li&gt;Chạy cả ba mô hình trên cùng input.&lt;/li&gt;
&lt;li&gt;Chấm theo ba tiêu chí:

&lt;ul&gt;
&lt;li&gt;task có thành công không,&lt;/li&gt;
&lt;li&gt;tổng chi phí,&lt;/li&gt;
&lt;li&gt;độ trễ end-to-end.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ghi lại lỗi:

&lt;ul&gt;
&lt;li&gt;JSON sai schema,&lt;/li&gt;
&lt;li&gt;tool call sai tham số,&lt;/li&gt;
&lt;li&gt;hallucination,&lt;/li&gt;
&lt;li&gt;timeout,&lt;/li&gt;
&lt;li&gt;retry,&lt;/li&gt;
&lt;li&gt;output quá dài,&lt;/li&gt;
&lt;li&gt;không tuân thủ instruction.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Một cấu trúc log đơn giản:&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;"task_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;"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;"gemini-3.5-flash"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"success"&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;"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;8420&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;18200&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;2100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"estimated_cost_usd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.046&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"failure_mode"&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;Đây là nơi &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. Bạn có thể lưu ba endpoint API — Gemini, OpenAI, Anthropic — dưới dạng request có tham số, lưu API key bằng environment variable, rồi chạy cùng một prompt trên cả ba để so sánh response cạnh nhau.&lt;/p&gt;

&lt;p&gt;Thiết lập thực tế:&lt;/p&gt;

&lt;ul&gt;
&lt;li&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;&lt;/li&gt;
&lt;li&gt;Tạo workspace tên &lt;code&gt;Frontier Model Eval&lt;/code&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.amazonaws.com%2Fuploads%2Farticles%2Fzmvlhuijc0exhsyrprir.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.amazonaws.com%2Fuploads%2Farticles%2Fzmvlhuijc0exhsyrprir.png" alt="Apidog workspace" width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tạo ba request:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;POST Gemini 3.5 Flash&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST GPT-5.5&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST Claude Opus 4.7&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Lưu API key trong environment variables.&lt;/li&gt;

&lt;li&gt;Dùng cùng một prompt template cho cả ba.&lt;/li&gt;

&lt;li&gt;Thêm assertion:

&lt;ul&gt;
&lt;li&gt;response là JSON hợp lệ,&lt;/li&gt;
&lt;li&gt;có field bắt buộc,&lt;/li&gt;
&lt;li&gt;latency dưới ngưỡng,&lt;/li&gt;
&lt;li&gt;không có chuỗi lỗi,&lt;/li&gt;
&lt;li&gt;tool call đúng schema.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Chạy lại hằng tuần để phát hiện thay đổi model.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Hai ngày thiết lập eval tốt hơn ba tháng tranh luận xem model nào “cảm giác” tốt hơn.&lt;/p&gt;

&lt;h2&gt;
  
  
  13. Điều gì sẽ thay đổi tiếp theo
&lt;/h2&gt;

&lt;p&gt;Ba điểm cần theo dõi trong 90 ngày tới:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gemini 3.5 Pro GA&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Khi Pro ra mắt vào tháng 6, so sánh sẽ thay đổi. Flash vẫn giữ lợi thế chi phí/tốc độ, còn Pro sẽ cạnh tranh trực tiếp với Opus và GPT-5.5.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Phản hồi của OpenAI&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
GPT-5.5 là bản phát hành tháng 4. Nếu Gemini 3.5 Pro mạnh, một bản cập nhật giữa chu kỳ hoặc biến thể mới có thể xuất hiện.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bước tiếp theo của Anthropic&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Opus 4.7 là flagship hiện tại. Một bản làm mới Sonnet hoặc Opus 4.8 trong quý tới sẽ phù hợp chu kỳ.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Thị trường hiện thay đổi theo tháng. Cách an toàn là duy trì eval suite, route model theo kết quả mới và tránh khóa chặt vào một nhà cung cấp.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Gemini 3.5 Flash có thực sự cạnh tranh với Opus 4.7 và GPT-5.5 không?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Có, trong đúng phân khúc. Flash vượt hạng ở chi phí, tốc độ, ngữ cảnh dài và một số workload tác nhân. Với task khó nhất như refactor đa tệp phức tạp hoặc viết dài chất lượng cao, Opus và GPT-5.5 vẫn có lợi thế.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tại sao so sánh mô hình Flash với flagship?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Vì chi phí chênh lệch quá lớn. Câu hỏi production không phải “Flash có tốt nhất mọi thứ không?”, mà là “Flash có đủ tốt cho 80% workload không?”.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Opus 4.7 có đáng giá cao hơn không?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Có, nếu chất lượng code hoặc output dài là yếu tố quan trọng nhất. Với agent loop khối lượng lớn, Flash thường thắng về chi phí/task.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tôi có thể dùng cả ba qua một API không?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Không trực tiếp. Mỗi nhà cung cấp có endpoint và credential riêng. Cách rõ ràng nhất là viết wrapper mỏng hoặc router nội bộ để trừu tượng hóa call model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Khi nào Gemini 3.5 Pro ra mắt?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Tháng 6/2026. Đây sẽ là đối thủ flagship trực tiếp của Opus 4.7 và GPT-5.5.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Làm sao theo dõi chi phí khi dùng ba nhà cung cấp?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ghi log token, model, latency và cost cho từng request. Bạn có thể theo dõi trong lịch sử request của Apidog hoặc tổng hợp từ dashboard của từng nhà cung cấp. Nên đặt budget alert theo model.&lt;/p&gt;

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

&lt;p&gt;Ba mô hình mạnh ở ba hướng khác nhau:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemini 3.5 Flash&lt;/strong&gt;: rẻ, nhanh, mạnh về ngữ cảnh dài, đa phương thức và agent workload khối lượng lớn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT-5.5&lt;/strong&gt;: tốt cho CLI agent, tự động hóa nhiều bước và tối ưu token.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Opus 4.7&lt;/strong&gt;: tốt nhất cho refactor code chất lượng cao, task phức tạp và viết dài.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cách triển khai thực tế: xây eval suite của riêng bạn, kiểm tra bằng workload thật, route task theo kết quả và cập nhật khi model thay đổi. Tháng 6 sẽ đáng chú ý vì Gemini 3.5 Pro có thể định hình lại toàn bộ cuộc so sánh này.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cách Sử Dụng Gemini 3.5 Flash Miễn Phí</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Wed, 20 May 2026 02:26:04 +0000</pubDate>
      <link>https://forem.com/sebbasstian/cach-su-dung-gemini-35-flash-mien-phi-2elf</link>
      <guid>https://forem.com/sebbasstian/cach-su-dung-gemini-35-flash-mien-phi-2elf</guid>
      <description>&lt;p&gt;Gemini 3.5 Flash ra mắt vào ngày 19 tháng 5 năm 2026 và Google vẫn duy trì tầng truy cập miễn phí. Bạn có thể gọi Flash bằng khóa API miễn phí ngay hôm nay; phiên bản Pro dự kiến ra mắt vào tháng 6. Nếu muốn dùng Flash mà không trả phí, dưới đây là các cách thực tế nhất để bắt đầu.&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 tập trung vào thiết lập thực tế: lấy khóa miễn phí, chạy thử bằng code, kiểm tra giới hạn và chọn đúng đường dẫn cho từng nhu cầu.&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.amazonaws.com%2Fuploads%2Farticles%2F0x0fglq5wxp42w2kdxha.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.amazonaws.com%2Fuploads%2Farticles%2F0x0fglq5wxp42w2kdxha.png" alt="Gemini 3.5 Flash" width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Đường dẫn&lt;/th&gt;
&lt;th&gt;Bạn nhận được gì&lt;/th&gt;
&lt;th&gt;Giới hạn&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ứng dụng Gemini&lt;/td&gt;
&lt;td&gt;Trò chuyện đầy đủ + nhập ảnh trên Flash&lt;/td&gt;
&lt;td&gt;Giới hạn tin nhắn hằng ngày trên tầng miễn phí&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google AI Studio&lt;/td&gt;
&lt;td&gt;Giao diện web để thử Flash và chỉnh tham số&lt;/td&gt;
&lt;td&gt;Không có hạn ngạch cứng trong UI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Khóa API AI Studio&lt;/td&gt;
&lt;td&gt;Truy cập REST/SDK tới &lt;code&gt;gemini-3.5-flash&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Khoảng 1.500 yêu cầu/ngày&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tín dụng tài khoản mới Vertex AI&lt;/td&gt;
&lt;td&gt;Truy cập Flash theo kiểu production&lt;/td&gt;
&lt;td&gt;300 USD tín dụng, 90 ngày&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini CLI&lt;/td&gt;
&lt;td&gt;Dùng Flash từ terminal bằng tài khoản Google&lt;/td&gt;
&lt;td&gt;1.000 yêu cầu/ngày&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenRouter/cổng bên thứ ba&lt;/td&gt;
&lt;td&gt;Truy cập Flash qua dịch vụ trung gian&lt;/td&gt;
&lt;td&gt;Phụ thuộc từng nhà cung cấp&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Mỗi cách phù hợp với một trường hợp khác nhau: thử nhanh, thiết kế prompt, xây dựng app, test tải hoặc chạy script từ terminal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cách 1: Dùng ứng dụng Gemini nếu chỉ cần chat
&lt;/h2&gt;

&lt;p&gt;Nếu bạn chỉ muốn trò chuyện với Gemini 3.5 Flash, đây là cách nhanh nhất.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mở &lt;a href="https://gemini.google.com" rel="noopener noreferrer"&gt;gemini.google.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Đăng nhập bằng tài khoản Google&lt;/li&gt;
&lt;li&gt;Trong bộ chọn model, chọn &lt;strong&gt;3.5 Flash&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Nhập prompt và bắt đầu dùng&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.amazonaws.com%2Fuploads%2Farticles%2Feg46t0clexr2kvirqfmu.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.amazonaws.com%2Fuploads%2Farticles%2Feg46t0clexr2kvirqfmu.png" alt="Ứng dụng Gemini" width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ứng dụng Gemini hỗ trợ văn bản, ảnh, tải tệp và chỉnh sửa tài liệu kiểu Canvas. Người dùng miễn phí có giới hạn tin nhắn hằng ngày và giới hạn này được đặt lại mỗi ngày.&lt;/p&gt;

&lt;p&gt;Phù hợp cho:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nghiên cứu, viết nội dung, brainstorming&lt;/li&gt;
&lt;li&gt;Phân tích hình ảnh không cần API&lt;/li&gt;
&lt;li&gt;So sánh nhanh với các &lt;a href="http://apidog.com/blog/best-local-llms-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;mô hình chat miễn phí khác&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Không phù hợp cho:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tích hợp vào ứng dụng&lt;/li&gt;
&lt;li&gt;Xử lý hàng loạt&lt;/li&gt;
&lt;li&gt;Workflow cần response có thể lập trình được&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cách 2: Dùng Google AI Studio để thiết kế prompt
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt; là sân chơi dành cho developer. Nó chạy trên trình duyệt, miễn phí và cho phép bạn chỉnh các tham số của Flash trước khi đưa vào code.&lt;/p&gt;

&lt;p&gt;Cách chạy thử:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mở &lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;aistudio.google.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Đăng nhập&lt;/li&gt;
&lt;li&gt;Chọn &lt;strong&gt;Create new prompt&lt;/strong&gt; hoặc dùng template có sẵn&lt;/li&gt;
&lt;li&gt;Trong dropdown model, chọn &lt;code&gt;gemini-3.5-flash&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Nhập prompt và bấm Run&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.amazonaws.com%2Fuploads%2Farticles%2F0rqjp2f58lizev9dnaps.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.amazonaws.com%2Fuploads%2Farticles%2F0rqjp2f58lizev9dnaps.png" alt="Google AI Studio" width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AI Studio hữu ích hơn app Gemini khi bạn cần:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Điều chỉnh temperature, top-K, top-P&lt;/li&gt;
&lt;li&gt;Đặt system instruction&lt;/li&gt;
&lt;li&gt;Kiểm tra JSON structured output&lt;/li&gt;
&lt;li&gt;Chạy prompt đa phương thức với nhiều ảnh&lt;/li&gt;
&lt;li&gt;Lấy code Python/Node tương ứng&lt;/li&gt;
&lt;li&gt;Xuất prompt thành một &lt;a href="http://apidog.com/blog/how-to-use-gemini-3-5-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;lời gọi API Flash&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu bạn đang xây tính năng AI, hãy dùng AI Studio để tinh chỉnh prompt trước, sau đó mới chuyển sang API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cách 3: Lấy khóa API Gemini 3.5 Flash miễn phí
&lt;/h2&gt;

&lt;p&gt;Đây là cách phù hợp nhất nếu bạn muốn tích hợp Flash vào ứng dụng. Cùng tài khoản AI Studio có thể tạo khóa API miễn phí dùng với &lt;code&gt;gemini-3.5-flash&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lấy khóa API
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Mở &lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;AI Studio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Nhấp &lt;strong&gt;Get API key&lt;/strong&gt; ở thanh điều hướng bên trái&lt;/li&gt;
&lt;li&gt;Chọn project hiện có hoặc tạo project mới&lt;/li&gt;
&lt;li&gt;Nhấp &lt;strong&gt;Create API key&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Sao chép khóa và lưu vào biến môi trường&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.amazonaws.com%2Fuploads%2Farticles%2Fc8svpviggq86x4f1dowz.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.amazonaws.com%2Fuploads%2Farticles%2Fc8svpviggq86x4f1dowz.png" alt="Tạo khóa API Gemini" width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Không cần thẻ tín dụng. Khóa có thể dùng ngay với Flash. Nếu cần hướng dẫn chi tiết hơn, xem &lt;a href="http://apidog.com/blog/google-gemini-api-key-for-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn lấy khóa API Gemini miễn phí&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hạn ngạch miễn phí của Flash
&lt;/h3&gt;

&lt;p&gt;Tính đến tháng 5 năm 2026, tầng miễn phí cho &lt;code&gt;gemini-3.5-flash&lt;/code&gt; khoảng:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1.500 yêu cầu/ngày&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1 triệu token/phút&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;15 yêu cầu/phút&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Các con số này có thể thay đổi. Trước khi build production, hãy kiểm tra &lt;a href="https://ai.google.dev/gemini-api/docs/pricing" rel="noopener noreferrer"&gt;trang giá chính thức của Google&lt;/a&gt;. Nếu cần phân tích chi phí khi vượt tầng miễn phí, xem &lt;a href="http://apidog.com/blog/gemini-3-5-flash-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;phân tích giá Gemini 3.5 Flash&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chạy thử bằng Python
&lt;/h3&gt;

&lt;p&gt;Cài SDK:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;google-genai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Đặt 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="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GEMINI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-api-key"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gọ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;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Client&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;GEMINI_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;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;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&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;gemini-3.5-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;contents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Give me three startup ideas for API tooling in 2026.&lt;/span&gt;&lt;span class="sh"&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;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Chạy thử bằng Node.js
&lt;/h3&gt;

&lt;p&gt;Cài SDK:&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; @google/genai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Code mẫu:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;GoogleGenAI&lt;/span&gt; &lt;span class="p"&gt;}&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;@google/genai&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;ai&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;GoogleGenAI&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;GEMINI_API_KEY&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;ai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generateContent&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;gemini-3.5-flash&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Give me three startup ideas for API tooling in 2026.&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;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;text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Chạy thử bằng 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;"https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-flash:generateContent"&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;"x-goog-api-key: &lt;/span&gt;&lt;span class="nv"&gt;$GEMINI_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;'{
    "contents": [
      {
        "parts": [
          {
            "text": "Hello Gemini 3.5 Flash"
          }
        ]
      }
    ]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Để triển khai đầy đủ hơn với streaming và tool calls, xem &lt;a href="http://apidog.com/blog/how-to-use-gemini-3-5-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn API Gemini 3.5 Flash&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kiểm tra request Flash miễn phí trong Apidog
&lt;/h3&gt;

&lt;p&gt;Khi chỉ có khoảng 1.500 request/ngày, bạn nên tránh lãng phí hạn ngạch vào các request sai format hoặc prompt chưa ổn đị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; giúp lưu endpoint Flash, quản lý API key bằng biến môi trường và chạy lại request mà không cần viết curl nhiều lầ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.amazonaws.com%2Fuploads%2Farticles%2F5kyzxxfqu58mngulrqn8.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.amazonaws.com%2Fuploads%2Farticles%2F5kyzxxfqu58mngulrqn8.png" alt="Kiểm tra Gemini API trong Apidog" width="799" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quy trình đề xuất:&lt;/p&gt;

&lt;ol&gt;
&lt;li&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;&lt;/li&gt;
&lt;li&gt;Tạo request mới&lt;/li&gt;
&lt;li&gt;Dán curl Gemini Flash ở trên&lt;/li&gt;
&lt;li&gt;Chuyển API key sang biến môi trường&lt;/li&gt;
&lt;li&gt;Lưu request&lt;/li&gt;
&lt;li&gt;Thêm assertion cho response&lt;/li&gt;
&lt;li&gt;Chạy lại request khi bạn thay đổi prompt&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cách này giúp bạn kiểm tra prompt có kiểm soát hơn và tránh gọi API lặp lại không cần thiết.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cách 4: Dùng tín dụng tài khoản mới của Vertex AI
&lt;/h2&gt;

&lt;p&gt;Nếu tạo tài khoản Google Cloud mới, bạn có thể nhận 300 USD tín dụng trong 90 ngày. Khoản tín dụng này dùng được cho endpoint Gemini 3.5 Flash trên Vertex AI.&lt;/p&gt;

&lt;p&gt;Cách thiết lập:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Đăng ký tại &lt;a href="https://cloud.google.com" rel="noopener noreferrer"&gt;cloud.google.com&lt;/a&gt; và nhận tín dụng 300 USD&lt;/li&gt;
&lt;li&gt;Bật Vertex AI API&lt;/li&gt;
&lt;li&gt;Tạo service account&lt;/li&gt;
&lt;li&gt;Gán quyền &lt;code&gt;aiplatform.user&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Tải file credential JSON&lt;/li&gt;
&lt;li&gt;Gọi Flash bằng Vertex AI SDK&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ví dụ 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;vertexai&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;vertexai.generative_models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;GenerativeModel&lt;/span&gt;

&lt;span class="n"&gt;vertexai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;project&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-project-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;location&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;us-central1&lt;/span&gt;&lt;span class="sh"&gt;"&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="nc"&gt;GenerativeModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-3.5-flash&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;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&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 CAP theorem.&lt;/span&gt;&lt;span class="sh"&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;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vertex AI không dùng cùng giới hạn request/ngày như tầng miễn phí của AI Studio. Bạn bị giới hạn bởi lượng tín dụng còn lại. Với mức giá Flash khoảng 1,50 USD/9 USD cho mỗi 1 triệu token, 300 USD có thể đủ cho vài tuần sử dụng vừa phải.&lt;/p&gt;

&lt;p&gt;Lưu ý:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tín dụng hết hạn sau 90 ngày&lt;/li&gt;
&lt;li&gt;Tín dụng không dùng sẽ mất&lt;/li&gt;
&lt;li&gt;Hãy kiểm tra cài đặt thanh toán để tránh bị tính phí ngoài ý muốn&lt;/li&gt;
&lt;li&gt;Vertex AI phức tạp hơn AI Studio, nhưng phù hợp hơn cho môi trường production&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cách 5: Dùng Gemini CLI từ terminal
&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://apidog.com/blog/gemini-cli-setup-guide?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini CLI&lt;/a&gt; là client terminal mã nguồn mở của Google. Nó xác thực bằng tài khoản Google và cung cấp hạn ngạch miễn phí khoảng 1.000 request/ngày, không cần API key.&lt;/p&gt;

&lt;p&gt;Cài đặt và chạy:&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;# Cài đặt&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @google/gemini-cli

&lt;span class="c"&gt;# Chạy CLI&lt;/span&gt;
gemini

&lt;span class="c"&gt;# Trong CLI, chọn gemini-3.5-flash&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CLI phù hợp khi bạn muốn dùng Flash trực tiếp trong terminal, ví dụ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tóm tắt file hoặc thư mục code&lt;/li&gt;
&lt;li&gt;Viết script nhanh&lt;/li&gt;
&lt;li&gt;Kết hợp với grep, cat, jq hoặc các tool shell khác&lt;/li&gt;
&lt;li&gt;Dùng như một &lt;a href="http://apidog.com/blog/gemini-cli-google-open-source-claude-code-alternative?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;giải pháp thay thế Claude Code miễn phí&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Không nên dùng CLI cho:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tích hợp production&lt;/li&gt;
&lt;li&gt;Workflow cần kiểm soát HTTP streaming thô&lt;/li&gt;
&lt;li&gt;Service backend cần auth và retry logic rõ ràng&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Với production, hãy dùng API key hoặc Vertex AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cách 6: Dùng OpenRouter và các cổng bên thứ ba
&lt;/h2&gt;

&lt;p&gt;Một số cổng bên thứ ba tổng hợp quyền truy cập model AI và có thể định tuyến request Flash miễn phí hoặc gần miễn phí. Cách này được đề cập trong bài &lt;a href="http://apidog.com/blog/get-free-unlimited-gemini-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Lấy API Gemini không giới hạn miễn phí&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Cần lưu ý:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chất lượng và tốc độ phụ thuộc từng dịch vụ&lt;/li&gt;
&lt;li&gt;Một số cổng throttle rất mạnh&lt;/li&gt;
&lt;li&gt;Prompt của bạn đi qua bên thứ ba&lt;/li&gt;
&lt;li&gt;Không nên gửi dữ liệu nhạy cảm&lt;/li&gt;
&lt;li&gt;Chính sách thanh toán và giới hạn có thể thay đổi&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hãy xem đây là phương án dự phòng. Nếu đang xây sản phẩm nghiêm túc, AI Studio hoặc Vertex AI vẫn là lựa chọn ổn định hơn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nên chọn cách nào?
&lt;/h2&gt;

&lt;p&gt;Một cây quyết định ngắn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chỉ muốn chat:&lt;/strong&gt; dùng ứng dụng Gemini&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Muốn thiết kế prompt:&lt;/strong&gt; dùng Google AI Studio&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Muốn build app:&lt;/strong&gt; dùng khóa API AI Studio&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cần test với hạn ngạch cao hơn:&lt;/strong&gt; dùng tín dụng Vertex AI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Muốn chạy từ terminal:&lt;/strong&gt; dùng Gemini CLI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chấp nhận dịch vụ trung gian:&lt;/strong&gt; thử OpenRouter hoặc cổng tương tự&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Với đa số developer, cấu hình thực tế nhất là:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Dùng AI Studio để thiết kế prompt&lt;/li&gt;
&lt;li&gt;Dùng API key miễn phí để build prototype&lt;/li&gt;
&lt;li&gt;Dùng Apidog để kiểm tra request/response&lt;/li&gt;
&lt;li&gt;Chuyển sang Vertex hoặc tài khoản trả phí khi cần production&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Khi nào nên nâng cấp từ Flash miễn phí sang trả phí?
&lt;/h2&gt;

&lt;p&gt;Tầng miễn phí đủ cho nhiều prototype và side project. Bạn nên nâng cấp khi gặp một trong ba trường hợp sau:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bạn chạm giới hạn 1.500 request/ngày nhiều ngày liên tiếp&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Lúc này chi phí xử lý workaround hạn ngạch có thể cao hơn chi phí trả phí.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bạn cần throughput mỗi phút cao hơn&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Tầng miễn phí bị giới hạn khoảng 15 RPM. Nếu app có nhiều user đồng thời, giới hạn này sẽ nhanh chóng trở thành bottleneck.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bạn cần logging, kiểm soát dữ liệu hoặc audit tốt hơn&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Với yêu cầu production, Vertex AI trên tài khoản thanh toán thường phù hợp hơn.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Để tính chi phí theo token, batch discount và các kịch bản thực tế, xem &lt;a href="http://apidog.com/blog/gemini-3-5-flash-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn định giá Gemini 3.5 Flash&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Bạn cũng nên so sánh với các model khác. &lt;a href="http://apidog.com/blog/how-to-use-gpt-5-5-api-for-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;GPT-5.5&lt;/a&gt; và &lt;a href="http://apidog.com/blog/claude-opus-4-7-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Claude Opus 4.7&lt;/a&gt; có các đường miễn phí riêng. Nếu cần chọn model theo workload, xem bài &lt;a href="http://apidog.com/blog/gemini-3-5-vs-gpt-5-5-vs-opus-4-7?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;so sánh Gemini 3.5, GPT-5.5 và Opus 4.7&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mẹo kéo dài tầng miễn phí của Flash
&lt;/h2&gt;

&lt;p&gt;Một vài thói quen giúp 1.500 request/ngày dùng được lâu hơn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cache response&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Với truy vấn lặp lại, hãy trả kết quả từ cache thay vì gọi API lại.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Validate input trước khi gọi model&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Kiểm tra URL, JSON schema, độ dài input và field bắt buộc trước khi gửi request.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dùng structured output&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Nếu cần JSON, hãy yêu cầu model trả về JSON theo schema ngay từ đầu. Điều này giảm số lần retry và parse lỗi.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dùng batch mode cho tác vụ không realtime&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="http://apidog.com/blog/gemini-api-batch-mode?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Batch mode của Gemini API&lt;/a&gt; có thể giúp giảm chi phí cho workload không cần phản hồi tức thì.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kiểm tra request trong Apidog trước khi đưa vào code&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Assertion của &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ắt lỗi response sớm, tránh tiêu tốn hạn ngạch vào request sai.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ưu tiên Flash cho tác vụ thường ngày&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Khi Pro ra mắt, hãy chỉ dùng Pro cho tác vụ thật sự cần chất lượng cao hơn. Các workflow thông thường nên tiếp tục dùng Flash.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Gemini 3.5 Flash có thật sự miễn phí không?
&lt;/h3&gt;

&lt;p&gt;Có, nhưng có giới hạn. Ứng dụng Gemini, AI Studio và khóa API AI Studio đều cho phép dùng Flash miễn phí với hạn ngạch hằng ngày.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tôi có cần thẻ tín dụng để lấy khóa API Flash miễn phí không?
&lt;/h3&gt;

&lt;p&gt;Không. Tầng miễn phí của AI Studio không yêu cầu thẻ tín dụng. Vertex AI cần thẻ để nhận tín dụng 300 USD, nhưng bạn không bị tính phí nếu chưa nâng cấp hoặc vượt điều kiện thanh toán.&lt;/p&gt;

&lt;h3&gt;
  
  
  Có thể dùng khóa Flash miễn phí trong production không?
&lt;/h3&gt;

&lt;p&gt;Về mặt kỹ thuật là có, nhưng không nên phụ thuộc lâu dài vào hạn ngạch miễn phí. Giới hạn 1.500 request/ngày và 15 RPM có thể không đủ cho production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemini 3.5 Pro có miễn phí không?
&lt;/h3&gt;

&lt;p&gt;Google trước đây thường mở quyền truy cập miễn phí cho các model Pro khi GA, nhưng hạn ngạch thường chặt hơn. Với thông tin hiện tại, Pro dự kiến ra mắt sau Flash.&lt;/p&gt;

&lt;h3&gt;
  
  
  Có thể dùng Flash miễn phí trong Cursor hoặc VS Code không?
&lt;/h3&gt;

&lt;p&gt;Có, nếu công cụ đó hỗ trợ API key tùy chỉnh. Cách làm tương tự hướng dẫn &lt;a href="http://apidog.com/blog/gemini-3-0-pro-with-cursor?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.0 Pro với Cursor&lt;/a&gt;, chỉ cần đổi model thành &lt;code&gt;gemini-3.5-flash&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Có xem được usage log không?
&lt;/h3&gt;

&lt;p&gt;Có. Trong AI Studio, mở project của bạn và kiểm tra tab Activity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Có rủi ro gì khi dùng tầng miễn phí không?
&lt;/h3&gt;

&lt;p&gt;Có hai điểm cần chú ý:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Prompt trên tầng miễn phí có thể được dùng để cải thiện model của Google, tùy cài đặt.&lt;/li&gt;
&lt;li&gt;Rate limit của tầng miễn phí có thể thay đổi mà không báo trước.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Không nên đặt deadline production phụ thuộc hoàn toàn vào hạn ngạch miễn phí.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dự án khởi đầu: API tóm tắt URL bằng Flash
&lt;/h2&gt;

&lt;p&gt;Một bài tập thực tế: viết một script nhận URL, tải nội dung trang và dùng Flash để tóm tắ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;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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Client&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;GEMINI_API_KEY&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;summarize_url&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;html&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;text&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;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&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;gemini-3.5-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;contents&lt;/span&gt;&lt;span class="o"&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;Summarize this webpage in 3 bullets:&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;50000&lt;/span&gt;&lt;span class="p"&gt;]&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="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="n"&gt;text&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;summarize_url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://blog.google/&lt;/span&gt;&lt;span class="sh"&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 đó, bạn có thể đưa endpoint này vào &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/response, thêm assertion và chạy regression test mỗi khi chỉnh prompt. Khi workflow ổn định, triển khai lên Cloud Run hoặc nền tảng hosting bạn đang dùng.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Hướng Dẫn Sử Dụng Gemini 3.5 Flash API</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Wed, 20 May 2026 02:15:29 +0000</pubDate>
      <link>https://forem.com/sebbasstian/huong-dan-su-dung-gemini-35-flash-api-n0p</link>
      <guid>https://forem.com/sebbasstian/huong-dan-su-dung-gemini-35-flash-api-n0p</guid>
      <description>&lt;p&gt;API Gemini 3.5 Flash ra mắt cùng phiên bản mô hình vào ngày 19 tháng 5 năm 2026. Flash hiện là biến thể duy nhất của dòng 3.5; &lt;a href="http://apidog.com/blog/what-is-gemini-3-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Pro sẽ ra mắt vào tháng 6&lt;/a&gt;. Bài viết này hướng dẫn cách thiết lập Flash từ đầu: lấy API key, gọi request đầu tiên, xử lý đầu vào đa phương thức, streaming, function calling, JSON output và kiểm thử tích hợp 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;p&gt;Nếu bạn đã dùng Gemini API trước đây, luồng tích hợp gần như không đổi. Điểm cần thay là tên mô hình: &lt;code&gt;gemini-3.5-flash&lt;/code&gt;. Nếu bạn mới bắt đầu, bạn có thể chạy request Flash đầu tiên trong khoảng 10 phú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.amazonaws.com%2Fuploads%2Farticles%2F1t2k00h97cyzfx1nq5tn.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.amazonaws.com%2Fuploads%2Farticles%2F1t2k00h97cyzfx1nq5tn.png" alt="Gemini 3.5 Flash API" width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Bạn nhận được gì với Gemini 3.5 Flash API
&lt;/h2&gt;

&lt;p&gt;Ba điểm cần nắm trước khi triển khai:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model name&lt;/strong&gt;: &lt;code&gt;gemini-3.5-flash&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API pattern tương tự các phiên bản Gemini trước&lt;/strong&gt;: dễ chuyển từ &lt;a href="http://apidog.com/blog/google-gemini-3-api-guide?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3&lt;/a&gt; hoặc &lt;a href="http://apidog.com/blog/gemini-3-1-pro-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3.1&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Có free tier trên Google AI Studio&lt;/strong&gt;: khoảng 1.500 request/ngày, không cần thẻ tín dụng&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Các khả năng chính của Flash:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ngữ cảnh đầu vào 1 triệu token, đầu ra 64 nghìn token&lt;/li&gt;
&lt;li&gt;Đầu vào văn bản + hình ảnh&lt;/li&gt;
&lt;li&gt;Đầu ra văn bản hoặc có cấu trúc&lt;/li&gt;
&lt;li&gt;Function calling và tool use gốc&lt;/li&gt;
&lt;li&gt;Streaming response&lt;/li&gt;
&lt;li&gt;Phù hợp cho truy xuất ngữ cảnh dài, phân tích tài liệu và biểu đồ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Để xem chi tiết chi phí theo token và batch mode, tham khảo &lt;a href="http://apidog.com/blog/gemini-3-5-flash-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn định giá Gemini 3.5 Flash&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bước 1: Lấy API key cho Gemini 3.5 Flash
&lt;/h2&gt;

&lt;p&gt;Bạn có hai lựa chọn: Google AI Studio cho thử nghiệm/free tier hoặc Vertex AI cho môi trường production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cách A: Google AI Studio
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Truy cập &lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;aistudio.google.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Đăng nhập bằng tài khoản Google&lt;/li&gt;
&lt;li&gt;Chọn &lt;strong&gt;Get API key&lt;/strong&gt; ở thanh điều hướng bên trái&lt;/li&gt;
&lt;li&gt;Chọn project có sẵn hoặc tạo project mới&lt;/li&gt;
&lt;li&gt;Nhấn &lt;strong&gt;Create API key&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Sao chép API key và lưu vào 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 shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GEMINI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your_api_key_here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quy trình này giống với hướng dẫn &lt;a href="http://apidog.com/blog/google-gemini-api-key-for-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;lấy Gemini API key miễn phí&lt;/a&gt;. Key có thể dùng ngay với &lt;code&gt;gemini-3.5-flash&lt;/code&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.amazonaws.com%2Fuploads%2Farticles%2F8tqx5rlejwqsd1dahr4x.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.amazonaws.com%2Fuploads%2Farticles%2F8tqx5rlejwqsd1dahr4x.png" alt="Google AI Studio API key" width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Cách B: Vertex AI cho production
&lt;/h3&gt;

&lt;p&gt;Nếu bạn cần billing, IAM, audit log và quản trị theo tổ chức, dùng Vertex AI:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mở &lt;a href="https://console.cloud.google.com" rel="noopener noreferrer"&gt;Google Cloud Console&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bật Vertex AI API&lt;/li&gt;
&lt;li&gt;Tạo service account có quyền &lt;code&gt;aiplatform.user&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Tải file credentials JSON&lt;/li&gt;
&lt;li&gt;Xác thực bằng một trong hai cách:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcloud auth application-default login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hoặc đặt 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="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GOOGLE_APPLICATION_CREDENTIALS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/path/to/service-account.json"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hầu hết team nên bắt đầu bằng AI Studio, sau đó chuyển sang Vertex AI khi cần kiểm soát production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bước 2: Cài đặt SDK
&lt;/h2&gt;

&lt;p&gt;Google cung cấp GenAI SDK cho Python, Node.js, Go và Java.&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;# Python&lt;/span&gt;
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-U&lt;/span&gt; google-genai

&lt;span class="c"&gt;# Node.js&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; @google/genai

&lt;span class="c"&gt;# Go&lt;/span&gt;
go get google.golang.org/genai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nếu không muốn dùng SDK, bạn có thể gọi trực tiếp REST API bằng &lt;code&gt;curl&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bước 3: Gọi request Flash đầu tiên
&lt;/h2&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;google&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Client&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;GEMINI_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;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;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&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;gemini-3.5-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;contents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Explain how OAuth 2.0 PKCE flow works in 3 short paragraphs.&lt;/span&gt;&lt;span class="sh"&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;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Node.js
&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;GoogleGenAI&lt;/span&gt; &lt;span class="p"&gt;}&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;@google/genai&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;ai&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;GoogleGenAI&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;GEMINI_API_KEY&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;ai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generateContent&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;gemini-3.5-flash&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;contents&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 how OAuth 2.0 PKCE flow works in 3 short paragraphs.&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;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;text&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;"https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-flash:generateContent"&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;"x-goog-api-key: &lt;/span&gt;&lt;span class="nv"&gt;$GEMINI_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;'{
    "contents": [{
      "parts": [{"text": "Explain how OAuth 2.0 PKCE flow works in 3 short paragraphs."}]
    }]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Đến đây, bạn đã có request Gemini 3.5 Flash cơ bản. Các phần tiếp theo là những tính năng thường cần khi đưa vào ứng dụng thật.&lt;/p&gt;

&lt;h2&gt;
  
  
  Streaming response
&lt;/h2&gt;

&lt;p&gt;Streaming giúp UI phản hồi nhanh hơn vì người dùng thấy token xuất hiện dần thay vì chờ toàn bộ kết quả.&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;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content_stream&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;gemini-3.5-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;contents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write a 5-step tutorial on writing a REST API client in Go.&lt;/span&gt;&lt;span class="sh"&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="nf"&gt;print&lt;/span&gt;&lt;span class="p"&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;text&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;h3&gt;
  
  
  Node.js
&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;ai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generateContentStream&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;gemini-3.5-flash&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;contents&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 5-step tutorial on writing a REST API client in Go.&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="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;text&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 REST API, đổi endpoint từ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;:generateContent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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;:streamGenerateContent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Đầu vào đa phương thức với Flash
&lt;/h2&gt;

&lt;p&gt;Gemini 3.5 Flash hỗ trợ đầu vào hình ảnh cùng với văn bản. Mẫu phổ biến là trích xuất thông tin từ dashboard, biểu đồ, ảnh chụp màn hình hoặc tài liệu scan.&lt;/p&gt;

&lt;h3&gt;
  
  
  Python: gửi ảnh từ ổ đĩa
&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;google&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.genai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;types&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Client&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;GEMINI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dashboard.png&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;rb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;image_bytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&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;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&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;gemini-3.5-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;contents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;image_bytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mime_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image/png&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 every metric in this dashboard as a 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;text&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 MIME type hình ảnh được hỗ trợ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;image/png&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;image/jpeg&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;image/webp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;image/heic&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;image/heif&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;PDF và video cũng có thể xử lý qua &lt;code&gt;types.Part.from_uri()&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Function calling và tool use
&lt;/h2&gt;

&lt;p&gt;Function calling cho phép model chọn tool phù hợp, trả về tên hàm và arguments để ứng dụng của bạn thực thi.&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;from&lt;/span&gt; &lt;span class="n"&gt;google.genai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;types&lt;/span&gt;

&lt;span class="n"&gt;weather_tool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;function_declarations&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;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_current_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&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;unit&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;enum&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;celsius&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;fahrenheit&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="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;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&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;gemini-3.5-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;contents&lt;/span&gt;&lt;span class="o"&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="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GenerateContentConfig&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="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;weather_tool&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;part&lt;/span&gt; &lt;span class="ow"&gt;in&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;candidates&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;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;function_call&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Call: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;function_call&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&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="nf"&gt;print&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;Args: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;function_call&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luồng xử lý thường là:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Gửi prompt + tool schema cho Flash&lt;/li&gt;
&lt;li&gt;Nhận &lt;code&gt;function_call&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Thực thi hàm trong backend của bạn&lt;/li&gt;
&lt;li&gt;Gửi kết quả hàm lại cho model&lt;/li&gt;
&lt;li&gt;Nhận câu trả lời cuối cùng&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Mẫu này tương tự cách các team đã dùng với &lt;a href="http://apidog.com/blog/gemini-3-flash-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3 Flash API&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Đầu ra có cấu trúc bằng JSON mode
&lt;/h2&gt;

&lt;p&gt;Nếu bạn cần output ổn định cho backend, hãy ép Flash trả về JSON bằng &lt;code&gt;response_mime_type&lt;/code&gt; và &lt;code&gt;response_schema&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="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.genai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;types&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;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&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;gemini-3.5-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;contents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;List 3 popular API testing tools with their pricing.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GenerateContentConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;response_mime_type&lt;/span&gt;&lt;span class="o"&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_schema&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;array&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;items&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;price_per_month&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;number&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;free_tier&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;boolean&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;free_tier&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;data&lt;/span&gt; &lt;span class="o"&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;loads&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;text&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;data&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 giúp giảm nhu cầu parse bằng regex hoặc viết retry loop chỉ để sửa JSON sai định dạng.&lt;/p&gt;

&lt;h2&gt;
  
  
  Giá cả tính đến tháng 5 năm 2026
&lt;/h2&gt;

&lt;p&gt;Mức giá pay-as-you-go cho &lt;code&gt;gemini-3.5-flash&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;Cấp độ&lt;/th&gt;
&lt;th&gt;Đầu vào&lt;/th&gt;
&lt;th&gt;Đầu ra&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tiêu chuẩn&lt;/td&gt;
&lt;td&gt;~$1.50 / 1 triệu token&lt;/td&gt;
&lt;td&gt;~$9.00 / 1 triệu token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Đầu vào được lưu vào bộ nhớ cache&lt;/td&gt;
&lt;td&gt;giá giảm&lt;/td&gt;
&lt;td&gt;không áp dụng&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chế độ hàng loạt&lt;/td&gt;
&lt;td&gt;giảm ~50%&lt;/td&gt;
&lt;td&gt;giảm ~50%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Với workload không yêu cầu độ trễ thời gian thực, &lt;a href="http://apidog.com/blog/gemini-api-batch-mode?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;batch mode của Gemini API&lt;/a&gt; có thể giảm khoảng 50% chi phí.&lt;/p&gt;

&lt;p&gt;Để xem phân tích chi phí theo workload SaaS, agent loop và token usage thực tế, đọc thêm &lt;a href="http://apidog.com/blog/gemini-3-5-flash-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;phân tích giá Gemini 3.5 Flash&lt;/a&gt;. Tài liệu chính thức của Google nằm tại &lt;a href="https://ai.google.dev/gemini-api/docs/pricing" rel="noopener noreferrer"&gt;Gemini Developer API pricing&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kiểm thử tích hợp Gemini 3.5 Flash bằng Apidog
&lt;/h2&gt;

&lt;p&gt;Một request SDK chạy được chưa đủ cho production. Bạn vẫn cần kiểm thử:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Streaming chunks&lt;/li&gt;
&lt;li&gt;Function calling schema&lt;/li&gt;
&lt;li&gt;Payload đa phương thức&lt;/li&gt;
&lt;li&gt;Retry khi lỗi&lt;/li&gt;
&lt;li&gt;Rate limit&lt;/li&gt;
&lt;li&gt;JSON output validation&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.amazonaws.com%2Fuploads%2Farticles%2F1e35505njrdvovv7p4e3.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.amazonaws.com%2Fuploads%2Farticles%2F1e35505njrdvovv7p4e3.png" alt="Kiểm thử Gemini API bằng Apidog" width="799" height="530"&gt;&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"&gt;Apidog&lt;/a&gt; giúp bạn kiểm thử toàn bộ API surface của Gemini Flash trong một workspace:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lưu endpoint Flash thành request&lt;/strong&gt;: dán URL, thêm header &lt;code&gt;x-goog-api-key&lt;/code&gt;, nhấn Send&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;So sánh nhiều model&lt;/strong&gt;: đổi &lt;code&gt;gemini-3.5-flash&lt;/code&gt; sang &lt;code&gt;gemini-3-flash&lt;/code&gt; trong cùng request để so sánh output&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debug streaming response&lt;/strong&gt;: xem từng chunk khi được trả về&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate JSON schema&lt;/strong&gt;: thêm assertion để phát hiện output lệch schema&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mock endpoint&lt;/strong&gt;: tạo response giả để test downstream code mà không tốn quota&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test agent loop&lt;/strong&gt;: xâu chuỗi nhiều request và kiểm tra function call giữa các bước&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cách bắt đầu nhanh:&lt;/p&gt;

&lt;ol&gt;
&lt;li&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;&lt;/li&gt;
&lt;li&gt;Tạo request mới&lt;/li&gt;
&lt;li&gt;Dán endpoint Flash:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-flash:generateContent
&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 plaintext"&gt;&lt;code&gt;x-goog-api-key: {{GEMINI_API_KEY}}
Content-Type: application/json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Dán body từ ví dụ &lt;code&gt;curl&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Gửi request và lưu lại làm test case&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Xử lý lỗi và rate limit
&lt;/h2&gt;

&lt;p&gt;Các mã lỗi thường gặp:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;400&lt;/strong&gt;: request không hợp lệ, thường do &lt;code&gt;contents&lt;/code&gt; sai format hoặc MIME type không hỗ trợ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;401&lt;/strong&gt;: API key không hợp lệ&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;403&lt;/strong&gt;: hết quota hoặc model chưa được bật&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;429&lt;/strong&gt;: bị rate limit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;500/503&lt;/strong&gt;: lỗi server, nên retry với exponential backoff&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ví dụ retry đơn giản trong 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;time&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;call_with_retry&lt;/span&gt;&lt;span class="p"&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;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_retries&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&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;attempt&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_retries&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;try&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;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&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="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;contents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;max_retries&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="k"&gt;raise&lt;/span&gt;

            &lt;span class="n"&gt;sleep_seconds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt;
            &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sleep_seconds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Free tier được reset hằng ngày, khoảng 15 request/phút và khoảng 1.500 request/ngày cho Flash. Production quota thường được kiểm soát theo phút và theo ngày.&lt;/p&gt;

&lt;p&gt;Nếu workload cần thông lượng cao, hãy cân nhắc:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Batch mode cho tác vụ không realtime&lt;/li&gt;
&lt;li&gt;Retry queue&lt;/li&gt;
&lt;li&gt;Circuit breaker&lt;/li&gt;
&lt;li&gt;Fallback sang &lt;a href="http://apidog.com/blog/gemini-3-flash-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3 Flash&lt;/a&gt; khi chạm giới hạn&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Di chuyển từ Gemini 3.1 sang 3.5 Flash
&lt;/h2&gt;

&lt;p&gt;Trong nhiều dự án, thay đổi chính chỉ là model name.&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;# Trước đây
&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;gemini-3.1-pro&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# hoặc gemini-3.1-flash
&lt;/span&gt;
&lt;span class="c1"&gt;# Sau khi chuyển
&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;gemini-3.5-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sau khi đổi model, nên kiểm tra lại:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tool schema&lt;/strong&gt;: đảm bảo arguments vẫn đúng với schema bạn định nghĩa&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streaming UI&lt;/strong&gt;: Flash có thể trả output nhanh hơn, UI có thể cần throttle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token budget&lt;/strong&gt;: giới hạn vẫn là 1M input / 64K output, nhưng output thực tế có thể khác&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety behavior&lt;/strong&gt;: các phản hồi từ chối có thể khác ở edge cases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON schema validation&lt;/strong&gt;: chạy lại test để tránh breaking change trong backend&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tham khảo thêm &lt;a href="http://apidog.com/blog/gemini-3-1-pro-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn Gemini 3.1 Pro API&lt;/a&gt; nếu bạn đang migrate từ SDK pattern cũ.&lt;/p&gt;

&lt;h2&gt;
  
  
  Các mẫu triển khai phổ biến
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Phân tích tài liệu ngữ cảnh dài
&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;from&lt;/span&gt; &lt;span class="n"&gt;google.genai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;types&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;large_report.pdf&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;rb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;pdf_bytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&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;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&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;gemini-3.5-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;contents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;pdf_bytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;mime_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/pdf&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;Summarize the financial outlook from this report in 5 bullet points.&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;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ngữ cảnh 1 triệu token giúp xử lý tài liệu lớn mà không cần chia nhỏ thủ công trong nhiều trường hợp.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Trích xuất dữ liệu từ biểu đồ sang JSON
&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;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&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;gemini-3.5-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;contents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_bytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chart.png&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;rb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="n"&gt;mime_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image/png&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 the chart data as JSON with labels, values, and units.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GenerateContentConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;response_mime_type&lt;/span&gt;&lt;span class="o"&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="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;chart_data&lt;/span&gt; &lt;span class="o"&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;loads&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;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mẫu này hữu ích cho dashboard screenshot, báo cáo vận hành hoặc tài liệu phân tích.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Agent loop với function calling
&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;conversation&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;parts&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;text&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;Book me a flight to Tokyo&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="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&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;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_content&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;gemini-3.5-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;contents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GenerateContentConfig&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="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;flight_search_tool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;booking_tool&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;part&lt;/span&gt; &lt;span class="o"&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;candidates&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;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parts&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="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;function_call&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;part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;

    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;execute_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;function_call&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;conversation&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;model&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;parts&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;part&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="n"&gt;conversation&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;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;parts&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;function_response&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;result&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;Đây là pattern cơ bản để xây dựng agent có khả năng gọi API nội bộ, tra cứu dữ liệu và thực hiện hành động.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Có free tier cho Gemini 3.5 Flash API không?
&lt;/h3&gt;

&lt;p&gt;Có. Bạn có thể dùng thông qua &lt;a href="http://apidog.com/blog/google-gemini-api-key-for-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Google AI Studio&lt;/a&gt; với quota hằng ngày khoảng 1.500 request/ngày. Không cần thẻ tín dụng.&lt;/p&gt;

&lt;h3&gt;
  
  
  Flash có hỗ trợ endpoint tương thích OpenAI không?
&lt;/h3&gt;

&lt;p&gt;Có. Google cung cấp shim tương thích OpenAI tại:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/v1beta/openai/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bạn có thể trỏ OpenAI SDK đến endpoint này bằng &lt;code&gt;base_url&lt;/code&gt; và dùng Gemini API key. Model name vẫ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;gemini-3.5-flash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Có dùng Flash với LangChain hoặc LlamaIndex được không?
&lt;/h3&gt;

&lt;p&gt;Có. Cả hai đều có tích hợp Gemini. Truyền model name tương ứng:&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;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;gemini-3.5-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Khi nào Gemini 3.5 Pro ra mắt?
&lt;/h3&gt;

&lt;p&gt;Theo thông báo ra mắt của Google, Gemini 3.5 Pro dự kiến ra mắt vào tháng 6 năm 2026. Trước thời điểm đó, Flash là biến thể 3.5 duy nhất có sẵn.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kích thước hình ảnh tối đa nên dùng là bao nhiêu?
&lt;/h3&gt;

&lt;p&gt;Khuyến nghị 3072×3072. Ảnh lớn hơn có thể được lấy mẫu lại. Nếu workload tập trung vào OCR, bạn có thể tham khảo thêm &lt;a href="http://apidog.com/blog/gemini-2-0-flash-ocr?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;quy trình OCR với Gemini 2.0 Flash&lt;/a&gt;; pattern triển khai tương tự vẫn áp dụng.&lt;/p&gt;

&lt;h3&gt;
  
  
  Làm thế nào để test streaming endpoint trong Apidog?
&lt;/h3&gt;

&lt;p&gt;Tạo request với hậu tố endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;:streamGenerateContent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apidog sẽ hiển thị các SSE chunk khi chúng đến, giúp debug response bị thiếu hoặc bị ngắt giữa chừng.&lt;/p&gt;

&lt;h3&gt;
  
  
  Xem API log ở đâu?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;AI Studio: mục &lt;strong&gt;Activity&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Vertex AI: &lt;strong&gt;Logs Explorer&lt;/strong&gt; trong Google Cloud Console&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Nên xây dựng gì đầu tiên?
&lt;/h2&gt;

&lt;p&gt;Nếu bạn muốn thử Gemini 3.5 Flash trong tuần đầu tiên, bắt đầu với một trong các project nhỏ sau:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PDF Q&amp;amp;A bot&lt;/strong&gt;: đưa PDF vào context 1 triệu token, hỏi đáp và trả về câu trả lời có trích dẫn&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chart-to-JSON pipeline&lt;/strong&gt;: gửi ảnh dashboard, trích xuất dữ liệu có cấu trúc&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customer support agent&lt;/strong&gt;: dùng function calling để đọc CRM hoặc ticket system&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code review assistant&lt;/strong&gt;: phân tích nhiều file, trả output JSON với severity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internal search agent&lt;/strong&gt;: kết hợp long context với tool call đến API nội bộ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quy trình triển khai nên giữ đơn giản:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Viết prompt nhỏ và rõ&lt;/li&gt;
&lt;li&gt;Gọi &lt;code&gt;gemini-3.5-flash&lt;/code&gt; bằng SDK hoặc REST&lt;/li&gt;
&lt;li&gt;Ép output JSON nếu backend cần dữ liệu có cấu trúc&lt;/li&gt;
&lt;li&gt;Thêm retry/backoff cho lỗi 429 và 5xx&lt;/li&gt;
&lt;li&gt;Kiểm thử request, streaming và schema 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;/li&gt;
&lt;li&gt;Đưa vào production sau khi đã có test case ổn định&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Gemini Omni là gì? Mô hình video lý luận ưu tiên hàng đầu của Google</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Wed, 20 May 2026 02:04:12 +0000</pubDate>
      <link>https://forem.com/sebbasstian/gemini-omni-la-gi-mo-hinh-video-ly-luan-uu-tien-hang-dau-cua-google-19f5</link>
      <guid>https://forem.com/sebbasstian/gemini-omni-la-gi-mo-hinh-video-ly-luan-uu-tien-hang-dau-cua-google-19f5</guid>
      <description>&lt;p&gt;Blog của Google vừa công bố Gemini Omni, dòng mô hình kết hợp suy luận Gemini với tạo sinh đa phương thức. Biến thể đầu tiên là Gemini Omni Flash: nhận văn bản, hình ảnh, âm thanh hoặc video và tạo đầu ra video. Hiện mô hình đã có trong ứng dụng Gemini, Google Flow, YouTube Shorts và YouTube Create; API cho nhà phát triển dự kiến được triển khai trong vài tuần tớ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 hôm nay&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Nếu bạn đang xây dựng workflow API 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;, có thể bạn đã tích hợp các mô hình văn bản, trình tạo ảnh như &lt;a href="http://apidog.com/blog/nano-banana-2?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Nano Banana 2&lt;/a&gt;, hoặc mô hình video như &lt;a href="http://apidog.com/blog/veo-3-1-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Veo 3.1&lt;/a&gt;. Gemini Omni là endpoint tiếp theo nên chuẩn bị sẵn: khác Veo ở chỗ nó không chỉ tạo video từ prompt, mà còn suy luận trước khi tạo.&lt;/p&gt;

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

&lt;p&gt;Gemini Omni Flash hiện được định vị như một mô hình:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nhận đầu vào: văn bản, hình ảnh, âm thanh, video.&lt;/li&gt;
&lt;li&gt;Tạo đầu ra: video ở thời điểm ra mắt.&lt;/li&gt;
&lt;li&gt;Đầu ra hình ảnh và âm thanh: được Google nói là sẽ bổ sung sau.&lt;/li&gt;
&lt;li&gt;Có mặt trong: ứng dụng Gemini, &lt;a href="https://labs.google/flow" rel="noopener noreferrer"&gt;Google Flow&lt;/a&gt;, YouTube Shorts, YouTube Create.&lt;/li&gt;
&lt;li&gt;API nhà phát triển và doanh nghiệp: dự kiến trong vài tuần tới.&lt;/li&gt;
&lt;li&gt;Watermark: SynthID.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu bạn muốn chuẩn bị trước, việc cần làm ngay là thiết kế abstraction cho model provider, mock response video, và cấu hình sẵn auth trong Apidog để có thể thay endpoint khi API chính thức mở.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gemini Omni là gì?
&lt;/h2&gt;

&lt;p&gt;Gemini Omni là dòng mô hình tạo sinh mới của Google, được xây trên hướng “suy luận + tạo sinh”. Theo nhóm &lt;a href="https://deepmind.google/" rel="noopener noreferrer"&gt;Google DeepMind&lt;/a&gt;, Omni sử dụng kiến thức thế giới của Gemini để suy luận về điều sẽ xảy ra tiếp theo, bao gồm các yếu tố trực quan như trọng lực, động năng hoặc động lực học chất lỏng.&lt;/p&gt;

&lt;p&gt;Ví dụ: nếu prompt là “tạo video quả bóng nảy xuống cầu thang”, Omni không chỉ nội suy khung hình. Mô hình sẽ cố gắng suy luận về chuyển động, mất động lượng sau mỗi lần va chạm, rồi tạo video tương ứng.&lt;/p&gt;

&lt;p&gt;Điểm khác biệt chính:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Đầu vào đa phương thức bản địa&lt;/strong&gt;: có thể kết hợp text, image, audio, video trong cùng request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tham chiếu nhiều nguồn&lt;/strong&gt;: dùng ảnh tham chiếu, cảnh mẫu, màu thương hiệu hoặc script để giữ tính nhất quán.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chỉnh sửa nhiều lượt&lt;/strong&gt;: tạo clip trước, sau đó yêu cầu “thêm tuyết vào nền” hoặc “đổi mèo thành cáo” mà vẫn giữ phần không liên quan.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tên “Flash” cho thấy Omni Flash nằm ở lớp tối ưu cho tốc độ và khả dụng rộng, tương tự cách Google phân tầng Gemini 3 Pro và Gemini 3 Flash. Google chưa công bố biến thể Omni lớn hơn. Xem thêm về &lt;a href="http://apidog.com/blog/gemini-3-flash?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3 Flash&lt;/a&gt; nếu bạn đang theo dõi dòng Flash.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gemini Omni khác Veo 3 và Gemini 3 Pro như thế nào?
&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;Mục đích&lt;/th&gt;
&lt;th&gt;Đầu vào&lt;/th&gt;
&lt;th&gt;Đầu ra&lt;/th&gt;
&lt;th&gt;Suy luận&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 3 Pro&lt;/td&gt;
&lt;td&gt;Suy luận văn bản + đa phương thức nặng&lt;/td&gt;
&lt;td&gt;Văn bản, hình ảnh, âm thanh, video, mã&lt;/td&gt;
&lt;td&gt;Văn bản, mã&lt;/td&gt;
&lt;td&gt;Mạnh&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Veo 3.1&lt;/td&gt;
&lt;td&gt;Tạo video&lt;/td&gt;
&lt;td&gt;Văn bản, hình ảnh&lt;/td&gt;
&lt;td&gt;Video&lt;/td&gt;
&lt;td&gt;Hạn chế, chủ yếu theo prompt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini Omni Flash&lt;/td&gt;
&lt;td&gt;Suy luận + tạo sinh video&lt;/td&gt;
&lt;td&gt;Văn bản, hình ảnh, âm thanh, video&lt;/td&gt;
&lt;td&gt;Video&lt;/td&gt;
&lt;td&gt;Bản địa, áp dụng vào quá trình tạo&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Veo 3 vẫn phù hợp khi bạn cần video đơn cảnh có chất lượng cao và prompt rõ ràng. Bạn có thể xem thêm trong &lt;a href="http://apidog.com/blog/google-veo-3-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn API Veo 3&lt;/a&gt; và bài về &lt;a href="http://apidog.com/blog/veo-3-1-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Veo 3.1&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Omni phù hợp hơn khi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompt cần được diễn giải.&lt;/li&gt;
&lt;li&gt;Người dùng muốn chỉnh sửa qua hội thoại.&lt;/li&gt;
&lt;li&gt;Đầu vào gồm nhiều loại dữ liệu: ảnh sản phẩm, audio, video tham chiếu, script.&lt;/li&gt;
&lt;li&gt;Bạn cần model lập kế hoạch trước khi tạo cảnh.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Với tác vụ văn bản thuần túy, &lt;a href="http://apidog.com/blog/gemini-3-pro-ollama-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Gemini 3 Pro&lt;/a&gt; vẫn là lựa chọn hợp lý hơn. Với tạo video thuần túy, Veo 3.1 vẫn là baseline ổn định. Omni nên được xem như lựa chọn cho workflow sáng tạo có nhiều vòng lặp.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hiện tại có thể dùng Gemini Omni ở đâu?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Giao diện&lt;/th&gt;
&lt;th&gt;Chi phí&lt;/th&gt;
&lt;th&gt;Truy cập&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;YouTube Shorts&lt;/td&gt;
&lt;td&gt;Miễn phí&lt;/td&gt;
&lt;td&gt;Nhà sáng tạo trên nền tảng&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YouTube Create&lt;/td&gt;
&lt;td&gt;Miễn phí&lt;/td&gt;
&lt;td&gt;Nhà sáng tạo di động&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ứng dụng Gemini&lt;/td&gt;
&lt;td&gt;Trả phí&lt;/td&gt;
&lt;td&gt;Google AI Plus / Pro / Ultra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Flow&lt;/td&gt;
&lt;td&gt;Trả phí&lt;/td&gt;
&lt;td&gt;Google AI Plus / Pro / Ultra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API nhà phát triển&lt;/td&gt;
&lt;td&gt;Chưa công bố&lt;/td&gt;
&lt;td&gt;Trong vài tuần tới&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API doanh nghiệp&lt;/td&gt;
&lt;td&gt;Chưa công bố&lt;/td&gt;
&lt;td&gt;Trong vài tuần tới&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Mọi video do Omni tạo ra đều có watermark &lt;a href="https://deepmind.google/technologies/synthid/" rel="noopener noreferrer"&gt;SynthID&lt;/a&gt;. Watermark này vô hình với người xem, nhưng có thể được công cụ của Google đọc để xác minh nguồn gốc nội dung.&lt;/p&gt;

&lt;p&gt;Google cũng giới thiệu tính năng Avatars, cho phép tạo phiên bản kỹ thuật số có giọng nói riêng. Với API, Google chưa công bố chi tiết quy trình đồng ý và xác minh. Nếu bạn định xây tính năng avatar, nên thiết kế trước lớp kiểm soát consent thay vì chờ đến khi API mở.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cách hiểu “suy luận + tạo sinh” bằng ví dụ
&lt;/h2&gt;

&lt;p&gt;Prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cho tôi xem một ly nước bị đổ khỏi mép bàn và rơi xuống sàn gỗ.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Một mô hình video thuần túy sẽ tạo chuỗi khung hình “trông giống” ly nước rơi. Một mô hình có suy luận sẽ cần xử lý các câu hỏi như:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Khi trọng tâm vượt khỏi mép bàn, ly nghiêng nhanh thế nào?&lt;/li&gt;
&lt;li&gt;Nước tràn ra trước hay sau khi ly chạm sàn?&lt;/li&gt;
&lt;li&gt;Ly vỡ, nảy hay lăn?&lt;/li&gt;
&lt;li&gt;Chất lỏng văng theo hướng nào?&lt;/li&gt;
&lt;li&gt;Chuyển động có hợp lý theo trọng lực không?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Omni không phải engine mô phỏng vật lý. Nó không thay thế Houdini, Blender, pipeline VFX hay editor phi tuyến tính. Nhưng mục tiêu của nó là tạo kết quả “hợp lý về mặt trực giác” mà không cần prompt quá chi tiết từng frame.&lt;/p&gt;

&lt;p&gt;Bạn sẽ thấy lợi ích rõ nhất ở:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Quỹ đạo&lt;/strong&gt;: vật rơi, nảy, trượt hợp lý hơn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vật liệu&lt;/strong&gt;: nước, vải, khói, tóc có chuyển động tự nhiên hơn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Va chạm&lt;/strong&gt;: phản ứng khi vật thể tiếp xúc ít bị “ảo” hơn.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Chuẩn bị API trước khi Gemini Omni mở
&lt;/h2&gt;

&lt;p&gt;Google chưa công bố endpoint, giá, rate limit hoặc region. Tuy nhiên, dựa trên cách Gemini 3 được triển khai, nhiều khả năng developer sẽ gặp Omni qua Google AI Studio và Vertex AI. Xem thêm &lt;a href="http://apidog.com/blog/google-gemini-3-api-guide?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn Gemini 3 API&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Những gì nên chuẩn bị ngay:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Không hard-code model name&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;VIDEO_MODEL=gemini-omni-flash
VIDEO_PROVIDER=google
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Bọc provider sau một interface nội bộ&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;VideoGenerationInput&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;images&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="nl"&gt;audio&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;videoRefs&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="nl"&gt;durationSeconds&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;VideoGenerationResult&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;queued&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;running&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;succeeded&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;failed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;videoUrl&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;error&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;VideoModelProvider&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;VideoGenerationInput&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;VideoGenerationResult&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nf"&gt;getStatus&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="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;VideoGenerationResult&lt;/span&gt;&lt;span class="o"&gt;&amp;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;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cho phép swap Veo, Omni hoặc provider khác&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;createVideoProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;VideoModelProvider&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;google-veo&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="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;VeoProvider&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;google-omni&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="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OmniProvider&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nl"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Unsupported provider: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;provider&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="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Mock response trước khi gọi API thật&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Video generation thường chậm và tốn quota. Dùng mock để frontend, job queue, retry logic và UI trạng thái chạy được trước khi API có thật.&lt;/p&gt;

&lt;p&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;, import schema Gemini/Veo hiện có, rồi tạo mock endpoint cho Omni. Apidog hỗ trợ auth, environment variables và mock response, giúp bạn kiểm thử client mà chưa cần endpoint thật.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thiết kế endpoint Omni trong Apidog
&lt;/h2&gt;

&lt;p&gt;Khi API Omni phát hành, workspace Apidog nên có ba phần.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Auth
&lt;/h3&gt;

&lt;p&gt;Chuẩn bị cả hai kiểu auth có thể gặp:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google AI Studio: header &lt;code&gt;x-goog-api-key&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Vertex AI: OAuth hoặc service account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Trong Apidog, tạo environment riêng:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GEMINI_API_KEY={{your_api_key}}
GOOGLE_PROJECT_ID={{project_id}}
GOOGLE_LOCATION={{location}}
VIDEO_MODEL=gemini-omni-flash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Schema request/response
&lt;/h3&gt;

&lt;p&gt;Nếu Google phát hành OpenAPI spec, import trực tiếp vào Apidog. Nếu chưa có, bạn có thể phác thảo schema dựa trên Gemini multimodal API hiện tại.&lt;/p&gt;

&lt;p&gt;Ví dụ request dự kiến:&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://generativelanguage.googleapis.com/v1beta/models/gemini-omni-flash:generateContent &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"x-goog-api-key: &lt;/span&gt;&lt;span class="nv"&gt;$GEMINI_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;'{
    "contents": [{
      "parts": [
        {
          "text": "Generate a 6s product shot of the attached phone rotating on a white background"
        },
        {
          "inline_data": {
            "mime_type": "image/jpeg",
            "data": "&amp;lt;base64-image&amp;gt;"
          }
        }
      ]
    }],
    "generationConfig": {
      "responseMimeType": "video/mp4",
      "durationSeconds": 6
    }
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lưu ý: đây chỉ là hình dạng suy đoán dựa trên API Gemini đa phương thức hiện có. Google có thể đổi tên field khi Omni API ra mắt.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Mock response
&lt;/h3&gt;

&lt;p&gt;Tạo response mẫu để client có thể xử lý cả trường hợp synchronous và asynchronous.&lt;/p&gt;

&lt;p&gt;Ví dụ response đồng bộ:&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;"vid_omni_mock_001"&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;"succeeded"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"videoUrl"&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://example.com/mock/generated-video.mp4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mimeType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"video/mp4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"durationSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"watermark"&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;"SynthID"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"present"&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;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ụ response async:&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;"job_omni_mock_001"&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;"queued"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"pollUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/v1/video/jobs/job_omni_mock_001"&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 Apidog, thêm test assertions:&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;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;response has job id&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;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;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;exist&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="s2"&gt;status is valid&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;status&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;status&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;queued&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;running&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;succeeded&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;failed&lt;/span&gt;&lt;span class="dl"&gt;"&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="nf"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;status&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;Mô hình mock này cũng phù hợp với cách chuẩn bị được mô tả trong &lt;a href="http://apidog.com/blog/best-text-to-video-api-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn API văn bản thành video&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Omni so với Sora 2, Veo 3.1 và Nano Banana 2
&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;Nhà cung cấp&lt;/th&gt;
&lt;th&gt;Suy luận&lt;/th&gt;
&lt;th&gt;Đầu vào đa phương thức&lt;/th&gt;
&lt;th&gt;Chỉnh sửa&lt;/th&gt;
&lt;th&gt;Watermark&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gemini Omni Flash&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;Bản địa&lt;/td&gt;
&lt;td&gt;Văn bản, hình ảnh, âm thanh, video&lt;/td&gt;
&lt;td&gt;Nhiều lượt&lt;/td&gt;
&lt;td&gt;SynthID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Veo 3.1&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;Hạn chế&lt;/td&gt;
&lt;td&gt;Văn bản, hình ảnh&lt;/td&gt;
&lt;td&gt;Chủ yếu prompt lại&lt;/td&gt;
&lt;td&gt;SynthID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sora 2&lt;/td&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;Một phần&lt;/td&gt;
&lt;td&gt;Văn bản, hình ảnh&lt;/td&gt;
&lt;td&gt;Chủ yếu prompt lại&lt;/td&gt;
&lt;td&gt;C2PA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nano Banana 2&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;Một phần&lt;/td&gt;
&lt;td&gt;Văn bản, hình ảnh&lt;/td&gt;
&lt;td&gt;Hạn chế&lt;/td&gt;
&lt;td&gt;SynthID&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Veo 3.1 vẫn là lựa chọn ổn định nếu bạn cần chất lượng video đơn cảnh. Sora 2 được OpenAI định vị mạnh về mô phỏng thế giới; xem thêm bài &lt;a href="http://apidog.com/blog/openai-sora-2?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Sora 2&lt;/a&gt;. Omni nổi bật ở chỉnh sửa nhiều lượt và đầu vào đa phương thức, đặc biệt là audio/video reference.&lt;/p&gt;

&lt;p&gt;Nếu đang chọn model cho production hôm nay, Veo 3.1 + mock layer trong Apidog là phương án ít rủi ro hơn. Nếu đang xây sản phẩm nơi người dùng nói chuyện với model để chỉnh video, Omni đáng để chuẩn bị. Xem thêm &lt;a href="http://apidog.com/blog/grok-imagine-video-vs-sora-2-veo-3-seedance-wan-vidu-comparison-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;bảng so sánh mô hình video&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use case thực tế
&lt;/h2&gt;

&lt;p&gt;Một số workflow phù hợp với Omni:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Marketing sản phẩm&lt;/strong&gt;: tạo video demo từ ảnh sản phẩm, script và guideline thương hiệu.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Giáo dục&lt;/strong&gt;: minh họa hiện tượng vật lý bằng video có chuyển động hợp lý.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hỗ trợ khách hàng&lt;/strong&gt;: tạo video hướng dẫn ngắn với avatar hoặc nhân vật thương hiệu.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tin cậy và an toàn&lt;/strong&gt;: kiểm tra SynthID trong pipeline moderation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prototype game/app&lt;/strong&gt;: tạo cinematic sequence trước khi có asset 3D hoàn chỉnh.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Checklist triển khai cho developer
&lt;/h2&gt;

&lt;p&gt;Trước khi API Gemini Omni ra mắt, nên hoàn tất các việc sau:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Tạo abstraction &lt;code&gt;VideoModelProvider&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;[ ] Không hard-code tên model.&lt;/li&gt;
&lt;li&gt;[ ] Thêm environment cho &lt;code&gt;GEMINI_API_KEY&lt;/code&gt;, &lt;code&gt;VIDEO_MODEL&lt;/code&gt;, &lt;code&gt;VIDEO_PROVIDER&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;[ ] Mock endpoint generate video trong Apidog.&lt;/li&gt;
&lt;li&gt;[ ] Thiết kế polling job nếu API chạy async.&lt;/li&gt;
&lt;li&gt;[ ] Cache output theo prompt + input reference.&lt;/li&gt;
&lt;li&gt;[ ] Thêm retry logic cho lỗi quota, timeout, policy.&lt;/li&gt;
&lt;li&gt;[ ] Không block main thread khi tạo video.&lt;/li&gt;
&lt;li&gt;[ ] Chuẩn bị bước kiểm tra SynthID nếu nội dung được publish.&lt;/li&gt;
&lt;li&gt;[ ] Giữ fallback sang Veo 3.1 hoặc provider khác.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Một lỗi phổ biến: xem Omni như trình chỉnh sửa video hoàn chỉnh. Nó là model tạo sinh, không phải NLE. Bạn vẫn cần bước hậu kỳ trong DaVinci, Premiere hoặc Google Flow để cắt, chỉnh màu và trộn âm thanh.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Gemini Omni là gì?
&lt;/h3&gt;

&lt;p&gt;Gemini Omni là dòng mô hình mới của Google, kết hợp suy luận Gemini với tạo sinh đa phương thức. Biến thể đầu tiên là Gemini Omni Flash, nhận văn bản, hình ảnh, âm thanh và video, rồi tạo đầu ra video.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemini Omni có giống Veo 3 không?
&lt;/h3&gt;

&lt;p&gt;Không. Veo là mô hình tạo video chuyên dụng. Omni là mô hình suy luận có khả năng tạo video, hỗ trợ prompt phức tạp hơn, chỉnh sửa nhiều lượt và đầu vào đa phương thức phong phú hơn. Xem thêm &lt;a href="http://apidog.com/blog/google-veo-3-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn API Veo 3&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Khi nào API Gemini Omni ra mắt?
&lt;/h3&gt;

&lt;p&gt;Google nói API nhà phát triển và doanh nghiệp sẽ được triển khai “trong vài tuần tới” kể từ thông báo tháng 5 năm 2026. Chưa có ngày cụ thể.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemini Omni có giá bao nhiêu?
&lt;/h3&gt;

&lt;p&gt;Với người dùng cuối, Omni miễn phí trong YouTube Shorts và YouTube Create, đồng thời có trong các gói Google AI Plus, Pro và Ultra. Giá API chưa được công bố.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemini Omni có tạo âm thanh không?
&lt;/h3&gt;

&lt;p&gt;Chưa. Ở thời điểm ra mắt, đầu ra là video. Google nói đầu ra âm thanh và hình ảnh sẽ đến sau, nhưng chưa có mốc thời gian cụ thể.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemini Omni có watermark không?
&lt;/h3&gt;

&lt;p&gt;Có. Video do Omni tạo ra có watermark SynthID, có thể xác minh qua ứng dụng Gemini, Gemini trong Chrome và Google Search.&lt;/p&gt;

&lt;h3&gt;
  
  
  Apidog có hỗ trợ Gemini Omni API không?
&lt;/h3&gt;

&lt;p&gt;Có thể chuẩn bị theo cùng cách bạn đang 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; cho Gemini 3, Veo 3 hoặc Nano Banana. Khi Google công bố OpenAPI spec, bạn có thể import trực tiếp. Trước đó, hãy mock schema và response để kiểm thử client.&lt;/p&gt;

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

&lt;p&gt;Gemini Omni không chỉ là một phiên bản Veo nhanh hơn. Điểm đáng chú ý là mô hình suy luận trước khi tạo video, nhận nhiều loại đầu vào và hỗ trợ chỉnh sửa qua nhiều lượt hội thoại.&lt;/p&gt;

&lt;p&gt;Nếu bạn đang xây sản phẩm với video generation, hãy làm ngay 5 việc:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Theo dõi Google AI Studio và Vertex AI để biết khi nào Omni Flash có endpoint.&lt;/li&gt;
&lt;li&gt;Cấu hình sẵn auth và environment 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;.&lt;/li&gt;
&lt;li&gt;Mock request/response Omni để frontend và backend có thể phát triển trước.&lt;/li&gt;
&lt;li&gt;Thiết kế provider abstraction để swap Veo, Omni hoặc model khác.&lt;/li&gt;
&lt;li&gt;Lập kế hoạch cache, async job và xác minh SynthID.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Khi API chính thức mở, nhóm đã chuẩn bị schema, mock và integration test sẽ có thể thử nghiệm trong vài giờ thay vì bắt đầu đọc tài liệu từ đầu.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Claude Managed Agents vs Agent SDK (2026): Nên Chọn Cái Nào?</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Tue, 19 May 2026 10:30:39 +0000</pubDate>
      <link>https://forem.com/sebbasstian/claude-managed-agents-vs-agent-sdk-2026-nen-chon-cai-nao-57hd</link>
      <guid>https://forem.com/sebbasstian/claude-managed-agents-vs-agent-sdk-2026-nen-chon-cai-nao-57hd</guid>
      <description>&lt;p&gt;Bạn đã quyết định triển khai một tác nhân AI sản xuất trên Claude. Ngã rẽ đầu tiên không nằm ở prompt, mà ở runtime: để Anthropic chạy vòng lặp tác nhân và sandbox bằng Claude Managed Agents, hay tự giữ vòng lặp trong dịch vụ của bạn bằng Claude Agent SDK. Hai lựa chọn này có thể giống nhau trong demo, nhưng sẽ kéo theo kiến trúc, chi phí, vận hành và kiểm soát dữ liệu rất khác nhau.&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
&lt;/h2&gt;

&lt;p&gt;Chọn &lt;strong&gt;Claude Managed Agents&lt;/strong&gt; nếu bạn muốn Anthropic lưu trữ vòng lặp tác nhân, sandbox và trạng thái phiên cho các tác vụ dài hoặc không đồng bộ.&lt;/p&gt;

&lt;p&gt;Chọn &lt;strong&gt;Claude Agent SDK&lt;/strong&gt; nếu bạn cần vòng lặp chạy trong hạ tầng của mình, kiểm soát công cụ, dữ liệu, quyền hạn và chi phí vận hành.&lt;/p&gt;

&lt;p&gt;Cả hai đều hỗ trợ MCP và các mô hình Claude.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bối cảnh: bạn đang chọn runtime, không chỉ chọn SDK
&lt;/h2&gt;

&lt;p&gt;Vào năm 2026, “xây dựng tác nhân AI” không còn đơn giản là bọc một vòng &lt;code&gt;while&lt;/code&gt; quanh API chat completion. Với Claude, bạn có hai cách chính để chạy tác nhân trong production:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Managed Agents&lt;/strong&gt;: Anthropic chạy vòng lặp tác nhân, sandbox và trạng thái phiên. Ứng dụng của bạn gửi sự kiện và nhận stream kết quả.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Agent SDK&lt;/strong&gt;: bạn cài thư viện Python hoặc TypeScript, rồi chạy vòng lặp tác nhân trong chính process và hạ tầng của bạn.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cùng một lớp mô hình bên dưới, nhưng hợp đồng vận hành khác nhau:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dữ liệu nằm ở đâu?&lt;/li&gt;
&lt;li&gt;Ai vận hành sandbox?&lt;/li&gt;
&lt;li&gt;Ai xử lý khi tool call bị treo lúc 2 giờ sáng?&lt;/li&gt;
&lt;li&gt;Chi phí được tính theo runtime được quản lý hay compute tự vận hành?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hầu hết tác nhân production đều làm việc bằng cách gọi API: hoàn tiền, tạo ticket, tra cứu inventory, đọc log, gọi endpoint nội bộ. Vì vậy, độ tin cậy của tác nhân phụ thuộc rất nhiều vào API và tool mà nó gọi.&lt;/p&gt;

&lt;p&gt;Trước khi chọn runtime, bạn nên thiết kế, mock và kiểm thử các endpoint đó. Một nền tảng 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; phù hợp cho phần này: mock dependency, chạy contract test, kiểm thử MCP server và quan sát request/response mà tác nhân tạo ra. Nếu muốn đào sâu riêng về hướng được lưu trữ, xem thêm &lt;a href="http://apidog.com/blog/claude-managed-agents-guide?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn Claude Managed Agents&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Managed Agents là gì?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Claude Managed Agents&lt;/strong&gt; là runtime tác nhân được Anthropic quản lý. Thay vì tự viết vòng lặp tác nhân, sandbox và lớp thực thi tool, bạn định nghĩa agent rồi để Anthropic chạy nó.&lt;/p&gt;

&lt;p&gt;Managed Agents được ra mắt dưới dạng public beta vào tháng 4 năm 2026 và yêu cầu beta header:&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;anthropic-beta: managed-agents-2026-04-01
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SDK có thể thiết lập header này cho bạn.&lt;/p&gt;

&lt;p&gt;Managed Agents xoay quanh bốn khái niệm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent&lt;/strong&gt;: model, system prompt, tool, MCP server và skill. Bạn tạo một lần, sau đó tham chiếu bằng ID.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment&lt;/strong&gt;: template container với package cài sẵn như Python, Node.js, Go và rule truy cập mạng.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session&lt;/strong&gt;: một agent đang chạy trong một environment. Session có filesystem và lịch sử hội thoại liên tục.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Events&lt;/strong&gt;: thông điệp giữa ứng dụng và agent, ví dụ user turn, tool result, status update. Events được stream qua SSE và được lưu phía server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Luồng triển khai điển hình:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tạo agent.&lt;/li&gt;
&lt;li&gt;Cấu hình environment.&lt;/li&gt;
&lt;li&gt;Bắt đầu session.&lt;/li&gt;
&lt;li&gt;Gửi user message dưới dạng event.&lt;/li&gt;
&lt;li&gt;Nhận stream phản hồi.&lt;/li&gt;
&lt;li&gt;Gửi thêm event hoặc interrupt nếu cần đổi hướng.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Managed Agents cung cấp sẵn một số tool:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bash&lt;/li&gt;
&lt;li&gt;Đọc/ghi/chỉnh sửa file&lt;/li&gt;
&lt;li&gt;Glob, grep&lt;/li&gt;
&lt;li&gt;Web search và web retrieval&lt;/li&gt;
&lt;li&gt;Kết nối MCP server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Theo Anthropic, lựa chọn này phù hợp với các tác vụ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chạy vài phút đến vài giờ&lt;/li&gt;
&lt;li&gt;Có nhiều tool call&lt;/li&gt;
&lt;li&gt;Cần sandbox cloud an toàn&lt;/li&gt;
&lt;li&gt;Cần trạng thái phiên tồn tại qua nhiều interaction&lt;/li&gt;
&lt;li&gt;Muốn giảm phần hạ tầng tự vận hành&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Managed Agents cũng có trên Claude Platform on AWS, nhưng cần kiểm tra khác biệt về tính năng và session behavior nếu bạn bị ràng buộc bởi một cloud cụ thể.&lt;/p&gt;

&lt;p&gt;Hai điểm cần nhớ:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Custom tool vẫn do ứng dụng của bạn thực thi&lt;/strong&gt;. Claude quyết định gọi tool, nhưng app của bạn chạy tool và trả kết quả qua event stream.&lt;/li&gt;
&lt;li&gt;Một số tính năng như result và multi-agent có thể nằm sau research preview riêng. Đừng giả định mọi tính năng đều bật mặc định.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Để hiểu mẫu kiến trúc tổng quát hơn, xem bài &lt;a href="http://apidog.com/blog/agentic-ai-architecture?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;kiến trúc AI tác nhân&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Agent SDK là gì?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Claude Agent SDK&lt;/strong&gt; là thư viện Python/TypeScript cho phép bạn chạy vòng lặp tác nhân trong process của mình. Trước đây nó được gọi là Claude Code SDK; việc đổi tên phản ánh phạm vi rộng hơn ngoài coding task.&lt;/p&gt;

&lt;p&gt;Cài đặt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;claude-agent-sdk
&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 shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @anthropic-ai/claude-agent-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Một agent tối thiểu trong Python có dạng:&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;claude_agent_sdk&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ClaudeAgentOptions&lt;/span&gt;

&lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClaudeAgentOptions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;allowed_tools&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;Read&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&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;Edit&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;Bash&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;Grep&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="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Đọc project này và đề xuất các bước refactor an toàn.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;options&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;message&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 với Client SDK thông thường, bạn không cần tự viết vòng lặp kiểu:&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="k"&gt;while&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;stop_reason&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tool_use&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;run_tool&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;send_tool_result&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agent SDK đã đóng gói vòng lặp, quản lý context và tool execution.&lt;/p&gt;

&lt;p&gt;Các thành phần quan trọng:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Built-in tools&lt;/strong&gt;: Read, Write, Edit, Bash, Glob, Grep, WebSearch, WebFetch, Monitor, AskUserQuestion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hooks&lt;/strong&gt;: callback tại các điểm như &lt;code&gt;PreToolUse&lt;/code&gt;, &lt;code&gt;PostToolUse&lt;/code&gt;, &lt;code&gt;Stop&lt;/code&gt;, &lt;code&gt;SessionStart&lt;/code&gt;, &lt;code&gt;SessionEnd&lt;/code&gt;, &lt;code&gt;UserPromptSubmit&lt;/code&gt;. Dùng để audit, validate, log hoặc chặn hành vi.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subagents&lt;/strong&gt;: tạo agent chuyên biệt cho task phụ. Message có &lt;code&gt;parent_tool_use_id&lt;/code&gt; để trace.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP&lt;/strong&gt;: kết nối database, browser và API qua Model Context Protocol.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permissions&lt;/strong&gt;: phê duyệt trước tool an toàn, chặn tool nguy hiểm hoặc yêu cầu approval cho hành động nhạy cảm.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sessions&lt;/strong&gt;: lưu session ID, resume sau này hoặc branch để thử hướng khác. Trạng thái là JSONL trên filesystem của bạn.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vì vòng lặp chạy trong hạ tầng của bạn, SDK có thể đọc cấu hình Claude Code như:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.claude/skills/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;slash command&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;plugin&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SDK hỗ trợ xác thực qua Anthropic API, Amazon Bedrock, Claude Platform on AWS, Google Vertex AI và Azure AI Foundry. Điều này hữu ích nếu bạn muốn inference đi qua hợp đồng cloud hiện có.&lt;/p&gt;

&lt;p&gt;Nếu muốn bắt đầu bằng ví dụ thực hành, xem &lt;a href="http://apidog.com/blog/claude-agent-sdk-with-claude-plan-setup-guide?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn thiết lập Claude Agent SDK với một gói Claude&lt;/a&gt; và bài &lt;a href="http://apidog.com/blog/build-your-own-claude-code?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;xây dựng Claude Code của riêng bạn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Lưu ý về billing: từ ngày 15 tháng 6 năm 2026, việc sử dụng Agent SDK và &lt;code&gt;claude -p&lt;/code&gt; trên các gói đăng ký sẽ lấy từ một khoản tín dụng Agent SDK hàng tháng riêng, khác với giới hạn dùng Claude tương tác. Hãy kiểm tra điều khoản hiện tại trực tiếp từ Anthropic trước khi dự báo chi phí.&lt;/p&gt;

&lt;h2&gt;
  
  
  So sánh nhanh: Managed Agents vs Agent SDK
&lt;/h2&gt;

&lt;p&gt;Xem hàng chi phí như định hướng. Luôn xác nhận với &lt;a href="https://www.anthropic.com/pricing" rel="noopener noreferrer"&gt;trang giá của Anthropic&lt;/a&gt; và &lt;a href="https://platform.claude.com/docs/en/managed-agents/overview" rel="noopener noreferrer"&gt;tài liệu Managed Agents&lt;/a&gt;.&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;Claude Managed Agents&lt;/th&gt;
&lt;th&gt;Claude Agent SDK&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Nơi vòng lặp chạy&lt;/td&gt;
&lt;td&gt;Hạ tầng do Anthropic quản lý&lt;/td&gt;
&lt;td&gt;Process và hạ tầng của bạn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Giao diện&lt;/td&gt;
&lt;td&gt;REST API + SSE event stream&lt;/td&gt;
&lt;td&gt;Thư viện Python hoặc TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kiểm soát vòng lặp&lt;/td&gt;
&lt;td&gt;Cấu hình, điều khiển qua event&lt;/td&gt;
&lt;td&gt;Kiểm soát bằng code, hook, permission&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chi phí&lt;/td&gt;
&lt;td&gt;Token Claude + phí runtime theo giờ session hoạt động&lt;/td&gt;
&lt;td&gt;Token Claude + compute bạn tự vận hành&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ops burden&lt;/td&gt;
&lt;td&gt;Thấp hơn: không vận hành sandbox/session store/scaling&lt;/td&gt;
&lt;td&gt;Cao hơn: bạn vận hành service, sandbox, monitoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Observability&lt;/td&gt;
&lt;td&gt;Event log được lưu và có thể lấy lại&lt;/td&gt;
&lt;td&gt;Bạn tự instrument bằng hook/log/tracing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latency profile&lt;/td&gt;
&lt;td&gt;Phù hợp tác vụ async dài&lt;/td&gt;
&lt;td&gt;Kiểm soát gần dữ liệu và service nội bộ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data residency&lt;/td&gt;
&lt;td&gt;Sandbox và session state ở Anthropic hoặc AWS option&lt;/td&gt;
&lt;td&gt;File, state và tool execution ở hạ tầng của bạn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom tool&lt;/td&gt;
&lt;td&gt;Claude yêu cầu, app của bạn thực thi qua event&lt;/td&gt;
&lt;td&gt;Function Python/TypeScript trong process&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phù hợp nhất&lt;/td&gt;
&lt;td&gt;Agent async dài, muốn giảm hạ tầng&lt;/td&gt;
&lt;td&gt;Agent cần kiểm soát dữ liệu, quyền hạn, VPC&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Chi phí
&lt;/h3&gt;

&lt;p&gt;Managed Agents tính token Claude tiêu chuẩn cộng phí runtime cho thời gian session hoạt động. Nếu agent “suy nghĩ” trong một giờ, bạn có thể trả phí runtime cho khoảng thời gian đó.&lt;/p&gt;

&lt;p&gt;Agent SDK không có phí runtime Anthropic theo giờ, nhưng bạn trả tiền cho:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;server&lt;/li&gt;
&lt;li&gt;autoscaling&lt;/li&gt;
&lt;li&gt;sandbox&lt;/li&gt;
&lt;li&gt;queue/worker&lt;/li&gt;
&lt;li&gt;monitoring&lt;/li&gt;
&lt;li&gt;on-call&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rẻ hơn trên bảng giá không nhất thiết rẻ hơn khi tính cả vận hành.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gánh nặng vận hành
&lt;/h3&gt;

&lt;p&gt;Managed Agents loại bỏ nhiều phần khỏi trách nhiệm của bạn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sandbox&lt;/li&gt;
&lt;li&gt;session store&lt;/li&gt;
&lt;li&gt;scaling&lt;/li&gt;
&lt;li&gt;event history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SDK trao lại cho bạn toàn quyền kiểm soát, phù hợp khi agent phải chạy trong VPC cạnh database riêng tư hoặc service nội bộ.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nơi lưu trú dữ liệu
&lt;/h3&gt;

&lt;p&gt;Với SDK, tool execution và session state nằm trong hạ tầng của bạn; chỉ inference request đi đến Claude.&lt;/p&gt;

&lt;p&gt;Với Managed Agents, sandbox và event log nằm trong môi trường của Anthropic hoặc AWS option. Với dữ liệu regulated, đây thường là tiêu chí quyết định.&lt;/p&gt;

&lt;h3&gt;
  
  
  Observability
&lt;/h3&gt;

&lt;p&gt;Managed Agents cho bạn event log được lưu sẵn.&lt;/p&gt;

&lt;p&gt;SDK cho bạn hook để tự đưa event vào stack hiện có:&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="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;pre_tool_use_hook&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;tool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool_name&lt;/span&gt;
    &lt;span class="n"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool_input&lt;/span&gt;

    &lt;span class="n"&gt;audit_log&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;event&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;pre_tool_use&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="n"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;args&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;session_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;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;session_id&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="n"&gt;tool&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;refund_payment&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;PermissionError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Refund vượt ngưỡng cần human approval&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Cách kiểm thử API mà agent gọi
&lt;/h2&gt;

&lt;p&gt;Dù chọn Managed Agents hay Agent SDK, agent chỉ đáng tin cậy bằng các API và MCP server mà nó gọi.&lt;/p&gt;

&lt;p&gt;Một agent hoàn tiền có reasoning tốt nhưng gọi endpoint thanh toán không ổn định thì vẫn là agent không ổn định.&lt;/p&gt;

&lt;p&gt;Bạn nên kiểm thử ba lớp sau trước khi production.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Contract API
&lt;/h3&gt;

&lt;p&gt;Mọi tool mà agent gọi đều là API có schema. Hãy mock endpoint và xác nhận request/response shape.&lt;/p&gt;

&lt;p&gt;Ví dụ, agent hoàn tiền có thể kỳ vọng endpoint:&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 /refunds
Content-Type: application/json
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Request:&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;"transaction_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;"txn_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;"amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;49.99&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"duplicate_charge"&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;Response:&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;"refund_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;"ref_456"&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;"pending"&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;Nếu backend đổi &lt;code&gt;refund_id&lt;/code&gt; thành &lt;code&gt;id&lt;/code&gt;, agent có thể hỏng trong production. Contract test nên bắt lỗi này trước.&lt;/p&gt;

&lt;p&gt;Với &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ể mock service thanh toán hoặc ticketing, định nghĩa schema và chạy contract test theo lịch. Xem thêm hướng dẫn &lt;a href="http://apidog.com/blog/how-to-test-ai-agents-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;cách kiểm thử các tác nhân AI gọi API&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. MCP server
&lt;/h3&gt;

&lt;p&gt;Cả Managed Agents và Agent SDK đều có thể dùng MCP để kết nối tool bên ngoài. MCP server cũng là một service cần test:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tool có được liệt kê đúng không?&lt;/li&gt;
&lt;li&gt;Input schema có ổn định không?&lt;/li&gt;
&lt;li&gt;Output có cấu trúc không?&lt;/li&gt;
&lt;li&gt;Timeout được xử lý thế nào?&lt;/li&gt;
&lt;li&gt;Error path có trả JSON thay vì plain text không?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hãy kiểm thử MCP server trực tiếp trước khi gắn vào agent. Xem hướng dẫn &lt;a href="http://apidog.com/blog/mcp-server-testing-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;kiểm thử máy chủ MCP với Apidog&lt;/a&gt;. Apidog cũng có AI agent và A2A debugger để quan sát request/response do agent tạo ra.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Hành vi request của agent
&lt;/h3&gt;

&lt;p&gt;Agent gọi API khác người dùng:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;retry liên tục&lt;/li&gt;
&lt;li&gt;gọi cùng endpoint nhiều lần trong một vòng reasoning&lt;/li&gt;
&lt;li&gt;đọc partial data rồi gọi lại&lt;/li&gt;
&lt;li&gt;tạo request gần đúng nhưng sai schema&lt;/li&gt;
&lt;li&gt;gây “retry storm” khi timeout&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hãy replay traffic agent tạo ra đối với mock trước khi gọi service thật. Đây là nơi debugger request trực tiếp có giá trị: bạn phát hiện storm trong staging thay vì trong incident call.&lt;/p&gt;

&lt;p&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; để mock dependency, chạy contract test và debug luồng request của agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Khung ra quyết định
&lt;/h2&gt;

&lt;p&gt;Trả lời các câu hỏi sau theo thứ tự. Câu “có” mạnh đầu tiên thường chỉ ra lựa chọn phù hợp.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chọn Claude Managed Agents nếu
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Agent chạy dài hoặc async, từ vài phút đến vài giờ.&lt;/li&gt;
&lt;li&gt;Bạn không muốn vận hành task runner, sandbox và session store.&lt;/li&gt;
&lt;li&gt;Nhóm nhỏ, nhân sự vận hành là giới hạn chính.&lt;/li&gt;
&lt;li&gt;Bạn muốn event log được lưu sẵn.&lt;/li&gt;
&lt;li&gt;Data posture cho phép sandbox và session state nằm trong môi trường Anthropic hoặc AWS.&lt;/li&gt;
&lt;li&gt;Bạn chấp nhận trạng thái beta và một số tính năng cần research preview.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Chọn Claude Agent SDK nếu
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Agent phải chạy trong VPC của bạn.&lt;/li&gt;
&lt;li&gt;Agent cần truy cập database hoặc service nội bộ không public.&lt;/li&gt;
&lt;li&gt;Session state không được rời khỏi hạ tầng công ty.&lt;/li&gt;
&lt;li&gt;Bạn cần hook để audit, policy, approval hoặc chặn tool.&lt;/li&gt;
&lt;li&gt;Bạn cần custom permission chi tiết.&lt;/li&gt;
&lt;li&gt;Bạn muốn inference đi qua Bedrock, Vertex hoặc Azure contract hiện có.&lt;/li&gt;
&lt;li&gt;Bạn đang prototype local và muốn agent thao tác trực tiếp trên filesystem.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Lộ trình phổ biến
&lt;/h3&gt;

&lt;p&gt;Một cách làm thực tế:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Prototype local bằng Agent SDK.&lt;/li&gt;
&lt;li&gt;Xác định tool, permission và API contract.&lt;/li&gt;
&lt;li&gt;Mock dependency và chạy test.&lt;/li&gt;
&lt;li&gt;Nếu workload async dài và yêu cầu data cho phép, chuyển sang Managed Agents cho production.&lt;/li&gt;
&lt;li&gt;Nếu cần VPC/data residency, giữ Agent SDK và đầu tư vào vận hành.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Việc chuyển từ SDK sang Managed Agents không phải chỉ là đổi config. Bạn sẽ thay đổi interface, cách custom tool được thực thi và nơi lưu session state. Hãy coi đó là một migration project.&lt;/p&gt;

&lt;p&gt;Nếu bạn cũng so sánh mô hình hoặc coding agent, xem bài &lt;a href="http://apidog.com/blog/claude-vs-codex-comparison-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;so sánh Claude vs Codex năm 2026&lt;/a&gt;.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  1. Agent hoàn tiền thanh toán
&lt;/h3&gt;

&lt;p&gt;Một nhóm fintech muốn agent xử lý yêu cầu hoàn tiền:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Đọc ticket.&lt;/li&gt;
&lt;li&gt;Tra cứu giao dịch.&lt;/li&gt;
&lt;li&gt;Kiểm tra policy hoàn tiền.&lt;/li&gt;
&lt;li&gt;Gọi payment API.&lt;/li&gt;
&lt;li&gt;Ghi tóm tắt vào ticket.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Vì liên quan đến tiền, mọi API call cần contract test và audit log.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lựa chọn phù hợp: Claude Agent SDK.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lý do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agent nên chạy trong VPC cạnh service thanh toán.&lt;/li&gt;
&lt;li&gt;Session state không nên rời khỏi hạ tầng công ty.&lt;/li&gt;
&lt;li&gt;Hook &lt;code&gt;PreToolUse&lt;/code&gt; có thể enforce approval cho refund vượt ngưỡng.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ví dụ policy hook:&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="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;pre_tool_use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool_name&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;create_refund&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool_input&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;500&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&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;require_approval&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;reason&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;Refund vượt ngưỡng 500&lt;/span&gt;&lt;span class="sh"&gt;"&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&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;allow&lt;/span&gt;&lt;span class="sh"&gt;"&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 launch, nhóm nên:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mock payment API trong Apidog&lt;/li&gt;
&lt;li&gt;viết contract test cho refund và lookup&lt;/li&gt;
&lt;li&gt;replay ticket lịch sử&lt;/li&gt;
&lt;li&gt;kiểm tra agent có retry sai sau lỗi &lt;code&gt;504&lt;/code&gt; hay không&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Một lỗi phổ biến: refund thực tế đã thành công, nhưng agent retry vì nhận timeout. Đây là kiểu lỗi phải bắt bằng test trước production.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Agent phân loại ticket hỗ trợ async
&lt;/h3&gt;

&lt;p&gt;Một công ty SaaS nhận hàng ngàn ticket mỗi ngày và muốn agent:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Phân loại ticket.&lt;/li&gt;
&lt;li&gt;Kéo log liên quan.&lt;/li&gt;
&lt;li&gt;Soạn phản hồi.&lt;/li&gt;
&lt;li&gt;Resolve hoặc escalate.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Mỗi ticket mất vài phút, chạy liên tục cả ngày, dữ liệu có độ nhạy thấp.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lựa chọn phù hợp: Claude Managed Agents.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lý do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Workload async dài.&lt;/li&gt;
&lt;li&gt;Nhóm không muốn tự chạy worker autoscaling.&lt;/li&gt;
&lt;li&gt;Event log được lưu sẵn giúp trace theo từng ticket.&lt;/li&gt;
&lt;li&gt;Hạ tầng quản lý session và sandbox được giảm đáng kể.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tuy nhiên, API correctness vẫn là trách nhiệm của bạn. Nên mock logging API và MCP server ticketing trong Apidog để schema change không âm thầm làm giảm chất lượng phân loại.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Agent vận hành dữ liệu nội bộ sau firewall
&lt;/h3&gt;

&lt;p&gt;Một platform team muốn agent xử lý yêu cầu nội bộ như:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Khôi phục các phân vùng ETL bị lỗi ngày hôm qua.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agent cần:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Query job API nội bộ.&lt;/li&gt;
&lt;li&gt;Chạy script khắc phục.&lt;/li&gt;
&lt;li&gt;Báo cáo trạng thái.&lt;/li&gt;
&lt;li&gt;Ghi audit log.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Các API không public internet và dữ liệu nhạy cảm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lựa chọn phù hợp: Claude Agent SDK.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lý do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agent phải chạy nơi có thể truy cập service riêng tư.&lt;/li&gt;
&lt;li&gt;Session state không được nằm trong sandbox bên thứ ba.&lt;/li&gt;
&lt;li&gt;Hook SDK có thể ghi mọi lệnh vào audit pipeline hiện có.&lt;/li&gt;
&lt;li&gt;MCP server nội bộ có thể được kiểm thử riêng trước khi kết nối agent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Đây là trường hợp “chạy trong process của bạn” không còn là sở thích, mà là yêu cầu. Xem thêm bài &lt;a href="http://apidog.com/blog/ai-agents-new-api-consumers?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;các tác nhân AI là người tiêu dùng API mới&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checklist triển khai
&lt;/h2&gt;

&lt;p&gt;Dùng checklist này trước khi chọn runtime:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Agent có cần chạy trong VPC không?&lt;/li&gt;
&lt;li&gt;[ ] Session state có được phép nằm ngoài hạ tầng của bạn không?&lt;/li&gt;
&lt;li&gt;[ ] Tác vụ chạy vài giây, vài phút hay vài giờ?&lt;/li&gt;
&lt;li&gt;[ ] Bạn có đội vận hành sandbox/worker không?&lt;/li&gt;
&lt;li&gt;[ ] Bạn cần hook approval trước tool call không?&lt;/li&gt;
&lt;li&gt;[ ] Bạn cần audit log theo từng tool call không?&lt;/li&gt;
&lt;li&gt;[ ] Các API mà agent gọi đã có schema rõ ràng chưa?&lt;/li&gt;
&lt;li&gt;[ ] MCP server đã được test riêng chưa?&lt;/li&gt;
&lt;li&gt;[ ] Bạn đã mô phỏng timeout, retry và partial failure chưa?&lt;/li&gt;
&lt;li&gt;[ ] Bạn đã xác nhận pricing và trạng thái beta từ nguồn chính thức chưa?&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Quyết định giữa Managed Agents và Agent SDK thực chất là quyết định về vận hành và quản trị dữ liệu.&lt;/p&gt;

&lt;p&gt;Ghi nhớ các điểm chính:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Managed Agents lưu trữ vòng lặp và sandbox&lt;/strong&gt;; SDK chạy chúng trong process của bạn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chi phí là mô hình vận hành, không chỉ là giá token&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data residency thường quyết định lựa chọn&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nhóm nhỏ thường hưởng lợi nhiều từ runtime được quản lý&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent production cần test API và MCP dependency nghiêm túc&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prototype bằng SDK rồi chuyển sang Managed Agents là hợp lý&lt;/strong&gt;, nhưng migration không miễn phí.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Luôn kiểm tra pricing và beta status tại nguồn chính thức&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bước tiếp theo: trước khi kết nối agent với bất kỳ hệ thống customer-facing nào, hãy đưa API và MCP dependency vào kiểm 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; để mock endpoint, chạy contract test và debug request thực tế của agent.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Sự khác biệt cốt lõi giữa Claude Managed Agents và Claude Agent SDK là gì?
&lt;/h3&gt;

&lt;p&gt;Managed Agents là REST API được lưu trữ, nơi Anthropic chạy vòng lặp tác nhân và sandbox theo session. Bạn gửi event và nhận stream kết quả. Agent SDK là thư viện Python/TypeScript chạy vòng lặp trong process và hạ tầng của bạn.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Agent SDK có giống Claude Code SDK cũ không?
&lt;/h3&gt;

&lt;p&gt;Có. Claude Code SDK đã được đổi tên thành Claude Agent SDK để phản ánh phạm vi rộng hơn ngoài coding task. Vòng lặp tác nhân, built-in tool và quản lý context là cùng cơ chế cung cấp sức mạnh cho Claude Code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tùy chọn nào rẻ hơn?
&lt;/h3&gt;

&lt;p&gt;Phụ thuộc workload. Managed Agents tính token Claude cộng phí runtime cho thời gian session hoạt động. SDK không có phí runtime Anthropic theo giờ, nhưng bạn trả compute và vận hành. Luôn xác nhận trên trang giá của Anthropic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tôi có thể dùng MCP server với cả hai không?
&lt;/h3&gt;

&lt;p&gt;Có. Cả hai đều hỗ trợ Model Context Protocol. Vì vậy, bạn nên test MCP server trước khi kết nối với agent. Xem hướng dẫn &lt;a href="http://apidog.com/blog/mcp-server-testing-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;kiểm thử máy chủ MCP với Apidog&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Làm thế nào để giữ dữ liệu khách hàng không nằm trong hạ tầng Anthropic?
&lt;/h3&gt;

&lt;p&gt;Dùng Agent SDK và chạy vòng lặp trong môi trường của bạn. Với SDK, tool execution và session state nằm trên hạ tầng của bạn; chỉ inference request đi đến Claude. Với Managed Agents, sandbox và event log nằm trong môi trường Anthropic hoặc AWS option.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Managed Agents đã sẵn sàng cho production chưa?
&lt;/h3&gt;

&lt;p&gt;Managed Agents được ra mắt dưới dạng public beta vào tháng 4 năm 2026 và yêu cầu header &lt;code&gt;managed-agents-2026-04-01&lt;/code&gt;. Một số tính năng có thể cần research preview riêng. Hãy kiểm tra tài liệu hiện tại trước khi triển khai production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Làm thế nào để kiểm thử agent trước khi nó gọi API thật?
&lt;/h3&gt;

&lt;p&gt;Mock mọi API và MCP server mà agent gọi, viết contract test cho request/response schema, rồi replay traffic thực tế của agent đối với mock. Apidog hỗ trợ mock, contract test, AI agent và A2A debugger. Xem hướng dẫn &lt;a href="http://apidog.com/blog/how-to-test-ai-agents-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;cách kiểm thử các tác nhân AI gọi API&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tôi có thể bắt đầu với một lựa chọn rồi chuyển sang lựa chọn khác không?
&lt;/h3&gt;

&lt;p&gt;Có. Một lộ trình phổ biến là prototype bằng Agent SDK local rồi chuyển sang Managed Agents nếu workload production phù hợp. Nhưng đây không phải đổi config đơn giản: interface khác nhau, custom tool execution khác nhau và session state nằm ở nơi khác. Hãy lập kế hoạch như một migration project.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>So sánh Cursor Composer 2.5 với Opus 4.7 với GPT-5.5: Nên Dùng Mô Hình Lập Trình Nào?</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Tue, 19 May 2026 02:28:53 +0000</pubDate>
      <link>https://forem.com/sebbasstian/so-sanh-cursor-composer-25-voi-opus-47-voi-gpt-55-nen-dung-mo-hinh-lap-trinh-nao-52b3</link>
      <guid>https://forem.com/sebbasstian/so-sanh-cursor-composer-25-voi-opus-47-voi-gpt-55-nen-dung-mo-hinh-lap-trinh-nao-52b3</guid>
      <description>&lt;p&gt;Tuyên bố của Cursor về Composer 2.5 khá rõ: chất lượng mã hóa gần nhóm dẫn đầu với chi phí khoảng một phần mười. Để kiểm tra tuyên bố đó theo góc nhìn triển khai thực tế, bài viết này so sánh Composer 2.5 với Claude Opus 4.7 và GPT-5.5 trên bốn tiêu chí mà developer quan tâm: benchmark, tốc độ, chi phí và cách chọn mô hình cho workflow hằng ngày.&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;Nếu bạn muốn đọc toàn bộ thông tin nền về mô hình này, hãy bắt đầu với &lt;a href="http://apidog.com/blog/cursor-composer-2-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn Cursor Composer 2.5 của chúng tôi&lt;/a&gt;. Ở đây, trọng tâm là câu hỏi thực dụng hơn: với một codebase thật và ngân sách thật, mô hình nào nên được dùng mặc định?&lt;/p&gt;

&lt;h2&gt;
  
  
  Câu trả lời ngắn gọn
&lt;/h2&gt;

&lt;p&gt;Composer 2.5 không phải mô hình đứng đầu tuyệt đối trên mọi bảng xếp hạng. Điểm mạnh của nó là đưa bạn đến rất gần Opus 4.7 trong các tác vụ phần mềm thực tế, thường chỉ kém một hoặc hai điểm benchmark, nhưng với chi phí dưới một đô la cho mỗi tác vụ thay vì vài đô la.&lt;/p&gt;

&lt;p&gt;Với hầu hết team dùng AI agent để sửa bug, refactor, thêm tính năng nhỏ hoặc xử lý nhiều file mỗi ngày, đây là sự đánh đổi đáng chọn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dùng &lt;strong&gt;Composer 2.5&lt;/strong&gt; làm mặc định cho phần lớn tác vụ coding agent.&lt;/li&gt;
&lt;li&gt;Dùng &lt;strong&gt;Opus 4.7&lt;/strong&gt; khi cần chất lượng suy luận cao nhất và chi phí không phải vấn đề chính.&lt;/li&gt;
&lt;li&gt;Dùng &lt;strong&gt;GPT-5.5&lt;/strong&gt; khi workflow nặng về terminal, shell automation hoặc chuỗi lệnh dà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.amazonaws.com%2Fuploads%2Farticles%2F4hsvtl8zvzvp0mdqaafh.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.amazonaws.com%2Fuploads%2Farticles%2F4hsvtl8zvzvp0mdqaafh.png" alt="Composer 2.5 benchmark comparison" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Cursor công bố ba bộ thử nghiệm chính. Bảng dưới đây đặt Composer 2.5 cạnh Opus 4.7, GPT-5.5 và Composer 2 để thấy mức cải thiện:&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;Composer 2.5&lt;/th&gt;
&lt;th&gt;Opus 4.7&lt;/th&gt;
&lt;th&gt;GPT-5.5&lt;/th&gt;
&lt;th&gt;Composer 2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SWE-bench Đa ngôn ngữ&lt;/td&gt;
&lt;td&gt;79.8%&lt;/td&gt;
&lt;td&gt;80.5%&lt;/td&gt;
&lt;td&gt;77.8%&lt;/td&gt;
&lt;td&gt;73.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal-bench 2.0&lt;/td&gt;
&lt;td&gt;69.3%&lt;/td&gt;
&lt;td&gt;69.4%&lt;/td&gt;
&lt;td&gt;82.7%&lt;/td&gt;
&lt;td&gt;k.á&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CursorBench v3.1&lt;/td&gt;
&lt;td&gt;63.2%&lt;/td&gt;
&lt;td&gt;64.8% tối đa / 61.6% mặc định&lt;/td&gt;
&lt;td&gt;59.2% mặc định&lt;/td&gt;
&lt;td&gt;k.á&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Cách đọc bảng này trong thực tế:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. SWE-bench Đa ngôn ngữ gần như hòa
&lt;/h3&gt;

&lt;p&gt;SWE-bench Đa ngôn ngữ đo khả năng sửa lỗi GitHub thực tế trên nhiều ngôn ngữ. Composer 2.5 đạt 79,8%, chỉ kém Opus 4.7 0,7 điểm và vượt GPT-5.5.&lt;/p&gt;

&lt;p&gt;Điểm đáng chú ý hơn là bước nhảy từ Composer 2: từ 73,7% lên 79,8%. Nếu bạn từng dùng Composer 2, Composer 2.5 không chỉ là bản cập nhật nhỏ. Nó thuộc một lớp hiệu năng khác. Bạn có thể xem lại &lt;a href="http://apidog.com/blog/cursor-composer-2?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn Composer 2&lt;/a&gt; để thấy điểm xuất phát của phiên bản trước.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. CursorBench ưu tiên Composer 2.5 ở cấu hình mặc định
&lt;/h3&gt;

&lt;p&gt;Trên bộ tác vụ riêng của Cursor, Composer 2.5 đạt 63,2%, vượt Opus 4.7 ở cấu hình mặc định 61,6% và GPT-5.5 ở cấu hình mặc định 59,2%.&lt;/p&gt;

&lt;p&gt;Opus 4.7 chỉ vượt lên khi chạy ở cài đặt tối đa, đạt 64,8%. Đổi lại, cấu hình này thường đắt hơn và chậm hơn. Nếu bạn đang chọn mô hình mặc định cho team, cấu hình mặc định mới là dữ liệu gần với thực tế sử dụng hằng ngày hơn.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. GPT-5.5 thắng rõ trên Terminal-bench
&lt;/h3&gt;

&lt;p&gt;GPT-5.5 đạt 82,7% trên Terminal-bench 2.0, trong khi Composer 2.5 đạt 69,3%. Nếu công việc của bạn chủ yếu là:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;viết script shell,&lt;/li&gt;
&lt;li&gt;chạy chuỗi lệnh dài,&lt;/li&gt;
&lt;li&gt;tự động hóa CLI,&lt;/li&gt;
&lt;li&gt;debug môi trường build/test qua terminal,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;thì GPT-5.5 có lợi thế rõ ràng.&lt;/p&gt;

&lt;p&gt;Để kiểm tra nguồn số liệu, bạn có thể đọc thêm &lt;a href="https://the-decoder.com/cursors-composer-2-5-matches-opus-4-7-and-gpt-5-5-benchmarks-at-a-fraction-of-the-cost/" rel="noopener noreferrer"&gt;bài viết của The Decoder&lt;/a&gt; và &lt;a href="https://cursor.com/blog/composer-2-5" rel="noopener noreferrer"&gt;thông báo chính thức về Cursor Composer 2.5&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chi phí: khác biệt lớn nhất nằm ở đây
&lt;/h2&gt;

&lt;p&gt;Benchmark chỉ chênh nhau một hoặc hai điểm. Nhưng khi nhân lên hàng trăm hoặc hàng nghìn tác vụ mỗi tháng, chi phí mới là yếu tố quyết định.&lt;/p&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 / M token&lt;/th&gt;
&lt;th&gt;Đầu ra / M token&lt;/th&gt;
&lt;th&gt;Chi phí ước tính cho mỗi tác vụ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Composer 2.5 tiêu chuẩn&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;td&gt;$2.50&lt;/td&gt;
&lt;td&gt;Dưới $1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Composer 2.5 nhanh&lt;/td&gt;
&lt;td&gt;$3.00&lt;/td&gt;
&lt;td&gt;$15.00&lt;/td&gt;
&lt;td&gt;Vài đô la, nhưng vẫn ở mức thấp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Opus 4.7 / GPT-5.5&lt;/td&gt;
&lt;td&gt;Cấp độ tiên tiến&lt;/td&gt;
&lt;td&gt;Cấp độ tiên tiến&lt;/td&gt;
&lt;td&gt;Vài đô la, có thể lên đến khoảng $11&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Cursor báo cáo Composer 2.5 đạt khoảng 63% trên CursorBench với chi phí trung bình dưới 1 đô la cho mỗi tác vụ. Trong khi đó, Opus 4.7 và GPT-5.5 có thể tốn vài đô la cho mỗi tác vụ với kết quả tương tự hoặc chỉ nhỉnh hơn trong một số tình huống.&lt;/p&gt;

&lt;p&gt;Ví dụ đơn giản:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Khối lượng&lt;/th&gt;
&lt;th&gt;Chi phí / tác vụ&lt;/th&gt;
&lt;th&gt;Tổng chi phí / tháng&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2.000 tác vụ agent&lt;/td&gt;
&lt;td&gt;$1&lt;/td&gt;
&lt;td&gt;~$2.000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.000 tác vụ agent&lt;/td&gt;
&lt;td&gt;$5&lt;/td&gt;
&lt;td&gt;~$10.000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.000 tác vụ agent&lt;/td&gt;
&lt;td&gt;$11&lt;/td&gt;
&lt;td&gt;~$22.000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Với cùng khối lượng công việc, khoảng cách benchmark có thể chỉ là một điểm, nhưng khoảng cách hóa đơn có thể là một bậc độ lớn. Vì vậy, câu hỏi thực tế không phải là “mô hình nào đứng đầu bảng?”, mà là “mô hình nào đủ tốt để dùng mặc định với chi phí hợp lý?”.&lt;/p&gt;

&lt;p&gt;Để hiểu sâu hơn về cách Cursor tính chi phí này, xem &lt;a href="http://apidog.com/blog/cursor-composer-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn định giá Cursor Composer&lt;/a&gt;. Với các mô hình tiên tiến, bạn có thể tham khảo thêm &lt;a href="http://apidog.com/blog/gpt-5-5-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;bài viết về định giá GPT-5.5&lt;/a&gt; và &lt;a href="http://apidog.com/blog/claude-opus-4-7?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn Claude Opus 4.7&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tốc độ và hành vi khi dùng trong workflow coding
&lt;/h2&gt;

&lt;p&gt;Chất lượng benchmark và giá chưa đủ để chọn mô hình. Bạn cũng cần xem cách mỗi mô hình hoạt động trong vòng lặp phát triển.&lt;/p&gt;

&lt;h3&gt;
  
  
  Composer 2.5
&lt;/h3&gt;

&lt;p&gt;Composer 2.5 được tối ưu cho tác vụ agent dài trong Cursor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;xử lý nhiều file,&lt;/li&gt;
&lt;li&gt;giữ ngữ cảnh qua nhiều bước,&lt;/li&gt;
&lt;li&gt;điều chỉnh mức nỗ lực theo yêu cầu,&lt;/li&gt;
&lt;li&gt;phù hợp với vòng lặp “đọc code → sửa code → chạy test → chỉnh tiếp”.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Phiên bản nhanh giữ cùng mức thông minh nhưng giảm độ trễ, phù hợp khi bạn cần phản hồi nhanh hơn.&lt;/p&gt;

&lt;h3&gt;
  
  
  Opus 4.7
&lt;/h3&gt;

&lt;p&gt;Opus 4.7 mạnh nhất ở các tác vụ suy luận khó, đặc biệt khi bật cấu hình tối đa. Đổi lại, bạn thường phải chấp nhận:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;chi phí cao hơn,&lt;/li&gt;
&lt;li&gt;độ trễ lớn hơn,&lt;/li&gt;
&lt;li&gt;ít phù hợp hơn để chạy mọi tác vụ nhỏ trong ngày nếu ngân sách bị giới hạn.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  GPT-5.5
&lt;/h3&gt;

&lt;p&gt;GPT-5.5 nổi bật ở workflow terminal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;chuỗi lệnh shell dài,&lt;/li&gt;
&lt;li&gt;debug CLI,&lt;/li&gt;
&lt;li&gt;automation script,&lt;/li&gt;
&lt;li&gt;xử lý môi trường build phức tạp.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu phần lớn công việc của bạn nằm trong terminal thay vì chỉnh sửa nhiều file trong IDE, GPT-5.5 đáng được ưu tiên hơn.&lt;/p&gt;

&lt;p&gt;Composer 2.5 được xây dựng trên checkpoint Moonshot Kimi K2.5 mã nguồn mở và được Cursor hậu huấn luyện kỹ cho workflow agent. Trong khi đó, Opus 4.7 và GPT-5.5 là các mô hình tiên tiến đa năng có năng lực coding mạnh. Khác biệt này thể hiện rõ khi làm việc trong Cursor: Composer 2.5 được điều chỉnh cụ thể cho vòng lặp biên tập-agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nên chọn mô hình nào?
&lt;/h2&gt;

&lt;p&gt;Thay vì xem đây là bảng xếp hạng tuyệt đối, hãy dùng nó như ma trận quyết định.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chọn Composer 2.5 nếu
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bạn dùng Cursor hằng ngày.&lt;/li&gt;
&lt;li&gt;Bạn có nhiều tác vụ coding agent mỗi tháng.&lt;/li&gt;
&lt;li&gt;Bạn cần sửa bug, thêm tính năng nhỏ, refactor hoặc chỉnh nhiều file.&lt;/li&gt;
&lt;li&gt;Bạn muốn chất lượng gần nhóm dẫn đầu nhưng chi phí thấp hơn đáng kể.&lt;/li&gt;
&lt;li&gt;Bạn đang tìm mô hình mặc định cho team.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Với phần lớn team phần mềm, đây là lựa chọn mặc định hợp lý nhất.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chọn Opus 4.7 nếu
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bạn cần điểm số cao nhất cho các bài toán suy luận khó.&lt;/li&gt;
&lt;li&gt;Chi phí không phải yếu tố chính.&lt;/li&gt;
&lt;li&gt;Bạn đã có workflow tập trung vào Claude.&lt;/li&gt;
&lt;li&gt;Bạn chỉ dùng mô hình cao cấp cho một số tác vụ phức tạp.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu bạn đang so sánh hệ sinh thái Claude và Cursor, xem thêm &lt;a href="http://apidog.com/blog/claude-code-vs-cursor-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;so sánh Claude Code và Cursor&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chọn GPT-5.5 nếu
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Công việc chính của bạn là terminal automation.&lt;/li&gt;
&lt;li&gt;Bạn thường yêu cầu mô hình tạo và chạy chuỗi lệnh dài.&lt;/li&gt;
&lt;li&gt;Bạn cần một mô hình đa năng kiêm luôn mô hình coding.&lt;/li&gt;
&lt;li&gt;Bạn ưu tiên Terminal-bench hơn CursorBench.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Chiến lược thực tế cho team
&lt;/h3&gt;

&lt;p&gt;Một cấu hình hợp lý cho nhiều team là:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Mặc định: Composer 2.5
Tác vụ suy luận rất khó: Opus 4.7
Tác vụ terminal/shell automation: GPT-5.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cách này giúp bạn kiểm soát chi phí mà vẫn có đường thoát cho những bài toán cần mô hình mạnh hơn. Nếu bạn vẫn đang chọn công cụ coding agent, &lt;a href="http://apidog.com/blog/codex-vs-claude-code-vs-cursor-vs-copilot?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;bài tổng hợp Codex vs Claude Code vs Cursor vs Copilot&lt;/a&gt; sẽ cho bạn bức tranh rộng hơn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cách tự benchmark trên codebase của bạn
&lt;/h2&gt;

&lt;p&gt;Benchmark công khai chỉ cho biết mức trung bình. Codebase của bạn có conventions, test suite, API contract và technical debt riêng. Vì vậy, hãy chạy một phép thử nhỏ trước khi chọn mô hình mặc định.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 1: Chọn một tác vụ thật
&lt;/h3&gt;

&lt;p&gt;Chọn một tác vụ mà bạn thường giao cho AI agent, ví dụ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sửa một bug có bước tái tạo rõ ràng,&lt;/li&gt;
&lt;li&gt;thêm một endpoint nhỏ,&lt;/li&gt;
&lt;li&gt;refactor một module có test,&lt;/li&gt;
&lt;li&gt;cập nhật SDK/client theo thay đổi API,&lt;/li&gt;
&lt;li&gt;thêm validation hoặc error handling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tránh dùng task quá giả lập. Mục tiêu là đo hiệu năng trên công việc mà team thật sự làm.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 2: Viết một prompt cố định
&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;Bạn đang làm việc trong codebase hiện tại.

Nhiệm vụ:
- Sửa lỗi khi endpoint GET /users/:id trả về 500 nếu user không tồn tại.
- Thay vì 500, API phải trả về 404 với JSON body:
  { "error": "USER_NOT_FOUND" }

Yêu cầu:
- Tìm vị trí xử lý request hiện tại.
- Sửa code tối thiểu.
- Cập nhật hoặc thêm test liên quan.
- Không thay đổi public API khác.
- Sau khi sửa, chạy test phù hợp và báo lại kết quả.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dùng cùng prompt này cho cả ba mô hình để kết quả công bằng hơn.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 3: Chạy lần lượt trong Cursor
&lt;/h3&gt;

&lt;p&gt;Chạy cùng tác vụ ba lần, chỉ đổi model selector:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer-2.5
Opus 4.7
GPT-5.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Giữ nguyên:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;prompt,&lt;/li&gt;
&lt;li&gt;branch hoặc trạng thái repo,&lt;/li&gt;
&lt;li&gt;test command,&lt;/li&gt;
&lt;li&gt;dữ liệu đầu vào,&lt;/li&gt;
&lt;li&gt;thời điểm đánh giá.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu có thể, reset repo về cùng commit trước mỗi lần chạy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 4: Chấm điểm bằng tiêu chí thực tế
&lt;/h3&gt;

&lt;p&gt;Tạo bảng đánh giá đơn giản:&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;Composer 2.5&lt;/th&gt;
&lt;th&gt;Opus 4.7&lt;/th&gt;
&lt;th&gt;GPT-5.5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Code có compile không?&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test có pass không?&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Có sửa đúng phạm vi không?&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Có tạo bug phụ không?&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thời gian hoàn thành&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chi phí trong Cursor usage&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cần bao nhiêu lần can thiệp thủ công?&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Đừng chỉ đo “có sinh code không”. Hãy đo “code đó có thể merge được không”.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 5: Nếu task liên quan đến API, xác minh bằng request thật
&lt;/h3&gt;

&lt;p&gt;Nếu agent tạo hoặc sửa API, hãy gửi request thật 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; thay vì chỉ dựa vào unit test.&lt;/p&gt;

&lt;p&gt;Ví dụ checklist:&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 đúng
[ ] Response body đúng schema
[ ] Error case đúng
[ ] Auth header được xử lý đúng
[ ] Query/path params đúng
[ ] Contract không lệch với tài liệu API
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Điều này giúp “test pass” có nghĩa là endpoint thật sự trả về dữ liệu như code mong đợi, không chỉ là mock hoặc unit test xanh.&lt;/p&gt;

&lt;h2&gt;
  
  
  Điểm benchmark thường bỏ lỡ: API contract
&lt;/h2&gt;

&lt;p&gt;Có một lỗi phổ biến mà benchmark không phản ánh đầy đủ: mô hình viết code API trông rất tự tin nhưng dựa trên endpoint mà nó tự suy đoán, không phải endpoint thật sự tồn tại.&lt;/p&gt;

&lt;p&gt;Vấn đề này có thể xảy ra với cả:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Composer 2.5,&lt;/li&gt;
&lt;li&gt;Opus 4.7,&lt;/li&gt;
&lt;li&gt;GPT-5.5.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ví dụ prompt mơ hồ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Thêm logic gọi API lấy thông tin user profile.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nếu không có API spec thật, mô hình có thể tự tạo ra endpoint kiể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;GET /api/profile/:userId
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Trong khi hệ thống thật dùng:&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 /v2/users/{id}/profile
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Code sinh ra có thể sạch, dễ đọc và compile được, nhưng vẫn sai.&lt;/p&gt;

&lt;p&gt;Cách xử lý không phụ thuộc vào mô hình bạn chọn:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cung cấp API specification thật cho Cursor.&lt;/li&gt;
&lt;li&gt;Cho mô hình coding dựa trên schema thực tế.&lt;/li&gt;
&lt;li&gt;Chạy request được tạo 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;/li&gt;
&lt;li&gt;Xác minh status code, payload, auth và validation trước khi merge.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Bạn có thể thiết lập API spec trong Cursor thông qua MCP theo &lt;a href="http://apidog.com/blog/connect-api-specifications-mcp-cursor?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn về thông số kỹ thuật API trong Cursor&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Mô hình bạn chọn ảnh hưởng đến tốc độ và chi phí. Nhưng vòng lặp xác minh mới là thứ ngăn tốc độ đó biến thành nợ debug.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflow đề xuất cho tác vụ API với Cursor và Apidog
&lt;/h2&gt;

&lt;p&gt;Một workflow thực tế có thể như sau:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Đồng bộ API spec vào Apidog.
2. Kết nối spec với Cursor qua MCP.
3. Yêu cầu model sửa hoặc tạo code dựa trên spec.
4. Chạy test trong repo.
5. Gửi request thật bằng Apidog.
6. Nếu response lệch schema, đưa lỗi ngược lại cho model.
7. Chỉ merge khi test và request thật đều pass.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prompt mẫu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dựa trên API specification đã kết nối qua MCP, hãy thêm client method gọi endpoint tạo order.

Yêu cầu:
- Không tự suy đoán endpoint.
- Dùng đúng method, path, request body và response schema từ spec.
- Thêm test cho success case và validation error.
- Sau khi sửa, liệt kê các request cần kiểm tra trong Apidog.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Với prompt này, bạn giảm khả năng mô hình “bịa” API và buộc nó bám vào contract thật.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Composer 2.5 có tốt hơn Opus 4.7 không?
&lt;/h3&gt;

&lt;p&gt;Không phải trong mọi trường hợp. Trên SWE-bench Đa ngôn ngữ, Composer 2.5 đạt 79,8%, chỉ kém Opus 4.7 ở mức 80,5%. Trên CursorBench cấu hình mặc định, Composer 2.5 nhỉnh hơn Opus 4.7. Opus 4.7 chỉ dẫn đầu khi chạy ở cài đặt tối đa.&lt;/p&gt;

&lt;p&gt;Nếu xét giá trị trên mỗi đô la, Composer 2.5 phù hợp hơn cho phần lớn workload hằng ngày.&lt;/p&gt;

&lt;h3&gt;
  
  
  Composer 2.5 có tốt hơn GPT-5.5 không?
&lt;/h3&gt;

&lt;p&gt;Composer 2.5 vượt GPT-5.5 trên SWE-bench Đa ngôn ngữ và CursorBench. Nhưng GPT-5.5 thắng rõ trên Terminal-bench 2.0.&lt;/p&gt;

&lt;p&gt;Nếu bạn làm việc chủ yếu trong Cursor với nhiều file và agent task, Composer 2.5 là lựa chọn tốt hơn. Nếu bạn làm nhiều terminal automation, GPT-5.5 đáng cân nhắc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vì sao Composer 2.5 rẻ hơn nhiều?
&lt;/h3&gt;

&lt;p&gt;Composer 2.5 được xây dựng trên nền tảng Kimi K2.5 mã nguồn mở và được tinh chỉnh cho vòng lặp agent của Cursor. Điều này giúp Cursor kiểm soát chi phí tốt hơn. Các mô hình tiên tiến đa năng như Opus 4.7 và GPT-5.5 thường đi kèm mức giá cao hơn.&lt;/p&gt;

&lt;h3&gt;
  
  
  Có thể dùng cả ba mô hình trong Cursor không?
&lt;/h3&gt;

&lt;p&gt;Có. Model selector của Cursor cho phép bạn đổi mô hình theo từng tác vụ. Đây là lý do chiến lược kết hợp rất thực tế: dùng Composer 2.5 cho phần lớn tác vụ, rồi chuyển sang Opus 4.7 hoặc GPT-5.5 khi bài toán phù hợp hơn. Xem &lt;a href="http://apidog.com/blog/cursor-composer-2-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn Cursor Composer 2.5&lt;/a&gt; để thiết lập.&lt;/p&gt;

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

&lt;p&gt;Nếu chỉ nhìn vào đỉnh benchmark, Opus 4.7 và GPT-5.5 đều có điểm mạnh rõ ràng. Nhưng nếu bạn đo chất lượng trên mỗi đô la cho tác vụ phần mềm thực tế, Composer 2.5 là mô hình nên được dùng mặc định trong nhiều team.&lt;/p&gt;

&lt;p&gt;Cách chọn thự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;Composer 2.5: default cho coding agent hằng ngày
Opus 4.7: tác vụ suy luận khó, ngân sách ít quan trọng
GPT-5.5: terminal automation và chuỗi lệnh dài
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dù chọn mô hình nào, đừng để agent viết code dựa trên giả định API. Hãy gắn nó với contract thật và xác minh output bằng request thậ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 xuống Apidog&lt;/a&gt; để gửi request trực tiếp đến endpoint được tạo và đưa các lệnh gọi hoạt động vào test tự động.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cách xây dựng API với Cursor Composer 2.5</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Tue, 19 May 2026 02:27:09 +0000</pubDate>
      <link>https://forem.com/sebbasstian/cach-xay-dung-api-voi-cursor-composer-25-1hem</link>
      <guid>https://forem.com/sebbasstian/cach-xay-dung-api-voi-cursor-composer-25-1hem</guid>
      <description>&lt;p&gt;Cursor Composer 2.5 đủ nhanh và rẻ để một tác nhân có thể viết client API và kết nối luồng xử lý cho bạn. Nhưng nếu mô hình không đọc hợp đồng API thực tế, nó có thể tạo request tới &lt;code&gt;/v2/orders&lt;/code&gt; trong khi service của bạn chỉ có &lt;code&gt;/orders&lt;/code&gt;, hoặc dùng payload sai. Code vẫn compile, nhưng lỗi chỉ lộ ra khi chạy với backend thật.&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;Bài viết này hướng dẫn workflow thực tế: kết nối Composer 2.5 với spec API thật thông qua MCP, để nó sinh code theo hợp đồng hiện có, rồi xác minh request 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; trước khi gửi cho team. Nếu bạn mới dùng mô hình này, xem thêm &lt;a href="http://apidog.com/blog/cursor-composer-2-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn về Cursor Composer 2.5&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vì sao mô hình tác nhân hay đoán sai API
&lt;/h2&gt;

&lt;p&gt;Composer 2.5 được thiết kế cho tác vụ tác nhân dài, nhiều bước. Bạn có thể yêu cầu:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Thêm client cho service thanh toán và kết nối nó vào luồng checkout.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Mô hình sẽ lập kế hoạch, chỉnh sửa nhiều file và chạy test. Đây là nâng cấp hữu ích so với &lt;a href="http://apidog.com/blog/cursor-composer-2?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Composer 2&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Vấn đề là: nếu spec API không nằm trong ngữ cảnh, mô hình sẽ tự suy luận dựa trên các pattern phổ biến:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Endpoint gần đúng: &lt;code&gt;/api/users/{id}&lt;/code&gt; thay vì &lt;code&gt;/users/{userId}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Body request có field thừa, thiếu hoặc sai tên&lt;/li&gt;
&lt;li&gt;Auth được xử lý theo kiểu chung chung thay vì theo schema thật&lt;/li&gt;
&lt;li&gt;Error response được giả định thay vì đọc từ spec&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Prompt có thể giảm lỗi, nhưng dán toàn bộ OpenAPI vào chat không ổn định và tốn context. Cách bền vững hơn là cho mô hình truy cập spec qua một nguồn có cấu trúc.&lt;/p&gt;

&lt;h2&gt;
  
  
  Giải pháp: cho Composer 2.5 đọc spec API qua MCP
&lt;/h2&gt;

&lt;p&gt;Model Context Protocol, hay MCP, là chuẩn mở để cung cấp tool và dữ liệu cho mô hình AI. Cursor hỗ trợ MCP server. &lt;a href="http://apidog.com/blog/connect-api-specifications-mcp-cursor?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog MCP server&lt;/a&gt; expose spec API trong Apidog dưới dạng nguồn có cấu trúc để Composer có thể truy vấn khi viết code.&lt;/p&gt;

&lt;p&gt;Thay vì đoán endpoint, parameter, schema và response, Composer 2.5 có thể đọc chúng từ hợp đồng thật. Đây cũng là ý tưởng trong &lt;a href="http://apidog.com/blog/vibe-coding-with-apidog-mcp-server?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;vibe coding với Apidog MCP server&lt;/a&gt;, nhưng áp dụng cho workflow triển khai tính năng hoàn chỉnh.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bước 1: Chuẩn bị spec API trong Apidog
&lt;/h2&gt;

&lt;p&gt;Trước tiên, đảm bảo API contract của bạn nằm trong Apidog và được cập nhật.&lt;/p&gt;

&lt;p&gt;Bạn có thể:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Thiết kế API trực tiếp trong Apidog.&lt;/li&gt;
&lt;li&gt;Import OpenAPI spec hiện có.&lt;/li&gt;
&lt;li&gt;Import Postman collection.&lt;/li&gt;
&lt;li&gt;Bổ sung request body, response schema, auth, header và ví dụ.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Spec này sẽ là nguồn chân lý cho Composer 2.5. Nếu spec sai hoặc lỗi thời, mô hình vẫn có thể sinh code sai theo đúng thông tin sai đó.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bước 2: Kết nối Apidog MCP server với Cursor
&lt;/h2&gt;

&lt;p&gt;Cursor đọc MCP server từ file cấu hình trong project, thường là:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.cursor/mcp.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Một cấu hình điển hình:&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;"mcpServers"&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;"apidog-api-spec"&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;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&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="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"apidog-mcp-server@latest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"--project=&amp;lt;your-project-id&amp;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;"env"&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;"APIDOG_ACCESS_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;"&amp;lt;your-access-token&amp;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;Thay các giá trị sau bằng thông tin thật:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;your-project-id&amp;gt;&lt;/code&gt;: ID project Apidog&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;your-access-token&amp;gt;&lt;/code&gt;: access token của bạn&lt;/li&gt;
&lt;li&gt;package/version server: dùng đúng theo &lt;a href="http://apidog.com/blog/connect-api-specifications-mcp-cursor?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 MCP&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sau khi lưu file, khởi động lại Cursor để nhận MCP server mới.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bước 3: Kiểm tra Composer 2.5 có đọc được spec không
&lt;/h2&gt;

&lt;p&gt;Mở một phiên agent trong Cursor, chọn &lt;code&gt;composer-2.5&lt;/code&gt;, rồi hỏi một câu chỉ đọc:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sử dụng MCP server apidog-api-spec, liệt kê các endpoint thuộc resource orders và các field bắt buộc để tạo order.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nếu Composer trả về endpoint, parameter và field đúng với project của bạn, kết nối đã hoạt động.&lt;/p&gt;

&lt;p&gt;Nếu nó trả lời chung chung kiểu REST phổ biến, hãy kiểm tra lại:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File &lt;code&gt;.cursor/mcp.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Tên MCP server&lt;/li&gt;
&lt;li&gt;Project ID&lt;/li&gt;
&lt;li&gt;Access token&lt;/li&gt;
&lt;li&gt;Cursor đã được restart chưa&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Bước 4: Yêu cầu Composer sinh code theo hợp đồng
&lt;/h2&gt;

&lt;p&gt;Khi MCP đã hoạt động, prompt nên chỉ rõ nguồn spec:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sử dụng MCP server apidog-api-spec làm nguồn chân lý.

Viết một TypeScript client được định kiểu cho Orders API, bao gồm:
- createOrder
- getOrder

Yêu cầu:
- Khớp chính xác request schema và response schema trong spec
- Dùng đúng endpoint và HTTP method
- Thêm xử lý lỗi cho response validation 422 mà spec định nghĩa
- Không tự tạo field ngoài spec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ví dụ output mong muốn có thể là một client dạng:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;CreateOrderRequest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;customerId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;productId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;quantity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&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="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;OrderResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;createdAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;createOrder&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;CreateOrderRequest&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;OrderResponse&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;res&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;/orders&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="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="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="nx"&gt;payload&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;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;422&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;errorBody&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;res&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="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Validation failed: &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="nx"&gt;errorBody&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="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="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Failed to create order: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&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="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&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;Tên field, endpoint và error shape trong code thực tế phải đến từ spec của bạn, không phải từ ví dụ trên.&lt;/p&gt;

&lt;h2&gt;
  
  
  Xác minh trước khi tin: vòng lặp kiểm thử với Apidog
&lt;/h2&gt;

&lt;p&gt;Cho mô hình đọc spec giúp giảm mạnh lỗi ảo giác, nhưng không thay thế kiểm thử. Spec có thể lệch so với service đang chạy, hoặc mô hình có thể xử lý sai một edge case.&lt;/p&gt;

&lt;p&gt;Workflow nên là:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sinh code từ spec&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Composer 2.5 đọc API contract qua MCP.&lt;/li&gt;
&lt;li&gt;Code được tạo theo endpoint, schema, auth và response thật.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Chạy request thật trong Apidog&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lấy endpoint mà Composer dùng.&lt;/li&gt;
&lt;li&gt;Gửi request 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;.&lt;/li&gt;
&lt;li&gt;Kiểm tra status code, response body, validation và auth.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Lưu request thành test&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Với request đã chạy đúng, lưu thành test scenario.&lt;/li&gt;
&lt;li&gt;Đưa vào quy trình regression để lỗi được phát hiện trước khi tới người dùng.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mock endpoint chưa triển khai&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nếu backend chưa sẵn sàng, dùng mock server của Apidog.&lt;/li&gt;
&lt;li&gt;Frontend/client vẫn có response thực tế để phát triển tiếp.&lt;/li&gt;
&lt;li&gt;Cách này phù hợp với các pattern trong &lt;a href="http://apidog.com/blog/ai-agents-api-testing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;AI agents và kiểm thử API&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nguyên tắc đơn giản: mô hình viết bản nháp đầu tiên dựa trên hợp đồng, còn bạn xác minh bản nháp đó với server thật hoặc mock đáng tin cậy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ví dụ workflow từ đầu đến cuối
&lt;/h2&gt;

&lt;p&gt;Giả sử bạn đang thêm tính năng hoàn tiền cho service thanh toán.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Spec đã có trong Apidog
&lt;/h3&gt;

&lt;p&gt;Trong project Apidog đã có:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Endpoint tạo refund&lt;/li&gt;
&lt;li&gt;Request body&lt;/li&gt;
&lt;li&gt;Response schema&lt;/li&gt;
&lt;li&gt;Header &lt;code&gt;idempotency-key&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Error khi refund trùng lặp&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Cursor đã kết nối Apidog MCP
&lt;/h3&gt;

&lt;p&gt;Bạn có &lt;code&gt;.cursor/mcp.json&lt;/code&gt; trỏ tới project Apidog và đã restart Cursor.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Prompt cho Composer 2.5
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sử dụng apidog-api-spec làm nguồn chân lý.

Xây dựng refund client và một React hook gọi client đó.

Yêu cầu:
- Tuân thủ chính xác schema trong spec
- Bao gồm header idempotency-key nếu spec yêu cầu
- Xử lý lỗi 409 khi refund bị trùng
- Thêm type cho request và response
- Chạy test hiện có sau khi chỉnh sửa
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Composer sinh code
&lt;/h3&gt;

&lt;p&gt;Composer có thể tạo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;refundClient.ts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;TypeScript types&lt;/li&gt;
&lt;li&gt;React hook như &lt;code&gt;useCreateRefund&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Test hoặc cập nhật test hiện có&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Xác minh trong Apidog
&lt;/h3&gt;

&lt;p&gt;Sau đó bạn mở Apidog và kiểm tra:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request tạo refund thành công&lt;/li&gt;
&lt;li&gt;Header &lt;code&gt;idempotency-key&lt;/code&gt; được gửi đúng&lt;/li&gt;
&lt;li&gt;Trường hợp trùng lặp trả về lỗi 409 như mong đợi&lt;/li&gt;
&lt;li&gt;Response body khớp với code đã xử lý&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu mọi thứ đúng, lưu các request này thành test scenario.&lt;/p&gt;

&lt;p&gt;Điều bạn tránh được là một client quên header idempotency, gây refund trùng trong staging. Đây là loại lỗi mà workflow “spec-driven generation + verification” xử lý tốt.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Composer 2.5 có hỗ trợ MCP không?
&lt;/h3&gt;

&lt;p&gt;Có. Composer 2.5 có thể dùng bộ công cụ agent của Cursor, bao gồm MCP server. Chọn &lt;code&gt;composer-2.5&lt;/code&gt; trong model picker và cấu hình MCP server trong project. Xem thêm &lt;a href="http://apidog.com/blog/cursor-composer-2-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn Composer 2.5&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tôi có bắt buộc phải dùng Apidog để dùng MCP với Composer 2.5 không?
&lt;/h3&gt;

&lt;p&gt;Bạn cần một nguồn spec có cấu trúc. &lt;a href="http://apidog.com/blog/connect-api-specifications-mcp-cursor?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog MCP server&lt;/a&gt; là hướng được dùng trong bài này vì nó kết hợp spec, testing và mocking trong cùng một nơi. Ngoài ra vẫn có các lựa chọn khác trong danh sách &lt;a href="http://apidog.com/blog/best-mcp-servers-for-cursor?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;MCP server tốt nhất cho Cursor&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Việc cho mô hình đọc spec có loại bỏ toàn bộ ảo giác không?
&lt;/h3&gt;

&lt;p&gt;Không hoàn toàn. Nó loại bỏ nhóm lỗi lớn nhất: endpoint, schema và parameter bị đoán sai. Nhưng bạn vẫn cần kiểm thử vì spec có thể không khớp hoàn toàn với service đang chạy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dự án nhỏ có cần workflow này không?
&lt;/h3&gt;

&lt;p&gt;Có, nếu mô hình đang viết code gọi API thật. Chi phí thiết lập chỉ là một file cấu hình, còn lợi ích là mỗi request được sinh ra dựa trên hợp đồng của bạn thay vì phỏng đoán.&lt;/p&gt;

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

&lt;p&gt;Composer 2.5 đủ mạnh để xử lý công việc API thực tế, nhưng chỉ đáng tin khi nó đọc hợp đồng thật. Kết nối spec qua Apidog MCP để Composer sinh code theo API contract, sau đó dù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; để gửi request, xác minh response và lưu các case hoạt động thành test hoặc mock. Đây là workflow giúp biến tốc độ của agent thành tính năng có thể triển khai.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Bitwarden Agent Access: Chia Sẻ Mật Khẩu An Toàn với AI Coding Agents</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Fri, 15 May 2026 08:12:55 +0000</pubDate>
      <link>https://forem.com/sebbasstian/bitwarden-agent-access-chia-se-mat-khau-an-toan-voi-ai-coding-agents-5e28</link>
      <guid>https://forem.com/sebbasstian/bitwarden-agent-access-chia-se-mat-khau-an-toan-voi-ai-coding-agents-5e28</guid>
      <description>&lt;p&gt;Nếu bạn dùng Claude Code, Codex hoặc Cursor để làm việc với API thật, vấn đề xuất hiện rất nhanh: tác nhân cần thông tin đăng nhập, còn trình quản lý mật khẩu của bạn được thiết kế để không để lộ chúng. Dán API key vào chat khiến nó nằm trong context của mô hình. Đặt secret vào &lt;code&gt;.env&lt;/code&gt; thì công cụ &lt;code&gt;bash&lt;/code&gt; của tác nhân vẫn có thể &lt;code&gt;cat&lt;/code&gt; và gửi nó đi. Cách đúng hơn là cấp secret theo phạm vi, tại runtime, và không đưa chúng vào context LLM.&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 hôm nay&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Dự án mã nguồn mở mới của Bitwarden, &lt;a href="https://github.com/bitwarden/agent-access" rel="noopener noreferrer"&gt;Agent Access&lt;/a&gt;, là một cách tiếp cận nghiêm túc cho bài toán này. Nó gồm một giao thức chia sẻ thông tin đăng nhập, CLI (&lt;code&gt;aac&lt;/code&gt;) và SDK Rust + Python để tạo đường hầm mã hóa giữa trình quản lý mật khẩu và một tiến trình từ xa: tác nhân AI, CI runner hoặc script.&lt;/p&gt;

&lt;p&gt;Ý tưởng chính: tác nhân chỉ nhận đúng credential cần dùng, theo domain hoặc vault item ID. Nó không thấy toàn bộ vault, không cần đọc &lt;code&gt;.env&lt;/code&gt;, và không cần bạn dán secret vào prompt.&lt;/p&gt;

&lt;p&gt;Bài viết này hướng dẫn cách cài đặt Agent Access, dùng &lt;code&gt;aac connect&lt;/code&gt;, dùng &lt;code&gt;aac run&lt;/code&gt;, và tích hợp nó vào workflow với Claude Code, Codex, Cursor và kiểm thử API bằng Apidog. Nếu bạn cần bối cảnh rộng hơn về hygiene cho API credential của AI agent, xem thêm &lt;a href="http://apidog.com/blog/secure-ai-agent-api-credentials?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách bảo mật thông tin đăng nhập API của tác nhân AI&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agent Access là gì?
&lt;/h2&gt;

&lt;p&gt;Agent Access là một giao thức mở kèm triển khai tham chiếu do Bitwarden xây dựng. Mục tiêu là để bất kỳ trình quản lý mật khẩu nào cũng có thể đóng vai trò provider.&lt;/p&gt;

&lt;p&gt;CLI &lt;code&gt;aac&lt;/code&gt; tạo đường hầm mã hóa đầu cuối bằng &lt;a href="https://noiseprotocol.org/" rel="noopener noreferrer"&gt;giao thức Noise&lt;/a&gt;. Mô hình gồm hai phía:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Provider&lt;/strong&gt;: lắng nghe request và quyết định credential nào được trả về.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consumer&lt;/strong&gt;: agent, script hoặc CI job cần credential để chạy một tác vụ.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Consumer có thể yêu cầu credential theo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;domain, ví dụ &lt;code&gt;github.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;vault item ID&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Consumer không thể liệt kê toàn bộ vault. Provider cũng không thấy consumer làm gì với credential sau khi cấp. Audit log tồn tại ở cả hai phía.&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.amazonaws.com%2Fuploads%2Farticles%2F6felrvem0ts4fxuk62us.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.amazonaws.com%2Fuploads%2Farticles%2F6felrvem0ts4fxuk62us.png" alt="Agent Access architecture" width="800" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hiện Agent Access vẫn ở giai đoạn &lt;strong&gt;xem trước ban đầu&lt;/strong&gt;. README của dự án cảnh báo rằng API và giao thức có thể thay đổi. Bitwarden cũng nói rõ rằng không nên nhập trực tiếp credential nhạy cảm vào LLM hoặc AI agent.&lt;/p&gt;

&lt;p&gt;Vì vậy, pattern nên dùng là: lấy secret tại runtime bằng &lt;code&gt;aac run&lt;/code&gt;, inject vào tiến trình con dưới dạng biến môi trường, và không để secret xuất hiện trong prompt hoặc log của agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tại sao điều này quan trọng?
&lt;/h2&gt;

&lt;p&gt;AI coding agent không còn chỉ sửa file. Claude Code, Codex, Cursor và các công cụ tương tự có thể:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;đọc repository&lt;/li&gt;
&lt;li&gt;chạy test&lt;/li&gt;
&lt;li&gt;gọi API&lt;/li&gt;
&lt;li&gt;tạo pull request&lt;/li&gt;
&lt;li&gt;chạy script deploy&lt;/li&gt;
&lt;li&gt;tương tác với CI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Các bước này thường cần credential. Nếu credential nằm trong &lt;code&gt;.env&lt;/code&gt;, shell history, log hoặc context LLM, rủi ro tăng rất nhanh.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://apidog.com/blog/postman-exposed-api-keys-audit-workspace?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Sự cố khóa API bị lộ của Postman&lt;/a&gt; cho thấy credential management đã khó ngay cả khi chỉ có con người thao tác. Khi thêm agent tự động vào workflow, cách tiếp cận cần chặt hơn.&lt;/p&gt;

&lt;p&gt;Nguyên tắc nên áp dụng:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Đừng tin agent nhiều hơn. Hãy đưa cho agent ít dữ liệu nhạy cảm hơn.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agent Access làm việc này ở cấp giao thức:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;credential được giới hạn phạm vi&lt;/li&gt;
&lt;li&gt;dữ liệu được mã hóa khi truyền&lt;/li&gt;
&lt;li&gt;secret được lấy tại runtime&lt;/li&gt;
&lt;li&gt;secret biến mất khi tiến trình kết thúc&lt;/li&gt;
&lt;li&gt;agent không cần nhìn thấy giá trị thật&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Các công cụ quản lý key truyền thống vẫn quan trọng. Xem thêm &lt;a href="http://apidog.com/blog/api-key-management-tools?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Công cụ quản lý khóa API&lt;/a&gt;. Điểm khác của Agent Access là nó được thiết kế trực tiếp cho use case agent và script runtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cài đặt &lt;code&gt;aac&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Chọn bản phù hợp với hệ điều hành của bạn.&lt;/p&gt;

&lt;h3&gt;
  
  
  macOS Apple Silicon
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-L&lt;/span&gt; https://github.com/bitwarden/agent-access/releases/latest/download/aac-macos-aarch64.tar.gz | &lt;span class="nb"&gt;tar &lt;/span&gt;xz
&lt;span class="nb"&gt;sudo mv &lt;/span&gt;aac /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  macOS Intel
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-L&lt;/span&gt; https://github.com/bitwarden/agent-access/releases/latest/download/aac-macos-x86_64.tar.gz | &lt;span class="nb"&gt;tar &lt;/span&gt;xz
&lt;span class="nb"&gt;sudo mv &lt;/span&gt;aac /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Linux x86_64
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-L&lt;/span&gt; https://github.com/bitwarden/agent-access/releases/latest/download/aac-linux-x86_64.tar.gz | &lt;span class="nb"&gt;tar &lt;/span&gt;xz
&lt;span class="nb"&gt;sudo mv &lt;/span&gt;aac /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows x86_64
&lt;/h3&gt;

&lt;p&gt;Tải &lt;code&gt;aac-windows-x86_64.zip&lt;/code&gt; từ &lt;a href="https://github.com/bitwarden/agent-access/releases" rel="noopener noreferrer"&gt;trang phát hành mới nhất&lt;/a&gt;, sau đó giải nén vào một thư mục nằm trong &lt;code&gt;PATH&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Kiểm tra cài đặt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nếu Bitwarden CLI (&lt;code&gt;bw&lt;/code&gt;) nằm trong &lt;code&gt;PATH&lt;/code&gt;, &lt;code&gt;aac&lt;/code&gt; sẽ dùng nó làm credential provider mặc định. Nếu chưa dùng Bitwarden CLI, bạn có thể thử nhanh với provider demo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac &lt;span class="nt"&gt;--provider&lt;/span&gt; example &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Quickstart: ghép nối và lấy credential
&lt;/h2&gt;

&lt;p&gt;Chạy listener trên máy chứa vault hoặc provider. Thường đây là laptop của bạn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac listen
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lệnh này sẽ in ra pairing token.&lt;/p&gt;

&lt;p&gt;Ở phía consumer — có thể là máy từ xa, CI runner, hoặc một terminal khác trên cùng máy — dùng token để kết nối và yêu cầu credential theo domain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac connect &lt;span class="nt"&gt;--token&lt;/span&gt; &amp;lt;pairing-token&amp;gt; &lt;span class="nt"&gt;--domain&lt;/span&gt; github.com &lt;span class="nt"&gt;--output&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output có dạ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;"credential"&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;"notes"&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="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"password"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alligator5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"totp"&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="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"uri"&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://github.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"username"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"example"&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;"domain"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"github.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"success"&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;Script của bạn có thể parse JSON này và dùng các field cần thiết.&lt;/p&gt;

&lt;p&gt;Nếu muốn lấy credential theo vault item ID thay vì domain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac connect &lt;span class="nt"&gt;--id&lt;/span&gt; &amp;lt;vault-item-id&amp;gt; &lt;span class="nt"&gt;--output&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lưu ý:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--id&lt;/code&gt; và &lt;code&gt;--domain&lt;/code&gt; loại trừ lẫn nhau&lt;/li&gt;
&lt;li&gt;nếu item có cấu hình TOTP, mã TOTP sẽ nằm trong cùng payload&lt;/li&gt;
&lt;li&gt;không nên in output này vào log CI nếu có chứa secret&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pattern nên dùng: &lt;code&gt;aac run&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;aac connect&lt;/code&gt; hữu ích khi bạn tự xử lý JSON. Nhưng với AI agent và CI, pattern an toàn hơn thường là &lt;code&gt;aac run&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aac run&lt;/code&gt; lấy credential rồi chạy tiến trình con với các field được inject dưới dạng biến môi trường. Secret không cần xuất ra stdout, không cần ghi vào disk, và không cần hiện trong prompt của agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inject field cụ thể
&lt;/h3&gt;

&lt;p&gt;Ví dụ inject &lt;code&gt;password&lt;/code&gt; và &lt;code&gt;username&lt;/code&gt; vào lệnh &lt;code&gt;psql&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;aac run &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--domain&lt;/span&gt; example.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;DB_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;password &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;DB_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;username &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--&lt;/span&gt; psql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Trong tiến trình &lt;code&gt;psql&lt;/code&gt;, bạn có thể đọ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="nv"&gt;$DB_PASSWORD&lt;/span&gt;
&lt;span class="nv"&gt;$DB_USER&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Inject tất cả field với prefix mặc định
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac run &lt;span class="nt"&gt;--domain&lt;/span&gt; example.com &lt;span class="nt"&gt;--env-all&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; ./deploy.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Các biến môi trường sẽ có prefix &lt;code&gt;AAC_&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kết hợp &lt;code&gt;--env-all&lt;/code&gt; và override tên biến
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac run &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--domain&lt;/span&gt; example.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--env-all&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;CUSTOM_PW&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;password &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--&lt;/span&gt; ./deploy.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Các field có thể map gồm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;username&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;password&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;totp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uri&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;notes&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;domain&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;credential_id&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Đây là model Bitwarden khuyến nghị cho AI agent. Thay vì đưa secret vào context LLM, bạn chỉ cho agent chạy script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac run &lt;span class="nt"&gt;--domain&lt;/span&gt; api.stripe.com &lt;span class="nt"&gt;--env-all&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; ./deploy.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agent nhìn thấy command, nhưng không nhìn thấy giá trị thật của secret. Secret chỉ tồn tại trong tiến trình con &lt;code&gt;deploy.sh&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Đây cũng là nguyên tắc cô lập được đề cập trong &lt;a href="http://apidog.com/blog/secure-ai-agent-api-credentials?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách bảo mật thông tin đăng nhập API của tác nhân AI&lt;/a&gt;, nhưng được triển khai bằng công cụ cụ thể.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dùng SDK Python và Rust
&lt;/h2&gt;

&lt;p&gt;Nếu CLI chưa đủ, bạn có thể tích hợp Agent Access trực tiếp vào ứng dụng.&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;from&lt;/span&gt; &lt;span class="n"&gt;agent_access&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;RemoteClient&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;RemoteClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;python-remote&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ABC-DEF-GHI&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;cred&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="nf"&gt;request_credential&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;example.com&lt;/span&gt;&lt;span class="sh"&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;cred&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cred&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Module Python được hỗ trợ bởi PyO3, nên phần xử lý giao thức vẫn chạy trên Rust và dùng cùng implementation Noise bên dưới.&lt;/p&gt;

&lt;p&gt;Trong ứng dụng thật, tránh &lt;code&gt;print()&lt;/code&gt; password như ví dụ demo. Hãy truyền credential trực tiếp vào client hoặc tiến trình cần dùng.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rust
&lt;/h3&gt;

&lt;p&gt;SDK Rust cung cấp interface &lt;code&gt;RemoteClient&lt;/code&gt; ở cấp thư viện. Các ví dụ tham chiếu nằm trong:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;examples/rust-remote/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dùng Rust SDK khi bạn đang viết:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CLI nội bộ&lt;/li&gt;
&lt;li&gt;build runner&lt;/li&gt;
&lt;li&gt;service cần binary đã biên dịch&lt;/li&gt;
&lt;li&gt;consumer chạy trong môi trường hạn chế&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Với các nhóm đã có hệ thống secrets enterprise, Agent Access có thể bổ sung cho các tích hợp như &lt;a href="http://apidog.com/blog/integrate-hashicorp-vault?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;HashiCorp Vault&lt;/a&gt; hoặc &lt;a href="http://apidog.com/blog/integrate-azure-key-vault?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Azure Key Vault&lt;/a&gt;. Nó không thay thế hoàn toàn vault doanh nghiệp, nhưng phù hợp cho laptop developer, script cục bộ và CI runner.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tích hợp với AI coding agent
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Claude Code
&lt;/h3&gt;

&lt;p&gt;Tạo một wrapper script để Claude Code gọi thay vì gọi deploy trực tiếp.&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;# deploy.sh&lt;/span&gt;
&lt;span class="c"&gt;#!/usr/bin/env bash&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-euo&lt;/span&gt; pipefail

aac run &lt;span class="nt"&gt;--domain&lt;/span&gt; prod.example.com &lt;span class="nt"&gt;--env-all&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; ./run-deploy.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cấp quyền thực thi:&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;chmod&lt;/span&gt; +x deploy.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sau đó hướng workflow Claude Code vào:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./deploy.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude Code chỉ thấy script và command &lt;code&gt;aac run&lt;/code&gt;. Credential thật chỉ xuất hiện trong tiến trình con &lt;code&gt;run-deploy.sh&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Với &lt;a href="http://apidog.com/blog/claude-code-github-actions?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Claude Code GitHub Actions&lt;/a&gt;, pattern tương tự có thể mở rộng sang CI:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;cài &lt;code&gt;aac&lt;/code&gt; trong runner&lt;/li&gt;
&lt;li&gt;ghép nối runner với provider&lt;/li&gt;
&lt;li&gt;chạy test hoặc deploy qua &lt;code&gt;aac run&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;không lưu API key trong repo hoặc prompt&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  OpenAI Codex
&lt;/h3&gt;

&lt;p&gt;Với Codex CLI, bạn cũng nên để model gọi wrapper script thay vì gọi trực tiếp công cụ cần secret.&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 shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# test-api.sh&lt;/span&gt;
&lt;span class="c"&gt;#!/usr/bin/env bash&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-euo&lt;/span&gt; pipefail

aac run &lt;span class="nt"&gt;--domain&lt;/span&gt; staging.example.com &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;API_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;password &lt;span class="nt"&gt;--&lt;/span&gt; ./run-api-tests.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Codex có thể chạy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./test-api.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nhưng không cần biết &lt;code&gt;API_TOKEN&lt;/code&gt; là gì.&lt;/p&gt;

&lt;p&gt;Bài viết &lt;a href="http://apidog.com/blog/openai-codex-from-your-phone?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Codex từ điện thoại của bạn&lt;/a&gt; nói về bề mặt sử dụng Codex rộng hơn. Agent Access giải quyết phần credential trong workflow đó.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cursor
&lt;/h3&gt;

&lt;p&gt;Với Cursor, pattern thực tế là wrap các lệnh terminal hoặc Composer workflow bằng &lt;code&gt;aac run&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 shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# local-contract-test.sh&lt;/span&gt;
&lt;span class="c"&gt;#!/usr/bin/env bash&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-euo&lt;/span&gt; pipefail

aac run &lt;span class="nt"&gt;--domain&lt;/span&gt; api.example.com &lt;span class="nt"&gt;--env-all&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; npm run &lt;span class="nb"&gt;test&lt;/span&gt;:contract
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vì Cursor thường chạy cục bộ, listener có thể chạy trên cùng máy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac listen
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sau đó script test hoặc deploy chạy như bình thường, nhưng secret không nằm trong &lt;code&gt;.env&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenClaw
&lt;/h3&gt;

&lt;p&gt;Agent Access có một &lt;strong&gt;kỹ năng OpenClaw&lt;/strong&gt; chính thức ngay từ đầu, dưới dạng file &lt;code&gt;SKILL.md&lt;/code&gt; trong repository. Nếu nhóm của bạn dùng workflow theo kiểu OpenClaw, đây là hướng tích hợp sẵn tốt nhất hiện tại.&lt;/p&gt;

&lt;p&gt;Kỹ năng biết cách:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;kết nối theo giao thức&lt;/li&gt;
&lt;li&gt;lấy credential&lt;/li&gt;
&lt;li&gt;chuyển credential cho tool downstream&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Xem thêm &lt;a href="http://apidog.com/blog/openclaw-api-keys?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Hướng dẫn khóa API OpenClaw&lt;/a&gt; để đặt Agent Access vào bối cảnh credential management rộng hơn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mô hình bảo mật
&lt;/h2&gt;

&lt;p&gt;Agent Access cung cấp ba điểm bảo vệ chính.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Mã hóa đầu cuối qua Noise
&lt;/h3&gt;

&lt;p&gt;Traffic giữa consumer và provider được mã hóa bằng &lt;a href="https://noiseprotocol.org/" rel="noopener noreferrer"&gt;Noise Protocol Framework&lt;/a&gt;, cùng lớp giao thức được dùng trong các hệ thống như WireGuard và Signal.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Credential được giới hạn phạm vi
&lt;/h3&gt;

&lt;p&gt;Consumer chỉ nhận credential mà nó yêu cầu:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;một domain&lt;/li&gt;
&lt;li&gt;hoặc một vault item ID&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nó không thể duyệt hoặc liệt kê toàn bộ vault.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Không cần ghi secret ra disk
&lt;/h3&gt;

&lt;p&gt;Với &lt;code&gt;aac run&lt;/code&gt;, secret được truyền vào tiến trình con qua biến môi trường. Không cần:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ghi &lt;code&gt;.env&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;in ra stdout&lt;/li&gt;
&lt;li&gt;lưu vào shell history&lt;/li&gt;
&lt;li&gt;dán vào prompt LLM&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Những gì Agent Access không giải quyết
&lt;/h2&gt;

&lt;p&gt;Agent Access không phải lớp bảo vệ tuyệt đối. Bạn vẫn cần hiểu các giới hạn sau.&lt;/p&gt;

&lt;h3&gt;
  
  
  Consumer bị xâm nhập
&lt;/h3&gt;

&lt;p&gt;Nếu agent hoặc tiến trình con độc hại, credential đã được cấp vẫn có thể bị rò rỉ. Phòng thủ ở đây là giảm phạm vi credential, không phải đảm bảo consumer luôn an toàn.&lt;/p&gt;

&lt;h3&gt;
  
  
  Provider bị xâm nhập
&lt;/h3&gt;

&lt;p&gt;Nếu vault Bitwarden hoặc provider của bạn bị compromise, Agent Access không thể bảo vệ secret gốc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dán secret vào LLM
&lt;/h3&gt;

&lt;p&gt;Nếu bạn copy credential vào chat, mọi lớp giao thức phía sau đều vô nghĩa. README của dự án nói rõ: không nhập trực tiếp credential nhạy cảm vào LLM hoặc AI agent.&lt;/p&gt;

&lt;p&gt;Dùng &lt;code&gt;aac run&lt;/code&gt; thay cho việc dán secret.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflow phổ biến: agent viết code, Apidog kiểm tra API
&lt;/h2&gt;

&lt;p&gt;Một workflow thực tế cho team API có thể như sau:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agent viết code&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Claude Code, Codex hoặc Cursor sửa endpoint và mở pull request.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CI chạy test&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Test runner gọi &lt;code&gt;aac run&lt;/code&gt; để lấy API key theo phạm vi, rồi chạy test trên staging.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Apidog xác minh contract&lt;/strong&gt;&lt;br&gt;&lt;br&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; chạy kiểm tra OpenAPI contract như một bước CI riêng, cũng thông qua &lt;code&gt;aac run&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ví dụ script CI:&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;#!/usr/bin/env bash&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-euo&lt;/span&gt; pipefail

aac run &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--domain&lt;/span&gt; staging.example.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;API_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;password &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--&lt;/span&gt; npm run &lt;span class="nb"&gt;test&lt;/span&gt;:contract
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;agent triển khai code&lt;/li&gt;
&lt;li&gt;contract API được kiểm tra&lt;/li&gt;
&lt;li&gt;secret không nằm trong repo&lt;/li&gt;
&lt;li&gt;secret không xuất hiện trong prompt&lt;/li&gt;
&lt;li&gt;secret không cần lưu trong &lt;code&gt;.env&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Xem thêm &lt;a href="http://apidog.com/blog/how-to-test-ai-agents-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách kiểm tra các tác nhân AI gọi API của bạn&lt;/a&gt; nếu bạn đang xây pipeline kiểm thử cho agent-driven API changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hạn chế cần biết
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Vẫn là bản preview&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
API và giao thức có thể thay đổi. Không nên khóa chặt production workflow vào v0 nếu bạn không có ngân sách bảo trì.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mặc định cần Bitwarden CLI&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Provider mặc định là &lt;code&gt;bw&lt;/code&gt;. Cài &lt;a href="https://bitwarden.com/help/cli/" rel="noopener noreferrer"&gt;Bitwarden CLI&lt;/a&gt; trước, hoặc dùng &lt;code&gt;--provider example&lt;/code&gt; để thử nghiệm.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Chưa có file cấu hình ổn định&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Hiện Agent Access chủ yếu được điều khiển bằng flag. Các workflow lặp lại nên được đóng gói trong script.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Không thay thế hygiene cơ bản&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Vẫn cần rotate key, dùng scope tối thiểu, không log secret, và không đưa secret vào prompt.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Agent Access có miễn phí không?
&lt;/h3&gt;

&lt;p&gt;Có. CLI, SDK và giao thức là mã nguồn mở trong GitHub organization của Bitwarden. Nếu dùng Bitwarden làm vault, chi phí Bitwarden phụ thuộc vào gói bạn đang sử dụng.&lt;/p&gt;

&lt;h3&gt;
  
  
  Có hoạt động với trình quản lý mật khẩu khác ngoài Bitwarden không?
&lt;/h3&gt;

&lt;p&gt;Giao thức được thiết kế để không phụ thuộc nhà cung cấp. Triển khai tham chiếu hiện hỗ trợ Bitwarden và provider ví dụ. Các provider khác có thể triển khai theo giao thức này trong tương lai.&lt;/p&gt;

&lt;h3&gt;
  
  
  Có thể dùng mà không cần trình quản lý mật khẩu không?
&lt;/h3&gt;

&lt;p&gt;Có, để thử nghiệm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac connect &lt;span class="nt"&gt;--provider&lt;/span&gt; example &lt;span class="nt"&gt;--domain&lt;/span&gt; test.com &lt;span class="nt"&gt;--output&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nhưng cho production, bạn cần provider thật như Bitwarden hoặc provider tương thích khác.&lt;/p&gt;

&lt;h3&gt;
  
  
  Consumer có cần truy cập mạng không?
&lt;/h3&gt;

&lt;p&gt;Có. Consumer cần truy cập network để kết nối tới listener của provider. Nếu chạy cục bộ, listener và consumer có thể nằm trên cùng một máy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Khác gì so với &lt;code&gt;.env&lt;/code&gt;?
&lt;/h3&gt;

&lt;p&gt;File &lt;code&gt;.env&lt;/code&gt; nằm trên disk, có thể bị commit nhầm, bị đọc bởi script, hoặc bị agent truy cập qua shell command.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aac run&lt;/code&gt; giữ secret trong phạm vi tiến trình con. Khi tiến trình thoát, secret cũng biến mất khỏi runtime đó.&lt;/p&gt;

&lt;h3&gt;
  
  
  Có thay thế HashiCorp Vault hoặc AWS Secrets Manager không?
&lt;/h3&gt;

&lt;p&gt;Không. Vault doanh nghiệp vẫn phù hợp cho service-to-service secrets ở quy mô lớn.&lt;/p&gt;

&lt;p&gt;Agent Access phù hợp hơn cho:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;laptop developer&lt;/li&gt;
&lt;li&gt;AI coding agent&lt;/li&gt;
&lt;li&gt;script cục bộ&lt;/li&gt;
&lt;li&gt;CI runner&lt;/li&gt;
&lt;li&gt;workflow cần cấp credential tạm thời theo phạm vi&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Anthropic, OpenAI hoặc các nhà cung cấp agent đã tích hợp trực tiếp chưa?
&lt;/h3&gt;

&lt;p&gt;Chưa có công bố chính thức. Cách tích hợp hiện tại là wrap script bằng &lt;code&gt;aac run&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Báo lỗi hoặc đóng góp ở đâu?
&lt;/h3&gt;

&lt;p&gt;Tại &lt;a href="https://github.com/bitwarden/agent-access" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;. Issue, PR và thảo luận giao thức đều diễn ra ở đó.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thử ngay
&lt;/h2&gt;

&lt;p&gt;Cài &lt;code&gt;aac&lt;/code&gt;, sau đó chạy listener:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac listen
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Trong terminal khác, thử provider demo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac connect &lt;span class="nt"&gt;--provider&lt;/span&gt; example &lt;span class="nt"&gt;--domain&lt;/span&gt; test.com &lt;span class="nt"&gt;--output&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nếu JSON trả về đúng, bạn đã có vòng lặp tối thiểu.&lt;/p&gt;

&lt;p&gt;Bước tiếp theo:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;thay provider demo bằng Bitwarden CLI (&lt;code&gt;bw&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;tạo wrapper script với &lt;code&gt;aac run&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;cho Claude Code, Codex hoặc Cursor gọi wrapper script&lt;/li&gt;
&lt;li&gt;bỏ thói quen dán API key vào prompt&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Kết hợp Agent Access với &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; cho phần kiểm thử API, bạn sẽ có ranh giới rõ ràng: vault giữ secret, Apidog kiểm tra contract, agent triển khai code, và credential không rời khỏi máy dưới dạng plain text.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>opensource</category>
      <category>security</category>
    </item>
    <item>
      <title>Top 7 Phần Mềm Quản Lý API Tốt Nhất 2026, Xếp Hạng Bởi G2</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Fri, 15 May 2026 07:40:58 +0000</pubDate>
      <link>https://forem.com/sebbasstian/top-7-phan-mem-quan-ly-api-tot-nhat-2026-xep-hang-boi-g2-2jj9</link>
      <guid>https://forem.com/sebbasstian/top-7-phan-mem-quan-ly-api-tot-nhat-2026-xep-hang-boi-g2-2jj9</guid>
      <description>&lt;p&gt;Bảng xếp hạng G2 Spring 2026 cho Quản lý API đã được công bố. Bảy công cụ được xếp vào ba nhóm: Dẫn đầu gồm Apidog và viaSocket; Hiệu suất cao gồm Traefik Labs, Rasayel và Backendless; Ngách gồm Moesif/WSO2 và Thunder Client. Điểm quan trọng không phải là công cụ nào “tốt nhất” nói chung, mà là công cụ nào khớp với cách nhóm của bạn thiết kế, kiểm thử, vận hành và đo lường API.&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;&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; và viaSocket dẫn đầu Bảng xếp hạng Quản lý API G2 Spring 2026, nhưng giải quyết hai bài toán khác nhau.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Apidog&lt;/strong&gt; phù hợp khi nhóm cần thiết kế API, viết test, tạo mock và xuất tài liệu trong cùng một workspace.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;viaSocket&lt;/strong&gt; phù hợp khi nhóm vận hành, marketing hoặc revenue cần tự động hóa workflow không mã bằng webhook và API hook.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Traefik Labs&lt;/strong&gt;, &lt;strong&gt;Rasayel&lt;/strong&gt;, &lt;strong&gt;Backendless&lt;/strong&gt;, &lt;strong&gt;Moesif (WSO2)&lt;/strong&gt; và &lt;strong&gt;Thunder Client&lt;/strong&gt; giải quyết các phạm vi hẹp hơn: gateway, WhatsApp Business API, BaaS, API analytics/monetization và REST client trong VS Code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cách chọn đúng: xác định trước “quản lý API” trong hệ thống của bạn nghĩa là gì — thiết kế, gateway, analytics, automation hay testing cục bộ.&lt;/p&gt;

&lt;h2&gt;
  
  
  Những tín hiệu từ Bảng xếp hạng G2 Spring 2026
&lt;/h2&gt;

&lt;p&gt;Các báo cáo Spring 2026 của G2 công bố 27.019 báo cáo vào ngày 17 tháng 3 năm 2026, tăng 1,72% theo quý. Theo Phó Chủ tịch Marketing Palmer Houchins, chỉ 3% sản phẩm trên G2 nhận được huy hiệu Dẫn đầu trên tất cả danh mục. Vì vậy, vị trí Dẫn đầu là một tín hiệu bên thứ ba đáng chú ý trong một thị trường mà nhiều nhà cung cấp đều tự nhận là “dẫn đầu ngành”.&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.amazonaws.com%2Fuploads%2Farticles%2F47547nvmgeb21mnxxsli.jpg" 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.amazonaws.com%2Fuploads%2Farticles%2F47547nvmgeb21mnxxsli.jpg" alt="G2 Spring 2026 API Management ranking" width="800" height="525"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;G2 sử dụng hai trục:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Mức độ hài lòng của khách hàng&lt;/strong&gt;: dựa trên đánh giá người dùng.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hiện diện thị trường&lt;/strong&gt;: quy mô, phạm vi tiếp cận và số lượng đánh giá.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Trong danh mục Quản lý API Spring 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dẫn đầu&lt;/strong&gt;: Apidog, viaSocket&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hiệu suất cao&lt;/strong&gt;: Traefik Labs, Rasayel, Backendless&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ngách&lt;/strong&gt;: Moesif/WSO2, Thunder Client&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tuy nhiên, nhóm xếp hạng không thay thế cho phân tích kỹ thuật. Một công cụ Ngách có thể là lựa chọn đúng nếu nó khớp với use case của bạn. Một công cụ Dẫn đầu vẫn có thể sai nếu nó giải quyết vấn đề bạn không gặp.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tổng quan bảy công cụ
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Công cụ&lt;/th&gt;
&lt;th&gt;Nhóm G2&lt;/th&gt;
&lt;th&gt;Phù hợp nhất&lt;/th&gt;
&lt;th&gt;Mã nguồn mở?&lt;/th&gt;
&lt;th&gt;Mô hình định giá&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Apidog&lt;/td&gt;
&lt;td&gt;Dẫn đầu&lt;/td&gt;
&lt;td&gt;Thiết kế, thử nghiệm, tạo mock, tài liệu API tất cả trong một&lt;/td&gt;
&lt;td&gt;Gói miễn phí + trả phí&lt;/td&gt;
&lt;td&gt;SaaS theo người dùng&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;viaSocket&lt;/td&gt;
&lt;td&gt;Dẫn đầu&lt;/td&gt;
&lt;td&gt;Tự động hóa workflow không mã với API hook&lt;/td&gt;
&lt;td&gt;Không&lt;/td&gt;
&lt;td&gt;Gói khởi điểm 50 USD/tháng&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Traefik Labs&lt;/td&gt;
&lt;td&gt;Hiệu suất cao&lt;/td&gt;
&lt;td&gt;API gateway cloud-native + quản lý GitOps&lt;/td&gt;
&lt;td&gt;Có, Proxy OSS&lt;/td&gt;
&lt;td&gt;OSS miễn phí, Hub trả phí&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rasayel&lt;/td&gt;
&lt;td&gt;Hiệu suất cao&lt;/td&gt;
&lt;td&gt;WhatsApp Business messaging + REST API&lt;/td&gt;
&lt;td&gt;Không&lt;/td&gt;
&lt;td&gt;SaaS theo chỗ ngồi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backendless&lt;/td&gt;
&lt;td&gt;Hiệu suất cao&lt;/td&gt;
&lt;td&gt;BaaS với REST và GraphQL tự động tạo&lt;/td&gt;
&lt;td&gt;Không&lt;/td&gt;
&lt;td&gt;Gói miễn phí + trả phí&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Moesif (WSO2)&lt;/td&gt;
&lt;td&gt;Ngách&lt;/td&gt;
&lt;td&gt;Phân tích, giám sát, kiếm tiền từ API&lt;/td&gt;
&lt;td&gt;Không&lt;/td&gt;
&lt;td&gt;Dựa trên mức sử dụng&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thunder Client&lt;/td&gt;
&lt;td&gt;Ngách&lt;/td&gt;
&lt;td&gt;REST client trong VS Code cho kiểm thử cá nhân&lt;/td&gt;
&lt;td&gt;Không&lt;/td&gt;
&lt;td&gt;Miễn phí + Pro&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;G2 gộp nhiều loại sản phẩm vào cùng danh mục: nền tảng vòng đời API, iPaaS automation, gateway, analytics và extension IDE. Vì vậy, hãy đọc bảng xếp hạng theo hướng “công cụ này tối ưu cho bước nào trong vòng đời API?” thay vì “công cụ nào đứng cao hơn?”.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apidog: Công cụ dẫn đầu cho workflow API từ đầu đến cuối
&lt;/h2&gt;

&lt;p&gt;Apidog giành vị trí Dẫn đầu nhờ gom bốn bước chính của vòng đời API vào một workspace:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Thiết kế API&lt;/li&gt;
&lt;li&gt;Kiểm thử API&lt;/li&gt;
&lt;li&gt;Tạo mock server&lt;/li&gt;
&lt;li&gt;Xuất tài liệu API&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Thay vì dùng nhiều công cụ riêng lẻ cho OpenAPI, Postman collection, mock server và documentation site, nhóm có thể quản lý tất cả trong cùng một nơi.&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.amazonaws.com%2Fuploads%2Farticles%2F117hjvap1ojetzsbvucs.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.amazonaws.com%2Fuploads%2Farticles%2F117hjvap1ojetzsbvucs.png" alt="Apidog workspace" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Khi nào nên dùng Apidog?
&lt;/h3&gt;

&lt;p&gt;Dùng Apidog nếu nhóm của bạn cần:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Viết và duy trì đặc tả OpenAPI 3.0/3.1&lt;/li&gt;
&lt;li&gt;Tạo request/test case từ cùng một schema&lt;/li&gt;
&lt;li&gt;Cho frontend gọi mock API trước khi backend hoàn tất&lt;/li&gt;
&lt;li&gt;Xuất tài liệu công khai hoặc nội bộ&lt;/li&gt;
&lt;li&gt;Review thay đổi API theo nhánh&lt;/li&gt;
&lt;li&gt;Đồng bộ backend, frontend và QA trên một nguồn sự thật chung&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Một workflow thực 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;1. Backend định nghĩa endpoint trong Apidog
2. QA tạo test case từ endpoint đó
3. Frontend dùng mock response để phát triển UI
4. Tech lead review thay đổi API theo branch
5. Nhóm publish documentation cho người dùng nội bộ hoặc khách hàng
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Ví dụ workflow thiết kế trước
&lt;/h3&gt;

&lt;p&gt;Giả sử nhóm cần thêm endpoint tạo đơn hàng:&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 /orders
Content-Type: application/json
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Request body:&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;"customerId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cus_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;"items"&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;"sku"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"book_001"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"quantity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&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;Response 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;"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;"ord_789"&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;"created"&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"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;420000&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 Apidog, nhóm có thể:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Định nghĩa schema cho &lt;code&gt;Order&lt;/code&gt;, &lt;code&gt;OrderItem&lt;/code&gt;, &lt;code&gt;Customer&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Sinh mock response từ schema&lt;/li&gt;
&lt;li&gt;Tạo test kiểm tra status code &lt;code&gt;201&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Kiểm tra field bắt buộc như &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;total&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Publish endpoint vào tài liệu API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ví dụ assertion cơ bản:&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;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Status code is 201&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;201&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="s2"&gt;Response has order id&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;json&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;expect&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="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="s2"&gt;string&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;h3&gt;
  
  
  Điểm mạnh
&lt;/h3&gt;

&lt;p&gt;Apidog phù hợp với các nhóm khoảng 100 kỹ sư trở xuống muốn có một nguồn thông tin duy nhất cho đặc tả API. Backend thiết kế endpoint, QA viết test, frontend lấy mock, còn tài liệu được tạo từ cùng một định nghĩa.&lt;/p&gt;

&lt;p&gt;Theo nội dung gốc, các nhóm báo cáo giảm 50–60% thời gian từ đặc tả đến kiểm thử tích hợp đầu tiên. Các đánh giá G2 Spring 2026 cũng nhắc đến review thiết kế theo branch và trình chỉnh sửa OpenAPI 3.1 như điểm khác biệt so với Stoplight và SwaggerHub.&lt;/p&gt;

&lt;p&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; và nhập Postman collection chỉ với một cú nhấp chuột. Không yêu cầu thẻ tín dụng; gói miễn phí đủ cho nhiều nhóm nhỏ.&lt;/p&gt;

&lt;h2&gt;
  
  
  viaSocket: Dẫn đầu cho tích hợp không mã
&lt;/h2&gt;

&lt;p&gt;viaSocket là công cụ Dẫn đầu còn lại, nhưng không cùng loại với Apidog. Đây là một &lt;a href="https://viasocket.com" rel="noopener noreferrer"&gt;nền tảng tự động hóa workflow AI&lt;/a&gt;, gần với Zapier hoặc Make hơn là API gateway truyền thống.&lt;/p&gt;

&lt;p&gt;viaSocket phù hợp khi bạn cần kết nối các ứng dụng SaaS bằng:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Webhook&lt;/li&gt;
&lt;li&gt;Logic điều kiện&lt;/li&gt;
&lt;li&gt;API call tùy chỉnh&lt;/li&gt;
&lt;li&gt;JavaScript tùy chỉnh&lt;/li&gt;
&lt;li&gt;Workflow không cần nhóm kỹ thuật triển khai riêng&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Khi nào nên dùng viaSocket?
&lt;/h3&gt;

&lt;p&gt;Dùng viaSocket nếu workflow của bạn giống như:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Có lead mới trong CRM
2. Gửi dữ liệu sang Google Sheets
3. Gọi webhook nội bộ
4. Gửi thông báo Slack
5. Tạo ticket trong helpdesk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pseudo-flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Trigger: New HubSpot Contact
Condition: contact.country == "VN"
Action 1: Send custom API request to internal endpoint
Action 2: Notify sales channel in Slack
Action 3: Add row to Google Sheets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Điểm mạnh
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Nhiều tích hợp SaaS có sẵn&lt;/li&gt;
&lt;li&gt;Hỗ trợ custom API call và webhook&lt;/li&gt;
&lt;li&gt;Phù hợp với người không phải developer&lt;/li&gt;
&lt;li&gt;Thiết lập nhanh cho workflow vận hành&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Điểm yếu
&lt;/h3&gt;

&lt;p&gt;viaSocket không phải API gateway. Nó không thay thế được:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;li&gt;OAuth flow&lt;/li&gt;
&lt;li&gt;Contract testing&lt;/li&gt;
&lt;li&gt;API design workflow&lt;/li&gt;
&lt;li&gt;Mock server&lt;/li&gt;
&lt;li&gt;Developer documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Giá bắt đầu từ 50 USD/tháng cho tài khoản tạo sau tháng 9 năm 2025, có thể không phù hợp với thử nghiệm cá nhân giá rẻ.&lt;/p&gt;

&lt;p&gt;Chọn viaSocket nếu nhóm vận hành, marketing hoặc revenue cần kết nối công cụ SaaS. Nếu bạn đang phát hành API công khai hoặc quản lý microservice nội bộ, hãy chọn công cụ khác.&lt;/p&gt;

&lt;h2&gt;
  
  
  Traefik Labs: Gateway mã nguồn mở với quản lý API đi kèm
&lt;/h2&gt;

&lt;p&gt;Traefik Proxy là proxy ứng dụng cloud-native mã nguồn mở. &lt;a href="https://traefik.io/traefik-hub" rel="noopener noreferrer"&gt;Traefik Hub&lt;/a&gt; là lớp thương mại bổ sung các tính năng quản lý API như developer portal, lifecycle control và GitOps management.&lt;/p&gt;

&lt;p&gt;Traefik đạt nhóm Hiệu suất cao nhờ mức độ hài lòng tốt; hiện diện thị trường trên G2 có thể bị ảnh hưởng bởi việc nhiều người dùng OSS không xuất hiện trong đánh giá G2.&lt;/p&gt;

&lt;h3&gt;
  
  
  Khi nào nên dùng Traefik?
&lt;/h3&gt;

&lt;p&gt;Dùng Traefik nếu bạn đang chạy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;li&gt;Microservices&lt;/li&gt;
&lt;li&gt;Ingress routing&lt;/li&gt;
&lt;li&gt;Dynamic service discovery&lt;/li&gt;
&lt;li&gt;GitOps-based infrastructure&lt;/li&gt;
&lt;li&gt;Edge routing hoặc API gateway layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ví dụ cấu hình IngressRoute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;traefik.io/v1alpha1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;IngressRoute&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;orders-api&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;entryPoints&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;websecure&lt;/span&gt;
  &lt;span class="na"&gt;routes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;match&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Host(`api.example.com`) &amp;amp;&amp;amp; PathPrefix(`/orders`)&lt;/span&gt;
      &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Rule&lt;/span&gt;
      &lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;orders-service&lt;/span&gt;
          &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Điểm mạnh
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Cloud-native, hợp với Kubernetes&lt;/li&gt;
&lt;li&gt;Hỗ trợ service discovery và cấu hình động&lt;/li&gt;
&lt;li&gt;Tự động Let’s Encrypt&lt;/li&gt;
&lt;li&gt;Quản lý GitOps với API, route và policy trong Git&lt;/li&gt;
&lt;li&gt;Có tính năng AI Gateway trong năm 2026, bao gồm hỗ trợ OpenAI Responses API như một endpoint được quản lý&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Điểm khó
&lt;/h3&gt;

&lt;p&gt;Traefik không phải công cụ thiết kế API hoặc kiểm thử API. Nếu bạn cần quản lý schema, mock, test và docs, hãy kết hợp Traefik ở lớp gateway với &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; ở giai đoạn thiết kế và kiểm thử.&lt;/p&gt;

&lt;p&gt;Các tính năng doanh nghiệp như LDAP, portal nâng cao và RBAC nằm trong Traefik Hub, không phải trong OSS Proxy.&lt;/p&gt;

&lt;p&gt;Đọc thêm: &lt;a href="http://apidog.com/blog/open-source-api-management-tools?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;công cụ quản lý API mã nguồn mở&lt;/a&gt; và &lt;a href="http://apidog.com/blog/top-api-management-tools-for-enterprise?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;nền tảng quản lý API hàng đầu cho nhóm doanh nghiệp&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rasayel: Nền tảng WhatsApp Business API
&lt;/h2&gt;

&lt;p&gt;Rasayel nằm trong danh mục này vì cung cấp &lt;a href="https://rest.developers.rasayel.io" rel="noopener noreferrer"&gt;REST API và GraphQL API&lt;/a&gt;, giới hạn tốc độ 200 request/phút trên REST, cùng giao diện quản lý API key với quyền đọc/ghi theo scope.&lt;/p&gt;

&lt;p&gt;Tuy nhiên, về bản chất, Rasayel là nền tảng WhatsApp Business với:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Team inbox&lt;/li&gt;
&lt;li&gt;Chatbot&lt;/li&gt;
&lt;li&gt;Bulk messaging&lt;/li&gt;
&lt;li&gt;Tích hợp CRM như HubSpot hoặc Pipedrive&lt;/li&gt;
&lt;li&gt;Webhook cho sự kiện WhatsApp&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Khi nào nên dùng Rasayel?
&lt;/h3&gt;

&lt;p&gt;Dùng Rasayel nếu bạn cần:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WhatsApp Business
→ shared team inbox
→ chatbot
→ webhook
→ CRM sync
→ API access
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ví dụ use case:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Khi khách hàng gửi tin nhắn WhatsApp, tạo lead trong CRM&lt;/li&gt;
&lt;li&gt;Khi trạng thái đơn hàng thay đổi, gửi thông báo qua WhatsApp&lt;/li&gt;
&lt;li&gt;Khi agent phản hồi, đồng bộ lịch sử hội thoại về hệ thống nội bộ&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Khi nào không nên dùng?
&lt;/h3&gt;

&lt;p&gt;Bỏ qua Rasayel nếu bạn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Đang quản lý microservice nội bộ&lt;/li&gt;
&lt;li&gt;Cần API gateway biên&lt;/li&gt;
&lt;li&gt;Không dùng WhatsApp trong hệ thống&lt;/li&gt;
&lt;li&gt;Cần contract testing, mock server hoặc API documentation workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rasayel mạnh trong một use case hẹp. Nó không phải điểm khởi đầu cho hầu hết quyết định về nền tảng API tổng quát.&lt;/p&gt;

&lt;h2&gt;
  
  
  Backendless: BaaS với REST và GraphQL tự động tạo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://backendless.com/feature/service-management/" rel="noopener noreferrer"&gt;Backendless&lt;/a&gt; là nền tảng backend-as-a-service. Khi bạn định nghĩa mô hình dữ liệu, Backendless tự tạo endpoint REST và GraphQL.&lt;/p&gt;

&lt;p&gt;Workflow điển hình:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Tạo bảng dữ liệu
2. Định nghĩa field và quan hệ
3. Backendless sinh REST/GraphQL API
4. Ứng dụng mobile/web gọi API qua SDK hoặc HTTP
5. Theo dõi request theo method, client type và trạng thái thành công/lỗi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Khi nào nên dùng Backendless?
&lt;/h3&gt;

&lt;p&gt;Dùng Backendless nếu bạn muốn tránh xây backend từ đầu, đặc biệt cho:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MVP&lt;/li&gt;
&lt;li&gt;Mobile app&lt;/li&gt;
&lt;li&gt;Internal tool&lt;/li&gt;
&lt;li&gt;Startup nhỏ&lt;/li&gt;
&lt;li&gt;Nhóm không muốn vận hành backend riêng&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ví dụ cách nghĩ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Tôi cần user auth, database, file storage, REST API và GraphQL API nhanh.
Tôi không muốn tự dựng server, ORM, auth layer và dashboard.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Điểm mạnh
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Low-code backend&lt;/li&gt;
&lt;li&gt;SDK cho Android, iOS, JavaScript và .NET&lt;/li&gt;
&lt;li&gt;Role-based security theo từng operation&lt;/li&gt;
&lt;li&gt;Theo dõi service-level call&lt;/li&gt;
&lt;li&gt;Tạo API từ mô hình dữ liệu&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Điểm yếu
&lt;/h3&gt;

&lt;p&gt;Backendless không phù hợp nếu bạn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Đã có backend/microservice và cần gateway phía trước&lt;/li&gt;
&lt;li&gt;Muốn contract-first API design&lt;/li&gt;
&lt;li&gt;Cần triển khai tại chỗ để tránh vendor lock-in&lt;/li&gt;
&lt;li&gt;Cần kiểm soát sâu hạ tầng runtime&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Backendless phù hợp khi câu hỏi là “làm sao có backend nhanh?”. Nếu câu hỏi là “làm sao quản lý các service hiện có?”, hãy xem gateway, API design platform hoặc analytics layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Moesif, một công ty của WSO2: API analytics và monetization
&lt;/h2&gt;

&lt;p&gt;Moesif nằm nhóm Ngách theo thiết kế. Nó không phải gateway, không phải công cụ thiết kế API, mà là lớp quan sát và kiếm tiền từ API đã chạy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wso2.com/library/blogs/wso2-acquires-api-analytics-and-monetization-leader-moesif/" rel="noopener noreferrer"&gt;WSO2 mua lại Moesif vào tháng 5 năm 2025&lt;/a&gt; và đang tích hợp nó như một lớp phân tích cho nền tảng Choreo của WSO2. Moesif vẫn hoạt động như một công ty con độc lập với lộ trình riêng.&lt;/p&gt;

&lt;h3&gt;
  
  
  Moesif giải quyết vấn đề gì?
&lt;/h3&gt;

&lt;p&gt;Dùng Moesif khi bạn cần biết:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ai đang gọi API?&lt;/li&gt;
&lt;li&gt;Endpoint nào được dùng nhiều nhất?&lt;/li&gt;
&lt;li&gt;Khách hàng nào gây lỗi nhiều nhất?&lt;/li&gt;
&lt;li&gt;Request tăng bất thường ở khu vực nào?&lt;/li&gt;
&lt;li&gt;Gói giá nào đang tạo doanh thu?&lt;/li&gt;
&lt;li&gt;Người dùng API có bị drop ở bước nào trong funnel?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Một luồng triển khai điển hình:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;API Gateway / Backend
→ Moesif middleware hoặc plugin
→ Event tracking
→ Usage analytics
→ Customer dashboard
→ Billing hoặc monetization workflow
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Khi nào nên dùng?
&lt;/h3&gt;

&lt;p&gt;Moesif phù hợp nếu bạn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Đã phát hành API công khai&lt;/li&gt;
&lt;li&gt;Cần phân tích usage theo user, endpoint, region&lt;/li&gt;
&lt;li&gt;Đang chuyển sang pricing theo usage&lt;/li&gt;
&lt;li&gt;Cần billing dựa trên metered usage&lt;/li&gt;
&lt;li&gt;Cần dashboard khách hàng cho API product&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Khi nào không nên dùng?
&lt;/h3&gt;

&lt;p&gt;Moesif không phù hợp nếu:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bạn chưa có API public&lt;/li&gt;
&lt;li&gt;Bạn cần gateway thay vì analytics&lt;/li&gt;
&lt;li&gt;Bạn cần thiết kế API, mock hoặc documentation&lt;/li&gt;
&lt;li&gt;Bạn là developer độc lập chỉ cần test endpoint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Moesif nằm bên cạnh gateway và backend, không thay thế chúng.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thunder Client: REST client trong VS Code
&lt;/h2&gt;

&lt;p&gt;Thunder Client là extension VS Code để gửi HTTP request, tương tự Postman hoặc Insomnia nhưng chạy ngay trong editor. Vị trí Ngách phản ánh sự hài lòng cao của developer cá nhân: nhẹ, nhanh, không cần app riêng.&lt;/p&gt;

&lt;h3&gt;
  
  
  Khi nào nên dùng Thunder Client?
&lt;/h3&gt;

&lt;p&gt;Dùng Thunder Client nếu bạn là developer cá nhân và muốn test endpoint ngay trong VS Code:&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 http://localhost:3000/api/users
Authorization: Bearer {{token}}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ví dụ collection được lưu dưới dạng JSON trong repository:&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;"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;"Local API"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"requests"&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;"method"&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"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:3000/api/users"&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;h3&gt;
  
  
  Điểm mạnh
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Không cần rời VS Code&lt;/li&gt;
&lt;li&gt;Nhẹ và nhanh&lt;/li&gt;
&lt;li&gt;Collection lưu dạng JSON, thân thiện với Git&lt;/li&gt;
&lt;li&gt;Hỗ trợ environment variable&lt;/li&gt;
&lt;li&gt;Có scripting và assertion cơ bản&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Không phù hợp cho
&lt;/h3&gt;

&lt;p&gt;Thunder Client không phải:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nền tảng cộng tác nhóm đầy đủ&lt;/li&gt;
&lt;li&gt;Công cụ thiết kế API&lt;/li&gt;
&lt;li&gt;API gateway&lt;/li&gt;
&lt;li&gt;Mock server&lt;/li&gt;
&lt;li&gt;Công cụ tạo documentation&lt;/li&gt;
&lt;li&gt;Nền tảng quản lý vòng đời API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Các tính năng cộng tác nằm sau tường phí Pro, đây là điểm gây khó chịu với nhiều nhóm. Xem thêm: &lt;a href="http://apidog.com/blog/thunder-client-team-collaboration-limitations?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Thunder Client cho nhóm: hạn chế về cộng tác&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Nếu “quản lý API” của bạn chỉ là “gửi request khi đang code”, Thunder Client đủ tốt. Nếu nhóm cần cộng tác, mock, docs và test chung, Apidog bao phủ rộng hơn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cách chọn công cụ phù hợp cho nhóm của bạn
&lt;/h2&gt;

&lt;p&gt;Hãy bắt đầu bằng câu hỏi kỹ thuật, không phải bằng bảng xếp hạng.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. “Quản lý API” trong hệ thống của bạn nghĩa là gì?
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nhu cầu chính&lt;/th&gt;
&lt;th&gt;Công cụ phù hợp&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Thiết kế, test, mock, docs&lt;/td&gt;
&lt;td&gt;Apidog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gateway, routing, JWT, rate limiting&lt;/td&gt;
&lt;td&gt;Traefik&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Analytics và monetization cho API đã phát hành&lt;/td&gt;
&lt;td&gt;Moesif&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kết nối SaaS app bằng webhook&lt;/td&gt;
&lt;td&gt;viaSocket&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tạo backend nhanh từ đầu&lt;/td&gt;
&lt;td&gt;Backendless&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WhatsApp Business API&lt;/td&gt;
&lt;td&gt;Rasayel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test REST trong VS Code&lt;/td&gt;
&lt;td&gt;Thunder Client&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  2. Bao nhiêu người sẽ dùng?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1 developer&lt;/strong&gt;: Thunder Client hoặc gói miễn phí của Apidog&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;5–50 người&lt;/strong&gt;: Apidog cho workflow API end-to-end; Backendless nếu cần BaaS; Traefik Hub nếu trọng tâm là gateway&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;100+ developer&lt;/strong&gt;: thường kết hợp nhiều lớp:

&lt;ul&gt;
&lt;li&gt;Traefik hoặc Kong ở edge/gateway&lt;/li&gt;
&lt;li&gt;Moesif cho analytics&lt;/li&gt;
&lt;li&gt;Apidog cho thiết kế, mock, test và docs&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Hạn chế chính là tiền, thời gian hay quản trị?
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Hạn chế&lt;/th&gt;
&lt;th&gt;Lựa chọn thực tế&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tiền&lt;/td&gt;
&lt;td&gt;Gói miễn phí Apidog, Traefik Proxy OSS, gói miễn phí Backendless&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thời gian&lt;/td&gt;
&lt;td&gt;Apidog cho thiết kế + test nhanh; viaSocket cho no-code automation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quản trị&lt;/td&gt;
&lt;td&gt;Traefik Hub cho GitOps; Apidog cho branch-based design review; Moesif cho analytics có thể audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Đọc thêm: &lt;a href="http://apidog.com/blog/api-testing-tool-team-50-engineers?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;công cụ kiểm thử API cho nhóm 50 kỹ sư&lt;/a&gt; và &lt;a href="http://apidog.com/blog/api-platform-design-first-api-workflow?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;so sánh nền tảng API thiết kế trước&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Một stack API thực tế có thể trông như thế nào?
&lt;/h2&gt;

&lt;p&gt;Không phải lúc nào bạn cũng chọn một công cụ duy nhất. Với nhóm đang xây API nghiêm túc, stack có thể tách theo lớp:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;API Design + Mock + Test + Docs
→ Apidog

Gateway + Routing + TLS + Policy
→ Traefik

Usage Analytics + Monetization
→ Moesif

Internal SaaS Automation
→ viaSocket
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ví dụ workflow triển khai:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Product và backend định nghĩa contract API trong Apidog
2. Frontend dùng mock API để phát triển song song
3. QA tạo test suite từ spec
4. Backend triển khai service thật
5. Traefik route traffic đến service
6. Moesif thu thập usage analytics
7. viaSocket xử lý workflow SaaS phụ trợ nếu cần
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cách tách lớp này giúp tránh dùng sai công cụ. Gateway không nên thay thế API design tool. REST client cá nhân không nên thay thế collaboration platform. Analytics layer không nên thay thế mock server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Những gì Bảng xếp hạng Spring 2026 dạy bạn
&lt;/h2&gt;

&lt;p&gt;Bảy công cụ trong Bảng xếp hạng Quản lý API G2 Spring 2026 không hoàn toàn cạnh tranh trực tiếp với nhau. Chúng cạnh tranh với công cụ bạn sẽ chọn nếu không phân tách rõ bài toán.&lt;/p&gt;

&lt;p&gt;Các điểm cần nhớ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hai công cụ Dẫn đầu giải quyết hai vấn đề khác nhau: Apidog cho workflow vòng đời API, viaSocket cho no-code integration.&lt;/li&gt;
&lt;li&gt;Nhóm Hiệu suất cao mạnh ở các phạm vi cụ thể: Traefik cho gateway, Rasayel cho WhatsApp, Backendless cho BaaS.&lt;/li&gt;
&lt;li&gt;Nhóm Ngách không có nghĩa là yếu; Moesif và Thunder Client rất mạnh trong phạm vi riêng.&lt;/li&gt;
&lt;li&gt;Stack tiết kiệm có thể bắt đầu bằng gói miễn phí Apidog + Traefik Proxy OSS + gói miễn phí Moesif.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu nhóm của bạn đang xử lý thiết kế, kiểm thử, mock và tài liệu API, hãy bắt đầu với &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;. Đây là công cụ Dẫn đầu vì bao phủ phần workflow mà hầu hết nhóm API dành nhiều thời gian nhấ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 xuống Apidog&lt;/a&gt; và nhập thiết kế API từ Postman trong vài phút.&lt;/p&gt;

&lt;p&gt;Nếu trọng tâm của bạn là gateway, hãy xem thêm &lt;a href="http://apidog.com/blog/best-api-gateways?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;top 10 API gateway tốt nhất cho developer năm 2026&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Hướng Dẫn Sử Dụng OpenAI Codex Trên Điện Thoại: iOS &amp; Android 2026</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Fri, 15 May 2026 03:09:30 +0000</pubDate>
      <link>https://forem.com/sebbasstian/huong-dan-su-dung-openai-codex-tren-dien-thoai-ios-android-2026-2pgi</link>
      <guid>https://forem.com/sebbasstian/huong-dan-su-dung-openai-codex-tren-dien-thoai-ios-android-2026-2pgi</guid>
      <description>&lt;p&gt;OpenAI đã ra mắt Codex trên thiết bị di động trong tuần này. Vào ngày 14 tháng 5 năm 2026, ứng dụng ChatGPT trên iOS và Android đã bổ sung trải nghiệm Codex đầy đủ tính năng cho mọi gói, bao gồm Free và Go. Bạn có thể giám sát tác vụ đang chạy, phê duyệt lệnh, đổi mô hình và bắt đầu công việc mới từ điện thoại, ngay cả khi laptop không còn mở trước mặt bạn.&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;Độc giả của Apidog đã hỏi khi nào công cụ lập trình AI nghiêm túc sẽ có mặt trên điện thoại. Câu trả lời là: bây giờ. Bài viết này tập trung vào những gì đã được phát hành, cách thiết lập và các workflow nên thử trước.&lt;/p&gt;

&lt;p&gt;Nếu bạn muốn bắt đầu từ terminal, Apidog có &lt;a href="http://apidog.com/blog/openai-codex-cli?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn thiết lập cho Codex CLI&lt;/a&gt;. Nếu muốn so sánh với Anthropic và Cursor trên di động, hãy xem &lt;a href="http://apidog.com/blog/claude-code-mobile?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;bài viết về Claude Code trên di động&lt;/a&gt; và &lt;a href="http://apidog.com/blog/cursor-ai-phone?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;bài đăng Chạy Cursor trên điện thoại của bạn&lt;/a&gt;. Hoặc tải &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ắt đầu xây dựng các API mà Codex trên điện thoại của bạn có thể sử dụng khi bạn di chuyển.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Codex từ mọi nơi" có nghĩa là gì
&lt;/h2&gt;

&lt;p&gt;Thông báo của OpenAI không chỉ nói về mobile. "Codex từ mọi nơi" bao gồm bốn bề mặt sử dụng chính:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Codex trong ứng dụng di động ChatGPT&lt;/strong&gt;: iOS, Android, bản xem trước, hỗ trợ mọi gói.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codex trong Slack&lt;/strong&gt;: dành cho Plus, Pro, Business, Enterprise, Edu; gọi bằng &lt;code&gt;@Codex&lt;/code&gt; trong cuộc trò chuyện.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tiện ích mở rộng Codex Chrome&lt;/strong&gt;: ra mắt ngày 7 tháng 5 năm 2026; hoạt động trên các tab mà không chiếm quyền điều khiển trình duyệt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codex SDK&lt;/strong&gt;: điều khiển Codex bằng lập trình từ script, scheduler hoặc CI.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Mobile là phần dễ thấy nhất, nhưng Slack và SDK mới là phần quyết định Codex có đi vào workflow nhóm hay không. Ví dụ: một kỹ sư có thể giao việc cho Codex từ Slack, sau đó kiểm tra diff và phê duyệt từ điện thoại khi tác vụ hoàn tấ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.amazonaws.com%2Fuploads%2Farticles%2Fyvzh6bmfis3hhdukzxep.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.amazonaws.com%2Fuploads%2Farticles%2Fyvzh6bmfis3hhdukzxep.png" alt="Codex trên thiết bị di động" width="800" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Codex trên iOS và Android: cách thiết lập
&lt;/h2&gt;

&lt;p&gt;Trải nghiệm mobile nằm trong ứng dụng ChatGPT hiện có. Bạn không cần cài app Codex riêng.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 1: Cập nhật ứng dụng ChatGPT
&lt;/h3&gt;

&lt;p&gt;Mở App Store trên iOS hoặc Play Store trên Android, sau đó cập nhật ChatGPT lên phiên bản mới nhất.&lt;/p&gt;

&lt;p&gt;Theo &lt;a href="https://developers.openai.com/codex/changelog" rel="noopener noreferrer"&gt;nhật ký thay đổi của Codex&lt;/a&gt;, Codex di động yêu cầu bản phát hành ngày 13 tháng 5 năm 2026 trở lên.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 2: Đăng nhập đúng tài khoản
&lt;/h3&gt;

&lt;p&gt;Đăng nhập bằng cùng tài khoản OpenAI mà bạn dùng cho ChatGPT, Codex web hoặc Codex CLI.&lt;/p&gt;

&lt;p&gt;Codex mobile sẽ hiển thị cùng các cuộc trò chuyện, môi trường và máy chủ đã kết nối với tài khoản đó.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 3: Kết nối môi trường đám mây
&lt;/h3&gt;

&lt;p&gt;Nếu trước đây bạn chỉ dùng Codex từ terminal, bạn cần cấu hình ít nhất một môi trường đám mây để ứng dụng di động có thể giao tiếp.&lt;/p&gt;

&lt;p&gt;Trên web app:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mở &lt;strong&gt;Settings&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Vào &lt;strong&gt;Codex&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Chọn &lt;strong&gt;Environments&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Liên kết GitHub.&lt;/li&gt;
&lt;li&gt;Cấu hình một repository.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sau khi hoàn tất, ứng dụng mobile sẽ kế thừa cấu hình này.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 4: Mở tab Codex trên điện thoại
&lt;/h3&gt;

&lt;p&gt;Trong ứng dụng ChatGPT, chạm vào tab &lt;strong&gt;Codex&lt;/strong&gt; ở thanh điều hướng dưới cùng.&lt;/p&gt;

&lt;p&gt;Bạn sẽ thấy danh sách tác vụ, cuộc trò chuyện và trạng thái các lần chạy đang hoạt động.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 5: Chạy một tác vụ nhỏ để kiểm tra
&lt;/h3&gt;

&lt;p&gt;Đừng bắt đầu bằng refactor lớn. Hãy thử một tác vụ nhỏ trước, 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;Thêm docstring cho hàm validateUserInput trong src/utils/validation.ts.
Không đổi logic hiện tại.
&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 plaintext"&gt;&lt;code&gt;Cập nhật README với một ví dụ curl cho endpoint /health.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ol&gt;
&lt;li&gt;Chờ Codex tạo diff.&lt;/li&gt;
&lt;li&gt;Mở diff trên điện thoại.&lt;/li&gt;
&lt;li&gt;Kiểm tra file thay đổi.&lt;/li&gt;
&lt;li&gt;Chạm &lt;strong&gt;Approve&lt;/strong&gt; nếu đúng.&lt;/li&gt;
&lt;li&gt;Xác nhận PR hoặc thay đổi đã được cập nhật trong repository.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nếu vòng lặp nhỏ này chạy ổn, bạn có thể chuyển sang các tác vụ dài hơn như thêm test, chỉnh tài liệu hoặc refactor nhiều file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bạn có thể làm gì từ điện thoại?
&lt;/h2&gt;

&lt;p&gt;Codex mobile không thay thế IDE. Nó đóng vai trò là bảng điều khiển để giao việc, theo dõi và phê duyệt.&lt;/p&gt;

&lt;p&gt;Từ điện thoại, bạn có thể:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Xem các lần chạy trực tiếp&lt;/strong&gt; trên laptop, devbox hoặc môi trường từ xa đã kết nối.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duyệt các cuộc trò chuyện&lt;/strong&gt; và chuyển giữa nhiều tác vụ song song.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Xem diff&lt;/strong&gt; trước khi thay đổi được merge vào branch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Phê duyệt lệnh&lt;/strong&gt; mà Codex muốn chạy trên môi trường của bạn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chuyển đổi mô hình&lt;/strong&gt; nếu tác vụ cần mô hình mạnh hơn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bắt đầu tác vụ mới&lt;/strong&gt; từ prompt hoặc issue GitHub.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bình luận trên pull request&lt;/strong&gt; do Codex mở trong repository.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OpenAI mô tả workflow này như sau: "Từ điện thoại của bạn, bạn có thể làm việc trên tất cả các cuộc trò chuyện của mình, xem lại kết quả đầu ra, phê duyệt lệnh, thay đổi mô hình hoặc bắt đầu điều gì đó mới."&lt;/p&gt;

&lt;p&gt;Hạn chế quan trọng: mobile chưa phải là trình soạn thảo mã đầy đủ. Bạn không nên kỳ vọng viết code trực tiếp như trong VS Code. Codex viết mã; bạn điều phối, review và phê duyệt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Slack: giao việc cho Codex từ cuộc trò chuyện nhóm
&lt;/h2&gt;

&lt;p&gt;Tích hợp Slack được phát hành cùng mobile. Đây là cách đưa Codex vào workflow nhóm mà không yêu cầu mọi người mở dashboard riêng.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cách hoạt động
&lt;/h3&gt;

&lt;p&gt;Sau khi quản trị viên workspace cài &lt;a href="https://slack.com/marketplace/A09F5C369E3-openai-codex" rel="noopener noreferrer"&gt;ứng dụng Codex Slack từ Marketplace&lt;/a&gt;, thành viên có thể gọi Codex bằng cách gắn thẻ &lt;code&gt;@Codex&lt;/code&gt; trong kênh hoặc thread.&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;@Codex kiểm tra issue #142 và đề xuất bản sửa lỗi tối thiểu.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hoặc chỉ định repository rõ 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;@Codex trong repo apidog/awesome-api, thêm test cho endpoint GET /projects/{id}.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bot sẽ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chọn môi trường phù hợp từ cấu hình hiện có.&lt;/li&gt;
&lt;li&gt;Mặc định dùng repository đầu tiên trong environment map nếu bạn không chỉ định repo.&lt;/li&gt;
&lt;li&gt;Phản hồi bằng emoji, đăng link tác vụ và bắt đầu chạy.&lt;/li&gt;
&lt;li&gt;Trả kết quả trong thread khi tác vụ hoàn tất.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Những gì bạn cần
&lt;/h3&gt;

&lt;p&gt;Để dùng Codex trong Slack, bạn cần:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gói ChatGPT Plus, Pro, Business, Enterprise hoặc Edu.&lt;/li&gt;
&lt;li&gt;Tài khoản GitHub đã kết nối.&lt;/li&gt;
&lt;li&gt;Ít nhất một môi trường đám mây đã cấu hình.&lt;/li&gt;
&lt;li&gt;Quyền cài ứng dụng hoặc phê duyệt từ quản trị viên Slack workspace.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lưu ý: gói Free không có tích hợp Slack.&lt;/p&gt;

&lt;p&gt;Với doanh nghiệp, quản trị viên có thể tắt việc Codex đăng câu trả lời trực tiếp vào kênh và buộc bot chỉ chia sẻ link tác vụ. Cách này giúp mã được tạo không xuất hiện trong lịch sử Slack.&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow nên thử
&lt;/h3&gt;

&lt;p&gt;Một workflow thực tế:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Issue mới được thảo luận trong kênh Slack.&lt;/li&gt;
&lt;li&gt;Một kỹ sư gọi &lt;code&gt;@Codex&lt;/code&gt; để yêu cầu đề xuất bản sửa.&lt;/li&gt;
&lt;li&gt;Codex mở tác vụ hoặc PR.&lt;/li&gt;
&lt;li&gt;Người phụ trách review diff trên điện thoại.&lt;/li&gt;
&lt;li&gt;CI chạy test.&lt;/li&gt;
&lt;li&gt;Nếu đạt, người phụ trách approve hoặc merge.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nếu bạn quan tâm đến tự động hóa triage issue GitHub, &lt;a href="http://apidog.com/blog/clawsweeper-openclaw-github-triage-bot?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Bot phân loại vấn đề GitHub OpenClaw&lt;/a&gt; cũng là một mô hình đáng tham khảo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Codex SDK: điều khiển bằng lập trình
&lt;/h2&gt;

&lt;p&gt;Codex SDK phù hợp với nhóm muốn tích hợp Codex vào script, scheduler hoặc CI.&lt;/p&gt;

&lt;p&gt;Một dạng sử dụng phổ biến:&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;Codex&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;Codex&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;task&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;tasks&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;repo&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apidog/awesome-api&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Add OpenAPI examples to every endpoint missing them.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prod-mirror&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="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt; &lt;span class="ow"&gt;in&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;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&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="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;summary&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ể dùng SDK trong các workflow như:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Job hằng đêm để mở PR xử lý issue cũ.&lt;/li&gt;
&lt;li&gt;Bước pre-merge để yêu cầu Codex viết test còn thiếu.&lt;/li&gt;
&lt;li&gt;Script nội bộ để cập nhật tài liệu API.&lt;/li&gt;
&lt;li&gt;Công cụ triage tự động cho repository lớn.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Với Enterprise workspace, bạn có thể tạo access token cho các luồng không tương tác. Khả năng này được phát hành vào ngày 5 tháng 5 năm 2026.&lt;/p&gt;

&lt;p&gt;Nếu nhóm của bạn đã chạy &lt;a href="http://apidog.com/blog/claude-code-github-actions?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Claude Code với GitHub Actions&lt;/a&gt;, Codex SDK lấp đầy khoảng trống tương tự ở phía OpenAI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Các gói, giá cả và tính khả dụng
&lt;/h2&gt;

&lt;p&gt;Bản xem trước trên mobile mở cho &lt;strong&gt;mọi gói&lt;/strong&gt;, bao gồm Free và Go. Các nền tảng khác có giới hạn theo cấp độ.&lt;/p&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;Miễn phí&lt;/th&gt;
&lt;th&gt;Go&lt;/th&gt;
&lt;th&gt;Plus&lt;/th&gt;
&lt;th&gt;Pro&lt;/th&gt;
&lt;th&gt;Business&lt;/th&gt;
&lt;th&gt;Enterprise / Giáo dục&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Di động (iOS + Android)&lt;/td&gt;
&lt;td&gt;Có (xem trước)&lt;/td&gt;
&lt;td&gt;Có&lt;/td&gt;
&lt;td&gt;Có&lt;/td&gt;
&lt;td&gt;Có&lt;/td&gt;
&lt;td&gt;Có&lt;/td&gt;
&lt;td&gt;Có&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tích hợp Slack&lt;/td&gt;
&lt;td&gt;Không&lt;/td&gt;
&lt;td&gt;Không&lt;/td&gt;
&lt;td&gt;Có&lt;/td&gt;
&lt;td&gt;Có&lt;/td&gt;
&lt;td&gt;Có&lt;/td&gt;
&lt;td&gt;Có&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tiện ích mở rộng Chrome&lt;/td&gt;
&lt;td&gt;Có (xem trước)&lt;/td&gt;
&lt;td&gt;Có&lt;/td&gt;
&lt;td&gt;Có&lt;/td&gt;
&lt;td&gt;Có&lt;/td&gt;
&lt;td&gt;Có&lt;/td&gt;
&lt;td&gt;Có&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex SDK&lt;/td&gt;
&lt;td&gt;Giới hạn&lt;/td&gt;
&lt;td&gt;Giới hạn&lt;/td&gt;
&lt;td&gt;Có&lt;/td&gt;
&lt;td&gt;Có&lt;/td&gt;
&lt;td&gt;Có&lt;/td&gt;
&lt;td&gt;Có&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mã thông báo truy cập Enterprise&lt;/td&gt;
&lt;td&gt;Không&lt;/td&gt;
&lt;td&gt;Không&lt;/td&gt;
&lt;td&gt;Không&lt;/td&gt;
&lt;td&gt;Không&lt;/td&gt;
&lt;td&gt;Không&lt;/td&gt;
&lt;td&gt;Có&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Để đọc sâu hơn về chi phí theo cấp độ, xem &lt;a href="http://apidog.com/blog/gpt-5-5-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;bảng phân tích giá GPT-5.5&lt;/a&gt;. Nếu muốn thử Codex mà không phải trả phí, &lt;a href="http://apidog.com/blog/free-codex-open-source?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn Codex miễn phí cho mã nguồn mở&lt;/a&gt; sẽ hướng dẫn cách đăng ký.&lt;/p&gt;

&lt;h2&gt;
  
  
  Codex trên điện thoại so với các lựa chọn thay thế
&lt;/h2&gt;

&lt;p&gt;Các tác nhân lập trình trên mobile đã trở thành một danh mục riêng. Ba lựa chọn đáng chú ý:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI Codex&lt;/strong&gt;: UX mobile mạnh, tích hợp chặt với ChatGPT, có sẵn trên gói Free.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code trên di động&lt;/strong&gt;: &lt;a href="http://apidog.com/blog/claude-code-mobile?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Thiết lập Claude Code di động&lt;/a&gt; thường dựa trên phiên &lt;code&gt;tmux&lt;/code&gt; và SSH client. Tự làm nhiều hơn, nhưng phù hợp với công việc terminal chạy dài.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cursor trên điện thoại&lt;/strong&gt;: &lt;a href="http://apidog.com/blog/cursor-ai-phone?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Workflow mobile của Cursor&lt;/a&gt; dựa vào remote development và web preview của Cursor. Hợp lý nếu bạn đã dùng Cursor trên desktop.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu muốn so sánh chi tiết trước khi chọn workflow mobile, hãy đọc &lt;a href="http://apidog.com/blog/claude-vs-codex-comparison-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;phân tích Claude Code vs Codex 2026&lt;/a&gt;. Bài &lt;a href="http://apidog.com/blog/codex-vs-claude-code-vs-cursor-vs-copilot?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;so sánh Copilot vs Claude vs Cursor vs Codex&lt;/a&gt; bao quát nhiều lựa chọn hơn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Còn API của bạn thì sao?
&lt;/h2&gt;

&lt;p&gt;Một tác nhân lập trình trên điện thoại chỉ hữu ích nếu mã nó tạo ra hoạt động đúng trong môi trường thật. Với nhiều nhóm, API là phần dễ hỏng nhất.&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"&gt;Apidog&lt;/a&gt; cung cấp API client, trình soạn thảo OpenAPI và test runner tự động có thể chạy trên laptop hoặc trong CI.&lt;/p&gt;

&lt;p&gt;Một workflow thực tế:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Codex, từ mobile hoặc Slack, mở PR liên quan đến một endpoint.&lt;/li&gt;
&lt;li&gt;CI chạy bộ kiểm thử OpenAPI hiện có bằng Apidog trên preview deployment của PR.&lt;/li&gt;
&lt;li&gt;Nếu test pass, bạn review diff trên điện thoại.&lt;/li&gt;
&lt;li&gt;Nếu diff hợp lý, bạn approve hoặc merge.&lt;/li&gt;
&lt;li&gt;Nếu test fail, bạn yêu cầu Codex sửa theo log lỗi.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ví dụ prompt có thể dùng sau khi CI fail:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CI đang fail ở test OpenAPI cho endpoint POST /orders.
Đọc log lỗi, xác định nguyên nhân và đề xuất bản sửa tối thiểu.
Không thay đổi schema nếu không cần thiết.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="http://apidog.com/blog/how-to-test-chatgpt-api-with-apidog?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 ChatGPT bằng Apidog&lt;/a&gt; và bài &lt;a href="http://apidog.com/blog/how-to-test-ai-agents-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách kiểm thử các tác nhân AI gọi API của bạn&lt;/a&gt; bao gồm các phần kết nối. Bạn cũng 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; nếu muốn thử workflow này.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Codex trên di động có hoạt động ngoại tuyến không?
&lt;/h3&gt;

&lt;p&gt;Không. Codex chạy trên đám mây của OpenAI hoặc môi trường đã kết nối của bạn. Khi không có mạng, ứng dụng có thể hiển thị trạng thái cuối cùng đã biết, nhưng không thể bắt đầu tác vụ mới.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tôi có thể chỉnh sửa mã trực tiếp trong ứng dụng di động không?
&lt;/h3&gt;

&lt;p&gt;Không theo cách bạn chỉnh trong IDE. Bạn có thể viết prompt, xem diff, bình luận và phê duyệt. Mobile là giao diện điều khiển cho tác nhân từ xa, không phải trình soạn thảo mã đầy đủ.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phiên bản di động có chậm hơn máy tính để bàn không?
&lt;/h3&gt;

&lt;p&gt;Tác nhân vẫn chạy trên cùng backend. Điểm chậm hơn thường đến từ màn hình nhỏ: diff dài khó đọc hơn trên điện thoại. Workflow hợp lý là đọc tóm tắt và phê duyệt thay đổi nhỏ trên mobile, còn review lớn thì chuyển sang desktop.&lt;/p&gt;

&lt;h3&gt;
  
  
  Codex di động có hỗ trợ nhập liệu bằng giọng nói không?
&lt;/h3&gt;

&lt;p&gt;Có, thông qua chế độ giọng nói hiện có của ChatGPT. Bạn có thể đọc prompt cho Codex giống như khi nhập một tin nhắn ChatGPT khác.&lt;/p&gt;

&lt;h3&gt;
  
  
  Điều gì xảy ra nếu tôi mất tín hiệu khi đang phê duyệt?
&lt;/h3&gt;

&lt;p&gt;Tác vụ vẫn tiếp tục chạy phía cloud. Khi kết nối lại, trạng thái sẽ được cập nhật. Codex không yêu cầu phiên mobile luôn mở để tiếp tục hoạt động.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quản trị viên doanh nghiệp có thể tắt Codex di động không?
&lt;/h3&gt;

&lt;p&gt;Có. Chủ sở hữu workspace có thể hạn chế quyền truy cập Codex từ bảng quản trị. Các nút chuyển đổi kiểm soát quyền truy cập trên desktop cũng áp dụng cho mobile.&lt;/p&gt;

&lt;h3&gt;
  
  
  Codex trên di động có tốn thêm chi phí không?
&lt;/h3&gt;

&lt;p&gt;Không có phí riêng cho ứng dụng mobile. Chi phí phụ thuộc vào gói và năng lực Codex cơ bản bạn đang sử dụng. &lt;a href="http://apidog.com/blog/gpt-5-5-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Bài viết về giá Codex&lt;/a&gt; có phân tích chi tiết hơn.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cái này có khác với mô hình "Codex" cũ không?
&lt;/h3&gt;

&lt;p&gt;Có. Codex hiện tại là sản phẩm tác nhân lập trình, không phải mô hình Codex 2021 đã ngừng phát triển. Nếu bạn vẫn nghĩ đến endpoint API cũ, &lt;a href="http://apidog.com/blog/openai-codex-cli?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;phần giới thiệu Codex CLI&lt;/a&gt; sẽ giúp bạn cập nhật cách sản phẩm hoạt động trong năm 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hãy thử ngay tối nay
&lt;/h2&gt;

&lt;p&gt;Vòng lặp nhỏ nhất:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cập nhật ứng dụng ChatGPT.&lt;/li&gt;
&lt;li&gt;Đăng nhập đúng tài khoản.&lt;/li&gt;
&lt;li&gt;Liên kết một môi trường Codex.&lt;/li&gt;
&lt;li&gt;Chọn một repository nhỏ.&lt;/li&gt;
&lt;li&gt;Yêu cầu Codex sửa một dòng trong README.&lt;/li&gt;
&lt;li&gt;Review diff trên điện thoại.&lt;/li&gt;
&lt;li&gt;Phê duyệt nếu đúng.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sau khi workflow đó chạy ổn, hãy thêm Slack để giao việc từ cuộc trò chuyện nhóm, rồi dùng SDK nếu bạn muốn tự động hóa bằng CI hoặc script nội bộ.&lt;/p&gt;

&lt;p&gt;Nếu muốn giữ hợp đồng API chính xác trong khi Codex tạo mã từ điện thoại, hãy kết hợp nó với &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ác nhân viết mã; bộ kiểm thử phát hiện lỗi hồi quy.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Hướng Dẫn Sử Dụng API ERNIE 5.1 Chi Tiết</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Thu, 14 May 2026 08:39:35 +0000</pubDate>
      <link>https://forem.com/sebbasstian/huong-dan-su-dung-api-ernie-51-chi-tiet-2gn4</link>
      <guid>https://forem.com/sebbasstian/huong-dan-su-dung-api-ernie-51-chi-tiet-2gn4</guid>
      <description>&lt;p&gt;&lt;a href="https://ernie.baidu.com/blog/posts/ernie-5.1-0508-release/" rel="noopener noreferrer"&gt;ERNIE 5.1&lt;/a&gt; ra mắt ngày 9 tháng 5 năm 2026, và trong vòng một tuần, API Qianfan đã hỗ trợ mô hình này. Nếu bạn muốn gọi ERNIE 5.1 từ mã nguồn, định tuyến tool call, hoặc đưa nó vào vòng lặp tác nhân với &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ài viết này hướng dẫn từng bước: tạo tài khoản, lấy khóa, gửi request, streaming, tool calling và xử lý lỗ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;Mục tiêu là có thể chạy được ngay. Bạn sẽ có ví dụ &lt;code&gt;curl&lt;/code&gt;, Python, Node.js và một bộ request có thể nhập vào Apidog để kiểm thử.&lt;/p&gt;

&lt;p&gt;Nếu bạn chưa đọc bài &lt;a href="http://apidog.com/blog/what-is-ernie-5-1?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;phân tích ra mắt ERNIE 5.1&lt;/a&gt;, hãy đọc lướt trước; bài đó bao gồm benchmark và so sánh với &lt;a href="http://apidog.com/blog/what-is-deepseek-v4?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;DeepSeek V4&lt;/a&gt; và &lt;a href="http://apidog.com/blog/what-is-kimi-k2-6?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K2.6&lt;/a&gt;. Bài này tập trung vào phần triển khai.&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.amazonaws.com%2Fuploads%2Farticles%2Fnotx8fu4ycf94nycb6wj.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.amazonaws.com%2Fuploads%2Farticles%2Fnotx8fu4ycf94nycb6wj.png" alt="ERNIE 5.1" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Bước 1: Lấy khóa API Qianfan
&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://apidog.com/blog/what-is-ernie-5-1/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ERNIE 5.1&lt;/a&gt; được cung cấp qua nền tảng Qianfan của Baidu Intelligent Cloud. Không có “API ERNIE” riêng biệt; tất cả request đều đi qua Qianfan.&lt;/p&gt;

&lt;p&gt;Thực hiện các bước sau:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Truy cập &lt;a href="https://cloud.baidu.com" rel="noopener noreferrer"&gt;cloud.baidu.com&lt;/a&gt; và tạo hoặc đăng nhập tài khoản Baidu Intelligent Cloud. Nhà phát triển quốc tế có thể đăng ký bằng email; một số tính năng doanh nghiệp vẫn yêu cầu số điện thoại Trung Quốc đại lục.&lt;/li&gt;
&lt;li&gt;Mở bảng điều khiển Qianfan tại &lt;a href="https://console.bce.baidu.com/qianfan/" rel="noopener noreferrer"&gt;console.bce.baidu.com/qianfan&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Vào &lt;strong&gt;Quản lý khóa API&lt;/strong&gt; (&lt;code&gt;API Key 管理&lt;/code&gt;) và chọn &lt;strong&gt;Tạo khóa API&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Chọn workspace và cấp quyền truy cập dịch vụ chat-completions.&lt;/li&gt;
&lt;li&gt;Sao chép khóa. Khóa có dạng &lt;code&gt;bce-v3/ALTAK-xxxx/xxxx&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Không hard-code khóa trong source code. Lưu và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 shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;QIANFAN_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"bce-v3/ALTAK-xxxx/xxxx"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Có hai điểm cần lưu ý:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Endpoint v2 dùng Bearer token duy nhất. Luồng &lt;code&gt;access_token&lt;/code&gt; OAuth v1 cũ đang bị loại bỏ, không nên dùng cho mã mới.&lt;/li&gt;
&lt;li&gt;ERNIE 5.1 là mô hình trả phí ngay từ đầu. Hãy nạp một số dư nhỏ, ví dụ ¥10, trước khi gửi request đầu tiên.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Bước 2: Gửi request bằng curl tới endpoint tương thích OpenAI
&lt;/h2&gt;

&lt;p&gt;Qianfan cung cấp endpoint chat-completions tương thích với OpenAI. Nếu hệ thống của bạn đã dùng định dạng OpenAI, bạn chỉ cần đổi base URL và model ID.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Base URL:&lt;/strong&gt; &lt;code&gt;https://qianfan.baidubce.com/v2&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model ID:&lt;/strong&gt; &lt;code&gt;ernie-5.1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model preview:&lt;/strong&gt; &lt;code&gt;ernie-5.1-preview&lt;/code&gt; cho một số tính năng truy cập sớm&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Request tối thiểu:&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://qianfan.baidubce.com/v2/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;$QIANFAN_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": "ernie-5.1",
    "messages": [
      {"role": "system", "content": "You are a senior API designer."},
      {"role": "user", "content": "Sketch a REST schema for a GitHub-style PR review API. Be concise."}
    ],
    "temperature": 0.3
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response có dạng tương thích OpenAI:&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;"chatcmpl-..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"object"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"chat.completion"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"created"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1746780000&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;"ernie-5.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"choices"&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;"index"&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;"message"&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;"assistant"&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;"..."&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;"finish_reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stop"&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;"usage"&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;"prompt_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;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"completion_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;318&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_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;360&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;Cách xử lý lỗi nhanh:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;401 Unauthorized&lt;/code&gt;: khóa sai hoặc đã hết hạn.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;403&lt;/code&gt;: khóa hợp lệ nhưng workspace chưa bật model ERNIE 5.1. Vào console và thêm model vào danh sách được phép.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Bước 3: Gọi ERNIE 5.1 từ Python
&lt;/h2&gt;

&lt;p&gt;Vì endpoint tương thích OpenAI, bạn có thể dùng SDK Python &lt;code&gt;openai&lt;/code&gt; và chỉ cần đổi &lt;code&gt;base_url&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Cài SDK nếu chưa có:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;openai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ví dụ gọi chat completion:&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;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;QIANFAN_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;https://qianfan.baidubce.com/v2&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;ernie-5.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;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 explain APIs in plain English.&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;Why would I use server-sent events over WebSockets for a chat UI?&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;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.4&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="nf"&gt;print&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="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Tokens used: &lt;/span&gt;&lt;span class="si"&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;usage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total_tokens&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nếu bạn đã có wrapper quanh OpenAI SDK, thử nghiệm A/B với ERNIE 5.1 thường chỉ cần đổi &lt;code&gt;base_url&lt;/code&gt; và &lt;code&gt;model&lt;/code&gt;. Cách này cũng tương tự với &lt;a href="http://apidog.com/blog/how-to-use-deepseek-v4-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;API của DeepSeek&lt;/a&gt; và nhiều nhà cung cấp mô hình Trung Quốc khác.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bước 4: Streaming token cho giao diện chat
&lt;/h2&gt;

&lt;p&gt;Với UI chat, nên bật streaming để người dùng thấy phản hồi ngay khi model sinh token.&lt;/p&gt;

&lt;p&gt;Trong Python, đặt &lt;code&gt;stream=True&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;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;ernie-5.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;messages&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;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 haiku about API versioning.&lt;/span&gt;&lt;span class="sh"&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="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&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="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;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;Request &lt;code&gt;curl&lt;/code&gt; tương đương để debug:&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://qianfan.baidubce.com/v2/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;$QIANFAN_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": "ernie-5.1",
    "stream": true,
    "messages": [{"role": "user", "content": "Stream a 3-sentence joke."}]
  }'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--no-buffer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Định dạng stream giống OpenAI: các dòng &lt;code&gt;data: {...}&lt;/code&gt; và 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;h2&gt;
  
  
  Bước 5: Dùng ERNIE 5.1 với tool calling
&lt;/h2&gt;

&lt;p&gt;ERNIE 5.1 được nhấn mạnh ở khả năng dùng công cụ. Theo thông tin ra mắt, mô hình đạt điểm cao hơn DeepSeek-V4-Pro trên τ³-bench và SpreadsheetBench-Verified, nghĩa là tool calling được tối ưu cho các tình huống thực tế hơn là chỉ demo.&lt;/p&gt;

&lt;p&gt;Schema tool giống function calling của OpenAI:&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 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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;unit&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;enum&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;celsius&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;fahrenheit&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;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;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;ernie-5.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;messages&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;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 Tokyo right now?&lt;/span&gt;&lt;span class="sh"&gt;"&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_calls&lt;/span&gt; &lt;span class="o"&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;tool_calls&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tool_calls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="o"&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Model wants to call: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;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="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;(&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;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="si"&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sau khi code của bạn chạy công cụ thực tế, hãy nối kết quả vào &lt;code&gt;messages&lt;/code&gt; dưới dạng message có role &lt;code&gt;tool&lt;/code&gt;, rồi gọi lại model. Vòng lặp kết thúc khi:&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;finish_reason&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stop&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;và &lt;code&gt;tool_calls&lt;/code&gt; rỗng.&lt;/p&gt;

&lt;p&gt;Một điểm nên xử lý phòng ngừa: ERNIE 5.1 đôi khi trả về arguments của tool dưới dạng JSON được bọc trong code block thay vì chuỗi JSON thuần. Hãy parse bằng &lt;code&gt;json.loads()&lt;/code&gt; trong &lt;code&gt;try/except&lt;/code&gt;; nếu lỗi, loại bỏ phần&lt;br&gt;
&lt;br&gt;
 ```json trước khi parse lại.&lt;/p&gt;

&lt;p&gt;Ví dụ helper đơn giản:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
python
import json
import re

def parse_tool_arguments(raw):
    try:
        return json.loads(raw)
    except json.JSONDecodeError:
        cleaned = re.sub(r"^

```json|```

$", "", raw.strip(), flags=re.MULTILINE).strip()
        return json.loads(cleaned)


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Bước 6: Gọi ERNIE 5.1 từ Node.js
&lt;/h2&gt;

&lt;p&gt;Với dự án Node.js dùng &lt;code&gt;openai&lt;/code&gt; v5+, cấu hình tương tự Python.&lt;/p&gt;

&lt;p&gt;Cài package:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
npm install openai


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
javascript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.QIANFAN_API_KEY,
  baseURL: "https://qianfan.baidubce.com/v2",
});

const completion = await client.chat.completions.create({
  model: "ernie-5.1",
  messages: [
    { role: "user", content: "Return a JSON object with 3 API design tips." },
  ],
  response_format: { type: "json_object" },
});

console.log(completion.choices[0].message.content);


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;response_format: { type: "json_object" }&lt;/code&gt; hoạt động và đáng dùng khi bạn cần JSON. Tuy nhiên, JSON schema nghiêm ngặt (&lt;code&gt;json_schema&lt;/code&gt;) vẫn đang được triển khai trên Qianfan, nên hãy validate response trong code thay vì chỉ dựa vào ràng buộc từ model.&lt;/p&gt;

&lt;p&gt;Ví dụ validate tối thiểu:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
javascript
const raw = completion.choices[0].message.content;

let data;
try {
  data = JSON.parse(raw);
} catch {
  throw new Error("Model did not return valid JSON");
}

if (!Array.isArray(data.tips)) {
  throw new Error("Invalid response shape: expected tips array");
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Bước 7: Kiểm thử và so sánh bằng Apidog
&lt;/h2&gt;

&lt;p&gt;Nếu bạn đang so sánh ERNIE 5.1, DeepSeek V4 và Kimi K2.6, không nên quản lý mọi thứ bằng nhiều lệnh terminal rời rạc. 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; để tạo một workspace duy nhất, mỗi nhà cung cấp là một thư mục, cùng body request và môi trường riêng cho từng API key.&lt;/p&gt;

&lt;p&gt;Thiết lập trong khoảng 60 giây:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mở Apidog và tạo project mới tên “LLM bake-off.”&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.amazonaws.com%2Fuploads%2Farticles%2Fmkj1xsii36sp44c77742.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.amazonaws.com%2Fuploads%2Farticles%2Fmkj1xsii36sp44c77742.png" alt="Tạo project trong Apidog" width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Thêm environment với các biến:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
text
QIANFAN_API_KEY
DEEPSEEK_API_KEY
MOONSHOT_API_KEY


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.amazonaws.com%2Fuploads%2Farticles%2F9eyzavfgqsn9nfzc7ixh.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.amazonaws.com%2Fuploads%2Farticles%2F9eyzavfgqsn9nfzc7ixh.png" alt="Tạo environment trong Apidog" width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tạo ba request, mỗi request trỏ tới base URL của từng nhà cung cấp.&lt;/li&gt;
&lt;li&gt;Đặt &lt;code&gt;model&lt;/code&gt; lần lượt là:&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
text
ernie-5.1
deepseek-chat
kimi-k2-6


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;Dùng cùng một mảng &lt;code&gt;messages&lt;/code&gt; cho cả ba request.&lt;/li&gt;
&lt;li&gt;Dùng tính năng &lt;strong&gt;Run&lt;/strong&gt; của Apidog để chạy song song và so sánh output.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Gói miễn phí đủ để làm việc này. &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; lưu lịch sử request theo environment, nên bạn có thể quay lại tuần sau và chạy lại cùng một bài đánh giá với phiên bản model mới. Cách này dễ kiểm soát hơn nhiều so với việc giữ nhiều lệnh &lt;code&gt;curl&lt;/code&gt; trong &lt;code&gt;tmux&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Để xem thêm về kiểm thử đa nhà cung cấp, đọc &lt;a href="http://apidog.com/blog/test-local-llms-as-apis?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kiểm thử LLM cục bộ dưới dạng API&lt;/a&gt; và &lt;a href="http://apidog.com/blog/how-to-use-glm-5-1-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;hướng dẫn API GLM 5.1&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Giá cả, giới hạn tốc độ và hạn mức
&lt;/h2&gt;

&lt;p&gt;Giá công khai của Qianfan cho ERNIE 5.1 không có trong bài phát hành. Hãy kiểm tra bảng giá trực tiếp trong console trước khi báo cáo số liệu nội bộ.&lt;/p&gt;

&lt;p&gt;Ba điểm thực tế cần xử lý trong quá trình tích hợp:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rate limit áp dụng theo workspace.&lt;/strong&gt; Tài khoản mới thường có QPS thấp. Sau khi thử nghiệm xong, hãy nâng giới hạn trong console nếu cần production traffic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token usage có trong response.&lt;/strong&gt; Trường &lt;code&gt;usage&lt;/code&gt; gồm &lt;code&gt;prompt_tokens&lt;/code&gt;, &lt;code&gt;completion_tokens&lt;/code&gt; và &lt;code&gt;total_tokens&lt;/code&gt;. Hãy log các giá trị này cho từng request để tự tính chi phí.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Không có prompt caching tự động.&lt;/strong&gt; Qianfan hiện không cung cấp cơ chế lưu prompt gốc cho ERNIE 5.1 như Anthropic. Nếu system prompt dài 2.000 token, bạn sẽ trả phí cho phần đó ở mỗi lần gọi. Hãy thiết kế prompt và context window cho phù hợp.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ví dụ log token usage:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
python
response = client.chat.completions.create(
    model="ernie-5.1",
    messages=messages,
)

usage = response.usage

print({
    "prompt_tokens": usage.prompt_tokens,
    "completion_tokens": usage.completion_tokens,
    "total_tokens": usage.total_tokens,
})


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Xử lý lỗi thường gặp
&lt;/h2&gt;

&lt;p&gt;Các lỗi bạn sẽ gặp trong thực tế:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Trạng thái&lt;/th&gt;
&lt;th&gt;Ý nghĩa&lt;/th&gt;
&lt;th&gt;Cách khắc phục&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;401&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bearer token sai hoặc đã hết hạn&lt;/td&gt;
&lt;td&gt;Tạo lại khóa từ console&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;403&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Model chưa được bật cho workspace&lt;/td&gt;
&lt;td&gt;Thêm ERNIE 5.1 trong console&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;429&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Đạt giới hạn tốc độ&lt;/td&gt;
&lt;td&gt;Dừng lại và retry với jitter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;400&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Message không hợp lệ&lt;/td&gt;
&lt;td&gt;Kiểm tra thứ tự role user/assistant&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;500/502&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Lỗi tạm thời phía Qianfan&lt;/td&gt;
&lt;td&gt;Retry một lần; nếu tiếp diễn, kiểm tra trang trạng thái&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Mọi lời gọi production nên có retry với exponential backoff, giới hạn tối đa 3 lần. Nếu chạy production, hãy ghi lại &lt;code&gt;request_id&lt;/code&gt; từ response headers; bộ phận hỗ trợ của Baidu cần giá trị này khi debug.&lt;/p&gt;
&lt;h2&gt;
  
  
  Wrapper Python tối thiểu cho production
&lt;/h2&gt;

&lt;p&gt;Nếu muốn đưa ERNIE 5.1 vào ứng dụng ngay, đây là wrapper nhỏ gọn để xử lý phần lớn tình huống phổ biến:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
python
import os
import time
import random
from openai import OpenAI, RateLimitError, APIError

client = OpenAI(
    api_key=os.environ["QIANFAN_API_KEY"],
    base_url="https://qianfan.baidubce.com/v2",
)

def chat(messages, *, model="ernie-5.1", temperature=0.3, max_retries=3):
    for attempt in range(max_retries):
        try:
            return client.chat.completions.create(
                model=model,
                messages=messages,
                temperature=temperature,
            )
        except RateLimitError:
            time.sleep((2 ** attempt) + random.random())
        except APIError as e:
            if e.status_code and e.status_code &amp;gt;= 500 and attempt &amp;lt; max_retries - 1:
                time.sleep(1 + attempt)
                continue
            raise

    raise RuntimeError("ERNIE 5.1 retries exhausted")


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Dùng wrapper:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
python
messages = [
    {"role": "system", "content": "You are a concise API assistant."},
    {"role": "user", "content": "Design a pagination scheme for a REST API."},
]

response = chat(messages)

print(response.choices[0].message.content)


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wrapper này xử lý phần retry cơ bản. Với streaming và tool calling, hãy mở rộng từ cùng cấu trúc này.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;API ERNIE 5.1 có miễn phí không?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Không. Qianfan hoạt động theo mô hình trả tiền theo mức sử dụng. Không có gói miễn phí vĩnh viễn; tài khoản mới đôi khi nhận được credit thử nghiệm. Nếu muốn thử miễn phí, dùng giao diện chat tại &lt;a href="https://ernie.baidu.com" rel="noopener noreferrer"&gt;ernie.baidu.com&lt;/a&gt; hoặc xem các &lt;a href="http://apidog.com/blog/free-llm-openclaw-web-search?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;tùy chọn LLM miễn phí&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tôi có thể chạy ERNIE 5.1 cục bộ không?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Không. Không có trọng số công khai. Nếu bắt buộc triển khai tại chỗ, hãy xem &lt;a href="http://apidog.com/blog/how-to-run-deepseek-v4-locally?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;cách chạy DeepSeek V4 cục bộ&lt;/a&gt; hoặc &lt;a href="http://apidog.com/blog/best-local-llms-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;các LLM cục bộ tốt nhất năm 2026&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenAI SDK có hoạt động mà không cần sửa nhiều không?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Có. Đặt &lt;code&gt;base_url&lt;/code&gt; thành &lt;code&gt;https://qianfan.baidubce.com/v2&lt;/code&gt; và &lt;code&gt;api_key&lt;/code&gt; thành khóa Qianfan. Trường &lt;code&gt;model&lt;/code&gt; dùng ID model của Qianfan, không phải OpenAI. Function calling, streaming và &lt;code&gt;response_format: json_object&lt;/code&gt; đều hoạt động. Xác thực &lt;code&gt;json_schema&lt;/code&gt; nghiêm ngặt vẫn đang được triển khai.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ERNIE 5.1 xử lý prompt tiếng Trung và tiếng Anh như thế nào?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cả hai đều là ưu tiên chính. Điểm Arena Search 1.223 đến từ nhóm bình chọn đa ngôn ngữ. Với tác vụ kỹ thuật tiếng Anh như code và thiết kế API, mô hình cạnh tranh với các model tiên tiến. Với viết sáng tạo tiếng Trung, nó là một trong những model Trung Quốc mạnh nhất.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chiều dài output tối đa là bao nhiêu?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Chưa được công bố chính thức. Trong thực tế, response đơn lượt thường giới hạn khoảng 8K token trước khi model kết thúc. Với tác vụ tạo văn bản dài, hãy chia nhỏ nội dung và tiếp tục theo từng phần.&lt;/p&gt;

&lt;p&gt;Nếu bạn đang xây dựng tác nhân trên ERNIE 5.1, 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 Apidog&lt;/a&gt; và dùng bộ request tương thích OpenAI để mock, kiểm thử và tài liệu hóa endpoint Qianfan cùng các service còn lại.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>ERNIE 5.1 là gì? Mô hình MoE mới của Baidu</title>
      <dc:creator>Sebastian Petrus</dc:creator>
      <pubDate>Thu, 14 May 2026 07:16:00 +0000</pubDate>
      <link>https://forem.com/sebbasstian/ernie-51-la-gi-mo-hinh-moe-moi-cua-baidu-3h84</link>
      <guid>https://forem.com/sebbasstian/ernie-51-la-gi-mo-hinh-moe-moi-cua-baidu-3h84</guid>
      <description>&lt;p&gt;Baidu đã phát hành &lt;a href="https://ernie.baidu.com/blog/posts/ernie-5.1-0508-release/" rel="noopener noreferrer"&gt;ERNIE 5.1&lt;/a&gt; vào ngày 9 tháng 5 năm 2026. Điểm đáng chú ý: đây là mô hình Mixture-of-Experts (MoE) có tổng số tham số khoảng một phần ba ERNIE 5.0, đạt &lt;strong&gt;hạng 4 toàn cầu trên Arena Search&lt;/strong&gt; và đứng đầu trong nhóm mô hình Trung Quốc với điểm 1.223.&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 hôm nay&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;ERNIE 5.1 là phiên bản đầu tiên trong dòng ERNIE được Baidu định vị rõ ràng cho các workload tác nhân: gọi công cụ, suy luận nhiều bước và viết dài. Nếu bạn đang xây dựng hệ thống agent 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;, hoặc đang so sánh các mô hình Trung Quốc như &lt;a href="http://apidog.com/blog/what-is-deepseek-v4?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;DeepSeek V4&lt;/a&gt; và &lt;a href="http://apidog.com/blog/what-is-kimi-k2-6?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K2.6&lt;/a&gt;, ERNIE 5.1 là một lựa chọn đáng đưa vào benchmark nội bộ.&lt;/p&gt;

&lt;p&gt;Bài viết này tập trung vào phần triển khai: ERNIE 5.1 là gì, bạn có thể thử ở đâu, cần kiểm thử những gì, và nên đặt nó vào stack LLM như thế nào.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR: ERNIE 5.1 trong một đoạn
&lt;/h2&gt;

&lt;p&gt;ERNIE 5.1 là mô hình MoE chỉ văn bản. Baidu cho biết chi phí tiền huấn luyện của nó chỉ khoảng 6% so với các mô hình tiên phong tương đương, tổng số tham số khoảng một phần ba ERNIE 5.0, và số tham số hoạt động trên mỗi lượt truyền tiến khoảng một nửa. Mô hình đạt 1.223 điểm trên Arena Search, vượt DeepSeek-V4-Pro trên τ³-bench và SpreadsheetBench-Verified, đồng thời đạt 99.6 trên AIME26 khi dùng công cụ. Bạn có thể thử qua &lt;a href="https://ernie.baidu.com" rel="noopener noreferrer"&gt;giao diện chat ERNIE&lt;/a&gt;, ERNIE 5.1 Playground trên Baidu AI Studio, hoặc API Qianfan.&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%2F05%2Fimage-78.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%2F05%2Fimage-78.png" alt="" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Vì sao developer nên quan tâm
&lt;/h2&gt;

&lt;p&gt;Có ba điểm đáng chú ý khi đánh giá ERNIE 5.1 cho ứng dụng thực tế.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Tỷ lệ chi phí / chất lượng
&lt;/h3&gt;

&lt;p&gt;Baidu tuyên bố chi phí tiền huấn luyện chỉ khoảng 6% so với các mô hình tương đương. Nếu chi phí này được phản ánh vào giá API Qianfan, ERNIE 5.1 có thể trở thành một lựa chọn cloud rẻ hơn cho các workload agent và tìm kiếm tăng cường.&lt;/p&gt;

&lt;p&gt;Khi đánh giá, đừng chỉ nhìn benchmark. Hãy đo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chi phí mỗi request thực tế&lt;/li&gt;
&lt;li&gt;Độ trễ trung bình và p95&lt;/li&gt;
&lt;li&gt;Tỷ lệ tool call đúng&lt;/li&gt;
&lt;li&gt;Tỷ lệ hallucination trong dữ liệu nghiệp vụ của bạn&lt;/li&gt;
&lt;li&gt;Chi phí retry khi model gọi sai công cụ&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. MoE định tuyến theo ba trục
&lt;/h3&gt;

&lt;p&gt;Baidu mô tả ERNIE 5.1 là MoE có định tuyến linh hoạt theo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Chiều sâu&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chiều rộng&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Độ thưa thớt&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Điều này giúp giảm số tham số hoạt động mà vẫn giữ hiệu năng ở các tác vụ gọi công cụ. Về mặt triển khai, bạn nên xem ERNIE 5.1 như một model cloud tối ưu chi phí, không phải model có thể self-host.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Agent là use case chính
&lt;/h3&gt;

&lt;p&gt;ERNIE 5.0 được nhắc nhiều ở khả năng kiến thức và viết sáng tạo. ERNIE 5.1 được Baidu quảng bá trực tiếp cho tác nhân và tool use. Điều này quan trọng nếu bạn đang xây dựng các workflow như:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chatbot có gọi API nội bộ&lt;/li&gt;
&lt;li&gt;Agent xử lý bảng tính&lt;/li&gt;
&lt;li&gt;Trợ lý tìm kiếm có trích dẫn&lt;/li&gt;
&lt;li&gt;Workflow nhiều bước có state&lt;/li&gt;
&lt;li&gt;LLM router cho nhiều nhà cung cấp&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%2F05%2Fimage-79.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%2F05%2Fimage-79.png" alt="" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmark: ERNIE 5.1 so với các model khác
&lt;/h2&gt;

&lt;p&gt;Dưới đây là các số liệu Baidu đã công bố và ý nghĩa thực tế khi triển khai.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;ERNIE 5.1&lt;/th&gt;
&lt;th&gt;Kiểm tra gì&lt;/th&gt;
&lt;th&gt;Đối thủ gần nhất&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Arena Search&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;1,223&lt;/strong&gt; — hạng 4 toàn cầu, hạng 1 Trung Quốc&lt;/td&gt;
&lt;td&gt;QA có nhận thức tìm kiếm, do con người đánh giá&lt;/td&gt;
&lt;td&gt;Gemini 3.1 Pro, GPT-5.x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;τ³-bench&lt;/td&gt;
&lt;td&gt;Vượt DeepSeek-V4-Pro&lt;/td&gt;
&lt;td&gt;Tool use đa lượt, tác vụ agent&lt;/td&gt;
&lt;td&gt;&lt;a href="http://apidog.com/blog/what-is-deepseek-v4?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;DeepSeek-V4-Pro&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SpreadsheetBench-Verified&lt;/td&gt;
&lt;td&gt;Vượt DeepSeek-V4-Pro&lt;/td&gt;
&lt;td&gt;Tác vụ bảng tính thực tế&lt;/td&gt;
&lt;td&gt;DeepSeek-V4-Pro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AIME26 có công cụ&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;99.6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Toán với trình thông dịch mã&lt;/td&gt;
&lt;td&gt;GPT-5.x, Gemini 3.1 Pro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPQA&lt;/td&gt;
&lt;td&gt;“Tiếp cận các model nguồn đóng hàng đầu”&lt;/td&gt;
&lt;td&gt;QA khoa học cấp sau đại học&lt;/td&gt;
&lt;td&gt;Claude Sonnet 4.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MMLU-Pro&lt;/td&gt;
&lt;td&gt;“Tiếp cận các model nguồn đóng hàng đầu”&lt;/td&gt;
&lt;td&gt;Kiến thức tổng quát&lt;/td&gt;
&lt;td&gt;Các model frontier&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Cần đọc benchmark này một cách thận trọng:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arena Search phụ thuộc vào tập prompt và nhóm người đánh giá.&lt;/li&gt;
&lt;li&gt;AIME26 được đo trong chế độ có công cụ, không phải suy luận thuần túy.&lt;/li&gt;
&lt;li&gt;Baidu mô tả viết sáng tạo là “tiếp cận Gemini 3.1 Pro”, không tuyên bố vượt.&lt;/li&gt;
&lt;li&gt;Các benchmark agent như τ³-bench và SpreadsheetBench đáng chú ý hơn nếu bạn đang xây dựng workflow gọi công cụ.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Kiến trúc: những gì đã biết
&lt;/h2&gt;

&lt;p&gt;Baidu chưa công bố chi tiết như một technical paper đầy đủ, nhưng các thông tin sau đã được xác nhận:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tổng số tham số:&lt;/strong&gt; khoảng một phần ba ERNIE 5.0&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tham số hoạt động trên mỗi token:&lt;/strong&gt; khoảng một nửa ERNIE 5.0&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Định tuyến:&lt;/strong&gt; theo chiều sâu, chiều rộng và độ thưa thớt&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chi phí tiền huấn luyện:&lt;/strong&gt; khoảng 6% so với “các model tương đương”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Phương thức:&lt;/strong&gt; chỉ văn bản khi ra mắt&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ngôn ngữ:&lt;/strong&gt; có bản tiếng Trung và tiếng Anh&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Những điểm chưa được công bố:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Độ dài context window&lt;/li&gt;
&lt;li&gt;Tổng số tham số chính xác&lt;/li&gt;
&lt;li&gt;Số expert&lt;/li&gt;
&lt;li&gt;Ngân sách token huấn luyện&lt;/li&gt;
&lt;li&gt;Trọng số để self-host&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nếu bạn từng tích hợp các mô hình MoE Trung Quốc như &lt;a href="http://apidog.com/blog/how-to-use-glm-5-1-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;GLM 5.1&lt;/a&gt;, hãy chuẩn bị quy trình đánh giá tương tự: kiểm tra độ ổn định output, latency, tool calling và khả năng xử lý prompt dài.&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%2F05%2Fimage-80.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%2F05%2Fimage-80.png" alt="" width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Những gì bạn chưa nên thiết kế dựa vào ERNIE 5.1
&lt;/h2&gt;

&lt;p&gt;Trước khi đưa ERNIE 5.1 vào production, cần ghi nhớ các giới hạn sau.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Không có đầu vào hình ảnh.&lt;/strong&gt; ERNIE 5.1 chỉ xử lý văn bản. Nếu workflow cần thị giác, bạn cần ERNIE-VL hoặc model vision khác.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Không có audio input/output.&lt;/strong&gt; Không hỗ trợ giọng nói tự nhiên hoặc realtime voice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chưa công bố context window.&lt;/strong&gt; Với tài liệu dài, hãy chunk input và thêm bước retrieval thay vì gửi toàn bộ tài liệu.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Không có trọng số HuggingFace.&lt;/strong&gt; Đây là model hosted-only. Nếu cần chạy tại chỗ, hãy xem &lt;a href="http://apidog.com/blog/how-to-run-deepseek-v4-locally?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;DeepSeek V4 cục bộ&lt;/a&gt; hoặc một &lt;a href="http://apidog.com/blog/best-local-llms-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;LLM cục bộ&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Khi nào nên chọn ERNIE 5.1
&lt;/h2&gt;

&lt;p&gt;Nếu bạn đang so sánh ERNIE 5.1 với DeepSeek, Kimi, GLM hoặc Qwen, có thể dùng ma trận quyết định sau.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chọn ERNIE 5.1 khi
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;Agent gọi công cụ ổn định&lt;/li&gt;
&lt;li&gt;Trả lời có hỗ trợ tìm kiếm bằng tiếng Trung hoặc tiếng Anh&lt;/li&gt;
&lt;li&gt;Model cloud Trung Quốc có tiềm năng chi phí thấp&lt;/li&gt;
&lt;li&gt;API hosted thay vì self-host&lt;/li&gt;
&lt;li&gt;Benchmark tốt trên tác vụ bảng tính và tool use&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Chọn DeepSeek V4 khi
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;Trọng số mở&lt;/li&gt;
&lt;li&gt;Triển khai tại chỗ&lt;/li&gt;
&lt;li&gt;Kiểm soát hạ tầng&lt;/li&gt;
&lt;li&gt;Suy luận toán học thuần túy mạnh&lt;/li&gt;
&lt;li&gt;Tích hợp với stack đã dùng DeepSeek&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Xem thêm: &lt;a href="http://apidog.com/blog/use-deepseek-v4?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;DeepSeek V4&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Chọn Kimi K2.6 khi
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;Context window dài&lt;/li&gt;
&lt;li&gt;Xử lý tài liệu lớn&lt;/li&gt;
&lt;li&gt;Workflow phân tích văn bản nhiều trang&lt;/li&gt;
&lt;li&gt;Tóm tắt hoặc truy vấn tài liệu dài&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Xem thêm: &lt;a href="http://apidog.com/blog/kimi-k2-6-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K2.6&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Chọn GLM 5.1 khi
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;Model tổng quát cân bằng&lt;/li&gt;
&lt;li&gt;Tích hợp với hệ sinh thái Zhipu hoặc &lt;a href="http://Z.ai" rel="noopener noreferrer"&gt;Z.ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Một lựa chọn ổn định cho nhiều tác vụ không quá chuyên biệt&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Xem thêm: &lt;a href="http://apidog.com/blog/glm-5-1-vs-claude-gpt-gemini-deepseek-llm-comparison?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;GLM 5.1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Không nên chọn model chỉ dựa vào bảng xếp hạng. Hãy chạy một tập đánh giá 20–50 prompt đại diện cho workload thật của bạn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cách thử ERNIE 5.1 hôm nay
&lt;/h2&gt;

&lt;p&gt;Có ba cách chính.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Dùng giao diện chat ERNIE
&lt;/h3&gt;

&lt;p&gt;Truy cập &lt;a href="https://ernie.baidu.com" rel="noopener noreferrer"&gt;ernie.baidu.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Phù hợp để kiểm tra nhanh:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Viết sáng tạo&lt;/li&gt;
&lt;li&gt;Hỏi đáp tiếng Trung&lt;/li&gt;
&lt;li&gt;Hỏi đáp tiếng Anh&lt;/li&gt;
&lt;li&gt;Suy luận nhiều bước&lt;/li&gt;
&lt;li&gt;Chất lượng trả lời tự nhiên&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Dùng ERNIE 5.1 Playground trên Baidu AI Studio
&lt;/h3&gt;

&lt;p&gt;Playground phù hợp hơn nếu bạn muốn thử:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tool calling&lt;/li&gt;
&lt;li&gt;Agent demo&lt;/li&gt;
&lt;li&gt;Prompt nhiều lượt&lt;/li&gt;
&lt;li&gt;So sánh hành vi với model khác trước khi viết code&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Dùng API Qianfan
&lt;/h3&gt;

&lt;p&gt;API Qianfan là đường triển khai cho developer. Theo mô tả của Baidu, request có định dạng tương thích OpenAI và xác thực bằng Bearer token. Hướng dẫn chi tiết nằm trong bài viết &lt;a href="http://apidog.com/blog/how-to-use-ernie-5-1-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách sử dụng API ERNIE 5.1&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Một skeleton request có thể được tổ chức như sau:&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;$QIANFAN_ENDPOINT&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;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$QIANFAN_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": "ernie-5.1",
    "messages": [
      {
        "role": "system",
        "content": "Bạn là trợ lý kỹ thuật, trả lời ngắn gọn và chính xác."
      },
      {
        "role": "user",
        "content": "Tóm tắt log lỗi này và đề xuất bước debug tiếp theo."
      }
    ]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nếu bạn dùng nhiều nhà cung cấp model, &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 quản lý request template, biến môi trường, API key và so sánh response mà không cần viết script riêng cho từng provider.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checklist đánh giá ERNIE 5.1 trước production
&lt;/h2&gt;

&lt;p&gt;Thay vì chỉ test vài câu hỏi thủ công, hãy tạo một benchmark nhỏ theo workload thật.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 1: Chọn 20–50 test case
&lt;/h3&gt;

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

&lt;ul&gt;
&lt;li&gt;10 prompt hỏi đáp nghiệp vụ&lt;/li&gt;
&lt;li&gt;10 prompt cần gọi công cụ&lt;/li&gt;
&lt;li&gt;10 prompt có dữ liệu bảng&lt;/li&gt;
&lt;li&gt;10 prompt dài hoặc nhiều ngữ cảnh&lt;/li&gt;
&lt;li&gt;10 prompt gây nhiễu hoặc dễ hallucinate&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bước 2: Xác định tiêu chí chấm điểm
&lt;/h3&gt;

&lt;p&gt;Nên đo ít nhất:&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;Cách đo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Độ chính xác&lt;/td&gt;
&lt;td&gt;So với đáp án chuẩn hoặc review thủ công&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool call đúng&lt;/td&gt;
&lt;td&gt;Tên tool, tham số, thứ tự gọi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latency&lt;/td&gt;
&lt;td&gt;p50, p95, timeout&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chi phí&lt;/td&gt;
&lt;td&gt;Token input/output, retry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tính ổn định&lt;/td&gt;
&lt;td&gt;Chạy lại cùng prompt nhiều lần&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Khả năng từ chối&lt;/td&gt;
&lt;td&gt;Có từ chối đúng khi thiếu dữ liệu không&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Bước 3: So sánh với model hiện tại
&lt;/h3&gt;

&lt;p&gt;Chạy cùng bộ prompt trên:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ERNIE 5.1&lt;/li&gt;
&lt;li&gt;Model production hiện tại&lt;/li&gt;
&lt;li&gt;Một model fallback&lt;/li&gt;
&lt;li&gt;Một model rẻ hơn nếu có&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bạn có thể dùng workflow trong &lt;a href="http://apidog.com/blog/test-local-llms-as-apis?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kiểm tra LLM dưới dạng API&lt;/a&gt; để chuẩn hóa request và response trong Apidog.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bước 4: Test tool calling riêng
&lt;/h3&gt;

&lt;p&gt;Với agent, đừng chỉ đọc final answer. Hãy log toàn bộ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tool nào được gọi&lt;/li&gt;
&lt;li&gt;Tham số truyền vào tool&lt;/li&gt;
&lt;li&gt;Tool có được gọi đúng thời điểm không&lt;/li&gt;
&lt;li&gt;Model có tự sửa khi tool trả lỗi không&lt;/li&gt;
&lt;li&gt;Model có gọi tool khi không cần không&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Một case test đơn giản:&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;"input"&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 đơn hàng gần nhất của khách hàng A và kiểm tra trạng thái giao hà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;"expected_tool_sequence"&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="s2"&gt;"search_customer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"list_orders"&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_shipping_status"&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;"failure_conditions"&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="s2"&gt;"bịa mã đơn hàng"&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ỏ qua bước xác minh khách hàng"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"trả lời mà không gọi tool"&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;h2&gt;
  
  
  Giá cả và triển khai
&lt;/h2&gt;

&lt;p&gt;Baidu cho biết ERNIE 5.1 sẽ được triển khai trên &lt;strong&gt;hơn 10 nền tảng sản xuất sáng tạo&lt;/strong&gt; sau khi ra mắt. Tuy nhiên, bài công bố không đưa ra giá public theo token trên Qianfan.&lt;/p&gt;

&lt;p&gt;Vì vậy, khi lập kế hoạch production:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kiểm tra giá trực tiếp trong dashboard Qianfan.&lt;/li&gt;
&lt;li&gt;Ước tính token input/output theo traffic thật.&lt;/li&gt;
&lt;li&gt;Thêm chi phí retry và fallback.&lt;/li&gt;
&lt;li&gt;Đo latency từ khu vực người dùng của bạn.&lt;/li&gt;
&lt;li&gt;Xác nhận yêu cầu pháp lý về lưu trữ dữ liệu.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nếu chính sách dữ liệu của bạn không cho phép hạ tầng đặt tại Trung Quốc, ERNIE 5.1 có thể không phù hợp dù benchmark tốt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Khuyến nghị triển khai cho developer
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Không thay model production ngay
&lt;/h3&gt;

&lt;p&gt;Hãy chạy ERNIE 5.1 ở chế độ shadow hoặc A/B test trước:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gửi cùng request đến model hiện tại và ERNIE 5.1&lt;/li&gt;
&lt;li&gt;Không hiển thị response ERNIE cho user ở giai đoạn đầu&lt;/li&gt;
&lt;li&gt;Log output để review&lt;/li&gt;
&lt;li&gt;Chỉ chuyển traffic khi metric ổn định&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Dùng fallback model
&lt;/h3&gt;

&lt;p&gt;Vì ERNIE 5.1 là hosted-only, nên luôn có fallback:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;try:
    response = call_ernie_5_1(request)
except TimeoutError:
    response = call_fallback_model(request)
except ProviderError:
    response = call_fallback_model(request)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fallback nên được kích hoạt khi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Timeout&lt;/li&gt;
&lt;li&gt;Rate limit&lt;/li&gt;
&lt;li&gt;Lỗi xác thực&lt;/li&gt;
&lt;li&gt;Response không hợp lệ&lt;/li&gt;
&lt;li&gt;Tool call thiếu tham số bắt buộc&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Tách prompt theo loại tác vụ
&lt;/h3&gt;

&lt;p&gt;Không dùng một system prompt cho mọi thứ. Tách theo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;QA&lt;/li&gt;
&lt;li&gt;Tool calling&lt;/li&gt;
&lt;li&gt;Tóm tắt&lt;/li&gt;
&lt;li&gt;Viết dài&lt;/li&gt;
&lt;li&gt;Phân tích bảng tính&lt;/li&gt;
&lt;li&gt;Trích xuất dữ liệu&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Điều này giúp bạn đo chính xác ERNIE 5.1 mạnh ở đâu và yếu ở đâu.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Giám sát output sau khi deploy
&lt;/h3&gt;

&lt;p&gt;Các chỉ số nên log:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Model version&lt;/li&gt;
&lt;li&gt;Prompt template version&lt;/li&gt;
&lt;li&gt;Token input/output&lt;/li&gt;
&lt;li&gt;Latency&lt;/li&gt;
&lt;li&gt;Tool call trace&lt;/li&gt;
&lt;li&gt;Error type&lt;/li&gt;
&lt;li&gt;User feedback&lt;/li&gt;
&lt;li&gt;Fallback rate&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  ERNIE 5.1 có mã nguồn mở không?
&lt;/h3&gt;

&lt;p&gt;Không. ERNIE 5.1 là model hosted-only, truy cập qua giao diện chat của Baidu, Baidu AI Studio và API Qianfan. Tại thời điểm viết bài, không có trọng số công khai trên HuggingFace.&lt;/p&gt;

&lt;h3&gt;
  
  
  ERNIE 5.1 có hỗ trợ hình ảnh không?
&lt;/h3&gt;

&lt;p&gt;Không. ERNIE 5.1 chỉ xử lý văn bản khi ra mắt. Với tác vụ thị giác, bạn cần ERNIE-VL hoặc một model multimodal khác. Nếu cần một model multimodal Trung Quốc, có thể xem &lt;a href="http://apidog.com/blog/how-to-use-qwen-3-5-omni?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Qwen 3.5 Omni&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Context window của ERNIE 5.1 là bao nhiêu?
&lt;/h3&gt;

&lt;p&gt;Baidu chưa công bố con số cụ thể. Cho đến khi có thông tin chính thức, nên thiết kế workflow tài liệu dài bằng chunking, retrieval và giới hạn input.&lt;/p&gt;

&lt;h3&gt;
  
  
  Có thể dùng ERNIE 5.1 bên ngoài Trung Quốc không?
&lt;/h3&gt;

&lt;p&gt;Giao diện chat và API Qianfan có thể truy cập từ nhiều khu vực, nhưng độ trễ, xác minh tài khoản và tính năng doanh nghiệp có thể khác nhau. Một số tính năng có thể yêu cầu số điện thoại hoặc giấy phép kinh doanh tại Trung Quốc đại lục. Xem hướng dẫn &lt;a href="http://apidog.com/blog/how-to-use-ernie-5-1-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cách sử dụng API ERNIE 5.1&lt;/a&gt; để biết quy trình truy cập.&lt;/p&gt;

&lt;h3&gt;
  
  
  ERNIE 5.1 có tốt hơn DeepSeek-V4-Pro không?
&lt;/h3&gt;

&lt;p&gt;Theo Baidu, ERNIE 5.1 vượt DeepSeek-V4-Pro trên τ³-bench và SpreadsheetBench-Verified. Tuy nhiên, DeepSeek vẫn có lợi thế nếu bạn cần trọng số mở hoặc triển khai tại chỗ. Với suy luận toán học thuần túy không dùng công cụ, dữ liệu công khai chưa đủ để kết luận chắc chắn.&lt;/p&gt;

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

&lt;p&gt;ERNIE 5.1 đáng chú ý nhất ở ba điểm: thiết kế MoE tiết kiệm chi phí, benchmark agent mạnh, và định hướng rõ ràng cho tool use. Nếu bạn đang xây dựng agent hoặc workflow gọi API, hãy thêm ERNIE 5.1 vào benchmark nội bộ thay vì chỉ đọc điểm số công khai.&lt;/p&gt;

&lt;p&gt;Cách tiếp cận thực tế:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tạo bộ 20–50 prompt đại diện.&lt;/li&gt;
&lt;li&gt;Test ERNIE 5.1 qua Qianfan.&lt;/li&gt;
&lt;li&gt;So sánh với model hiện tại.&lt;/li&gt;
&lt;li&gt;Đo tool call, latency, chi phí và fallback rate.&lt;/li&gt;
&lt;li&gt;Chỉ deploy khi metric phù hợp với workload của bạn.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sẵn sàng bắt đầu xây dựng? Tải Apidog và nhập OpenAPI spec của Qianfan để kiểm thử ERNIE 5.1 cùng các model hiện tại trong một workspace.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
