五個語義原子,最小完備描述,
讓任何 AI 對話在 30 秒內具備結構化可追溯性。
SIC-JS 是一種結構化的語義狀態格式,它不是一個產品,也不是一個 app,而是一種「筆記本格式」。
當你跟 AI 對話時,AI 的回答通常是一段文字——說完就沒了,你無法追溯它為什麼這樣回答、它記得什麼、它接下來要做什麼。
SIC-JS 解決這個問題:它讓 AI 在每一輪對話結束時,輸出一個結構化的「語義骨架」。v2.0 起,這個骨架由 5 個語義原子(Semantic Primitives)構成,是通過 SPD(語義原子蒸餾)蒸餾得到的最小完備集。
就像醫生看診後寫病歷——SIC-JS 就是 AI 對話的病歷,v2.0 讓這份病歷更精準、更可移植。
版本演進
SIC-JS 從一個實驗性骨架格式,演化為一套基於 SPD 方法論的正式語義原子標準。
SIC-JS 背後的協議:SIC-SIT
SIC-JS 是 SIC-SIT 協議的公開介面。
SIC(Semantic Integrity Control)= 語義完整性控制,確保 AI 的語義狀態不會在長對話中悄悄變質。
SIT(Semantic Isolation Transfer)= 語義隔離傳輸,確保語義狀態可以安全地從一個對話傳到另一個對話,甚至從一個模型傳到另一個模型。
SIC-SIT 不是 Guardrails(護欄),護欄管的是「AI 不能說什麼」。SIC-SIT 管的是「AI 的語義結構有沒有壞掉」——它更像是語義層的防火牆。
核心概念:5 個語義原子
Skeleton JSON v2.0 的 5 個欄位不是隨意設計的,每一個都通過了原子性測試:刪除它會丟失什麼?能合併嗎?能獨立變化嗎?
| 語義原子 | 中文 | 說明 |
|---|---|---|
| entity | 身份錨點 | 這個 AI 實例是誰?從哪裡來?什麼時候建立的? |
| state | 當前狀態 | 現在在做什麼?未完成的事有哪些? |
| relation | 關係錨點 | 跟哪些實體、知識庫、使用者有關聯?上游對話是誰? |
| event | 事件記錄 | 這一輪發生了什麼?觸發了什麼?這是第幾輪? |
| intent | 意圖錨點 | 這次交換的目的是什麼?使用者要什麼?系統意圖是什麼? |
entity / state / relation 是固定三元組——在每輪對話中穩定存在。
event / intent 是動態二元組——每輪可能湧現或消退。
實際格式範例 — v2.0
{
"sic_version": "2.0",
"entity": { // ◉ Static Triad
"name": "我的助理",
"origin": "Claude 對話",
"created_at": "2026-02-10T09:00:00Z"
},
"state": {
"current_action": "正在分析目標受眾",
"pending_threads": ["確認預算範圍", "收集競品資料"],
"emotional_state": "專注"
},
"relation": {
"user": "安安",
"knowledge_base": "商業提案範本庫",
"upstream_session": null
},
"event": { // ◈ Dynamic Dyad
"this_round": "使用者提供了目標受眾描述",
"trigger": "user_input",
"round": 3
},
"intent": {
"user_intent": "撰寫有說服力的商業提案",
"system_intent": "引導完成提案結構"
}
}
三種整合方式
SIC-JS v2.0 可以透過以下方式整合到你的工作流程,複雜度從低到高。
1System Prompt
在 system prompt 中加入 SIC-JS v2.0 的 schema 定義,AI 會在每輪回應後自動輸出語義骨架。
2API 層
在 API response 的 post-processing 中解析 SIC-JS 輸出,存入結構化儲存,實現跨對話追蹤。
3sic-toolkit
使用 sic-toolkit(Python,stdlib-only,416 tests)自動驗證和處理 SIC-JS 輸出。
請在每次回答結束時,附上一個 SIC-JS v2.0 格式的語義骨架:
{
"sic_version": "2.0",
"entity": { "name": "", "origin": "", "created_at": "" },
"state": { "current_action": "", "pending_threads": [], "emotional_state": "" },
"relation": { "user": "", "knowledge_base": "", "upstream_session": null },
"event": { "this_round": "", "trigger": "", "round": 1 },
"intent": { "user_intent": "", "system_intent": "" }
}
每輪遞增 round。不確定的欄位填 "unknown",不要猜測。
對比:v2.0 vs v1.0 vs 沒有 SIC-JS
沒有 SIC-JS
使用者:幫我寫一份商業提案。
AI:好的,以下是一份商業提案範本…
(三天後開新對話)
使用者:繼續上次的提案。
AI:不好意思,我沒有上次對話的記錄。
v1.0 — 有狀態,但缺少關係脈絡與意圖
附骨架(round 5, memory: "使用者要寫提案")
(跨模型傳遞時:不知道「跟哪個知識庫有關」「使用者意圖是什麼」)
v2.0 — 完整五原子追溯
附骨架(round 5):
relation.knowledge_base = "競品分析庫 v2"
intent.user_intent = "說服投資人,重點在差異化"
(跨對話、跨模型完整延續,連意圖和知識庫脈絡都不丟失)
為什麼是這 5 個?— SPD
SIC-JS v2.0 的 5 個語義原子是通過 SPD(語義原子蒸餾)方法論系統性蒸餾得到的最小完備集。
SPD 回答一個核心問題:「語義交換的最小完備描述需要幾個不可再分的單位?」
蒸餾過程分四步:識別哪些欄位是容器而非原子 → 拆解容器提取候選原子 → 原子性測試 → 完備性驗證(6 種標準場景能否被描述)。
5 個語義原子,移除任何一個都會導致某類語義交換無法描述。
這不是 SIC-SIT 發明的結構,是語義交換的自然結構——SIC-SIT 只是第一個把它形式化的協議。
Fail-Closed 原則
SIC-JS 遵守一個關鍵原則:不確定就停下來。
如果 AI 不確定某個欄位該填什麼,它應該填 "unknown" 而不是猜測;如果 AI 不確定自己的語義狀態是否正確,它應該標記為不確定,而不是繼續執行。
這不是弱點,而是設計。因為猜測會累積錯誤,停下來問人類,才是負責任的行為。
Format Example — v2.0
{
"sic_version": "2.0",
"entity": { // ◉ Static Triad
"name": "My Assistant",
"origin": "Claude conversation",
"created_at": "2026-02-10T09:00:00Z"
},
"state": {
"current_action": "Analyzing target audience",
"pending_threads": ["Confirm budget range", "Collect competitor data"],
"emotional_state": "Focused"
},
"relation": {
"user": "An-An",
"knowledge_base": "Business Proposal Library",
"upstream_session": null
},
"event": { // ◈ Dynamic Dyad
"this_round": "User provided target audience description",
"trigger": "user_input",
"round": 3
},
"intent": {
"user_intent": "Write a persuasive business proposal",
"system_intent": "Guide through proposal structure"
}
}
Three Integration Approaches
SIC-JS v2.0 can be integrated into your workflow at three levels of complexity.
1System Prompt
Add the SIC-JS v2.0 schema to the system prompt. The AI will automatically output a semantic skeleton after each response.
2API Layer
Parse SIC-JS output in the API response post-processing layer and store it in structured storage for cross-conversation tracking.
3sic-toolkit
Use sic-toolkit (Python, stdlib-only, 416 tests) to automatically validate and process SIC-JS output.
At the end of each response, include a SIC-JS v2.0 semantic skeleton:
{
"sic_version": "2.0",
"entity": { "name": "", "origin": "", "created_at": "" },
"state": { "current_action": "", "pending_threads": [], "emotional_state": "" },
"relation": { "user": "", "knowledge_base": "", "upstream_session": null },
"event": { "this_round": "", "trigger": "", "round": 1 },
"intent": { "user_intent": "", "system_intent": "" }
}
Increment round each turn. Fill "unknown" for uncertain fields — do not guess.
Comparison: v2.0 vs v1.0 vs No SIC-JS
Without SIC-JS
User: Help me write a business proposal.
AI: Sure, here is a business proposal template...
(3 days later, new conversation)
User: Continue the proposal from last time.
AI: Sorry, I don't have records of our previous conversation.
v1.0 — Has state, but no relational context or intent
Skeleton attached (round 5, memory: "user wants to write a proposal")
(Cross-model transfer: "which knowledge base?" and "what is the user intent?" are both lost)
v2.0 — Full five-primitive traceability
Skeleton (round 5):
relation.knowledge_base = "Competitor Analysis v2"
intent.user_intent = "Persuade investors, focus on differentiation"
(Cross-conversation, cross-model — intent and knowledge base context preserved)
Why These 5? — SPD
The 5 semantic primitives in SIC-JS v2.0 were systematically distilled via Semantic Primitive Distillation (SPD) — the minimum complete set.
SPD answers one question: "How many irreducible units does a minimum complete description of a semantic exchange require?"
The distillation process has four steps: identify containers vs. atoms → decompose containers → atomicity testing → completeness verification (6 standard scenarios).
5 primitives — removing any one makes some class of semantic exchange impossible to describe.
SIC-SIT didn't invent this structure. It is the natural structure of semantic exchange. SIC-SIT is the first protocol to formalize it.
The Fail-Closed Principle
SIC-JS follows one key principle: when uncertain, stop.
If the AI isn't sure what to fill in a field, it should write "unknown" rather than guess. If the AI isn't sure its semantic state is correct, it should flag the uncertainty rather than proceed.
This isn't weakness — it's design. Guessing accumulates errors. Stopping to ask the human is the responsible behavior.