Blog

Vì sao quyết định trong chat AI bị thất lạc, và nên lưu chúng ở đâu

Quyết định đưa ra trong ChatGPT hay Claude biến mất khi cuộc chat trôi đi; hãy ghi chúng lên bảng, gắn với công việc, để phiên AI tiếp theo đọc chúng trước tiên.

Weft là trình quản lý công việc bằng AI cho nhà sáng lập độc lập và nhóm nhỏ.

Tất cả bài viết

Tác giả: Andrei Finogeev ·

Quyết định đưa ra trong một cuộc trò chuyện với ChatGPT hay Claude bị thất lạc vì cuộc chat không có trạng thái. Không có gì trong đó đánh dấu một dòng là “đây là điều chúng ta đã quyết định”, không có gì gắn dòng đó với công việc nó ảnh hưởng, và một cuộc chat mới bắt đầu trống trơn. Cách sửa là để AI ghi quyết định lại ở nơi công việc nằm, dưới dạng một hồ sơ ngắn kèm lý do, và để phiên tiếp theo đọc các hồ sơ đó trước khi hành động.

Chúng tôi là người làm ra Weft. Thông tin về sản phẩm khác lấy từ trang chính thức của họ, kiểm tra ngày 27/10/2026. Ý tưởng một chuỗi tin nhắn “không có trạng thái” đến từ bài viết của Hypertask về thread trên Slack. Hướng dẫn này áp dụng nó cho chat AI.

Vì sao quyết định đưa ra cùng ChatGPT hay Claude lại biến mất?

Bạn dành bốn mươi phút với một trợ lý để cân nhắc hai nhà cung cấp cơ sở dữ liệu, hai mô hình định giá hay hai cách thiết kế API. Bạn chốt một phương án. Lập luận chặt chẽ, trợ lý đồng ý, và bạn chuyển sang việc tiếp theo.

Một tuần sau, kết luận vẫn nằm trong cuộc chat đó, đâu đó phía trên hai trăm tin nhắn khác. Một cuộc chat mới không biết gì về nó. Đồng đội chưa từng thấy nó. Và nếu hôm sau bạn mở một ứng dụng AI khác, chẳng hạn một agent viết code trong terminal, ứng dụng đó bắt đầu từ con số không và có thể hồn nhiên đề xuất đúng phương án bạn đã gạt bỏ.

Đây không phải vấn đề kỷ luật. Một cuộc trò chuyện là một chuỗi tin nhắn. Nó không có trường “đã quyết định”, không có người chịu trách nhiệm, không có liên kết tới công việc, và không có cách nào nói “điều này thay thế điều chúng ta nói hôm thứ Ba”. Một câu hỏi đã quyết và một câu hỏi bị bỏ dở trông giống hệt nhau khi chúng đã trôi đi.

Chẳng phải bộ nhớ của chat đã giải quyết chuyện này sao?

Không, cho việc này. Nhiều trợ lý giờ có thể nhớ những điều về bạn giữa các cuộc chat, và điều đó hữu ích cho sở thích và bối cảnh. Nhưng bộ nhớ đó thuộc về một sản phẩm và một tài khoản. Nó được viết để trợ lý đó dùng, không phải như một hồ sơ mà con người xem lại được từng dòng, và một ứng dụng AI khác không đọc được nó. Nó cũng không cho biết một lựa chọn là về công việc nào hay nó đã thay thế lựa chọn nào trước đó.

Một nhật ký quyết định có những yêu cầu khác. Những người và agent làm dự án phải tìm thấy nó, ứng dụng AI nào nhận việc tiếp theo cũng phải đọc được nó, nó phải gắn với công việc, và phải trung thực về lịch sử: khi một quyết định thay đổi, quyết định cũ vẫn phải hiện ra cùng lý do nó bị thay thế.

Điều gì được coi là một quyết định đáng ghi lại?

Hãy ghi lại một lựa chọn khi ai đó hoàn toàn có thể chọn khác đi và lựa chọn đó sẽ định hình công việc về sau. Ví dụ tốt:

  • Chọn một công cụ, nhà cung cấp hay thư viện thay vì cái khác.
  • Cố ý bỏ một thứ (“quý này không làm chương trình giới thiệu”).
  • Đặt ra một quy tắc mà công việc phải tuân theo (“mọi giá hiển thị ở EU đều đã gồm VAT”).
  • Thay đổi một lựa chọn trước đó, kèm lý do.
  • Một bài học rút ra từ thất bại (“đừng chạy migration trong giờ làm việc”).

