Xây dựng Trợ Lý AI Cá Nhân Trong Vài Giờ: Bí Kíp Tạo Ra "Fernão"
Các công cụ AI hiện đại như Claude Code và Google AntiGravity đã thay đổi hoàn toàn cách các lập trình viên cá nhân hiện thực hóa các bản thiết kế. Tác giả đã xây dựng thành công một trợ lý AI cá nhân tên là Fernão, giúp quản lý lịch trình, công việc và tài chính chỉ trong vài giờ. Hệ thống này cho thấy việc kết hợp tư duy quản lý của con người với khả năng xử lý tự động của AI có thể tạo ra một công cụ năng suất mạnh mẽ và linh hoạt.

Tôi đã vô cùng ngạc nhiên trước tốc độ mà các lập trình viên cá nhân hiện nay có thể hiện thực hóa các bản thiết kế thực tế và hữu ích. Các công cụ như Claude Code, Google AntiGravity và hệ sinh thái ngày càng phát triển xung quanh chúng đã vượt qua một ngưỡng quan trọng: bạn có thể quan sát những gì người khác đang xây dựng trực tuyến và nhận ra tốc độ bạn có thể xây dựng ngay bây giờ là như thế nào. Trong những tuần qua, tôi đã bắt đầu dành một đến hai giờ mỗi ngày riêng biệt để xây dựng với bộ công cụ ưu tiên AI của mình.
Hệ thống xây dựng hiện tại - Google AntiGravity
Bộ công cụ này bao gồm: Google AntiGravity, Google Gemini Pro và các mô hình Claude được truy cập qua AntiGravity. Cấu hình này đã thay đổi căn bản cách tôi nghĩ về việc tạo bản mẫu, tốc độ tương tác và những gì một "trợ lý AI cá nhân" có thể thực hiện được trong thời đại hiện nay. Quan trọng hơn, nó đã kéo tôi quay lại với việc lập trình và xây dựng trực tiếp – điều mà tôi từng phải hy sinh khi vai trò tại DareData chuyển dịch sang quản lý và điều phối thay vì thực thi.
Cách mạng này là một món quà lớn đối với những người thường có xu hướng đi theo các vị trí quản lý. Nó loại bỏ sự đánh đổi mà tôi từng chấp nhận: đó là khi xây dựng công ty đồng nghĩa với việc bỏ hẳn việc xây dựng. Tôi không còn phải chọn giữa việc xây dựng và quản lý; thực tế chúng củng cố cho nhau lẫn nhau.
Tuy nhiên, có một ý nghĩa rộng lớn hơn đối với những người chỉ đơn thuần là phát triển. Nếu các nhân viên AI ngày càng xử lý thực thi, thì việc lập trình thuần túy sẽ không còn đủ. Các lập trình viên sẽ bị đẩy (dù có muốn hay không) sang việc điều phối, ra quyết định và quản lý – điều mà những cá nhân đóng góp (individual contributors) thường ghét nhất. Tức là, kỹ năng quản lý trở thành một phần của công nghệ, và các nhân viên AI trở thành bối cảnh được quản lý.
Điều khiến tôi ngạc nhiên nhất là cách các kỹ năng quản lý hiện có của tôi có thể áp dụng được:
- Hướng dẫn nhân viên AI thay vì quản lý vi mô (micromanaging).
- Yêu cầu kết quả thay vì hướng dẫn chi tiết từng bước.
- Đánh giá, ưu tiên và chỉ đạo các khu vực mơ hồ.
Trong thực tế, tôi đang quản lý và điều phối một nhân viên ảo. Tôi có thể ảnh hưởng sâu sắc đến một phần công việc của nó trong khi vẫn gần như hoàn toàn không biết về phần khác – và đó không phải là một lỗi, mà là một tính năng lớn. Ví dụ, trong trợ lý AI cá nhân của tôi, tôi có thể suy luận rõ ràng về phần backend, nhưng lại gần như không hiểu về phần frontend. Hệ thống vẫn hoạt động tốt, vì vai trò của tôi không còn là phải biết tất cả mọi thứ, mà là lái hệ thống theo đúng hướng.
Đây là tương tự trực tiếp với cách tôi điều phối người trong công ty. Khi DareData phát triển, chúng tôi không tuyển những bản sao của nhà sáng lập. Chúng tôi chủ ý tuyển những người có thể làm những điều mà chúng tôi không làm được, và theo thời gian, những điều mà chúng tôi sẽ không bao giờ học sâu để làm tốt.
Giao diện chính của Fernão
Đủ tự phản tư về quản lý rồi, hãy xem tôi đang xây dựng cái gì vì đó là lý do bạn ở đây:
Một trợ lý AI cá nhân được thiết kế xung quanh các thói quen thực tế của tôi, không phải là một khuôn mẫu năng suất chung. Nó thích nghi với cách tôi làm việc, tư duy và ra quyết định.
Một ứng dụng di động khuyến nghị một album nhạc mỗi tuần, mà không cần hệ thống khuyến nghị truyền thống. Không có sự củng cố trong vùng thoải mái (comfort-zone), điều này giúp tôi mở rộng vùng nghe nhạc của mình.
Một trò chơi di động được xây dựng xung quanh một nhân vật duy nhất tiến hóa qua các tầng dungeon, được phát triển chủ yếu như một sân chơi sáng tạo hơn là một sản phẩm thương mại.
Phần thú vị là, trong khi tôi thoải mái với việc lập trình phần lớn backend, nhưng kỹ năng phát triển frontend không phải là sở trường của tôi – và nếu bị buộc phải tự làm, các dự án này sẽ chậm lại từ vài giờ thành vài ngày, hoặc thậm chí không bao giờ hoàn thành.
Ranh giới đó giờ đây gần như không còn quan trọng. Với bộ công cụ mới, sự tưởng tượng thực sự trở thành rào cản duy nhất. Chi phí của việc "không biết" một lớp hoàn toàn đã bị sụp đổ.
Vì vậy, trong bài viết này, tôi sẽ đi qua trợ lý AI cá nhân của mình: nó làm gì, cấu trúc của nó và tại sao nó hoạt động với tôi. Mục tiêu của tôi là mã nguồn mở nó khi nó ổn định, để những người khác có thể điều chỉnh nó cho các quy trình làm việc riêng của mình. Hiện tại, nó rất cụ thể cho cuộc sống của tôi, nhưng tính cụ thể đó là có chủ đích, và việc làm cho nó phổ quát hơn là một phần của thí nghiệm.
Gặp gỡ Fernão
Fernão Lopes là một nhà biên niên sử của triều đại Bồ Đào Nha. Tôi đã chọn một nhân vật lịch sử Bồ Đào Nha một cách có chủ đích – người Bồ Đào Nha có thói quen gắn tên lịch sử vào hầu như mọi thứ. Nếu nghe có vẻ mang tính khuôn mẫu về người Bồ Đào Nha, thì đó là có chủ đích.
Fernão là người Bồ Đào Nha nhưng thực tế lại nói tiếng Anh, hãy gọi đó là một nhà biên niên sử hiện đại cho thế kỷ 21.
Fernão Lopes, Nhà biên niên sử của Vương quốc Bồ Đào Nha
Đến lúc này, tôi đang làm hai thứ tôi thường tránh: nhân hóa AI và bám đuổi vào một cơn nghiện đặt tên mang tính Bồ Đào Nha. Hãy coi đó là một dấu hiệu vô hại cho thấy tôi đang già đi.
Ngoài ra, Fernão thực sự làm gì cho tôi? Cách tốt nhất là bắt đầu từ trang chủ của anh ấy.
Fernão là một gã trai rất cool hiện đang xử lý năm nhiệm vụ:
- Lịch trình ngày: Lên kế hoạch ngày của tôi bằng cách tổng hợp lịch, danh sách việc cần làm và mục tiêu, sau đó biến chúng thành thứ tôi có thể thực hiện theo.
- Trợ lý viết: Giúp tôi xem xét và làm sạch các bản nháp bài blog và văn bản khác.
- Trợ lý Portfolio: Đề xuất các công ty hoặc cổ phiếu để thêm vào dựa trên nhu cầu cân bằng lại và tình hình kinh tế vĩ mô.
- Tổ chức tài chính: Trích xuất chi tiêu từ báo cáo ngân hàng và tải tất cả lên ứng dụng Cashew, tiết kiệm cho tôi một công việc tốn khoảng 3-4 giờ mỗi tháng.
- Đăng ký & Chiết khấu: Theo dõi tất cả các đăng ký và làm nổi bật các chiết khấu hoặc lợi ích tôi có thể đã quên.
Trong bài viết này, tôi sẽ tập trung vào ứng dụng Lịch trình ngày.
Tại thời điểm này, Lịch trình ngày của Fernão thực hiện ba việc đơn giản:
- Lấy lịch của tôi, bao gồm tất cả các cuộc họp đã lên lịch.
- Lấy danh sách việc cần làm từ Microsoft To Do.
- Lấy các Kết quả chính (Key Results) cá nhân từ Notion.
Tất cả điều này được kết nối qua API. Ý tưởng rất đơn giản: mỗi ngày, Fernão nhìn vào các giới hạn, ưu tiên và cam kết của tôi, sau đó tạo ra lịch trình tốt nhất có thể cho tôi.
Các năng lực hiện tại của Fernão
Để tạo lịch trình trong giao diện người dùng thì khá dễ dàng (tất cả giao diện người dùng (front-end) đều được tạo bằng cảm hứng). Đây là nút tạo lịch trình:
Nút tạo lịch trình cho một ngày cụ thể
Một khi tôi nhấn Tạo lịch trình, Fernão bắt đầu chạy ở chế độ nền:
Fernão đang tạo lịch trình
Các bước theo thứ tự là: lấy lịch, lấy việc cần làm và dữ liệu Notion.
Điểm tiếp theo cũng là nơi sự hiểu biết về lập trình cơ bản thực sự bắt đầu quan trọng, không phải vì mọi thứ mà hàm sau đây làm không hoạt động, mà vì bạn cần hiểu cái gì đang xảy ra và nơi nào các thứ có thể sớm bị lỗi hoặc cần cải thiện.
Hãy bắt đầu với việc lấy lịch. Tại thời điểm này, điều này được xử lý bởi một hàm duyệt khổng lồ do Claude tạo ra và hoàn toàn chưa tối ưu hóa.
def get_events_for_date(target_date=None):
"""
Lấy sự kiện cho một ngày cụ thể từ Google Calendar qua các nguồn ICS.
Args:
target_date: đối tượng datetime.date cho ngày mục tiêu. Nếu None, dùng hôm nay.
Returns a list of event dictionaries.
"""
# URL lịch (đã cố định)
CALENDAR_URLS = [...]
LOCAL_TZ = os.getenv('TIMEZONE', 'Europe/Lisbon')
# ... (Logic xử lý ngày, múi giờ và lấy dữ liệu từ ICS)
return all_events
Là một lập trình viên Python, các câu lệnh in (print) cho tôi thấy sự khó chịu, nhưng đó là vấn đề cho giai đoạn tiếp theo của Fernão: tái cấu trúc và tối ưu hóa code khi logic sản phẩm đã ổn định.
Đây cũng là lúc tôi thực sự thấy sự tương tác giữa con người và AI hoạt động hiệu quả. Tôi có thể ngay lập tức nhận ra vài cách để cải thiện hàm này (giảm độ dài, cắt giảm độ trễ không cần thiết, làm sạch luồng), nhưng làm điều đó tốt vẫn đòi hỏi thời gian, phán đoán và ý định. AI giúp tôi di chuyển nhanh chóng; nó không thay thế nhu cầu phải biết điều gì gọi là xuất sắc.
Tại thời điểm này, tôi không dành nhiều thời gian để tối ưu hóa nó, và đó là một lựa chọn có chủ đích. Mặc dù có những góc cạnh thô sơ, hàm này thực hiện chính xác những gì nó cần làm: nó lấy dữ liệu từ các lịch của tôi và cung cấp thông tin cuộc họp cho Fernão, cho phép mọi thứ tiếp theo xảy ra.
Tiếp theo, Fernão lấy danh sách việc cần làm của tôi từ Microsoft To Do. Đây là nơi các việc cần làm hàng ngày của tôi nằm (các việc cụ thể nhỏ cần được hoàn thành và tạo ra cấu trúc cho một ngày cụ thể). Tất cả được cấu hình trực tiếp trong ứng dụng Microsoft To Do, đây là một phần cốt lõi của quy trình làm việc hàng ngày của tôi.
Tiếp theo, tôi cũng muốn Fernão hiểu đi đâu tôi đang cố gắng đến, không chỉ là những gì nằm trong danh sách ngày. Để làm điều đó, nó lấy các mục tiêu trực tiếp từ một trang Notion nơi tôi có các kết quả chính cho năm nay.
Ví dụ về mục tiêu cá nhân
Điều này cung cấp cho Fernão bối cảnh rộng hơn về việc ưu tiên những gì trong các việc cần làm, như bạn sẽ thấy trong lời nhắc để tạo lịch trình.
Btw, trong khi viết bài viết này, tôi đã thêm một tiện ích nhỏ vào ứng dụng. Nếu chúng ta đang xây dựng một trợ lý cá nhân, nó cũng nên có một chút tính cách.
Vì vậy, tôi đã hỏi Gemini:
"Anh có thể thêm một hiệu ứng hoạt hình thú vị khi ứng dụng đang lấy sự kiện lịch, kiểm tra việc cần làm và kéo dữ liệu từ Notion không? Có thể là một tiện ích nhỏ của Fernão đang đảo chảo nồi, với chú thích 'Fernão đang nấu'."
Fernão đang nấu
Sau khi vòng này hoàn tất, các việc cần làm và sự kiện lịch đã được thu thập và hiển thị trong giao diện người dùng của Fernão (ví dụ về các việc cần làm và cuộc họp cho ngày của tôi được hiển thị bên dưới).
Các sự kiện và việc cần làm được lấy bởi Fernão
Và bây giờ là phần thú vị: với lịch, việc cần làm và mục tiêu trong tay, Fernão tổng hợp cả ngày thành một kế hoạch duy nhất, kỳ diệu:
07:30-09:30 | Tập Gym 09:30-09:40 | Kiểm tra thời gian làm việc trên Odoo (Hạn chót: 2026-02-04) ...
Đây là một trong những khoảnh khắc thực sự cảm thấy kỳ diệu. Không phải vì công nghệ đang mờ mịt, mà vì kết quả lại rất gọn gàng. Một hỗn hợp lộn xộn của các cuộc họp, việc cần làm và mục tiêu dài hạn biến thành một ngày mà tôi có thể thực hiện thực sự.
Điều làm cho nó càng thú vị hơn là bước cuối cùng lại đơn giản đến mức ngạc nhiên. Sau tất cả việc nặng nề được thực hiện ở chế độ nền (sự kiện lịch, việc cần làm, mục tiêu), tôi không điều phối một quy trình hoặc chuỗi lời nhắc phức tạp. Tôi sử dụng một lời nhắc duy nhất.
Lời nhắc đó lấy tất cả những gì Fernão biết về các giới hạn và ưu tiên của tôi và biến nó thành ngày bạn sắp thấy.
{
"name": "daily_schedule",
"description": "Tạo lịch trình hàng ngày dựa trên sự kiện lịch và việc cần làm",
"model": "gemini-2.5-flash-lite",
"temperature": 0.3,
"max_tokens": 8192,
"variables": [...],
"template": |
Bạn là trợ lý lập lịch cá nhân của tôi. Hãy giúp tôi lên kế hoạch cho ngày!
**QUY TẮC LÊN LỊCH:**
1. **Không thể lên lịch việc cần làm trong các sự kiện lịch** - các sự kiện là cố định
2. **Nghỉ ngơi bắt buộc:**
- Trưa: 12:30-13:30 (cố gắng dành khi có thể)
- Tối: 20:30-21:00
- Chơi với con mèo: 45-60 phút ở khắp nơi trong ngày
3. **Đối thích ứng:** Thông minh đưa việc cần làm vào giữa các sự kiện dựa trên thời gian có sẵn
4. **Ước tính thời gian:** Sử dụng ngữ cảnh việc cần làm để ước tính thời gian cho mỗi việc
5. **Giờ làm việc:** 09:30 đến 22:00
6. **Bắt đầu lịch trình:** {is_today}
**CÔNG VIỆC CỦA BẠN:**
1. Tạo một lịch trình đầy đủ theo giờ cho {date_context}
2. Đưa tất cả việc cần làm vào giữa các sự kiện và nghỉ ngơi
3. **Ưu tiên việc cần làm dựa trên Kết quả & Mục tiêu của tôi từ Notion** - tập trung vào những gì quan trọng nhất
...
}
Và với điều đó, Fernão chắc chắn đang nấu:
Fernão đang nấu lại
Đây là một hệ thống thực sự thú vị để xây dựng. Tôi sẽ tiếp tục phát triển Fernão, trao cho anh ấy các trách nhiệm mới, phá vỡ nó, sửa chữa nó và chia sẻ những gì tôi học được theo cách này.
Trong thời gian tới, tôi cũng dự định viết các hướng dẫn thực tế về cách xây dựng và triển khai các ứng dụng tương tự cho chính bạn. Hiện tại, Fernão sống chỉ trên máy của tôi, và có lẽ điều đó sẽ vẫn tiếp tục như vậy. Dù vậy, tôi có ý định mã nguồn mở nó. Không phải vì nó có giá trị chung chung ở hình thức hiện tại (nó được điều chỉnh sâu cho cuộc sống của tôi), mà vì các ý tưởng cốt lõi có thể có.
Để có thể làm được điều đó, tôi sẽ cần trừu tượng hóa công cụ, mô-đun hóa chức năng và cho phép các tính năng được bật và tắt để những người khác có thể định hình trợ lý xung quanh quy trình làm việc của họ, thay vì của tôi.
Tôi có thể đã xây dựng thứ tương tự bằng Claude Code. Tôi không. Tôi muốn sự kiểm soát hoàn toàn: quyền tự do thay đổi mô hình, kết hợp các nhà cung cấp và cuối cùng là chạy Fernão trên một mô hình ngôn ngữ cục bộ (local LLM) thay vì phụ thuộc vào các API bên ngoài. Sở hữu và tính linh hoạt quan trọng hơn sự tiện lợi ở đây.
Nếu bạn đang xây dựng một trợ lý AI cá nhân, những việc bạn sẽ giao cho nó? Tôi thực sự muốn nghe ý kiến của bạn và thử xây dựng chúng bên trong Fernão. Để lại bình luận vì dự án này vẫn đang phát triển và các góc nhìn bên ngoài thường là cách nhanh nhất để làm cho nó tốt hơn.



