PHU_TU_V10
:root { –bg: #0d0f12; –surface: #13161b; –border: #1e2430; –accent: #c8a96e; –accent2: #4a9eff; –text: #c9cdd6; –text-dim: #5a6070; –text-bright: #eef0f4; –green: #5ccea8; }
- { margin: 0; padding: 0; box-sizing: border-box; }
body { background: var(–bg); color: var(–text); font-family: ‘Spectral’, Georgia, serif; font-size: 16px; line-height: 1.85; padding: 0; }
.container { max-width: 680px; margin: 0 auto; padding: 2.5rem 1.2rem 5rem; }
.meta { font-family: ‘IBM Plex Mono’, monospace; font-size: 10px; color: var(–text-dim); letter-spacing: 0.1em; text-transform: uppercase; margin-bottom: 1.8rem; display: flex; flex-wrap: wrap; gap: 0.6rem; align-items: center; }
.tag { color: var(–accent); border: 1px solid var(–accent); padding: 2px 7px; font-size: 9px; }
h1 { font-family: ‘IBM Plex Mono’, monospace; font-size: 1.8rem; font-weight: 600; color: var(–text-bright); line-height: 1.2; margin-bottom: 0.4rem; }
.subtitle { font-family: ‘IBM Plex Mono’, monospace; font-size: 11px; color: var(–accent2); margin-bottom: 2rem; }
hr { border: none; border-top: 1px solid var(–border); margin: 2rem 0; }
h2 { font-family: ‘IBM Plex Mono’, monospace; font-size: 11px; font-weight: 600; color: var(–accent); letter-spacing: 0.12em; text-transform: uppercase; margin: 2.2rem 0 1rem; }
h2::before { content: ’## ’; color: var(–text-dim); }
p { margin-bottom: 1.1rem; }
strong { color: var(–text-bright); font-weight: 600; } em { color: var(–accent); font-style: italic; }
/* Code — scroll horizontal on mobile */ pre { background: var(–surface); border: 1px solid var(–border); border-left: 3px solid var(–accent2); padding: 1rem 1.1rem; margin: 1.4rem 0; font-family: ‘IBM Plex Mono’, monospace; font-size: 11.5px; line-height: 1.75; color: #a8b8cc; overflow-x: auto; -webkit-overflow-scrolling: touch; white-space: pre; }
.c { color: var(–text-dim); font-style: italic; } .k { color: var(–accent2); } .s { color: var(–green); } .m { color: var(–accent); }
/* Architecture — wrap on mobile */ .arch { background: var(–surface); border: 1px solid var(–border); padding: 1.2rem; margin: 1.4rem 0; display: grid; gap: 0.5rem; }
.arch-row { display: flex; align-items: flex-start; gap: 0.8rem; font-family: ‘IBM Plex Mono’, monospace; font-size: 11.5px; flex-wrap: wrap; }
.arch-name { color: var(–accent); font-weight: 600; min-width: 160px; }
.arch-desc { color: var(–text-dim); font-size: 11px; flex: 1; }
.arch-badge { font-size: 9px; padding: 1px 6px; border: 1px solid var(–accent2); color: var(–accent2); white-space: nowrap; }
.arch-connector { color: var(–border); font-family: ‘IBM Plex Mono’, monospace; font-size: 11px; padding-left: 0.5rem; }
/* Modules */ .modules { display: grid; gap: 0.6rem; margin: 1.2rem 0; }
.mod { background: var(–surface); border: 1px solid var(–border); padding: 0.7rem 1rem; display: flex; align-items: center; gap: 0.8rem; flex-wrap: wrap; }
.badge { font-family: ‘IBM Plex Mono’, monospace; font-size: 9px; padding: 2px 6px; letter-spacing: 0.06em; text-transform: uppercase; white-space: nowrap; }
.done { color: var(–green); border: 1px solid var(–green); } .wip { color: var(–accent); border: 1px solid var(–accent); }
.mod-name { font-family: ‘IBM Plex Mono’, monospace; font-size: 12px; color: var(–text-bright); flex: 1; }
.mod-desc { font-family: ‘IBM Plex Mono’, monospace; font-size: 10px; color: var(–text-dim); width: 100%; padding-left: calc(9px + 6px + 6px + 0.8rem); /* badge width offset */ }
/* Callout */ .callout { border-left: 3px solid var(–accent); padding: 1rem 1.2rem; margin: 1.5rem 0; background: rgba(200,169,110,0.04); }
.callout-label { font-family: ‘IBM Plex Mono’, monospace; font-size: 9px; color: var(–accent); text-transform: uppercase; letter-spacing: 0.1em; margin-bottom: 0.4rem; }
.callout p { margin: 0; font-style: italic; font-size: 15px; }
/* Doctrine */ .doctrine { text-align: center; padding: 2rem 1rem; margin: 1.8rem 0; border: 1px solid var(–border); position: relative; }
.doctrine::before, .doctrine::after { content: ‘’; position: absolute; width: 16px; height: 16px; border-color: var(–accent); border-style: solid; } .doctrine::before { top: -1px; left: -1px; border-width: 2px 0 0 2px; } .doctrine::after { bottom: -1px; right: -1px; border-width: 0 2px 2px 0; }
.doctrine .vn { font-size: 1.05rem; color: var(–accent); font-style: italic; margin-bottom: 0.3rem; }
.doctrine .en { font-family: ‘IBM Plex Mono’, monospace; font-size: 10px; color: var(–text-dim); letter-spacing: 0.08em; text-transform: uppercase; }
/* Seeking */ .seeking { border: 1px solid var(–accent2); padding: 1.5rem; margin: 2rem 0; background: rgba(74,158,255,0.03); }
.seeking h3 { font-family: ‘IBM Plex Mono’, monospace; font-size: 12px; color: var(–accent2); margin-bottom: 1rem; }
.seeking p { font-family: ‘IBM Plex Mono’, monospace; font-size: 12px; margin-bottom: 1rem; }
.seeking ul { list-style: none; display: grid; gap: 0.5rem; }
.seeking li { font-family: ‘IBM Plex Mono’, monospace; font-size: 12px; padding-left: 1.2rem; position: relative; color: var(–text); }
.seeking li::before { content: ‘→’; position: absolute; left: 0; color: var(–accent2); }
.footer { margin-top: 2.5rem; padding-top: 1.2rem; border-top: 1px solid var(–border); font-family: ‘IBM Plex Mono’, monospace; font-size: 10px; color: var(–text-dim); display: grid; gap: 0.4rem; }
.footer span { color: var(–accent); } </style>
</head> <body>PHU_TU_V10
Tôi đang xây Phù Tử — không phải wrapper ChatGPT, không phải chatbot. Đây là một cognition runtime: kiến trúc module hoá cho phép AI duy trì identity ổn định, memory liên tục, và reflective cycle qua các phiên độc lập.
Bài này không giới thiệu sản phẩm. Đây là lời kêu gọi cộng tác từ người đang build thật — đến người muốn build thật.
Vấn đề đang giải
Hầu hết AI agent bị một vấn đề nền: stateless by design. Memory được giả lập bằng cách nhét context vào prompt — tốn token, không cấu trúc, không bền.
Phù Tử tiếp cận khác: phân tầng memory theo độ bền vững nhận thức — working, episodic, semantic — với cơ chế promotion/demotion dựa trên relevance score và decay function.
<span class="c"># Memory promotion logic</span> <span class="k">def</span> <span class="m">evaluate_promotion</span>(item): score = ( item.recency * <span class="s">0.3</span> + item.relevance * <span class="s">0.4</span> + item.salience * <span class="s">0.2</span> + item.frequency * <span class="s">0.1</span> ) <span class="k">if</span> score > THRESHOLD: promote_to_semantic(item) <span class="k">elif</span> score < DECAY_FLOOR: archive(item)
Kiến trúc
Trạng thái module
Câu hỏi thiết kế đang mở
Khi nào thì AI nên cập nhật identity — và khi nào phải giữ nguyên? Đây không phải câu hỏi kỹ thuật thuần tuý. Đây là epistemology của hệ thống nhận thức.
</div>Vấn đề lớn nhất chưa giải tốt là identity drift: sau nhiều chu kỳ, belief state bắt đầu lệch khỏi core self do áp lực ngữ cảnh tích luỹ. stable_snapshot là frozen anchor — nhưng cơ chế correction chưa hoàn thiện.
// Đang tìm cộng tác viên
Không tìm người học cùng. Tìm người có thể tranh luận về design decision, debug cùng, và có góc nhìn riêng.
- Biết Python thực chiến — cần tư duy hệ thống
- Hiểu hoặc tò mò về memory system, agent loop
- Có thể đọc code và hỏi "tại sao thiết kế vậy?"
- Quan tâm: AI có thể có identity ổn định không?
- Chịu được môi trường chưa có docs đầy đủ — cùng xây
Nếu bạn đang build gì đó tương tự, hoặc đang thấy bức xúc vì không tìm được người cùng tầng — comment hoặc nhắn trực tiếp.
All rights reserved