Đừng ghi lại:

  • Những ý tưởng bạn đưa ra nhưng không áp dụng.
  • Các bước của bản thân công việc (chỗ của chúng là trong công việc và kết quả của nó).
  • Bất cứ điều gì người dùng chưa đồng ý, trừ khi nó được đánh dấu rõ là đề xuất.
  • Những thông tin ai cũng tra lại được trong một phút.

Một phép thử hữu ích: nếu một phiên AI mới sắp lật ngược lựa chọn này, bạn có muốn nó dừng lại và đọc lý do không? Nếu có, hãy ghi lại.

Một hồ sơ quyết định tốt trông như thế nào?

Giữ cho nó ngắn và giữ lại lý do. Định dạng dưới đây là phiên bản rút gọn của MADR (Markdown Architectural Decision Records), cũng là định dạng mà công cụ record_decision của Weft dùng:

Title:        Tải file lên: lưu trữ đối tượng, không phải cơ sở dữ liệu
Outcome:      File tải lên được đưa vào lưu trữ đối tượng; cơ sở dữ liệu
              chỉ giữ khóa file và metadata.
Status:       accepted
Context:      Người dùng đính kèm file tới 50 MB. Giữ chúng trong
              cơ sở dữ liệu sẽ làm bản sao lưu chậm và nặng.
Options:      1. Lưu trữ đối tượng + rẻ, bản sao lưu vẫn nhỏ
                                   - thêm một dịch vụ phải cấu hình
              2. Cột trong CSDL    + mọi thứ ở một chỗ
                                   - bản sao lưu phình ra theo mỗi lần tải lên
Consequences: Cần URL có chữ ký cho việc tải xuống.
              Xóa một công việc cũng phải xóa file của nó.
Revisit when: Khi cần tìm kiếm bên trong nội dung file.
Task:         Tải file lên
  • Title đặt tên cho quyết định để bạn tìm thấy nó khi lướt qua.
  • Outcome là một câu mà người mới có thể làm theo.
  • Context là những gì đúng vào thời điểm đó. Đây là phần biến mất khỏi trí nhớ đầu tiên.
  • Options chỉ liệt kê những gì thực sự đã được cân nhắc, không phải các phương án nghĩ ra sau đó.
  • Consequences gồm cả những mặt trái bạn đã chấp nhận, để không ai “phát hiện” ra chúng sau này như lỗi.
  • Revisit when nói điều gì sẽ khiến lựa chọn trở nên sai.

Weft lưu hồ sơ quyết định thế nào?

Weft là một bảng công việc mà các ứng dụng AI của bạn truy cập qua MCP tại https://letsweft.com/api/mcp. Ba trong số 32 công cụ của nó xử lý quyết định:

  • record_decision nhận tiêu đề và kết quả, cùng bối cảnh, tối đa năm phương án kèm ưu nhược điểm, hệ quả và điều kiện để xem xét lại. Nó có thể gắn với một công việc (taskId) hoặc một dự án. Hồ sơ là bất biến: muốn thay đổi, AI ghi một quyết định mới với supersedesId trỏ tới quyết định cũ, và hồ sơ cũ vẫn ở lại, được đánh dấu là đã bị thay thế.
  • get_context trả về các quyết định và bài học còn hiệu lực của không gian làm việc, mới nhất trước, gói gọn trong một ngân sách token (mặc định 800 token). Có thể thu hẹp theo dự án hoặc công việc. Mỗi dòng mang ngày của nó, quyết định đã bị thay thế không bao giờ xuất hiện, và những dòng không vừa được đếm lại chứ không bị giấu đi.
  • get_task_history ở chế độ decisions liệt kê mọi quyết định đã ghi về một công việc, kể cả các phán quyết xem xét và lý do của chúng.

record_decision còn một công dụng thứ hai: chuyển tiếp phán quyết mà người dùng đưa ra trong cuộc trò chuyện về công việc đang chờ họ xem xét (chấp nhận, làm lại, bỏ hoặc để sau). Mô tả của công cụ nói với AI rằng ở đây nó là người đưa tin, không phải người quyết định, nên nó không bao giờ được dùng cách này để tự chấp nhận công việc của mình.

Vì hồ sơ không bao giờ bị sửa tại chỗ, lịch sử luôn trung thực. Nếu tháng Ba bạn đổi nhà cung cấp, quyết định tháng Một vẫn còn đó, được đánh dấu là đã bị thay thế, và hồ sơ tháng Ba nói rõ vì sao.

Làm sao bảo AI ghi lại quyết định?

Kết nối Weft với ứng dụng AI của bạn, rồi dán một chỉ dẫn như dưới đây vào đầu cuộc chat, hoặc vào phần chỉ dẫn tùy chỉnh hay file dự án của ứng dụng nếu có:

