第 8 章

Session 是什麼?跟聊天室有什麼不一樣

聊到第 5、第 6 次以後,左邊 Session 歷史開始長出來,你會發現「昨天問過的家電問題」跟「上禮拜寫的自動化」全部擠在一起。這章帶你把 Session 的觀念釐清、學會什麼時候該分、什麼時候該合、Fork 是拿來幹嘛的,還有匯出、備份、清理三招怎麼下。走完之後你會像整理資料夾一樣整理對話。

為什麼 Session 一多就會亂

剛裝好 Pi Agent 時,左邊 Session 歷史空空的很清爽。用一週之後你會看到大概這樣的狀況:

  • 「幫我看客廳燈為什麼不亮」跟「幫我寫日落開燈自動化」擠在同一個 Session,AI 講到後面自己都搞不清楚在講哪盞燈
  • 想找上禮拜討論過的吸塵器排程,但列表全部只顯示第一句話當標題,滑半天找不到
  • 同一個問題想試 GLM 跟 Claude 分別怎麼答,只好複製整段訊息重貼一次
  • 對話已經滾到一百則,AI 回應開始變慢、費用也開始爆

這些不是 AI 的問題,是你在同一個 Session 塞太多不同主題造成的。這一章要教你的正是「Session 該分還是該合、什麼時候該 fork 分岔、什麼時候該砍」的判斷。做對這件事,之後不管是查歷史、換模型比較、或是備份,都會順很多。

銜接:還沒開過第一次對話的話,先回第 7 章把第一個 Session 開起來,這一章的操作才有東西可以練。工作區三大區塊的位置忘了,就翻第 4 章複習。

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 還記得你們昨天聊到哪、還用哪個模型、還載著哪些技能——因為那不是「記憶」,是「這個世界的完整狀態」被保存下來了。

比喻:把 Session 想成一份 Word 檔——裡面有內容(訊息)、字型(模型)、頁面設定(Skills)。關掉 Word 下次打開,這些東西都會回來,不會變成新檔。

跟 LINE 聊天室有什麼不一樣

很多人第一次用會直覺把 Session 當成「跟 AI 的 LINE 聊天室」。方向對,但有幾個關鍵差別不搞清楚,之後會踩坑:

比項LINE 聊天室Pi Agent Session
誰參與兩個以上的人共享,大家都看得到你單獨對 AI 的一場對話,別人看不到
對方是誰另一頭是固定那個人另一頭是你選的模型,隨時可換
訊息存哪LINE 伺服器(你手機只有快取)你家的 HA,/data/pi-agent/sessions/
對方會不會記對方腦袋自己記每次都把整場對話再送一次,AI 才「知道」你們之前講了什麼
可以幾個一起開一個聊天室就是一個可以同時開很多個,每個獨立狀態
可以複製一份嗎不能,只能轉發訊息可以 Fork,整個 Session 連狀態複製一份
會不會過期不會,除非你退出不會過期,你不刪它就一直在
最重要那條:LINE 是對方腦袋自己記;Session 是每次送訊息都把整份歷史再丟一次給 AI——所以對話越長,送出去的 token 越多、越貴、也越慢。這是後面「什麼時候該收該砍」的根本原因。

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 是「檔案」,不是「雲端記錄」。你的對話從頭到尾在你家的 HA 硬碟裡跑,除非你自己按送出叫 AI 去查外部 API,才會有網路流量。這是隱私上的一大加分。

一次對話該分幾個 Session(判斷表)

沒有「絕對正確」的答案,但下面這張對照表可以幫你在 90% 的情境下做對決定:

情境該怎麼做原因
想連續問同一個主題(例如一路把客廳燈自動化寫完)同一個 Session,一路問下去AI 需要前面的上下文,切開反而要重講一次
換題目(從「家電為什麼壞」跳到「怎麼寫自動化」)開新 Session(左上「新增/New」那個按鈕,實際字樣依 pi-web 版本而定)舊主題留在原地方便回頭找,新主題不會被舊上下文污染
想試「同一個問題不同模型會怎麼答」把 Session 複製一份(版本不同會標成 Fork 或 Duplicate),一份切給 GLM、一份切給 Claude兩邊起點完全一樣,比較才公平;不用把問題複製貼上兩次
對話已經一百多則,AI 開始忘前面、送訊息也變慢叫 AI「幫我摘要目前重點」,把摘要當第一句開新 Session 繼續把長歷史壓成一段短摘要,token 用量瞬間降回可管理的水位
要跟朋友分享一段解決過程Export 出 Markdown,直接貼不用截圖也不用把朋友拉進你家 HA
一場實驗性的嘗試,結果不好想全部丟掉Delete,乾淨Session 太多反而是干擾
口訣:「換題目就換 Session、比模型就 Fork、太長就摘要重來、不要的就刪」。這四句記起來,Session 就不會亂。

