[
 {
  "id": 2184,
  "slug": "prompt-caching-la-gi",
  "title": "Prompt caching là gì? Cách giảm chi phí và độ trễ API AI",
  "meta_desc": "Prompt caching là gì: lưu đệm phần đầu prompt lặp lại để giảm chi phí và độ trễ khi gọi API AI. Cách hoạt động, cách sắp xếp prompt và lỗi làm mất cache.",
  "excerpt": "Nhiều ứng dụng AI gửi đi gửi lại cùng một khối hướng dẫn dài và cùng một bộ tài liệu cho mỗi câu hỏi. Prompt caching giúp không phải trả đủ tiền và chờ đủ thời gian cho phần lặp lại đó. Bài viết giải thích cơ chế và cách tổ chức prompt để tận dụng tốt nhất.",
  "answer": "Prompt caching là tính năng của nhà cung cấp API AI cho phép lưu tạm kết quả xử lý phần đầu prompt giống hệt nhau giữa các lần gọi. Khi yêu cầu sau có cùng phần mở đầu, hệ thống dùng lại kết quả đã tính thay vì xử lý lại từ đầu, nên token đọc từ cache được tính giá thấp hơn và thời gian chờ token đầu tiên giảm. Prompt caching hiệu quả nhất khi bạn có system prompt dài, tài liệu tham chiếu cố định hoặc hội thoại nhiều lượt. Điều kiện then chốt: phần cố định phải đặt ở đầu và giữ nguyên từng ký tự.",
  "kws": [
   "prompt caching là gì",
   "lưu đệm prompt",
   "giảm chi phí API AI",
   "context caching",
   "cache token"
  ],
  "sections": [
   {
    "h2": "Prompt caching là gì",
    "html": "<p>Prompt caching là cơ chế lưu đệm phần đầu của prompt đã được mô hình xử lý, để các yêu cầu tiếp theo có cùng phần đầu không phải tính lại. Một số nhà cung cấp gọi là context caching, nhưng ý tưởng giống nhau.</p><p>Để hiểu vì sao điều này tiết kiệm, cần biết mô hình xử lý một yêu cầu qua hai giai đoạn: đọc toàn bộ đầu vào (prefill) rồi mới sinh từng token đầu ra. Giai đoạn đọc tạo ra một khối dữ liệu trung gian gọi là KV cache. Nếu 9.000 trong 10.000 token đầu vào giống hệt lần trước, việc tính lại khối dữ liệu đó là lãng phí.</p><p>Ví dụ một chatbot chăm sóc khách hàng của cửa hàng điện máy:</p><ul><li>System prompt hướng dẫn giọng văn, quy tắc: khoảng 1.500 token.</li><li>Chính sách bảo hành, đổi trả, giao hàng: khoảng 6.000 token.</li><li>Câu hỏi của khách: khoảng 50 token.</li></ul><p>Mỗi tin nhắn, hơn 99% đầu vào lặp lại. Với prompt caching, phần 7.500 token đầu chỉ cần xử lý đầy đủ ở lần đầu, các lần sau đọc từ cache với chi phí và thời gian thấp hơn đáng kể.</p>"
   },
   {
    "h2": "Prompt caching hoạt động thế nào",
    "html": "<p>Nguyên tắc cốt lõi là <strong>khớp tiền tố (prefix)</strong>. Hệ thống so sánh phần đầu prompt mới với các phần đã lưu. Cache chỉ dùng được cho đoạn giống nhau tính từ token đầu tiên; ngay khi gặp một ký tự khác, phần phía sau phải xử lý lại.</p><h3>Hai kiểu triển khai phổ biến</h3><ul><li><strong>Tự động:</strong> một số nhà cung cấp tự lưu đệm khi prompt đủ dài, bạn không cần khai báo, chỉ cần sắp xếp prompt hợp lý.</li><li><strong>Khai báo tường minh:</strong> một số API yêu cầu đánh dấu điểm ngắt cache trong yêu cầu, cho phép chọn chính xác phần nào được lưu.</li></ul><h3>Thời gian sống của cache</h3><p>Cache không tồn tại mãi. Tùy nhà cung cấp, cache có thể hết hạn sau vài phút không dùng, một số cho chọn thời gian dài hơn với điều kiện khác. Nếu lưu lượng thưa, cache có thể đã hết hạn trước khi yêu cầu tiếp theo đến.</p><p>Ngưỡng tối thiểu, mức giá đọc và ghi cache, thời gian sống đều khác nhau giữa các hãng và có thể thay đổi. Hãy kiểm tra trang tài liệu và bảng giá hiện hành trước khi tính toán.</p>"
   },
   {
    "h2": "Khi nào prompt caching mang lại lợi ích lớn",
    "html": "<p>Prompt caching phát huy tác dụng khi có phần đầu vào dài, cố định và được dùng lặp lại nhiều lần trong khoảng thời gian ngắn.</p>",
    "table": {
     "caption": "Mức độ hưởng lợi theo tình huống",
     "head": [
      "Tình huống",
      "Phần lặp lại",
      "Mức hưởng lợi"
     ],
     "rows": [
      [
       "Chatbot có system prompt và chính sách dài",
       "Hướng dẫn, tài liệu chính sách",
       "Cao"
      ],
      [
       "Hỏi đáp nhiều câu trên cùng một hợp đồng",
       "Toàn văn hợp đồng",
       "Cao"
      ],
      [
       "Hội thoại nhiều lượt",
       "Lịch sử các lượt trước",
       "Trung bình đến cao"
      ],
      [
       "Agent gọi công cụ nhiều vòng",
       "Định nghĩa công cụ, hướng dẫn",
       "Cao"
      ],
      [
       "Mỗi yêu cầu một tài liệu khác nhau",
       "Gần như không có",
       "Thấp"
      ],
      [
       "Prompt ngắn vài trăm token",
       "Dưới ngưỡng cache",
       "Không đáng kể"
      ]
     ]
    }
   },
   {
    "h2": "Cách sắp xếp prompt để tận dụng cache",
    "html": "<p>Quy tắc vàng: <strong>cố định ở trên, thay đổi ở dưới</strong>. Hãy sắp xếp prompt theo thứ tự từ ít thay đổi nhất đến thay đổi nhiều nhất.</p><ol><li><strong>Định nghĩa công cụ</strong> (nếu dùng function calling): gần như không đổi.</li><li><strong>System prompt:</strong> vai trò, quy tắc, giọng văn.</li><li><strong>Tài liệu tham chiếu cố định:</strong> chính sách, bảng giá nội bộ, sổ tay.</li><li><strong>Ví dụ mẫu (few-shot):</strong> nếu dùng chung cho mọi yêu cầu.</li><li><strong>Lịch sử hội thoại:</strong> tăng dần theo lượt, phần cũ vẫn giữ nguyên.</li><li><strong>Câu hỏi hiện tại:</strong> luôn ở cuối.</li></ol><h3>Ví dụ sai và đúng</h3><p>Sai: đặt <code>Hôm nay là {ngày giờ hiện tại}. Khách hàng: {tên khách}</code> ở dòng đầu system prompt. Mỗi yêu cầu có phần đầu khác nhau, cache không bao giờ khớp.</p><p>Đúng: đưa ngày giờ và tên khách xuống phần câu hỏi cuối cùng, để toàn bộ khối hướng dẫn phía trên giữ nguyên từng ký tự giữa các lần gọi.</p><p>Với công ty 20–50 người dùng chung một trợ lý nội bộ, chỉ cần sắp xếp lại prompt theo nguyên tắc này đã có thể giảm rõ chi phí đầu vào mà không đổi chất lượng câu trả lời.</p>"
   },
   {
    "h2": "Đo hiệu quả prompt caching",
    "html": "<p>Đừng giả định cache đang hoạt động, hãy kiểm tra. Phản hồi API của các nhà cung cấp hỗ trợ caching thường có trường thống kê cho biết bao nhiêu token được đọc từ cache và bao nhiêu token được ghi mới vào cache.</p><h3>Các bước kiểm tra</h3><ol><li>Gửi cùng một yêu cầu hai lần liên tiếp trong vòng một phút.</li><li>So sánh trường thống kê token cache ở lần thứ hai; nếu bằng 0, phần đầu prompt có gì đó thay đổi hoặc chưa đạt ngưỡng tối thiểu.</li><li>Đo thời gian đến token đầu tiên ở hai lần, lần hai thường nhanh hơn với prompt dài.</li><li>Ghi log tỷ lệ cache hit theo ngày trong môi trường thật.</li></ol><h3>Chỉ số cần theo dõi</h3><ul><li><strong>Tỷ lệ token đọc từ cache</strong> trên tổng token đầu vào.</li><li><strong>Chi phí đầu vào trung bình mỗi yêu cầu</strong> trước và sau khi tối ưu.</li><li><strong>TTFT trung bình</strong> cho người dùng cuối.</li></ul><p>Nếu tỷ lệ cache hit thấp dù prompt đã sắp xếp đúng, nguyên nhân thường là lưu lượng quá thưa khiến cache hết hạn, hoặc các yêu cầu bị phân tán qua nhiều cấu hình khác nhau.</p>"
   },
   {
    "h2": "Lỗi thường gặp làm mất cache",
    "html": "<p>Những lỗi nhỏ sau có thể khiến cache gần như không bao giờ khớp:</p><ul><li><strong>Chèn dấu thời gian, mã yêu cầu ngẫu nhiên vào đầu prompt.</strong></li><li><strong>Thứ tự tài liệu thay đổi:</strong> hệ thống RAG trả về cùng ba đoạn nhưng thứ tự khác nhau mỗi lần.</li><li><strong>Định nghĩa công cụ thay đổi thứ tự:</strong> khi danh sách công cụ được sinh động từ một từ điển không cố định thứ tự.</li><li><strong>Khoảng trắng, xuống dòng khác nhau:</strong> chỉ một dấu cách thừa cũng làm tiền tố không khớp.</li><li><strong>Chỉnh sửa lịch sử hội thoại:</strong> tóm tắt hoặc xóa lượt cũ ở giữa làm phần sau phải xử lý lại.</li><li><strong>Đổi mô hình hoặc tham số liên quan:</strong> cache thường gắn với từng mô hình cụ thể.</li></ul><h3>Khi nào không cần bận tâm</h3><p>Nếu ứng dụng chỉ gửi prompt ngắn, mỗi lần một tài liệu khác nhau, hoặc lưu lượng rất thấp, công sức tối ưu cache không đáng. Hãy ưu tiên chọn mô hình phù hợp và giới hạn độ dài đầu ra trước.</p><p>Lưu ý bảo mật: cache thuộc phạm vi tài khoản hoặc tổ chức của bạn theo chính sách nhà cung cấp. Vẫn nên đọc điều khoản lưu trữ dữ liệu nếu prompt chứa thông tin nhạy cảm.</p>"
   }
  ],
  "tip": "Trước khi viết thêm tính năng, hãy mở log và xem tỷ lệ token đọc từ cache. Chỉ cần dời dòng ngày giờ và tên khách xuống cuối prompt, nhiều ứng dụng đã cải thiện cả chi phí lẫn tốc độ phản hồi.",
  "faq": [
   {
    "q": "Prompt caching có làm thay đổi câu trả lời không?",
    "a": "Không. Cache chỉ lưu kết quả xử lý trung gian của phần đầu vào giống hệt nhau, nên chất lượng và nội dung câu trả lời không bị ảnh hưởng."
   },
   {
    "q": "Prompt caching tiết kiệm được bao nhiêu?",
    "a": "Phụ thuộc tỷ lệ phần prompt lặp lại và bảng giá từng nhà cung cấp. Token đọc từ cache được tính thấp hơn token thường; xem bảng giá hiện hành để tính chính xác."
   },
   {
    "q": "Có cần bật prompt caching thủ công không?",
    "a": "Tùy nhà cung cấp. Một số tự động áp dụng khi prompt đủ dài, một số yêu cầu đánh dấu điểm cache trong yêu cầu API."
   },
   {
    "q": "Cache tồn tại bao lâu?",
    "a": "Thường chỉ vài phút kể từ lần dùng gần nhất, một số dịch vụ cho chọn thời gian dài hơn. Kiểm tra tài liệu của nhà cung cấp vì quy định có thể thay đổi."
   },
   {
    "q": "Chạy mô hình cục bộ có prompt caching không?",
    "a": "Nhiều công cụ phục vụ mô hình như vLLM, llama.cpp có cơ chế tái sử dụng KV cache cho tiền tố chung. Lợi ích là giảm thời gian xử lý, còn chi phí đã là phần cứng của bạn."
   },
   {
    "q": "Prompt caching khác lưu đệm câu trả lời thế nào?",
    "a": "Lưu đệm câu trả lời trả lại nguyên kết quả cũ cho câu hỏi giống hệt. Prompt caching vẫn sinh câu trả lời mới, chỉ bỏ qua việc tính lại phần đầu vào lặp lại."
   }
  ],
  "sources": [
   {
    "t": "Anthropic – Prompt caching documentation",
    "u": "https://docs.anthropic.com"
   },
   {
    "t": "OpenAI API documentation",
    "u": "https://platform.openai.com/docs"
   },
   {
    "t": "Google Gemini API – Context caching",
    "u": "https://ai.google.dev/gemini-api/docs"
   }
  ],
  "related": [
   "chi-phi-api-ai-uoc-tinh",
   "token-trong-ai-la-gi",
   "batch-api-la-gi",
   "latency-throughput-ai-la-gi",
   "system-prompt-la-gi",
   "context-window-la-gi",
   "api-ai-la-gi",
   "context-engineering-la-gi"
  ]
 },
 {
  "id": 2185,
  "slug": "batch-api-la-gi",
  "title": "Batch API là gì? Xử lý hàng loạt bằng AI với chi phí thấp",
  "meta_desc": "Batch API là gì: gửi hàng nghìn yêu cầu AI một lần, nhận kết quả sau vài giờ với giá thấp hơn gọi thường. Khi nào nên dùng, các bước làm và lỗi thường gặp.",
  "excerpt": "Không phải việc AI nào cũng cần trả lời ngay. Phân loại 5.000 email cũ, viết mô tả cho 2.000 sản phẩm hay tóm tắt hồ sơ tồn đọng có thể chờ đến sáng mai. Batch API sinh ra cho những việc như vậy, đổi thời gian chờ lấy chi phí thấp hơn.",
  "answer": "Batch API là cách gọi mô hình AI theo lô: bạn gom nhiều yêu cầu vào một tệp, gửi lên một lần và nhận kết quả sau một khoảng thời gian, thường trong vòng 24 giờ theo cam kết của nhà cung cấp. Đổi lại việc không cần phản hồi tức thì, yêu cầu theo lô được tính giá thấp hơn đáng kể so với gọi đồng bộ và ít bị giới hạn tốc độ hơn. Batch API phù hợp với phân loại dữ liệu, trích xuất thông tin, dịch, viết mô tả sản phẩm số lượng lớn; không phù hợp với chatbot hay bất kỳ việc nào khách đang chờ.",
  "kws": [
   "batch API là gì",
   "xử lý hàng loạt bằng AI",
   "batch processing AI",
   "gọi API theo lô",
   "giảm chi phí API AI"
  ],
  "sections": [
   {
    "h2": "Batch API là gì",
    "html": "<p>Batch API là chế độ gọi mô hình AI bất đồng bộ theo lô. Thay vì gửi từng câu hỏi và chờ câu trả lời ngay, bạn chuẩn bị một danh sách hàng trăm đến hàng chục nghìn yêu cầu, gửi lên nhà cung cấp, rồi quay lại lấy kết quả khi hoàn tất.</p><p>Có thể so sánh với hai cách gửi hàng: chuyển phát hỏa tốc và chuyển phát tiết kiệm. Hỏa tốc đến ngay trong ngày nhưng đắt; tiết kiệm đến chậm hơn vài ngày nhưng rẻ hơn. Với nhà cung cấp AI, yêu cầu theo lô cho họ tự do xếp lịch xử lý vào lúc hệ thống rảnh, nên họ có thể giảm giá.</p><p>Một số điểm chung của Batch API ở các nhà cung cấp lớn, tại thời điểm viết:</p><ul><li>Đầu vào thường là một tệp JSONL, mỗi dòng là một yêu cầu hoàn chỉnh kèm mã định danh do bạn đặt.</li><li>Có cửa sổ hoàn thành tối đa, phổ biến là 24 giờ, nhiều lô xong sớm hơn.</li><li>Giá thấp hơn đáng kể so với gọi thường; mức giảm cụ thể xem bảng giá hiện hành.</li><li>Giới hạn tốc độ tách riêng, không chiếm hạn mức của ứng dụng đang chạy trực tiếp.</li></ul>"
   },
   {
    "h2": "Batch API khác gọi API thông thường thế nào",
    "html": "<p>Gọi API thông thường (đồng bộ) phù hợp khi có người đang chờ. Batch API phù hợp khi chỉ có hệ thống chờ. Bảng dưới tóm tắt khác biệt để bạn chọn đúng chế độ cho từng việc.</p>",
    "table": {
     "caption": "So sánh gọi đồng bộ và Batch API",
     "head": [
      "Tiêu chí",
      "Gọi đồng bộ",
      "Batch API"
     ],
     "rows": [
      [
       "Thời gian nhận kết quả",
       "Vài giây",
       "Vài phút đến tối đa theo cam kết, thường 24 giờ"
      ],
      [
       "Chi phí mỗi token",
       "Giá chuẩn",
       "Thấp hơn đáng kể"
      ],
      [
       "Giới hạn tốc độ",
       "Chia sẻ với mọi tính năng",
       "Hạn mức riêng, thường rộng hơn"
      ],
      [
       "Cách gửi",
       "Từng yêu cầu",
       "Tệp gồm nhiều yêu cầu"
      ],
      [
       "Xử lý lỗi",
       "Thử lại ngay",
       "Đọc tệp lỗi, gửi lại lô mới"
      ],
      [
       "Phù hợp",
       "Chatbot, trợ lý, voice bot",
       "Phân loại, trích xuất, viết hàng loạt"
      ]
     ]
    }
   },
   {
    "h2": "Doanh nghiệp dùng Batch API vào việc gì",
    "html": "<p>Mọi việc có số lượng lớn, đầu vào sẵn có và không gấp đều là ứng viên tốt. Một vài ví dụ thực tế với doanh nghiệp Việt Nam:</p><ul><li><strong>Shop online 2.000 sản phẩm:</strong> viết lại mô tả chuẩn SEO, tạo thẻ tiêu đề, gợi ý từ khóa cho toàn bộ danh mục trong một đêm.</li><li><strong>Phòng chăm sóc khách hàng:</strong> phân loại 10.000 tin nhắn cũ theo chủ đề và mức độ hài lòng để tìm vấn đề lặp lại.</li><li><strong>Văn phòng kế toán:</strong> trích xuất số hóa đơn, mã số thuế, tổng tiền từ văn bản OCR của hàng nghìn chứng từ, rồi đưa vào bảng tính để kế toán đối chiếu.</li><li><strong>Phòng nhân sự:</strong> tóm tắt và chấm sơ bộ hồ sơ ứng viên theo tiêu chí có sẵn, nhân sự xem lại danh sách rút gọn.</li><li><strong>Đội nội dung:</strong> dịch bộ tài liệu hướng dẫn sản phẩm sang tiếng Anh.</li><li><strong>Đánh giá chất lượng AI:</strong> chạy bộ evals hàng nghìn câu hỏi mỗi khi đổi prompt.</li></ul><h3>Khi nào KHÔNG nên dùng</h3><p>Không dùng cho bất cứ việc nào có người chờ: trả lời khách trên Zalo, hỗ trợ nhân viên trực tiếp. Cũng không nên dùng khi chỉ có vài chục yêu cầu, vì công sức chuẩn bị tệp lớn hơn phần tiết kiệm được.</p>"
   },
   {
    "h2": "Các bước sử dụng Batch API",
    "html": "<h3>Chuẩn bị</h3><ul><li>Tài khoản API với quyền dùng Batch, API key được bảo mật.</li><li>Dữ liệu đầu vào đã làm sạch, mỗi bản ghi có mã định danh riêng.</li><li>Prompt đã thử nghiệm kỹ ở chế độ đồng bộ với 20–50 mẫu.</li></ul><h3>Các bước</h3><ol><li><strong>Tạo tệp JSONL:</strong> mỗi dòng một yêu cầu, ghi mô hình, prompt, tham số và mã định danh như <code>sp-00125</code>.</li><li><strong>Tải tệp lên</strong> theo hướng dẫn của nhà cung cấp.</li><li><strong>Tạo lô xử lý</strong> trỏ tới tệp vừa tải, nhận về mã lô.</li><li><strong>Theo dõi trạng thái</strong> định kỳ: đang xử lý, hoàn thành, thất bại, hết hạn.</li><li><strong>Tải tệp kết quả và tệp lỗi</strong> khi lô hoàn thành.</li><li><strong>Ghép kết quả về dữ liệu gốc</strong> theo mã định danh, không dựa vào thứ tự dòng vì kết quả có thể không cùng thứ tự với đầu vào.</li><li><strong>Gửi lại các yêu cầu lỗi</strong> trong một lô mới.</li></ol><p>Với người không lập trình, có thể làm phần lớn các bước bằng một kịch bản Python ngắn do đội IT viết sẵn, hoặc tích hợp vào n8n bằng các nút gọi HTTP.</p>"
   },
   {
    "h2": "Kiểm tra kết quả và kiểm soát chất lượng",
    "html": "<p>Xử lý hàng loạt nghĩa là lỗi cũng hàng loạt. Một prompt sai có thể tạo ra 5.000 kết quả sai trong một đêm. Áp dụng các chốt kiểm tra sau:</p><ol><li><strong>Chạy lô thử nhỏ:</strong> 50–100 yêu cầu trước khi gửi toàn bộ.</li><li><strong>Ép định dạng đầu ra:</strong> yêu cầu JSON theo cấu trúc cố định hoặc dùng tính năng structured output nếu có, để dễ kiểm tra tự động.</li><li><strong>Kiểm tra tự động:</strong> trường bắt buộc có đủ không, giá trị có nằm trong danh sách cho phép không, độ dài có hợp lý không.</li><li><strong>Lấy mẫu kiểm tra thủ công:</strong> người phụ trách đọc ngẫu nhiên 2–5% kết quả.</li><li><strong>Không ghi đè dữ liệu gốc:</strong> lưu kết quả vào cột hoặc bảng mới, duyệt xong mới cập nhật.</li></ol><h3>Chỉ số nên theo dõi</h3><ul><li>Tỷ lệ yêu cầu thành công trên tổng số.</li><li>Tỷ lệ kết quả đạt kiểm tra tự động.</li><li>Tỷ lệ lỗi phát hiện khi lấy mẫu thủ công.</li><li>Chi phí mỗi bản ghi so với gọi đồng bộ hoặc làm tay.</li></ul>"
   },
   {
    "h2": "Lỗi thường gặp với Batch API",
    "html": "<ul><li><strong>Ghép kết quả theo thứ tự dòng:</strong> kết quả trả về có thể lệch thứ tự, phải ghép theo mã định danh.</li><li><strong>Mã định danh trùng nhau:</strong> làm mất hoặc lẫn kết quả.</li><li><strong>Vượt giới hạn kích thước tệp hoặc số yêu cầu mỗi lô:</strong> cần chia thành nhiều lô.</li><li><strong>Hứa hẹn thời hạn cho người khác dựa trên tốc độ lô trước:</strong> thời gian hoàn thành dao động, chỉ nên dựa vào cửa sổ cam kết tối đa.</li><li><strong>Quên xử lý tệp lỗi:</strong> vài phần trăm yêu cầu thất bại bị bỏ sót, dữ liệu thiếu mà không ai biết.</li><li><strong>Đưa dữ liệu nhạy cảm không cần thiết:</strong> chỉ gửi trường cần cho tác vụ; ẩn số điện thoại, số tài khoản nếu không cần.</li><li><strong>Bỏ qua prompt caching:</strong> nếu các yêu cầu có chung hướng dẫn dài, một số nhà cung cấp cho phép kết hợp hai cơ chế để giảm thêm chi phí; kiểm tra tài liệu.</li></ul><p>Cuối cùng, hãy lưu lại tệp đầu vào, tệp kết quả và phiên bản prompt của mỗi lô. Khi có thắc mắc về một kết quả cụ thể, bạn truy lại được chính xác điều gì đã được gửi đi.</p>"
   }
  ],
  "tip": "Hãy rà lại danh sách việc AI đang chạy ở chế độ đồng bộ và hỏi: có ai thật sự đang chờ kết quả này không? Những việc trả lời 'không' là ứng viên đầu tiên để chuyển sang Batch API.",
  "faq": [
   {
    "q": "Batch API rẻ hơn bao nhiêu so với gọi thường?",
    "a": "Mức giảm khác nhau giữa các nhà cung cấp và có thể thay đổi. Hãy xem bảng giá hiện hành của từng hãng để tính toán chính xác cho khối lượng của bạn."
   },
   {
    "q": "Batch API mất bao lâu để có kết quả?",
    "a": "Nhà cung cấp thường cam kết hoàn thành trong một cửa sổ tối đa, phổ biến là 24 giờ. Thực tế nhiều lô nhỏ xong sớm hơn nhiều, nhưng không nên dựa vào điều đó."
   },
   {
    "q": "Chất lượng câu trả lời qua Batch API có kém hơn không?",
    "a": "Không. Cùng mô hình, cùng prompt và tham số thì chất lượng tương đương gọi đồng bộ; chỉ khác thời điểm xử lý và giá."
   },
   {
    "q": "Không biết lập trình có dùng Batch API được không?",
    "a": "Khó dùng trực tiếp vì cần tạo tệp JSONL và gọi API. Cách thực tế là nhờ đội IT viết sẵn kịch bản hoặc dựng workflow để nhân viên chỉ cần đưa vào bảng tính."
   },
   {
    "q": "Hủy lô đang chạy được không?",
    "a": "Thường có thể hủy, và các yêu cầu đã hoàn thành trước khi hủy vẫn có kết quả. Cách tính phí khi hủy xem trong tài liệu nhà cung cấp."
   },
   {
    "q": "Batch API có dùng được với mô hình chạy cục bộ không?",
    "a": "Khái niệm tương tự có thể làm bằng cách xếp hàng đợi và chạy ban đêm trên máy chủ nội bộ. Các công cụ như vLLM có chế độ suy luận theo lô hiệu quả cho việc này."
   }
  ],
  "sources": [
   {
    "t": "OpenAI API documentation",
    "u": "https://platform.openai.com/docs"
   },
   {
    "t": "Anthropic documentation",
    "u": "https://docs.anthropic.com"
   },
   {
    "t": "JSON Lines format",
    "u": "https://jsonlines.org"
   }
  ],
  "related": [
   "prompt-caching-la-gi",
   "chi-phi-api-ai-uoc-tinh",
   "api-ai-la-gi",
   "latency-throughput-ai-la-gi",
   "token-trong-ai-la-gi",
   "evals-la-gi",
   "zapier-make-va-n8n",
   "bao-mat-api-key-ai"
  ]
 },
 {
  "id": 2186,
  "slug": "agent-memory-la-gi",
  "title": "Bộ nhớ của AI agent hoạt động thế nào? Ngắn hạn, dài hạn và rủi ro",
  "meta_desc": "Bộ nhớ của AI agent là gì: cách agent ghi nhớ ngắn hạn trong phiên và dài hạn giữa các phiên, các loại bộ nhớ, cách thiết kế cho doanh nghiệp và rủi ro cần kiểm.",
  "excerpt": "Một AI agent hữu ích cần nhớ khách hàng là ai, việc đã làm đến đâu và những quy tắc riêng của công ty. Nhưng mô hình ngôn ngữ bản chất không tự nhớ gì giữa các lần gọi. Bài này giải thích bộ nhớ của agent được xây dựng ra sao và cần kiểm soát gì.",
  "answer": "Bộ nhớ của AI agent là phần hệ thống lưu và gọi lại thông tin để agent làm việc liên tục qua nhiều bước và nhiều phiên, vì bản thân mô hình ngôn ngữ không tự nhớ giữa các lần gọi. Bộ nhớ ngắn hạn là những gì nằm trong cửa sổ ngữ cảnh hiện tại: hội thoại, kết quả công cụ vừa gọi. Bộ nhớ dài hạn được lưu bên ngoài, trong tệp, cơ sở dữ liệu hoặc vector database, và chỉ phần liên quan được nạp lại khi cần. Thiết kế bộ nhớ tốt giúp agent nhất quán hơn; thiết kế kém dễ gây lộ dữ liệu, nhớ sai hoặc tốn chi phí.",
  "kws": [
   "bộ nhớ AI agent",
   "agent memory là gì",
   "bộ nhớ dài hạn của AI",
   "AI agent ghi nhớ",
   "memory cho chatbot"
  ],
  "sections": [
   {
    "h2": "Bộ nhớ của AI agent là gì và vì sao cần",
    "html": "<p>Bộ nhớ của AI agent là tập hợp cơ chế giúp agent giữ lại thông tin từ trước để dùng cho việc hiện tại. Cần nhấn mạnh: mô hình ngôn ngữ lớn không có trí nhớ tự nhiên giữa các lần gọi. Mỗi yêu cầu gửi lên là độc lập; mô hình chỉ 'biết' những gì nằm trong prompt lần đó cộng kiến thức đã học khi huấn luyện.</p><p>Cảm giác ChatGPT hay Claude 'nhớ' cuộc trò chuyện là do ứng dụng gửi lại lịch sử hội thoại trong mỗi lượt, và một số sản phẩm có thêm tính năng ghi nhớ lưu thông tin ở bên ngoài.</p><p>Với agent làm việc nhiều bước, bộ nhớ càng quan trọng:</p><ul><li>Agent chăm sóc khách hàng cần nhớ khách đã phàn nàn gì tuần trước.</li><li>Agent xử lý đơn hàng cần nhớ đã kiểm tra tồn kho, đang chờ kế toán duyệt.</li><li>Agent hỗ trợ IT nội bộ cần nhớ máy của chị Lan phòng kế toán đã cài lại driver máy in hôm qua.</li></ul><p>Không có bộ nhớ, agent hỏi lại những điều đã biết, lặp lại bước đã làm và không học được từ phản hồi. Có bộ nhớ thiết kế kém, agent lại nhớ nhầm, nhớ thừa hoặc kể chuyện của khách này cho khách khác.</p>"
   },
   {
    "h2": "Các loại bộ nhớ của AI agent",
    "html": "<p>Các nhà nghiên cứu và nhà phát triển thường mượn cách phân loại trí nhớ của con người để mô tả bộ nhớ agent. Tên gọi không hoàn toàn thống nhất, nhưng phân nhóm dưới đây được dùng khá rộng rãi.</p>",
    "table": {
     "caption": "Các loại bộ nhớ thường gặp",
     "head": [
      "Loại",
      "Lưu cái gì",
      "Nằm ở đâu",
      "Ví dụ"
     ],
     "rows": [
      [
       "Ngắn hạn (làm việc)",
       "Hội thoại và kết quả hiện tại",
       "Cửa sổ ngữ cảnh",
       "Khách vừa cho mã đơn hàng"
      ],
      [
       "Sự kiện (episodic)",
       "Những gì đã xảy ra trong các phiên trước",
       "Cơ sở dữ liệu, log",
       "Tuần trước khách đổi địa chỉ giao hàng"
      ],
      [
       "Ngữ nghĩa (semantic)",
       "Sự thật, kiến thức ổn định",
       "Vector database, tệp hồ sơ",
       "Khách là đại lý cấp 1, thanh toán cuối tháng"
      ],
      [
       "Quy trình (procedural)",
       "Cách làm việc, quy tắc",
       "System prompt, tệp hướng dẫn",
       "Đơn trên mức quy định phải chờ quản lý duyệt"
      ]
     ]
    }
   },
   {
    "h2": "Bộ nhớ ngắn hạn: giới hạn của cửa sổ ngữ cảnh",
    "html": "<p>Bộ nhớ ngắn hạn chính là nội dung trong cửa sổ ngữ cảnh: system prompt, lịch sử hội thoại, kết quả các lần gọi công cụ. Cửa sổ ngữ cảnh của mô hình hiện đại khá lớn, nhưng không phải vô hạn, và càng nhồi nhiều càng tốn token, tăng độ trễ và có thể giảm độ chính xác.</p><h3>Các kỹ thuật quản lý bộ nhớ ngắn hạn</h3><ul><li><strong>Cửa sổ trượt:</strong> chỉ giữ N lượt hội thoại gần nhất. Đơn giản nhưng dễ quên thông tin quan trọng ở đầu.</li><li><strong>Tóm tắt dần:</strong> khi hội thoại dài, tóm tắt các lượt cũ thành vài câu và giữ nguyên các lượt mới.</li><li><strong>Cắt gọn kết quả công cụ:</strong> agent gọi công cụ tra cứu trả về 200 dòng dữ liệu; chỉ giữ phần cần thiết thay vì nhét cả vào ngữ cảnh.</li><li><strong>Ghi chú làm việc:</strong> agent tự viết một tệp ghi chú tiến độ, đọc lại khi cần thay vì giữ toàn bộ lịch sử.</li></ul><p>Đây là phần cốt lõi của context engineering: quyết định đưa gì vào ngữ cảnh ở từng bước. Agent chạy công việc dài như rà soát 100 hợp đồng sẽ không thể giữ tất cả trong một ngữ cảnh, mà phải ghi kết quả từng hợp đồng ra ngoài.</p>"
   },
   {
    "h2": "Bộ nhớ dài hạn được xây dựng thế nào",
    "html": "<p>Bộ nhớ dài hạn nằm ngoài mô hình và được nạp vào ngữ cảnh khi cần. Một vòng hoạt động điển hình gồm bốn bước:</p><ol><li><strong>Trích xuất:</strong> sau mỗi phiên, agent hoặc một bước xử lý riêng rút ra thông tin đáng nhớ, ví dụ 'khách thích nhận báo giá qua email, không qua Zalo'.</li><li><strong>Lưu trữ:</strong> ghi vào cơ sở dữ liệu có cấu trúc (hồ sơ khách hàng), vector database (ghi chú tự do) hoặc tệp văn bản, kèm thời gian và nguồn.</li><li><strong>Truy xuất:</strong> khi phiên mới bắt đầu, hệ thống tìm các mục liên quan theo mã khách hàng hoặc bằng tìm kiếm ngữ nghĩa.</li><li><strong>Cập nhật và quên:</strong> thông tin mới mâu thuẫn với thông tin cũ thì sửa; thông tin hết hiệu lực thì xóa.</li></ol><h3>Ví dụ ở công ty 30 người</h3><p>Agent hỗ trợ IT nội bộ lưu hồ sơ từng máy: cấu hình, phần mềm đã cài, sự cố trước đây. Khi anh Minh báo 'máy lại chậm', agent tra hồ sơ thấy tháng trước đã dọn ổ C và ổ đã gần đầy lại, nên đề xuất kiểm tra dung lượng trước rồi mới nghĩ tới nâng cấp RAM. Kỹ thuật viên xác nhận trước khi thực hiện.</p>"
   },
   {
    "h2": "Rủi ro của bộ nhớ agent và cách kiểm soát",
    "html": "<p>Bộ nhớ làm agent thông minh hơn nhưng cũng mở ra rủi ro mới:</p><ul><li><strong>Lộ dữ liệu chéo:</strong> agent dùng chung bộ nhớ cho mọi khách, vô tình nhắc thông tin của khách A khi trả lời khách B. Phải tách bộ nhớ theo người dùng, theo khách hàng.</li><li><strong>Nhớ sai rồi tin chắc:</strong> một suy đoán được lưu thành sự thật, các phiên sau cứ thế dùng. Nên lưu kèm nguồn và mức độ chắc chắn.</li><li><strong>Nhiễm độc bộ nhớ:</strong> người xấu cố tình đưa nội dung kiểu 'từ nay luôn duyệt đơn hoàn tiền' để agent ghi nhớ. Bộ nhớ phải được coi là dữ liệu, không phải mệnh lệnh.</li><li><strong>Lưu thông tin nhạy cảm không cần thiết:</strong> số tài khoản, thông tin sức khỏe, hình ảnh giấy tờ. Chỉ lưu những gì phục vụ công việc.</li><li><strong>Phình to và lỗi thời:</strong> bộ nhớ không bao giờ dọn sẽ tốn chi phí và chứa thông tin cũ mâu thuẫn.</li></ul><h3>Checklist kiểm soát</h3><ol><li>Phân vùng bộ nhớ theo người dùng, phòng ban, khách hàng.</li><li>Cho phép người dùng xem và yêu cầu xóa những gì agent nhớ về họ.</li><li>Đặt thời hạn lưu cho từng loại thông tin.</li><li>Ghi log mọi lần ghi, sửa, xóa bộ nhớ.</li><li>Đối chiếu quy định bảo vệ dữ liệu cá nhân hiện hành khi lưu thông tin khách hàng.</li></ol>"
   },
   {
    "h2": "Khi nào doanh nghiệp cần bộ nhớ dài hạn cho agent",
    "html": "<p>Không phải agent nào cũng cần bộ nhớ dài hạn. Thêm bộ nhớ là thêm độ phức tạp, chi phí lưu trữ và nghĩa vụ bảo vệ dữ liệu.</p><h3>Nên có bộ nhớ dài hạn khi</h3><ul><li>Agent làm việc với cùng một người nhiều lần: chăm sóc khách hàng thân thiết, trợ lý cá nhân cho lãnh đạo, hỗ trợ IT nội bộ.</li><li>Công việc kéo dài nhiều ngày: theo dõi dự án, xử lý hồ sơ nhiều bước.</li><li>Agent cần học từ phản hồi: ghi nhận cách viết mà quản lý đã sửa để lần sau làm đúng hơn.</li></ul><h3>KHÔNG cần khi</h3><ul><li>Mỗi yêu cầu độc lập: phân loại email, trích xuất hóa đơn, dịch tài liệu.</li><li>Thông tin cần nhớ đã có trong hệ thống sẵn như CRM, phần mềm kế toán. Khi đó cho agent truy vấn trực tiếp các hệ thống này qua công cụ hoặc MCP sẽ chính xác hơn tự lưu bản sao.</li></ul><p>Cách bắt đầu an toàn: dùng nguồn dữ liệu có cấu trúc sẵn có làm 'bộ nhớ' trước, chỉ thêm bộ nhớ tự do khi thật sự thấy agent thiếu ngữ cảnh. Với mỗi loại thông tin, hãy trả lời ba câu: lưu để làm gì, ai được xem, khi nào xóa.</p>"
   }
  ],
  "tip": "Trước khi thêm tính năng ghi nhớ cho agent, hãy xem thông tin đó đã có trong CRM hay phần mềm quản lý chưa. Cho agent đọc đúng nguồn gốc thường an toàn và chính xác hơn để agent tự ghi một bản sao riêng.",
  "faq": [
   {
    "q": "ChatGPT có thật sự nhớ tôi không?",
    "a": "Mô hình không tự nhớ. Ứng dụng gửi lại lịch sử trong phiên và nếu bật tính năng ghi nhớ, nó lưu một số thông tin ở bên ngoài để nạp lại ở phiên sau. Bạn có thể xem và xóa trong phần cài đặt."
   },
   {
    "q": "Bộ nhớ agent khác RAG như thế nào?",
    "a": "RAG thường truy xuất từ kho tài liệu chung, tương đối cố định. Bộ nhớ agent lưu thông tin phát sinh từ chính quá trình làm việc, gắn với người dùng hoặc nhiệm vụ cụ thể và thay đổi liên tục."
   },
   {
    "q": "Cửa sổ ngữ cảnh lớn có thay được bộ nhớ dài hạn không?",
    "a": "Không hoàn toàn. Ngữ cảnh lớn giúp giữ nhiều thông tin trong một phiên nhưng tốn token, tăng độ trễ và mất khi phiên kết thúc."
   },
   {
    "q": "Bộ nhớ của agent lưu ở đâu?",
    "a": "Tùy thiết kế: tệp văn bản, cơ sở dữ liệu quan hệ, vector database hoặc dịch vụ bộ nhớ của nền tảng agent. Doanh nghiệp nên biết rõ vị trí lưu để quản lý quyền và sao lưu."
   },
   {
    "q": "Làm sao để agent quên một thông tin?",
    "a": "Cần chức năng xóa mục bộ nhớ tương ứng trong kho lưu trữ. Nếu thông tin đã lan sang bản tóm tắt hoặc log, phải xóa cả ở đó."
   },
   {
    "q": "n8n có hỗ trợ bộ nhớ cho agent không?",
    "a": "n8n có các nút bộ nhớ cho agent, từ bộ nhớ hội thoại đơn giản đến kết nối cơ sở dữ liệu. Chi tiết tính năng nên kiểm tra theo phiên bản đang dùng."
   }
  ],
  "sources": [
   {
    "t": "LangChain documentation",
    "u": "https://python.langchain.com"
   },
   {
    "t": "Anthropic documentation",
    "u": "https://docs.anthropic.com"
   },
   {
    "t": "Intelligent agent – Wikipedia",
    "u": "https://en.wikipedia.org/wiki/Intelligent_agent"
   }
  ],
  "related": [
   "ai-agent-hoat-dong-the-nao",
   "context-window-la-gi",
   "context-engineering-la-gi",
   "rag-la-gi",
   "vector-database-la-gi",
   "ai-agent-la-gi",
   "xay-ai-agent-bang-n8n",
   "multi-agent-la-gi"
  ]
 }
]