Khi chúng ta đưa ra một lựa chọn thật trong cuộc chat này (chọn một phương án thay vì phương án khác,
bỏ một thứ gì đó, hoặc thay đổi một lựa chọn trước đó), hãy ghi nó vào Weft bằng
record_decision trước khi chuyển sang việc khác:
- title: tên quyết định, trong vài từ
- outcome: lựa chọn, trong một câu
- context: điều gì đúng vào lúc đó buộc phải chọn
- options: chỉ những phương án chúng ta thực sự cân nhắc, kèm ưu nhược điểm
- consequences: hệ quả kéo theo, cả tốt lẫn xấu
- confirmation: khi nào nên xem xét lại
- taskId hoặc project: công việc hay dự án mà quyết định này liên quan
Nếu nó thay đổi một quyết định trước đó, truyền supersedesId thay vì sửa.
Đừng ghi chuyện phiếm, phỏng đoán, hay những điều tôi chưa đồng ý.
Nếu tôi chưa chốt, dùng status "proposed".
Khi bắt đầu bất kỳ công việc không đơn giản nào, gọi get_context trước và cho tôi biết
những quyết định cũ nào áp dụng.

Kết nối chỉ mất một phút. Trong ChatGPT, Weft là ứng dụng đã phát hành trong thư mục plugin, có trên mọi gói kể cả Free (thiết lập). Trong Claude Code đó là một lệnh (thiết lập). Claude.ai và Claude Desktop thêm nó làm connector tùy chỉnh. Đăng nhập là OAuth trong trình duyệt, nên không có key nào phải sao chép, và Weft cấp refresh token, nên ứng dụng tự gia hạn đăng nhập. Trang thiết lập cho các ứng dụng khác, gồm Cursor và Codex, có trong tài liệu.

Chuyện gì xảy ra khi hôm sau tôi chuyển từ ChatGPT sang Claude Code?

Đây đúng là tình huống mà chỉ dẫn trên được viết ra cho.

  1. Thứ Hai, bạn lên kế hoạch một tính năng trong ChatGPT. Bạn quyết định lưu file tải lên trong lưu trữ đối tượng thay vì cơ sở dữ liệu, và ChatGPT gọi record_decision với bối cảnh, cả hai phương án và các hệ quả, gắn với công việc “Tải file lên”.
  2. Thứ Ba, bạn mở Claude Code trong repository. Nếu chưa kết nối: claude mcp add --transport http weft https://letsweft.com/api/mcp.
  3. Bạn bảo nó nhận công việc tải file lên. Trước khi viết code, nó gọi get_context cho công việc đó, hoặc get_task_history ở chế độ decisions, và nhận lại hồ sơ của thứ Hai.
  4. Nó xây dựng trên lưu trữ đối tượng thay vì mở lại câu hỏi. Nếu tìm ra lý do thật sự khiến lựa chọn đó sai, nó có thể đề xuất một quyết định mới thay thế quyết định thứ Hai, và bạn quyết định.

Cả hai ứng dụng đọc cùng một bảng và cùng các quyết định, vì hồ sơ nằm trong Weft, không nằm trong cuộc chat nào. Mỗi kết nối OAuth là một tác nhân riêng, và bảng hiển thị tên mà mỗi ứng dụng đã đăng ký, nên bạn thấy được kết nối nào đã tạo công việc nào. Về việc chạy nhiều agent trên một bảng mà không va chạm, xem nhiều agent AI, một bảng.

Quyết định từ ChatGPT nên được lưu ở đâu?

Bốn nơi thường gặp, so sánh theo những gì một nhật ký quyết định cần:

Quyết định được lưu ở đâuTìm lại được về sauAI khác đọc đượcGắn với công việcThay thế được kèm lý do
Lịch sử chatChỉ khi bạn nhớ là cuộc chat nào, và tìm kiếm tìm ra nóKhông, ứng dụng khác không mở đượcKhôngKhông, tin nhắn sau mâu thuẫn với nó mà không đánh dấu
Tài liệu hoặc trang ghi chúCó, nếu ai đó đã viết lạiChỉ khi AI đó được kết nối với tài liệuLỏng lẻo, qua đường dẫnThường là sửa trực tiếp, việc này hay xóa mất lập luận cũ
Bình luận trên công việcCó, trên công việc đóNếu AI đọc được bình luận của trình theo dõiCóKhông rõ ràng, bình luận mới không đánh dấu bình luận cũ là đã bị thay thế
Hồ sơ quyết định trên bảng WeftCó, qua get_context và get_task_historyCó, mọi ứng dụng kết nối với không gian làm việc qua MCPCó, theo công việc hoặc dự ánCó, supersedesId giữ lại hồ sơ cũ, được đánh dấu là đã bị thay thế