動手:開新 Session、命名、加標籤

照這個順序做一次,之後你會很自然地在每個新主題開頭就先把這一套跑完。

  1. 點左上角「新增 Session」的按鈕

    按鈕在左邊 Session 歷史欄的最上方,字樣依 pi-web 版本可能是 + NewNew session 或加號圖示。點下去中間對話串會清空、composer 打字區也清空,等於你面前是一張新的白紙。左欄會多出一列暫時沒標題的 Session(因為你還沒打字)。

  2. 打你的第一句話

    第一句很重要——它決定 AI 的方向,也決定這個 Session 的自動生成標題。建議直接把主題講清楚,例如「幫我看客廳三顆燈為什麼有一顆連不上」比「幫我看看燈」好很多。送出後 pi-web 通常會用第一句話當側欄的標題(實際截取長度依版本而定,太長會被裁掉)。

  3. 覺得標題不好?改標題

    把游標移到左欄那一列,右邊通常會冒出 (三點選單)或右鍵可叫出動作選單。裡面找「Rename/重新命名/編輯標題」之類選項(版本不同字樣略有差異),改成你未來搜尋時想得到的關鍵字。例如把「幫我看客廳三顆燈為什麼有一顆連不上」改成「客廳燈 3 號離線 debug」。若你的版本沒有這個選項,也可以先跳到方式二用 Export 備份、Delete 再開一個標題較好的新 Session。

  4. 加標籤(若你的版本支援)

    部分 pi-web 版本在三點選單裡有 Tag / Label / 標籤 之類功能,允許你打上 家電自動化問答影片備份/維護 等分類;有些版本則只支援搜尋標題內文,沒有獨立的標籤欄位。找不到就跳過這步,改成把標題本身寫成「家電/客廳燈 3 號離線」這種前綴式命名,用搜尋框搜「家電/」一樣可以達到分類效果。

  5. 結束時再回頭看一眼

    問題解掉、對話收尾時,回頭看一次標題/標籤有沒有需要修。「當下開頭以為的主題」跟「最後真正解決的問題」常常不一樣(例如以為是燈壞了,最後發現是 Wi-Fi 訊號),這時就把標題改成真的方便未來 you 找到的字。

注意:本章寫到的所有按鈕字樣(New session、Rename、Duplicate、Fork、Delete、Export、Tag/Label 等)都可能因 pi-web 版本而異。找不到某個字樣時,先在該 Session 那列的三點選單或右鍵選單裡整個掃過一遍,通常功能都在但字面不同。真的沒有,就走這章寫的替代路徑(用 Export+Delete+新開 Session 湊出效果)。

「複製一份 Session」(Fork/Duplicate)是什麼、什麼時候用

pi-web 有個很好用但常被忽略的功能:把目前這個 Session 的當下狀態整份複製一份出來——所有訊息、模型設定、Skills、System prompt 通通一起複製。之後你在副本上繼續講什麼,都不會影響原本那個 Session。這個功能在不同 pi-web 版本可能叫 ForkDuplicate、或「複製 Session」,行為都是這一種。若你在選單裡完全找不到,可以走替代方案:Export .jsonl 出來,之後有需要再重跑一次(但無法完美還原分岔那一刻的狀態)。

什麼時候會用到?

情境怎麼 Fork好處
AI 給了兩個方案 A/B,你想分別追問「A 的缺點」「B 的缺點」複製兩次,一份追 A、一份追 B兩條追問不會互相干擾,比較起來清楚
對話進行到一半想試「換另一家模型會怎麼答」複製一份,在副本上把模型下拉換成別的原本 Session 不動,副本是新一家模型接手
寫自動化寫到 80% 覺得可能踩雷,想保留備份複製一份當「安全存檔」,在原本繼續改踩雷了就跳去副本繼續,不用重來
想教別人看你怎麼一步一步問,但不想連自己後面的失敗嘗試也給對方複製到某個乾淨點,把副本 Export 出來對方看到的是清爽的教學版

操作路徑(大致):左欄該 Session → ⋮(三點選單/右鍵選單)→ 找 Fork/Duplicate/複製 之類項目。字樣依 pi-web 版本而異。副本一般會出現在列表最上面或緊接原 Session 之後,標題可能會加類似「(copy)」的後綴(也可能直接沿用原標題,得自己判斷是哪一個),可以馬上改標題。

