3 điểm bởi bboydart91 4 giờ trước | Chưa có bình luận nào. | Chia sẻ qua WhatsApp

Bài viết tổng hợp, dựa trên trải nghiệm trong hai ngày cuối tuần chuyển công cụ quản lý tài sản sang CLI dựa trên SQLite và máy chủ MCP,
để làm rõ điểm mà thiết kế công cụ MCP tách khỏi RPC một cách mang tính quyết định.
Tác giả đã viết khoảng 30 lệnh CLI và hơn 50 công cụ MCP, nhưng điểm xuất phát của bài viết lại là phát hiện rằng thứ khiến tác giả mất nhiều thời gian nhất không phải là mã nguồn mà là phần mô tả của các hàm.

  • Khi cùng lúc phơi bày một hàm cho cả CLI và MCP, dù chữ ký hàm/đối số/giá trị trả về đều giống hệt, hai giao diện vẫn vận hành khác nhau. Thứ thay đổi duy nhất chỉ là bên gọi là con người hay LLM
  • Chữ ký hàm giải thích hàm nhận gì, nhưng gần như không giải thích được khi nào nên được gọi. Tên hàm gần như chỉ là một dòng trong từ điển, nên bản thân từ đó không thể quyết định nó sẽ được đặt lên câu nào
  • Với bên gọi là LLM, thay vì các công cụ được chia nhỏ theo nguyên tắc trách nhiệm đơn nhất (SRP), những công cụ nặng chạm trực tiếp vào ý định lại tự nhiên hơn
  • Xét về hình thức, MCP thuộc hệ RPC (JSON-RPC, chữ ký hàm, schema), nhưng khác biệt mang tính quyết định là hướng của niềm tin bị đảo ngược. Với RPC, bên gọi tin tưởng đối tượng được gọi; còn với MCP, phía làm ra công cụ phải tin tưởng bên gọi (LLM)
  • Chữ ký là lời khai báo, còn mô tả là lời nhờ cậy. Một bên là cưỡng chế, bên kia là thuyết phục. Có thể xem như ngôn ngữ thuyết phục đã bắt đầu đi vào thiết kế công cụ
  • Đây không hẳn là một thay đổi mới mà gần giống một sự quay về. Thiết kế công nghiệp, kiến trúc, UX đã ở vị trí này từ rất lâu, chỉ là lập trình bấy lâu nay đặc biệt đứng về phía cực kỳ thân mật mà thôi

Những điều chữ ký hàm không nói ra

  • Trong Firma, add_txn (giao dịch), add_balance (ảnh chụp tài sản), add_flow (thu nhập/chi tiêu) đều có chữ ký rõ ràng và kiểu đối số được định nghĩa chặt chẽ bằng schema zod, nhưng LLM vẫn thường nhầm lẫn khi phải chọn công cụ nào từ phát ngôn của người dùng
  • Ban đầu tác giả nghi ngờ đây là vấn đề của mô hình LLM, nhưng vấn đề thực sự lại nằm ở chính chữ ký hàm. Cái tên add_txn không chứa thời điểm gọi kiểu “nếu người dùng nói về mua bán thì hãy dùng công cụ này”
  • Chỉ sau khi viết description theo dạng "Use this when... Do NOT use this for..." để nêu rõ thời điểm gọi và ranh giới với các công cụ khác, việc gọi mới trở nên ổn định
  • Ý định của hàm đã dịch chuyển từ chữ ký sang phần mô tả hàm. Giống như tay cầm của búa gợi ra cách sử dụng qua hình dạng, mô tả của hàm MCP trên thực tế chính là affordance của công cụ đối với LLM (theo Donald Norman)

SRP vs affordance, và hướng của niềm tin

  • Ban đầu tác giả định chia nhỏ theo nguyên tắc trách nhiệm đơn nhất như get_holdings, get_prices, get_pnl, nhưng khi người dùng hỏi “Danh mục của tôi thế nào?”, LLM phải ghép bốn năm lần gọi, phản hồi chậm đi và khả năng lệch ý tăng cao
  • Cuối cùng, show_portfolio được thiết kế thành một công cụ nặng trả về cùng lúc mã đang nắm giữ/giá mua trung bình/giá hiện tại/giá trị định giá/lãi lỗ lũy kế. get_brief còn tiến thêm một bước khi trả về cả chỉ số vĩ mô và insight trong một lần
  • SRP là đức tính của người làm ra hàm, còn affordance là đức tính của người dùng công cụ. Nếu bên gọi là con người thì có thể tự lắp ghép; còn nếu là LLM thì công cụ chạm thẳng vào ý định sẽ tốt hơn
  • Ở các công cụ ghi dữ liệu, hướng của niềm tin bộc lộ rõ nhất. Khi thêm vào add_txn dòng "Always confirm with the user before recording", LLM hỏi lại mỗi lần và người dùng lần nào cũng phải trả lời “ok” — ưu điểm của giao diện ngôn ngữ tự nhiên biến mất
  • Cuối cùng, trách nhiệm được phân chia lại theo kiểu “hãy ghi ngay, chỉ hỏi khi mơ hồ, nếu sai thì có thể hoàn tác”. Những chỉ dẫn như vậy không phải là mô tả hình thức của công cụ mà là nguyên tắc vận hành đưa cho bên gọi

Có lẽ gọi hàm mới là trường hợp đặc biệt

  • Con người vốn dĩ từ trước đến nay luôn dùng những công cụ không phải do chính mình tạo ra. Từ chiếc bát do thợ gốm làm, con dao do thợ rèn rèn nên, cho đến chương trình do lập trình viên viết đều như vậy
  • Gọi hàm hóa ra là một mối quan hệ khá đặc biệt, nơi bên gọi và người viết chia sẻ rất nhiều ngữ cảnh, còn hệ thống kiểu/IDE/tài liệu tiếp tục củng cố sự thân mật đó
  • Nếu bên gọi không phải là con người thì có hai lựa chọn. (1) Nhồi thêm nhiều ngữ cảnh vào LLM để biến nó thành một bên gọi thân mật hơn, (2) để phía công cụ lấp đầy khoảng cách. MCP gần với lựa chọn thứ hai hơn
  • Có thể đây là giai đoạn mà chính cách chúng ta thiết kế giao diện đang lặng lẽ thay đổi. Trọng tâm đang dịch chuyển từ chữ ký sang mô tả, từ cưỡng chế sang thuyết phục, từ giả định về sự thân mật sang việc thừa nhận khoảng cách

Chưa có bình luận nào.

Chưa có bình luận nào.