Ý ở đây không phải là chat hay tài liệu thì dở. Chat là nơi bạn suy nghĩ. Quyết định cần được chép ra khỏi chat vào một thứ có trạng thái, ngay lúc nó được đưa ra, bởi bên vốn đã có mặt trong cuộc trò chuyện: AI.

Cái này có thay thế tài liệu hay wiki của chúng tôi không?

Không. Weft không có tài liệu hay wiki, và không cố trở thành một cái như vậy. Những giải thích dài, hướng dẫn onboarding và bản viết về thiết kế thuộc về công cụ tài liệu của bạn. Một hồ sơ quyết định cố ý nhỏ: một lựa chọn, lý do của nó, và cái gì đã thay thế nó. Nếu đội bạn đã giữ hồ sơ quyết định trong wiki và mọi ứng dụng AI bạn dùng đều đọc được nó, có thể thế là đủ. Weft hữu ích khi quyết định được đưa ra trong chat AI và người đọc tiếp theo thường là một AI khác. Nếu bạn đang cân nhắc Notion cho việc này, xem các lựa chọn thay thế Notion cho công việc AI.

Hai giới hạn nữa, nói thật. Weft không đọc các cuộc chat của bạn: một quyết định chỉ được ghi khi AI gọi record_decision, và đó là lý do chỉ dẫn ở trên quan trọng. Và AI có thể đánh giá sai điều gì là một quyết định, nên thỉnh thoảng hãy đọc get_context và thay thế bất cứ thứ gì nó ghi sai.

Chi phí bao nhiêu?

Ghi và đọc quyết định chạy được trên gói Free, gồm 50 công việc đang hoạt động và 200 lượt gọi công cụ AI mỗi tháng. Mỗi lượt gọi record_decision hay get_context tính là một lượt. Pro có giá $7 mỗi chỗ mỗi tháng hoặc $60 mỗi chỗ mỗi năm, không giới hạn công việc và lượt gọi (bảng giá). Weft không có tín dụng AI: phần suy nghĩ diễn ra trong ứng dụng AI của chính bạn, và Weft chỉ lưu bảng cùng các hồ sơ của nó.

Tôi không thể chỉ bảo ChatGPT tóm tắt các quyết định ở cuối cuộc chat sao?
Có thể, và nó có ích. Nhưng bản tóm tắt vẫn nằm trong cuộc chat đó hoặc ở bất cứ đâu bạn dán nó vào. Nó không gắn với công việc, ứng dụng AI khác không đọc được, và khi quyết định thay đổi thì không có ghi nhận nào về cái nó đã thay thế. Ghi từng quyết định ngay khi nó được đưa ra tránh được cả ba điều đó.
AI có tự ghi quyết định mà không cần được bảo không?
Mô tả của công cụ record_decision bảo AI dùng nó mỗi khi người dùng đưa ra một lựa chọn thật trong cuộc trò chuyện, nên một số ứng dụng sẽ làm vậy. Đừng trông cậy vào điều đó. Chỉ dẫn được dán vào khiến nó trở nên rõ ràng, và bạn luôn có thể nói “ghi lại quyết định đó”.
Một quyết định ghi sai có sửa được không?
Không sửa tại chỗ. Hồ sơ là bất biến. Hãy ghi một quyết định đã sửa với supersedesId trỏ tới quyết định sai. Hồ sơ cũ vẫn ở lại, được đánh dấu là đã bị thay thế, và get_context ngừng hiển thị nó.
Quyết định có cần gắn với công việc không?
Không. Một quyết định có thể gắn với một công việc, một dự án, hoặc không gắn với gì. Gắn nó với một công việc nghĩa là get_task_history hiển thị nó bên cạnh công việc đó, và get_context có thể được thu hẹp vào nó.
Đây có phải là bộ nhớ công việc của Weft không?
Không. Bộ nhớ công việc (những ghi chú ngắn đã học được) là một tính năng riêng của gói Pro. Hồ sơ quyết định đến từ record_decision, và code không giới hạn chúng ở gói Pro.
Nếu tôi dùng nhiều hơn một ứng dụng AI thì sao?
Đó chính là lý do chính để làm việc này. ChatGPT, Claude Code, Cursor hay Codex kết nối với cùng một không gian làm việc Weft đều đọc cùng các quyết định qua get_context, nên ứng dụng thứ hai không mở lại những câu hỏi mà ứng dụng thứ nhất đã giải quyết.