觀念:複製完之後兩個 Session 應該是完全獨立的:原本改了,副本不會跟著改;副本改了,原本也不會知道。就像影印一份紙本文件——之後在其中一份上塗鴉,另一份不受影響。不放心的話可以做一次小實驗:複製後在副本回一句,回來看原本 Session 有沒有多出那句訊息(正常情況下不會)。

匯出 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 累積到某個程度就該清。清的方式有三種,各有適用場合:

  1. 方式一:一個一個刪(最常用、最安全)

    三點選單裡找 Delete/刪除。pi-web 一般會跳確認框問你「確定嗎」,按確定就沒了。適合逐個檢視、確認「這個真的用不到」才砍。日常整理都用這招。

  2. 方式二:多選批次刪(若你的版本支援)

    部分 pi-web 版本在左欄支援多選,方式類似作業系統的 CtrlCmd +點擊選多列、Shift+點擊選區間,或是先按一個「多選模式」按鈕再逐一勾。選好之後上方會出現批次動作。若試不出來就代表你這版沒開這功能,只能一個一個刪,或走方式三。

  3. 方式三:直接刪 /data/pi-agent/sessions/ 底下的檔(大掃除用)

    技術上你可以進到 HA / 容器內,用 rm 直接把 .jsonl 檔砍掉。要注意:pi-web 通常有自己的索引或快取,直接砍檔後最好重啟 add-on/容器,讓它重新掃資料夾;不然 UI 上可能還會顯示已被刪的 Session、或打開時空白。真的要一次清幾百個時這招最快,但清完記得重啟。

危險:刪除通常沒有垃圾桶——按確定就是真的刪掉,pi-web 內建沒有 undo。要「將來還可能想看」的 Session,先 Export .jsonl(或從磁碟複製那個 .jsonl)存下來,再刪。

Session 會不會影響 AI 的「記憶力」

先講結論:AI 沒有「記憶」,它每次都是重讀整場對話。這句話講清楚了,很多操作直覺就順了。

發生什麼事:

  1. 你送出一句訊息

    pi-web 把「整個 Session 從第一則到你最新這則」通通打包,一起送給 AI 模型的 API。

  2. AI 讀完整份歷史,才回你這一句

    它是把整場對話當作一份長長的文件讀進來、然後預測下一句該講什麼——不是它「記得」,是它「每次都被再看一次」。

  3. 下一句你再送,一樣的事再發生一次

    包括你剛剛講的那句、AI 剛回的那句,全部再送一次,AI 再讀一次。

這帶來三個直接的結果:

  • 對話越長,每次送的 token 越多。越貴、越慢,這是物理性的,換多強的模型都躲不掉。
  • 「AI 忘了前面」其實是「歷史太長超過模型的 context 上限」。解法是收摘要、開新 Session,不是罵 AI。
  • 刪除 Session = AI 完全不記得你們講過。沒有雲端另存一份,沒有例外。
觀念:Session 是「記憶」的載體。維護好 Session(該收就收、該分就分),等於維護 AI 的思路——你會發現同樣的 AI 突然變聰明了。

常見卡關

  1. 找不到某個舊 Session

    先在左欄上方搜尋框打關鍵字(會搜標題、訊息內文、標籤)。搜不到再對日期——你大概記得是哪天弄的,去 HA 的檔案管理員或 SSH 開 /data/pi-agent/sessions/,按時間戳排序找那個檔。真的找不到八成是不小心刪過,如果之前有 HA snapshot 就從快照裡撈;沒有就是真的沒了。

  2. Session 打開一片空白,什麼都沒有

    檔案可能損毀(斷電、寫入時被中斷都會發生)。到 Settings → Add-ons → Woow HA Pi Agent → Log 看記錄檔,找有沒有 parse errorJSON 相關的紅字,會指到具體是哪個檔壞了。壞掉的檔可以直接 Delete,其他 Session 不會受影響。

  3. Fork 之後 AI 回答跟原本不一樣

    正常的。原因兩個:一是模型本身有隨機性(同樣輸入不保證同樣輸出);二是你 Fork 到現在之間模型可能升級了(例如 GLM 從 4.5 升 4.6)。想要「重現一模一樣答案」在 AI 這行本來就沒保證,Fork 是給你「同起點試不同追問」用的,不是「回到過去」用的。

  4. Session 太多想全部備份出來

    去 HA 的 Settings → Backups 建一個手動 snapshot,勾「Add-on: Woow HA Pi Agent」讓它把整個 /data/pi-agent/ 打包進去。這一份 snapshot 裡就有全部 Session 加上所有 provider、Skills 設定。第 20 章會示範怎麼把 snapshot 下載到電腦或雲端。

  5. 左欄 Session 列表捲很卡

    Session 檔案數量太多會拖慢列表渲染(幾百個以上開始有感)。整理策略:把「已經解決、之後幾乎不會回頭看」的 Session Export 成 .jsonl 存到別的地方,再從 pi-web 刪。這樣工作區保持乾淨,需要時還能回頭讀那份匯出檔。

  6. 換模型後某個舊 Session 突然打不開

    如果你把某個 provider 整個從 Models 面板移除,用那個 provider 開的舊 Session 打開會沒有可用模型。解法:把 provider 加回去(第 6 章),或在該 Session 打開後手動把模型下拉切到另一個還活著的 provider(切完之後之後的訊息都用新模型跑)。

