Session 是什麼?跟聊天室有什麼不一樣
聊到第 5、第 6 次以後,左邊 Session 歷史開始長出來,你會發現「昨天問過的家電問題」跟「上禮拜寫的自動化」全部擠在一起。這章帶你把 Session 的觀念釐清、學會什麼時候該分、什麼時候該合、Fork 是拿來幹嘛的,還有匯出、備份、清理三招怎麼下。走完之後你會像整理資料夾一樣整理對話。
為什麼 Session 一多就會亂
剛裝好 Pi Agent 時,左邊 Session 歷史空空的很清爽。用一週之後你會看到大概這樣的狀況:
- 「幫我看客廳燈為什麼不亮」跟「幫我寫日落開燈自動化」擠在同一個 Session,AI 講到後面自己都搞不清楚在講哪盞燈
- 想找上禮拜討論過的吸塵器排程,但列表全部只顯示第一句話當標題,滑半天找不到
- 同一個問題想試 GLM 跟 Claude 分別怎麼答,只好複製整段訊息重貼一次
- 對話已經滾到一百則,AI 回應開始變慢、費用也開始爆
這些不是 AI 的問題,是你在同一個 Session 塞太多不同主題造成的。這一章要教你的正是「Session 該分還是該合、什麼時候該 fork 分岔、什麼時候該砍」的判斷。做對這件事,之後不管是查歷史、換模型比較、或是備份,都會順很多。
Session 到底是什麼
Pi Agent 的 Session(對話 session)不只是「一串聊天訊息」。一個 Session 是這幾樣東西的組合包:
- 整場對話的每一則訊息(你打的字、AI 回的字、思考塊、工具卡、diff 全都包含)
- 這個 Session 用的模型(GLM-4.6?Claude?換過幾次也全部記錄)
- 這個 Session 開頭載入的 Skills(技能)(例如 ha-mcp、影片工具,哪些啟用了、參數是什麼)
- 這個 Session 的工作目錄 cwd(AI 幫你讀檔寫檔的資料夾)
- System prompt(讀進去的規則、身份、口吻)
換句話說,Session 是一個「連同上下文一起打包」的獨立世界。這也是為什麼你可以關掉瀏覽器,明天打開電腦點回同一個 Session,AI 還記得你們昨天聊到哪、還用哪個模型、還載著哪些技能——因為那不是「記憶」,是「這個世界的完整狀態」被保存下來了。
跟 LINE 聊天室有什麼不一樣
很多人第一次用會直覺把 Session 當成「跟 AI 的 LINE 聊天室」。方向對,但有幾個關鍵差別不搞清楚,之後會踩坑:
| 比項 | LINE 聊天室 | Pi Agent Session |
|---|---|---|
| 誰參與 | 兩個以上的人共享,大家都看得到 | 你單獨對 AI 的一場對話,別人看不到 |
| 對方是誰 | 另一頭是固定那個人 | 另一頭是你選的模型,隨時可換 |
| 訊息存哪 | LINE 伺服器(你手機只有快取) | 你家的 HA,/data/pi-agent/sessions/ |
| 對方會不會記 | 對方腦袋自己記 | 每次都把整場對話再送一次,AI 才「知道」你們之前講了什麼 |
| 可以幾個一起開 | 一個聊天室就是一個 | 可以同時開很多個,每個獨立狀態 |
| 可以複製一份嗎 | 不能,只能轉發訊息 | 可以 Fork,整個 Session 連狀態複製一份 |
| 會不會過期 | 不會,除非你退出 | 不會過期,你不刪它就一直在 |
Session 檔案實際存在哪裡
Pi Agent 把每個 Session 存成一份 .jsonl(JSON Lines)檔案,一則訊息一行。位置在 add-on 內部:
/data/pi-agent/sessions/<工作目錄的編碼>/<時間戳>_<uuid>.jsonl
拆開來看每個部分:
| 路徑段 | 意義 | 你會怎麼用到 |
|---|---|---|
/data/pi-agent/ | Pi Agent add-on 的資料家目錄,跟 /config/(HA 本體)是分開的 | 被 HA snapshot 一起備份走 |
sessions/ | 裝所有對話的資料夾 | 整包搬走就是把對話都搬走 |
<工作目錄的編碼>/ | Session 綁的 cwd 目錄名(把斜線編碼過的字串) | 同一個工作目錄開的多場對話會在同一夾 |
<時間戳>_<uuid>.jsonl | 單場對話的檔名,時間戳讓你按日期找 | 找不到 UI 上某則對話時,可以按日期到這裡對 |
整個 /data/pi-agent/ 都會跟著 HA snapshot(快照備份)一起被打包,換 HA 主機、重灌、或不小心手滑刪掉,只要 snapshot 還在,Session 都救得回來。這個備份策略後面第 20 章會完整拆開講。
一次對話該分幾個 Session(判斷表)
沒有「絕對正確」的答案,但下面這張對照表可以幫你在 90% 的情境下做對決定:
| 情境 | 該怎麼做 | 原因 |
|---|---|---|
| 想連續問同一個主題(例如一路把客廳燈自動化寫完) | 同一個 Session,一路問下去 | AI 需要前面的上下文,切開反而要重講一次 |
| 換題目(從「家電為什麼壞」跳到「怎麼寫自動化」) | 開新 Session(左上「新增/New」那個按鈕,實際字樣依 pi-web 版本而定) | 舊主題留在原地方便回頭找,新主題不會被舊上下文污染 |
| 想試「同一個問題不同模型會怎麼答」 | 把 Session 複製一份(版本不同會標成 Fork 或 Duplicate),一份切給 GLM、一份切給 Claude | 兩邊起點完全一樣,比較才公平;不用把問題複製貼上兩次 |
| 對話已經一百多則,AI 開始忘前面、送訊息也變慢 | 叫 AI「幫我摘要目前重點」,把摘要當第一句開新 Session 繼續 | 把長歷史壓成一段短摘要,token 用量瞬間降回可管理的水位 |
| 要跟朋友分享一段解決過程 | Export 出 Markdown,直接貼 | 不用截圖也不用把朋友拉進你家 HA |
| 一場實驗性的嘗試,結果不好想全部丟掉 | Delete,乾淨 | Session 太多反而是干擾 |
動手:開新 Session、命名、加標籤
照這個順序做一次,之後你會很自然地在每個新主題開頭就先把這一套跑完。
-
點左上角「新增 Session」的按鈕
按鈕在左邊 Session 歷史欄的最上方,字樣依 pi-web 版本可能是 + New、New session 或加號圖示。點下去中間對話串會清空、composer 打字區也清空,等於你面前是一張新的白紙。左欄會多出一列暫時沒標題的 Session(因為你還沒打字)。
-
打你的第一句話
第一句很重要——它決定 AI 的方向,也決定這個 Session 的自動生成標題。建議直接把主題講清楚,例如「幫我看客廳三顆燈為什麼有一顆連不上」比「幫我看看燈」好很多。送出後 pi-web 通常會用第一句話當側欄的標題(實際截取長度依版本而定,太長會被裁掉)。
-
覺得標題不好?改標題
把游標移到左欄那一列,右邊通常會冒出 ⋮(三點選單)或右鍵可叫出動作選單。裡面找「Rename/重新命名/編輯標題」之類選項(版本不同字樣略有差異),改成你未來搜尋時想得到的關鍵字。例如把「幫我看客廳三顆燈為什麼有一顆連不上」改成「客廳燈 3 號離線 debug」。若你的版本沒有這個選項,也可以先跳到方式二用 Export 備份、Delete 再開一個標題較好的新 Session。
-
加標籤(若你的版本支援)
部分 pi-web 版本在三點選單裡有 Tag / Label / 標籤 之類功能,允許你打上
家電、自動化、問答、影片、備份/維護等分類;有些版本則只支援搜尋標題內文,沒有獨立的標籤欄位。找不到就跳過這步,改成把標題本身寫成「家電/客廳燈 3 號離線」這種前綴式命名,用搜尋框搜「家電/」一樣可以達到分類效果。 -
結束時再回頭看一眼
問題解掉、對話收尾時,回頭看一次標題/標籤有沒有需要修。「當下開頭以為的主題」跟「最後真正解決的問題」常常不一樣(例如以為是燈壞了,最後發現是 Wi-Fi 訊號),這時就把標題改成真的方便未來 you 找到的字。
「複製一份 Session」(Fork/Duplicate)是什麼、什麼時候用
pi-web 有個很好用但常被忽略的功能:把目前這個 Session 的當下狀態整份複製一份出來——所有訊息、模型設定、Skills、System prompt 通通一起複製。之後你在副本上繼續講什麼,都不會影響原本那個 Session。這個功能在不同 pi-web 版本可能叫 Fork、Duplicate、或「複製 Session」,行為都是這一種。若你在選單裡完全找不到,可以走替代方案:Export .jsonl 出來,之後有需要再重跑一次(但無法完美還原分岔那一刻的狀態)。
什麼時候會用到?
| 情境 | 怎麼 Fork | 好處 |
|---|---|---|
| AI 給了兩個方案 A/B,你想分別追問「A 的缺點」「B 的缺點」 | 複製兩次,一份追 A、一份追 B | 兩條追問不會互相干擾,比較起來清楚 |
| 對話進行到一半想試「換另一家模型會怎麼答」 | 複製一份,在副本上把模型下拉換成別的 | 原本 Session 不動,副本是新一家模型接手 |
| 寫自動化寫到 80% 覺得可能踩雷,想保留備份 | 複製一份當「安全存檔」,在原本繼續改 | 踩雷了就跳去副本繼續,不用重來 |
| 想教別人看你怎麼一步一步問,但不想連自己後面的失敗嘗試也給對方 | 複製到某個乾淨點,把副本 Export 出來 | 對方看到的是清爽的教學版 |
操作路徑(大致):左欄該 Session → ⋮(三點選單/右鍵選單)→ 找 Fork/Duplicate/複製 之類項目。字樣依 pi-web 版本而異。副本一般會出現在列表最上面或緊接原 Session 之後,標題可能會加類似「(copy)」的後綴(也可能直接沿用原標題,得自己判斷是哪一個),可以馬上改標題。
匯出 Session(Export)
Export 是把 Session 存成一個可以拿到 pi-web 以外看的檔案。用途很多:貼給朋友、貼進部落格、寄 email 問人、或單純想保留一份離線副本。
操作路徑(大致):左欄該 Session → ⋮(三點選單/右鍵選單)→ Export/匯出/下載 之類項目;有的版本會直接下載,有的會先問要哪一種格式。若你的版本完全沒有 Export,可以直接從 /data/pi-agent/sessions/<cwd>/ 底下把對應的 .jsonl 檔複製出來(見下一段),效果一樣。
| 格式 | 內容 | 適合場合 |
|---|---|---|
.jsonl(原始格式) | 每則訊息一行 JSON,含 role(user / assistant)、內容、思考塊、工具呼叫等所有欄位——就是磁碟上原本那份檔 | 要備份完整資料、之後想匯回、或給程式讀 |
.md(Markdown,若你的版本支援) | 只留人看的部分:「你講的話」+「AI 回的話」,格式乾淨。不是每個 pi-web 版本都有這個匯出格式,沒有就用 .jsonl+自己寫個小腳本轉,或請 AI 幫你做 | 貼部落格、寄 email、放進筆記軟體、給非技術朋友看 |
Markdown 匯出出來大概像下面這樣(具體排版、欄位順序、有沒有標頭都依 pi-web 版本而異,這只是示意):
# 客廳燈 3 號離線 debug
Model: glm-4.6
Exported: 2025-08-14
## 使用者
幫我看客廳三顆燈為什麼有一顆連不上
## 助理
你先跟我確認:這顆是本來就沒設好,還是原本正常後來才斷的?
如果是後者,我會先請你看它在 HA 裡的狀態是 unavailable 還是 off。
## 使用者
原本正常,昨天開始才斷。狀態是 unavailable。
## 助理
好,那大概率是網路或韌體問題。步驟:
1. 打開這顆燈實體的設備頁,看最後一次通訊時間
2. 到 Wi-Fi 路由器管理頁確認它還在不在
3. ...
.jsonl(含全部資料),要分享給人看用 .md(乾淨易讀)。兩種可以同時匯出,pi-web 不會擋。清理 Session:三種方式怎麼選
Session 累積到某個程度就該清。清的方式有三種,各有適用場合:
-
方式一:一個一個刪(最常用、最安全)
三點選單裡找 Delete/刪除。pi-web 一般會跳確認框問你「確定嗎」,按確定就沒了。適合逐個檢視、確認「這個真的用不到」才砍。日常整理都用這招。
-
方式二:多選批次刪(若你的版本支援)
部分 pi-web 版本在左欄支援多選,方式類似作業系統的 Ctrl/Cmd +點擊選多列、Shift+點擊選區間,或是先按一個「多選模式」按鈕再逐一勾。選好之後上方會出現批次動作。若試不出來就代表你這版沒開這功能,只能一個一個刪,或走方式三。
-
方式三:直接刪
/data/pi-agent/sessions/底下的檔(大掃除用)技術上你可以進到 HA / 容器內,用
rm直接把.jsonl檔砍掉。要注意:pi-web 通常有自己的索引或快取,直接砍檔後最好重啟 add-on/容器,讓它重新掃資料夾;不然 UI 上可能還會顯示已被刪的 Session、或打開時空白。真的要一次清幾百個時這招最快,但清完記得重啟。
.jsonl(或從磁碟複製那個 .jsonl)存下來,再刪。Session 會不會影響 AI 的「記憶力」
先講結論:AI 沒有「記憶」,它每次都是重讀整場對話。這句話講清楚了,很多操作直覺就順了。
發生什麼事:
-
你送出一句訊息
pi-web 把「整個 Session 從第一則到你最新這則」通通打包,一起送給 AI 模型的 API。
-
AI 讀完整份歷史,才回你這一句
它是把整場對話當作一份長長的文件讀進來、然後預測下一句該講什麼——不是它「記得」,是它「每次都被再看一次」。
-
下一句你再送,一樣的事再發生一次
包括你剛剛講的那句、AI 剛回的那句,全部再送一次,AI 再讀一次。
這帶來三個直接的結果:
- 對話越長,每次送的 token 越多。越貴、越慢,這是物理性的,換多強的模型都躲不掉。
- 「AI 忘了前面」其實是「歷史太長超過模型的 context 上限」。解法是收摘要、開新 Session,不是罵 AI。
- 刪除 Session = AI 完全不記得你們講過。沒有雲端另存一份,沒有例外。
常見卡關
-
找不到某個舊 Session
先在左欄上方搜尋框打關鍵字(會搜標題、訊息內文、標籤)。搜不到再對日期——你大概記得是哪天弄的,去 HA 的檔案管理員或 SSH 開
/data/pi-agent/sessions/,按時間戳排序找那個檔。真的找不到八成是不小心刪過,如果之前有 HA snapshot 就從快照裡撈;沒有就是真的沒了。 -
Session 打開一片空白,什麼都沒有
檔案可能損毀(斷電、寫入時被中斷都會發生)。到 Settings → Add-ons → Woow HA Pi Agent → Log 看記錄檔,找有沒有
parse error或JSON相關的紅字,會指到具體是哪個檔壞了。壞掉的檔可以直接 Delete,其他 Session 不會受影響。 -
Fork 之後 AI 回答跟原本不一樣
正常的。原因兩個:一是模型本身有隨機性(同樣輸入不保證同樣輸出);二是你 Fork 到現在之間模型可能升級了(例如 GLM 從 4.5 升 4.6)。想要「重現一模一樣答案」在 AI 這行本來就沒保證,Fork 是給你「同起點試不同追問」用的,不是「回到過去」用的。
-
Session 太多想全部備份出來
去 HA 的 Settings → Backups 建一個手動 snapshot,勾「Add-on: Woow HA Pi Agent」讓它把整個
/data/pi-agent/打包進去。這一份 snapshot 裡就有全部 Session 加上所有 provider、Skills 設定。第 20 章會示範怎麼把 snapshot 下載到電腦或雲端。 -
左欄 Session 列表捲很卡
Session 檔案數量太多會拖慢列表渲染(幾百個以上開始有感)。整理策略:把「已經解決、之後幾乎不會回頭看」的 Session Export 成
.jsonl存到別的地方,再從 pi-web 刪。這樣工作區保持乾淨,需要時還能回頭讀那份匯出檔。 -
換模型後某個舊 Session 突然打不開
如果你把某個 provider 整個從 Models 面板移除,用那個 provider 開的舊 Session 打開會沒有可用模型。解法:把 provider 加回去(第 6 章),或在該 Session 打開後手動把模型下拉切到另一個還活著的 provider(切完之後之後的訊息都用新模型跑)。
常見問題
Session 有數量上限嗎?
/data/pi-agent/sessions/ 底下每一個 .jsonl 當一個 Session 列出來。實務上限是你 HA 的硬碟空間跟你的耐心。一個 Session 通常幾十 KB 到幾 MB,累積幾千個都不會炸;真的爆多的時候是列表捲動變卡(見 troubleshoot 第 5 條)。刪掉的 Session 能救回來嗎?
Session 檔案可以直接用文字編輯器改嗎?
.md 讀;要重跑一次某個對話就開新 Session 把重點貼進去當第一句。改原始檔屬於「開發者手動修 bug」的用途,不是日常操作。Fork 出來的兩個 Session 之後改一邊會影響另一邊嗎?
可以把 Session 從一台 HA 搬到另一台嗎?
/data/pi-agent/sessions/ 整包 tar 起來,複製到目的 HA 的同個路徑(要確定 add-on 有先裝好、也先停用,不然可能會被覆寫;搬完再啟動)。(3)一場一場——Export .jsonl,到新機看有沒有對應的 Import/匯入功能;Import 不是所有 pi-web 版本都有,沒有就退回前兩招,或直接把 .jsonl 丟到目的 HA 的 sessions/<對應 cwd>/ 資料夾裡再重啟 add-on。兩個人可以同時開同一個 Session 嗎?
.md 看;或各自開自己的 Session,用「共同的一段話當第一句」讓兩邊起點一樣。切換模型(換 provider)跟開新 Session 差在哪?
Session 裡的思考塊、工具卡也會被存起來嗎?
.jsonl 檔存的是「這場對話發生的完整事件流」——你的訊息、AI 的訊息、AI 的思考塊、AI 呼叫工具的每一步、工具回什麼,全都在裡面(每種是不同 role 或不同 type 的一行)。所以你之後回頭看某個 Session 打開時,也會看到當時的思考塊跟工具卡,不會只剩對話。思考塊到底怎麼看、值不值得展開,第 9 章會專門講。