Sáu tháng trước, việc này cần một lập trình viên backend, một kỹ sư DevOps, và hai tuần. Hôm nay, chỉ cần một câu lệnh và Claude. Đây là kiến trúc hoàn chỉnh - và tại sao hầu hết lập trình viên vẫn chưa nhận ra điều này.
Mô hình tư duy mà hầu hết mọi người có về AI là sai.
Họ nghĩ: Trợ lý AI → bạn đặt câu hỏi → nó trả lời.
Thực tế trong năm 2026: AI agent → bạn mô tả một hệ thống → nó xây dựng, triển khai, và kết nối hệ thống đó với môi trường của bạn. Không phải một bản mẫu. Không phải một đoạn code. Một ứng dụng đang chạy.
Sự thay đổi này có một cái tên: Kiến trúc Ứng dụng Sinh tạo (Generative App Architecture). Và công nghệ giúp nó trở nên khả thi - Claude + Obsidian + MCP - có sẵn cho bất kỳ ai ngay lúc này.
1. Kiến trúc Ứng dụng Sinh tạo thực sự có nghĩa là gì
Phát triển phần mềm truyền thống:
1Ý tưởng → Đặc tả → Thiết kế → Dev Frontend → Dev Backend2→ Thiết lập Database → Tích hợp API → Kiểm thử → Triển khai3Thời gian: vài tuần. Chi phí: hàng nghìn đô.
Kiến trúc Ứng dụng Sinh tạo:
1Ý tưởng → Lời nhắc (Prompt) → Hệ thống đang chạy2Thời gian: vài phút. Chi phí: Token API.
AI agent không chỉ viết code. Nó chạy một Vòng lặp Agentic (Agentic Loop) hoàn chỉnh bên dưới:
Bước 1 - Phân rã (Decomposition)
Yêu cầu trừu tượng của bạn ("xây dựng CRM cho tiệm rửa xe") được chia thành hàng chục tác vụ con nguyên tử: lược đồ cơ sở dữ liệu, thành phần UI, logic thông báo, luồng xác thực, endpoint API.
Bước 2 - Ánh xạ môi trường qua MCP
Thông qua Giao thức Ngữ cảnh Mô hình (Model Context Protocol), agent ngay lập tức hiểu được những công cụ nào nó có quyền truy cập - hệ thống tệp của bạn, các gói đã cài đặt, dịch vụ đang chạy, API có sẵn.
Bước 3 - Xây dựng và kiểm thử lặp
Agent viết code, thực thi nó, bắt lỗi biên dịch, sửa lỗi, và kiểm thử lại - một cách tự động - cho đến khi hệ thống chạy chính xác.
Bước 4 - Triển khai theo ngữ cảnh
Đầu ra không phải là một tệp văn bản với code. Đó là một môi trường cục bộ đang hoạt động hoặc một ứng dụng web có thể triển khai.
Đây là sự khác biệt giữa một công cụ hỗ trợ lập trình viên và một hệ thống thay thế toàn bộ quy trình xây dựng.
2. Claude làm động cơ - ba chế độ triển khai
Chế độ 1 - Claude Artifacts
Con đường nhanh nhất từ lời nhắc đến ứng dụng đang chạy. Khi bạn yêu cầu Claude xây dựng một thứ gì đó, nó sẽ mở một cửa sổ Artifact tương tác và lắp ráp, biên dịch, và chạy một ứng dụng web hoàn chỉnh trong thời gian thực - React, HTML, JavaScript - trong khi bạn theo dõi.
Bạn có thể tương tác với ứng dụng đang chạy bên trong Artifact, cải tiến nó bằng ngôn ngữ tự nhiên, và xuất toàn bộ kho lưu trữ.
Lời nhắc tạo ra một trình theo dõi tài chính sẵn sàng sản xuất:
1Xây dựng một ứng dụng theo dõi tài chính cá nhân với:23TÍNH NĂNG:4- Nhật ký giao dịch (thêm/sửa/xóa với danh mục)5- Chế độ xem ngân sách hàng tháng với thanh tiến trình6- Trình theo dõi danh mục đầu tư tiền điện tử lấy giá trực tiếp từ CoinGecko API7- Tính toán giá trị tài sản ròng cập nhật theo thời gian thực8- Nút chuyển đổi chế độ tối910YÊU CẦU KỸ THUẬT:11- Ứng dụng React dạng tệp đơn12- Chỉ sử dụng useState + useEffect (không quản lý trạng thái bên ngoài)13- Tailwind CSS để tạo kiểu14- Tìm nạp từ API công cộng (không yêu cầu xác thực)15- Tương thích di động1617DỮ LIỆU:18- Lưu trữ vào localStorage giữa các phiên19- Xuất giao dịch dưới dạng CSV2021Đầu ra: ứng dụng khép kín hoàn chỉnh sẵn sàng triển khai.
Những gì Claude Artifacts trả về - một ứng dụng React hoàn chỉnh:
1import { useState, useEffect } from "react";23const CATEGORIES = ["Housing","Food","Transport","Entertainment","Health","Savings","Income","Crypto","Other"];4const CRYPTO_IDS = { BTC: "bitcoin", ETH: "ethereum", SOL: "solana" };56export default function FinanceTracker() {7 const [transactions, setTransactions] = useState(() =>8 JSON.parse(localStorage.getItem("transactions") || "[]")9 );10 const [cryptoPrices, setCryptoPrices] = useState({});11 const [form, setForm] = useState({ description:"", amount:"", category:"Other", type:"expense", date:"" });12 const [darkMode, setDarkMode] = useState(false);1314 useEffect(() => {15 const ids = Object.values(CRYPTO_IDS).join(",");16 fetch(`https://api.coingecko.com/api/v3/simple/price?ids=${ids}&vs_currencies=usd`)17 .then(r => r.json())18 .then(data => {19 const prices = {};20 Object.entries(CRYPTO_IDS).forEach(([sym, id]) => { prices[sym] = data[id]?.usd || 0; });21 setCryptoPrices(prices);22 });23 }, []);2425 useEffect(() => {26 localStorage.setItem("transactions", JSON.stringify(transactions));27 }, [transactions]);2829 const addTransaction = () => {30 if (!form.description || !form.amount) return;31 setTransactions(prev => [...prev, { ...form, id: Date.now(), amount: parseFloat(form.amount),32 date: form.date || new Date().toISOString().split("T")[0] }]);33 setForm({ description:"", amount:"", category:"Other", type:"expense", date:"" });34 };3536 const totalIncome = transactions.filter(t => t.type === "income").reduce((s,t) => s + t.amount, 0);37 const totalExpenses = transactions.filter(t => t.type === "expense").reduce((s,t) => s + t.amount, 0);38 const netWorth = totalIncome - totalExpenses;3940 const bg = darkMode ? "#0D0D0D" : "#F9F7F4";41 const card = darkMode ? "#1A1A1A" : "#FFF";42 const text = darkMode ? "#F0F0F0" : "#1A1A1A";43 const border = darkMode ? "#2A2A2A" : "#E8E8E8";4445 return (46 <div style={{ minHeight:"100vh", background:bg, color:text, fontFamily:"system-ui, sans-serif" }}>47 <div style={{ maxWidth:800, margin:"0 auto", padding:"24px 16px" }}>4849 <div style={{ display:"flex", justifyContent:"space-between", marginBottom:24 }}>50 <div>51 <h1 style={{ fontSize:22, fontWeight:500, margin:0 }}>Finance Tracker</h1>52 <p style={{ margin:"4px 0 0", fontSize:13, color: netWorth >= 0 ? "#22C55E" : "#EF4444" }}>53 Net worth: ${netWorth.toFixed(2)}54 </p>55 </div>56 <button onClick={() => setDarkMode(!darkMode)}57 style={{ padding:"8px 14px", borderRadius:8, border:`1px solid ${border}`,58 background:card, color:text, cursor:"pointer" }}>59 {darkMode ? "Light" : "Dark"}60 </button>61 </div>6263 <div style={{ display:"grid", gridTemplateColumns:"1fr 1fr", gap:10, marginBottom:20 }}>64 {[["Income","#22C55E",totalIncome],["Expenses","#EF4444",totalExpenses]].map(([label,color,val]) => (65 <div key={label} style={{ background:card, border:`1px solid ${border}`, borderRadius:10, padding:14 }}>66 <p style={{ margin:0, fontSize:12, color:"#999" }}>{label}</p>67 <p style={{ margin:"4px 0 0", fontSize:20, fontWeight:600, color }}>${val.toFixed(2)}</p>68 </div>69 ))}70 </div>7172 <div style={{ background:card, border:`1px solid ${border}`, borderRadius:10, padding:16, marginBottom:20 }}>73 <div style={{ display:"grid", gridTemplateColumns:"2fr 1fr 1fr", gap:8, marginBottom:8 }}>74 <input placeholder="Description" value={form.description}75 onChange={e => setForm(p => ({ ...p, description: e.target.value }))}76 style={{ padding:"9px 12px", borderRadius:8, border:`1px solid ${border}`, background:bg, color:text, fontSize:13 }} />77 <input type="number" placeholder="Amount" value={form.amount}78 onChange={e => setForm(p => ({ ...p, amount: e.target.value }))}79 style={{ padding:"9px 12px", borderRadius:8, border:`1px solid ${border}`, background:bg, color:text, fontSize:13 }} />80 <select value={form.type} onChange={e => setForm(p => ({ ...p, type: e.target.value }))}81 style={{ padding:"9px 12px", borderRadius:8, border:`1px solid ${border}`, background:bg, color:text, fontSize:13 }}>82 <option value="expense">Expense</option>83 <option value="income">Income</option>84 </select>85 </div>86 <div style={{ display:"grid", gridTemplateColumns:"2fr auto", gap:8 }}>87 <select value={form.category} onChange={e => setForm(p => ({ ...p, category: e.target.value }))}88 style={{ padding:"9px 12px", borderRadius:8, border:`1px solid ${border}`, background:bg, color:text, fontSize:13 }}>89 {CATEGORIES.map(c => <option key={c}>{c}</option>)}90 </select>91 <button onClick={addTransaction}92 style={{ padding:"9px 20px", borderRadius:8, background:"#E8692A",93 color:"#fff", border:"none", cursor:"pointer", fontSize:13, fontWeight:500 }}>94 Add95 </button>96 </div>97 </div>9899 <div style={{ background:card, border:`1px solid ${border}`, borderRadius:10, overflow:"hidden" }}>100 <p style={{ margin:0, padding:"12px 16px", borderBottom:`1px solid ${border}`, fontSize:13, fontWeight:500 }}>101 Transactions ({transactions.length})102 </p>103 {transactions.slice().reverse().map(t => (104 <div key={t.id} style={{ display:"flex", justifyContent:"space-between",105 alignItems:"center", padding:"11px 16px", borderBottom:`1px solid ${border}` }}>106 <div>107 <p style={{ margin:0, fontSize:13, fontWeight:500 }}>{t.description}</p>108 <p style={{ margin:"2px 0 0", fontSize:12, color:"#999" }}>{t.category} · {t.date}</p>109 </div>110 <span style={{ fontSize:14, fontWeight:600, color: t.type==="income" ? "#22C55E" : "#EF4444" }}>111 {t.type==="income" ? "+" : "-"}${t.amount.toFixed(2)}112 </span>113 </div>114 ))}115 </div>116 </div>117 </div>118 );119}
Đây là ứng dụng hoàn chỉnh. Một lời nhắc. Chạy ngay lập tức trong Claude Artifacts.
Chế độ 2 - Claude + MCP (triển khai cục bộ)
MCP (Model Context Protocol) cho phép Claude truy cập trực tiếp vào môi trường cục bộ của bạn. Một lời nhắc không chỉ tạo ra code - nó tạo các thư mục trên ổ cứng của bạn, cài đặt gói qua terminal, viết tệp cấu hình, và khởi động một máy chủ cục bộ.
Cấu hình MCP kết nối Claude với hệ thống tệp của bạn:
1{2 "mcpServers": {3 "filesystem": {4 "command": "npx",5 "args": [6 "-y",7 "@modelcontextprotocol/server-filesystem",8 "/Users/yourname/Projects"9 ]10 },11 "terminal": {12 "command": "npx",13 "args": ["-y", "@modelcontextprotocol/server-terminal"]14 },15 "sqlite": {16 "command": "npx",17 "args": [18 "-y",19 "@modelcontextprotocol/server-sqlite",20 "--db-path",21 "/Users/yourname/Projects/app.db"22 ]23 }24 }25}
Với cấu hình này đang hoạt động, một lời nhắc duy nhất:
1Xây dựng và triển khai một hệ thống CRM cục bộ cho một doanh nghiệp rửa xe.23Tạo dự án tại ~/Projects/carwash-crm/4Tự động cài đặt các phụ thuộc.5Thiết lập cơ sở dữ liệu SQLite với các bảng cho:6- customers (tên, điện thoại, email, phương tiện, ghi chú)7- visits (customer_id, ngày, dịch vụ, giá, trạng thái)8- staff (tên, vai trò, lịch trình)910Xây dựng giao diện web với:11- Tìm kiếm và hồ sơ khách hàng12- Lịch sử lượt ghé thăm theo từng khách hàng13- Bảng điều khiển doanh thu theo tháng14- Hệ thống nhắc nhở SMS (tích hợp Twilio, chỉ cấu hình)1516Khởi động máy chủ phát triển khi hoàn tất.17Báo cáo URL localhost khi sẵn sàng.
Claude thực thi điều này từ đầu đến cuối thông qua MCP - tạo cấu trúc thư mục, cài đặt gói Node, viết lược đồ cơ sở dữ liệu, xây dựng UI, và khởi động máy chủ. Bạn nhận được một URL localhost.
Chế độ 3 - Claude Projects với tiêu chuẩn công ty
Tải bộ UI kit, token thiết kế, tài liệu API và yêu cầu bảo mật của bạn lên một Claude Project một lần. Mọi hệ thống Claude tạo ra sau đó sẽ tự động tuân thủ công nghệ nội bộ của bạn.
1[Nội dung Claude Project context bao gồm:]2- design-system.md (màu sắc, kiểu chữ, khoảng cách)3- api-standards.md (mẫu xác thực, mã lỗi)4- security-policy.md (quy tắc xác thực đầu vào, cấu hình CORS)5- stack.md (React 18, TypeScript, Tailwind, Prisma, PostgreSQL)67Lời nhắc:8"Xây dựng một biểu mẫu onboarding khách hàng với xác minh email9và tự động nhập mục vào Notion khi gửi."1011Đầu ra: code sẵn sàng sản xuất khớp chính xác với công nghệ của bạn12- không cần dọn dẹp.
3. Obsidian - Trung tâm chỉ huy AI
Obsidian trong năm 2026 không phải là một ứng dụng ghi chú. Nó là một trung tâm chỉ huy AI cá nhân, nơi cơ sở kiến thức tích lũy của bạn trở thành lớp ngữ cảnh cho mọi hệ thống bạn xây dựng.
Sự thay đổi kiến trúc: vault của bạn không còn là kho lưu trữ nữa. Nó là RAG (Retrieval Augmented Generation) - một cơ sở kiến thức sống mà các AI agent truy vấn trước khi thực hiện bất kỳ tác vụ nào.
Công nghệ plugin giúp điều này hoạt động:
Smart Connections - lập chỉ mục toàn bộ vault của bạn và gửi các ghi chú liên quan làm ngữ cảnh cho mọi cuộc gọi AI.
Obsidian Copilot - kết nối trực tiếp vault của bạn với Claude API. Cấu hình một lần:
12 "provider": "anthropic",3 "model": "claude-opus-4-8",4 "apiKey": "YOUR_ANTHROPIC_KEY",5 "systemPrompt": "Bạn là một kiến trúc sư hệ thống. Bạn có quyền truy cập vault kiến thức hoàn chỉnh của người dùng làm ngữ cảnh. Khi xây dựng hệ thống, hãy tham khảo các ghi chú hiện có, quyết định trong quá khứ và các mẫu đã thiết lập của họ. Đầu ra: code hoạt động + cấu trúc tệp Obsidian.",6 "contextWindow": {7 "includeActiveFile": true,8 "includeLinkedFiles": true,9 "includeRecentFiles": 10,10 "includeFolders": ["Projects", "Systems", "Decisions"]11 }12}
Canvas - Giao diện thiết kế hệ thống
Một lời nhắc tạo ra một Obsidian Canvas tương tác, nơi Claude bố trí toàn bộ kiến trúc hệ thống dưới dạng các khối được kết nối.
1Lời nhắc trong Obsidian Canvas:2"Thiết kế một quy trình sản xuất nội dung cho tài khoản Twitter của tôi.3Tôi xuất bản 3 bài viết mỗi tuần và quản lý 5 giao dịch tài trợ.4Tham khảo các ghi chú lịch nội dung hiện có của tôi."56Đầu ra: Canvas với các khối được kết nối cho:7→ Lên ý tưởng nội dung (lấy từ ghi chú sở thích của bạn)8→ Quy trình Nháp → Xem xét → Xuất bản9→ Theo dõi nhà tài trợ với cảnh báo hạn chót10→ Bảng điều khiển phân tích11→ Logic đăng chéo tự động12→ Mỗi khối liên kết đến tệp Obsidian có liên quan
Đầu ra Canvas mà Claude tạo ra dưới dạng một tệp có cấu trúc:
1{2 "nodes": [3 {4 "id": "ideation",5 "type": "file",6 "file": "Systems/ContentPipeline/Ideation.md",7 "x": 0, "y": 0, "width": 300, "height": 200,8 "color": "1"9 },10 {11 "id": "draft",12 "type": "file",13 "file": "Systems/ContentPipeline/Draft.md",14 "x": 400, "y": 0, "width": 300, "height": 200,15 "color": "3"16 },17 {18 "id": "sponsors",19 "type": "file",20 "file": "Systems/ContentPipeline/SponsorTracker.md",21 "x": 0, "y": 300, "width": 300, "height": 200,22 "color": "5"23 },24 {25 "id": "analytics",26 "type": "file",27 "file": "Systems/ContentPipeline/Analytics.md",28 "x": 400, "y": 300, "width": 300, "height": 200,29 "color": "6"30 }31 ],32 "edges": [33 {34 "id": "e1",35 "fromNode": "ideation", "fromSide": "right",36 "toNode": "draft", "toSide": "left",37 "label": "approved concepts"38 },39 {40 "id": "e2",41 "fromNode": "sponsors", "fromSide": "right",42 "toNode": "draft", "toSide": "bottom",43 "label": "brief integration"44 }45 ]46}
4. LLM cục bộ cho quyền riêng tư tuyệt đối
Đối với dữ liệu nhạy cảm - hệ thống khách hàng, công cụ tài chính, công cụ nội bộ - bạn định tuyến qua một mô hình cục bộ thay vì API đám mây. Không có dữ liệu nào rời khỏi máy của bạn.
1# Cài đặt Ollama2curl -fsSL https://ollama.com/install.sh | sh34# Kéo một mô hình có khả năng viết code5ollama pull llama3.2:latest6# hoặc để tạo code mạnh hơn:7ollama pull qwen2.5-coder:32b89# Khởi động máy chủ cục bộ10ollama serve11# Chạy tại localhost:11434
Cấu hình Obsidian Copilot để sử dụng endpoint cục bộ:
1{2 "provider": "ollama",3 "model": "qwen2.5-coder:32b",4 "baseUrl": "http://localhost:11434",5 "systemPrompt": "Bạn là một trình xây dựng hệ thống cục bộ có quyền truy cập hệ thống tệp của người dùng qua MCP. Xây dựng các hệ thống hoàn chỉnh đang hoạt động. Không bao giờ gửi dữ liệu đến API bên ngoài nếu không có hướng dẫn rõ ràng."6}
Cầu nối mô hình cục bộ + MCP:
1import requests2import json3from pathlib import Path4from watchdog.observers import Observer5from watchdog.events import FileSystemEventHandler67OBSIDIAN_INBOX = Path.home() / "Obsidian" / "AI-Inbox"8PROJECTS_DIR = Path.home() / "Projects"9OLLAMA_URL = "http://localhost:11434/api/generate"1011class InboxWatcher(FileSystemEventHandler):12 """13 Theo dõi thư mục AI-Inbox của Obsidian.14 Khi một tệp .md mới xuất hiện, coi nó như một lời nhắc xây dựng.15 Chuyển đến LLM cục bộ -> thực thi qua MCP -> báo cáo lại.16 """1718 def on_created(self, event):19 if not event.src_path.endswith(".md"):20 return2122 prompt_file = Path(event.src_path)23 prompt = prompt_file.read_text()2425 print(f"[Inbox] Lời nhắc mới: {prompt_file.name}")26 self.execute_prompt(prompt, prompt_file.stem)2728 def execute_prompt(self, prompt: str, project_name: str):29 response = requests.post(OLLAMA_URL, json={30 "model": "qwen2.5-coder:32b",31 "prompt": f"""Bạn là một trình xây dựng hệ thống.32 Xây dựng hệ thống này: {prompt}3334 Đầu ra một kế hoạch JSON với:35 {{36 "project_dir": "đường dẫn tương đối",37 "files": [38 {{"path": "đường dẫn tương đối", "content": "nội dung tệp"}}39 ],40 "commands": ["npm install", "v.v."],41 "summary": "những gì đã được xây dựng"42 }}""",43 "stream": False44 })4546 plan = json.loads(response.json()["response"])47 project_dir = PROJECTS_DIR / plan["project_dir"]48 project_dir.mkdir(parents=True, exist_ok=True)4950 for file_spec in plan["files"]:51 file_path = project_dir / file_spec["path"]52 file_path.parent.mkdir(parents=True, exist_ok=True)53 file_path.write_text(file_spec["content"])54 print(f"[Build] Đã tạo: {file_path}")5556 result_file = OBSIDIAN_INBOX / f"{project_name}-result.md"57 result_file.write_text(58 f"# Xây dựng hoàn tất: {project_name}\n\n"59 f"**Vị trí:** {project_dir}\n\n"60 f"**Tóm tắt:** {plan['summary']}\n\n"61 f"**Số tệp đã tạo:** {len(plan['files'])}\n"62 )63 print(f"[Done] Kết quả đã được ghi vào Obsidian")6465if __name__ == "__main__":66 OBSIDIAN_INBOX.mkdir(exist_ok=True)67 observer = Observer()68 observer.schedule(InboxWatcher(), str(OBSIDIAN_INBOX), recursive=False)69 observer.start()70 print(f"[Đang theo dõi] {OBSIDIAN_INBOX}")7172 try:73 while True:74 import time; time.sleep(1)75 except KeyboardInterrupt:76 observer.stop()77 observer.join()
Thả một tệp .md vào AI-Inbox của Obsidian với một lời nhắc xây dựng. Cầu nối sẽ nhận nó, định tuyến qua mô hình cục bộ, xây dựng hệ thống trong thư mục Projects của bạn, và ghi một ghi chú hoàn tất trở lại Obsidian.
5. Quy trình làm việc hoàn chỉnh - từ ý tưởng đến hệ thống đã triển khai
1BƯỚC 1 - Đầu vào2Trong Obsidian, trên bảng AI của bạn, viết:3"Hệ thống tài chính cá nhân với tích hợp tiền điện tử4và theo dõi ngân sách hàng tháng."5Nhấn Generate.67BƯỚC 2 - Tập hợp ngữ cảnh8Plugin Smart Connections quét vault của bạn.9Tìm các ghi chú tài chính của bạn từ 3 tháng qua.10Gửi chúng làm ngữ cảnh đến Claude API.1112BƯỚC 3 - Kiến trúc13Claude (Opus 4.8) thiết kế hệ thống:14- Lược đồ cơ sở dữ liệu15- Thành phần UI16- Tích hợp API17- Cấu trúc tệp1819BƯỚC 4 - Xây dựng20Claude (Sonnet 5) triển khai qua MCP:21- Tạo ~/Projects/finance-tracker/22- Cài đặt các phụ thuộc23- Viết tất cả các tệp24- Khởi động máy chủ dev tại localhost:30002526BƯỚC 5 - Kết quả27Obsidian tạo thư mục: Finance System/28Bên trong: bảng điều khiển được liên kết, ghi chú cấu hình,29và một liên kết trực tiếp đến ứng dụng đang chạy.
Tổng thời gian từ bước 1 đến ứng dụng đang chạy: 4-12 phút.
Sự thay đổi mà điều này đại diện
Đây không phải là một cách viết code nhanh hơn.
Đó là một mối quan hệ khác giữa ý tưởng và thực thi.
Rào cản đối với những gì bạn có thể xây dựng trước đây là kỹ năng kỹ thuật và thời gian. Một người không phải lập trình viên không thể xây dựng một CRM. Một lập trình viên solo không thể xây dựng năm hệ thống cùng một lúc. Một nhóm không thể giao hàng trong vài giờ thay vì vài tuần.
Cả ba rào cản đó đã biến mất.
Rào cản mới là sự rõ ràng trong tư duy - khả năng mô tả chính xác những gì bạn cần, hiểu đầu ra tốt trông như thế nào, và cải tiến nó. Đó là một kỹ năng tư duy, không phải kỹ thuật.
Kiến trúc Ứng dụng Sinh tạo không làm cho lập trình viên trở nên lỗi thời. Nó làm cho khả năng tư duy trong hệ thống - suy luận về những gì bạn cần trước khi bạn xây dựng nó - trở nên có giá trị hơn đáng kể so với khả năng viết code thực hiện nó.
Công nghệ đã ở đây. Các mô hình đã đủ năng lực. Biến số duy nhất còn lại là liệu bạn đang xây dựng với nó hay đang đọc về những người đang xây dựng.
Bài viết này mô tả các khả năng có sẵn trong Claude, Obsidian và MCP tính đến tháng 7 năm 2026. Phiên bản plugin cụ thể và cấu hình API có thể thay đổi. Luôn kiểm tra tài liệu hiện tại trước khi triển khai.
Cảm ơn bạn đã đọc.