常見問題

Session 有數量上限嗎?
pi-web 本身沒設硬上限——它就是把 /data/pi-agent/sessions/ 底下每一個 .jsonl 當一個 Session 列出來。實務上限是你 HA 的硬碟空間跟你的耐心。一個 Session 通常幾十 KB 到幾 MB,累積幾千個都不會炸;真的爆多的時候是列表捲動變卡(見 troubleshoot 第 5 條)。
刪掉的 Session 能救回來嗎?
分兩種:有 HA snapshot(備份)就能——回到那份備份、還原 add-on 的資料,被刪掉的 Session 會回來(其他之後才產生的東西可能也會被還原到舊狀態,所以還原前記得再備一份現況)。沒 snapshot就沒了,pi-web 內建沒有垃圾桶或 undo。所以重要的 Session 動 Delete 前先 Export 一份保險。
Session 檔案可以直接用文字編輯器改嗎?
技術上可以(就是 JSON Lines),但強烈不建議。手改容易格式跑掉(少一個逗號、多一個中括號),pi-web 打開會 parse error 變空白。真的要挖歷史就用 Export 到 .md 讀;要重跑一次某個對話就開新 Session 把重點貼進去當第一句。改原始檔屬於「開發者手動修 bug」的用途,不是日常操作。
Fork 出來的兩個 Session 之後改一邊會影響另一邊嗎?
不會。Fork 的瞬間,pi-web 把原本 Session 的檔案整份複製一份成新檔,兩邊之後各走各的、彼此不知道對方存在。你可以放心在副本上做實驗,原本 Session 永遠是 Fork 那瞬間的樣子。要提醒的是:Fork 只複製「Session 檔本身」——如果原本這個 Session 綁的 provider 或 Skills 之後被你在 Models/Skills 面板改掉,兩個 Session 打開時看到的可用模型會一起變(因為模型清單是共用的),只是各自 Session 內已經送出過的訊息還是用當初那個模型跑的。
可以把 Session 從一台 HA 搬到另一台嗎?
可以。兩個可靠方向加一個看版本的方向:(1)最乾淨——來源 HA 建 snapshot,目的 HA 還原那個 add-on 的資料。(2)手動——用 SSH 把 /data/pi-agent/sessions/ 整包 tar 起來,複製到目的 HA 的同個路徑(要確定 add-on 有先裝好、也先停用,不然可能會被覆寫;搬完再啟動)。(3)一場一場——Export .jsonl,到新機看有沒有對應的 Import/匯入功能;Import 不是所有 pi-web 版本都有,沒有就退回前兩招,或直接把 .jsonl 丟到目的 HA 的 sessions/<對應 cwd>/ 資料夾裡再重啟 add-on。
兩個人可以同時開同一個 Session 嗎?
技術上可以(兩個瀏覽器都連進 HA、都點進 Pi Agent),但強烈不建議。同一個 Session 檔會被兩邊同時讀寫,很容易發生訊息順序錯亂、或後寫的把前寫的蓋掉。要協作的話正規做法是:一個人操作,另一個人透過 Export 出來的 .md 看;或各自開自己的 Session,用「共同的一段話當第一句」讓兩邊起點一樣。
切換模型(換 provider)跟開新 Session 差在哪?
切換模型只影響「之後」的訊息,原本的對話歷史還是會被送給新模型當上下文;開新 Session 是「連上下文都清空重來」。想「維持話題但換一家腦子接手」就切模型;想「這件事重頭來、跟之前無關」就開新 Session。深入的模型切換技巧在第 13 章會拆更細。
Session 裡的思考塊、工具卡也會被存起來嗎?
會。.jsonl 檔存的是「這場對話發生的完整事件流」——你的訊息、AI 的訊息、AI 的思考塊、AI 呼叫工具的每一步、工具回什麼,全都在裡面(每種是不同 role 或不同 type 的一行)。所以你之後回頭看某個 Session 打開時,也會看到當時的思考塊跟工具卡,不會只剩對話。思考塊到底怎麼看、值不值得展開,第 9 章會專門講。