作者注:用“皇冠換紅帽、再把粉心改藍”的完整案例,講清 Nano Banana 2.1 多輪編輯每輪要回傳的對話歷史、上一輪圖片和思維簽名,實現局部修改不丟前一輪成果。
很多開發者第一次用 gemini-nano-banana-2.1 改圖時都會遇到同一個問題:第一輪改得很好,第二輪想再微調一個小地方,結果上一輪的修改被“沖掉”了,或者整張圖的風格被重畫了一遍。本文將介紹 Nano Banana 2.1 多輪編輯的正確回傳方式,幫助你實現 2 輪連續改圖而不丟細節。
這不是又一篇概念科普,而是圍繞一個可復現的案例展開:第一輪把角色頭上的皇冠換成紅帽,第二輪只把粉色愛心改成藍色,同時保住紅帽。我們會給出兩輪請求的完整代碼,並說明每一輪到底要帶什麼數據。
核心價值:讀完本文,你將弄清 Nano Banana 2.1 多輪編輯的工作機制,知道每輪請求必須回傳的 3 個要素,並能直接套用代碼完成局部連續編輯。

Nano Banana 2.1 多輪編輯核心要點
先把概念說準確。所謂 Nano Banana 2.1 的“原生多輪”編輯,更嚴謹的說法是“連續編輯”:每一輪都是一次獨立的 API 請求,模型之所以能“記住”上一輪改了什麼,是因爲你在請求裏把上下文完整帶回去了,而不是服務端替你保存了會話。
| 要點 | 說明 | 價值 |
|---|---|---|
| 完整對話歷史 | 第二輪請求的 contents 要包含第一輪的用戶指令和模型回覆 | 模型知道“之前做過什麼”,不會從零重畫 |
| 上一輪輸出圖片 | 模型回覆中返回的圖片要原樣放回歷史裏 | 第二輪基於紅帽版本繼續改,而不是基於原圖 |
| 思維簽名 thought signature | 模型回覆 part 上附帶的簽名字段需要原樣回傳 | 保留模型內部推理狀態,提高局部修改的一致性 |
| 無狀態請求 | 目前未驗證服務端會自動記憶上下文 | 必須由客戶端自己拼裝歷史,行爲纔可控 |
| 原生格式調用 | 使用 Gemini generateContent 原生格式構造 contents | 簽名和圖片 part 能按原結構回傳,不丟字段 |
Nano Banana 2.1 多輪編輯爲什麼會“丟細節”
最常見的錯誤做法,是第二輪只發一句“把粉心改成藍色”,再附上原始圖片。這樣模型看到的仍然是戴皇冠的原圖,自然會把皇冠保留下來,第一輪的紅帽也就消失了。另一種錯誤是隻附上第一輪輸出的圖片、不帶歷史,此時模型雖然拿到了紅帽版本,但並不知道這頂紅帽是“剛剛刻意改出來、需要保留的”,容易在第二輪順手改動帽子的顏色或形狀。
真正穩定的做法,是把第一輪的完整交互當作對話歷史傳回去:用戶說了什麼、模型返回了哪張圖、模型回覆上附帶的簽名是什麼。Google 官方文檔對圖片編輯的多輪場景也是這樣描述的,模型通過歷史中的簽名延續推理上下文,從而只改你指定的局部。
Nano Banana 2.1 多輪編輯的請求結構
第二輪請求的 contents 是一個按時間順序排列的數組,至少包含三段:第一輪的 user 消息(原圖加指令)、第一輪的 model 回覆(含輸出圖片和簽名)、第二輪新的 user 指令。關鍵在於 model 回覆那一段要“原樣回放”,不能只抽出圖片 base64 重新組裝,否則簽名字段很容易在轉換中丟失。

Nano Banana 2.1 多輪編輯快速上手
下面用 Python 和 requests 庫直接調用 Gemini 原生 generateContent 格式。之所以不用 OpenAI 兼容的 chat 格式,是因爲多輪編輯需要回傳 thought signature 和圖片 part,原生格式能最大程度保留這些字段的原始結構。
準備工作清單
| 準備項 | 說明 | 備註 |
|---|---|---|
| API Key | 在 API易 控制檯創建 | 新用戶有免費測試額度 |
| 模型名 | gemini-nano-banana-2.1 |
以控制檯模型列表爲準 |
| 原始圖片 | 本例爲戴皇冠、胸前有粉色愛心的角色圖 | PNG 或 JPEG 均可 |
| 調用格式 | Gemini 原生 generateContent | 便於完整回傳簽名與圖片 |
| 運行環境 | Python 3 + requests | 無需額外 SDK |
極簡示例:第 1 輪把皇冠換成紅帽
第一輪就是一次普通的圖片編輯請求:一個 user 消息,裏面放原圖和指令。重點是把返回的 model 內容完整保存下來,下一輪要用。
import base64, requests
BASE_URL = "https://api.apiyi.com/v1" # API易 統一接口,原生格式路徑以文檔中心說明爲準
API_KEY = "YOUR_API_KEY"
MODEL = "gemini-nano-banana-2.1"
URL = f"{BASE_URL}/models/{MODEL}:generateContent"
HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
img_b64 = base64.b64encode(open("origin.png", "rb").read()).decode()
user1 = {"role": "user", "parts": [
{"inline_data": {"mime_type": "image/png", "data": img_b64}},
{"text": "把角色頭上的皇冠換成一頂紅色的帽子,其他內容保持不變。"}]}
resp = requests.post(URL, headers=HEADERS, json={
"contents": [user1],
"generationConfig": {"responseModalities": ["TEXT", "IMAGE"]}}).json()
model1 = resp["candidates"][0]["content"] # 原樣保存,含圖片和 thoughtSignature
這裏最值得注意的是最後一行:model1 直接取 candidates[0].content 整個對象,而不是隻取其中的圖片數據。這個對象裏的 parts 可能同時包含文字、圖片和 thoughtSignature 字段,原樣保存就不會遺漏任何一項。
完整示例:第 2 輪只把粉心改藍,保留紅帽
第二輪的核心就是拼裝 contents:[user1, model1, user2]。下面的完整代碼包含兩輪調用、簽名檢查和圖片保存,可以直接運行。
查看 Nano Banana 2.1 兩輪連續編輯完整代碼
import base64
import requests
BASE_URL = "https://api.apiyi.com/v1" # 通過 API易 調用,原生格式路徑以 docs.apiyi.com 爲準
API_KEY = "YOUR_API_KEY"
MODEL = "gemini-nano-banana-2.1"
URL = f"{BASE_URL}/models/{MODEL}:generateContent"
HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
GEN_CONFIG = {"responseModalities": ["TEXT", "IMAGE"]}
def call(contents):
"""發送一次 generateContent 請求,返回 model 回覆的完整 content 對象"""
r = requests.post(URL, headers=HEADERS,
json={"contents": contents, "generationConfig": GEN_CONFIG},
timeout=180)
r.raise_for_status()
return r.json()["candidates"][0]["content"]
def save_image(content, path):
"""從 model 回覆中取出圖片並保存"""
for part in content.get("parts", []):
data = part.get("inlineData") or part.get("inline_data")
if data:
open(path, "wb").write(base64.b64decode(data["data"]))
return True
return False
def has_signature(content):
"""檢查回覆中是否帶有思維簽名"""
return any("thoughtSignature" in p or "thought_signature" in p
for p in content.get("parts", []))
# ---------- 第 1 輪:皇冠 → 紅帽 ----------
img_b64 = base64.b64encode(open("origin.png", "rb").read()).decode()
user1 = {"role": "user", "parts": [
{"inline_data": {"mime_type": "image/png", "data": img_b64}},
{"text": "把角色頭上的皇冠換成一頂紅色的帽子,其他內容保持不變。"}]}
model1 = call([user1])
save_image(model1, "round1_red_hat.png")
print("第 1 輪簽名存在:", has_signature(model1))
# ---------- 第 2 輪:粉心 → 藍心,保留紅帽 ----------
user2 = {"role": "user", "parts": [
{"text": "在上一張圖的基礎上,只把胸前的粉色愛心改成藍色。"
"紅色帽子和其他所有細節保持不變。"}]}
# 關鍵:完整歷史 + 原樣回傳的 model1(含上一輪圖片與簽名)
history = [user1, model1, user2]
model2 = call(history)
save_image(model2, "round2_blue_heart.png")
print("第 2 輪簽名存在:", has_signature(model2))
# 如需第 3 輪,繼續追加:history += [model2, user3]
🚀 快速開始:建議先在 API易 apiyi.com 用免費測試額度把上面兩輪代碼跑通,確認 round2 圖片裏紅帽仍在、只有愛心變色,再接入自己的業務流程。
第 2 輪指令的寫法技巧
連續編輯能不能“只改局部”,除了回傳結構,指令寫法也有影響。我們建議在第二輪指令裏同時說清三件事:基於哪張圖改、改哪裏、哪些必須保持不變。例如“在上一張圖的基礎上,只把粉色愛心改成藍色,紅色帽子和其他細節保持不變”,比單純一句“改成藍色”要穩定得多。
另外,第二輪不要再重複附上原始圖片。原圖已經在 user1 裏了,如果在 user2 裏再放一次,模型可能會把它理解爲新的參照對象,反而回到皇冠版本。
Nano Banana 2.1 多輪編輯三種回傳方式對比
爲了說明爲什麼必須“三要素齊全”,我們把常見的三種寫法放在一起比較。下表是對不同回傳方式行爲的定性描述,便於你快速判斷自己的代碼屬於哪一種。

| 回傳方式 | 第 2 輪請求內容 | 典型結果 | 推薦程度 |
|---|---|---|---|
| 方式 A:原圖重發 | 原始圖片 + 新指令 | 第一輪修改丟失,皇冠迴歸 | 不推薦 |
| 方式 B:單圖續改 | 第一輪輸出圖片 + 新指令,無歷史 | 紅帽大體保留,但細節可能被順手改動 | 簡單場景可用 |
| 方式 C:完整歷史回傳 | user1 + model1(含圖片和簽名)+ user2 | 只改愛心顏色,紅帽和其餘細節保持 | 推薦 ✅ |
對比解讀
方式 A 對標分析:方式 A 的優點是實現最簡單,每輪都是獨立請求。但模型完全看不到第一輪的成果,等於重新做了一次單輪編輯。相比之下,完整歷史回傳能讓第二輪站在第一輪的結果上繼續修改。
方式 B 對標分析:方式 B 在請求體積上比較省,只傳一張圖。但模型缺少“紅帽是刻意改出來的”這一上下文,也拿不到簽名,局部一致性沒有保障。對於需要連續精修的設計稿、電商主圖等場景,方式 C 仍然是更穩妥的選擇。
💡 選擇建議:如果你的業務需要連續改兩輪以上,建議直接採用方式 C。可以在 API易 apiyi.com 用同一套代碼把三種方式各跑一遍,對比輸出圖,差異會很直觀。
Nano Banana 2.1 與同系列模型的選擇
API易 上的 Nano Banana 系列有多個型號,連續編輯屬於編輯能力的進階用法。下表幫助你在同系列中定位。
| 模型 | 定位 | 連續編輯建議 | 可用平臺 |
|---|---|---|---|
| gemini-nano-banana-2.1 | 本文主角,支持基於歷史和簽名的連續編輯 | 推薦按方式 C 回傳 | API易 apiyi.com |
| Nano Banana 2(gemini-3.1-flash-image) | 同系列生圖與編輯模型 | 同樣使用原生格式拼裝歷史 | API易 apiyi.com |
| 其他 Nano Banana 型號 | 按速度、畫質需求選型 | 參考系列開發指南 | API易 apiyi.com |
Nano Banana 2.1 多輪編輯常見坑排查
實際接入時,大部分“改丟了”的問題都能歸結到幾個固定原因。下面按出現頻率整理成清單,排查時逐項覈對即可。
- 簽名丟失:把 model 回覆轉換成自己的數據結構後再拼回去,字段名大小寫或嵌套層級變了,導致 thoughtSignature 沒傳上去。解決辦法是直接保存並回傳原始 content 對象。
- 角色寫錯:把第一輪的模型回覆標成
user角色,模型會把自己的輸出當成用戶上傳的新圖。model 回覆必須保持role: model。 - 順序顛倒:contents 必須按時間順序排列,user1、model1、user2 依次出現,不能把新指令放在最前面。
- 混用格式:前一輪用 OpenAI 兼容格式、後一輪改用原生格式,中間的字段轉換容易丟簽名。整個多輪流程建議統一使用 Gemini 原生格式。
- 歷史過長:輪次越多,請求裏攜帶的圖片越多,體積和耗時都會上漲。超過兩三輪的長流程,可以考慮在關鍵節點把當前結果當作新原圖重新開始一段歷史。
🎯 技術建議:排查時可以先打印 model1 的 parts 結構,確認 thoughtSignature 字段確實存在,再檢查發出的第二輪請求體裏是否原樣包含它。API易 apiyi.com 的文檔中心有 Gemini 原生格式與多輪對話的拼裝示例,可對照覈對。
常見問題 FAQ
Q1:什麼是 Nano Banana 2.1 多輪編輯?
指用 gemini-nano-banana-2.1 對同一張圖進行連續修改,每一輪都在上一輪結果上只改局部。準確地說是“連續編輯”:每輪是獨立請求,由客戶端回傳完整歷史、上一輪圖片和思維簽名來延續上下文。
Q2:多輪編輯和單輪編輯有什麼區別?
單輪編輯只關心“原圖加一條指令”。多輪編輯要求模型同時理解之前做過的修改,並在新一輪中保住它們。單輪編輯無需歷史,多輪編輯則必須帶上歷史和簽名,否則會退化成對原圖的重新編輯。
Q3:服務端會自動記住上一輪的上下文嗎?
目前沒有驗證服務端會自動記憶上下文,因此不要依賴這一點。穩妥做法是把每輪請求都當作無狀態請求,由客戶端自行維護 contents 數組,這也和 Google 官方文檔提供的連續編輯方式一致。
Q4:Nano Banana 2.1 多輪編輯適合哪些場景?
主要適合以下場景:
– **電商主圖精修**:先換背景,再單獨調整商品顏色,保持構圖不變
– **角色設計迭代**:先換配飾,再改服裝細節,保持人物面部一致
– **營銷海報調整**:先改主視覺元素,再微調局部色塊,避免整圖重繪
Q5:如何通過 API 快速調用 Nano Banana 2.1 多輪編輯?
推薦按以下步驟測試:
1. 訪問 API易 apiyi.com 註冊賬號並創建 API Key
2. 領取新用戶免費測試額度
3. 運行本文完整代碼,base_url 使用 `https://api.apiyi.com/v1`,原生格式路徑以文檔中心說明爲準
同一個 API Key 還能調用 Nano Banana 系列其他型號,方便橫向對比連續編輯效果。
Q6:Nano Banana 2.1 多輪編輯有哪些限制?
– 請求體積:每多一輪就多攜帶一張圖,請求更大、耗時更長
– 一致性邊界:本文案例驗證的是兩輪連續編輯,更多輪次的穩定性需要結合自己的素材實測
– 替代方案:長流程可在關鍵節點把當前結果作爲新原圖,重新開始一段歷史
Nano Banana 2.1 多輪編輯核心要點 Key Takeaways
- 本質是連續編輯:每輪都是獨立請求,上下文由客戶端回傳維持
- 三要素缺一不可:完整對話歷史、上一輪輸出圖片、思維簽名
- 原樣回傳 model 內容:直接保存 candidates[0].content,避免簽名丟失
- 使用原生格式:generateContent 的 contents 結構最適合回傳圖片與簽名
- 指令寫清保留項:第二輪明確“只改哪裏、哪些不變”,局部修改更穩
- 不重複附原圖:第二輪附原圖容易讓模型回到修改前的版本
- 低成本驗證:用 API易 apiyi.com 免費額度先跑通兩輪再上線
總結
Nano Banana 2.1 多輪編輯的核心要點:
- 機制:所謂多輪編輯是基於客戶端回傳的連續編輯,服務端自動記憶尚未驗證,不應依賴
- 回傳內容:第二輪請求必須包含 user1、原樣的 model1(含圖片和 thought signature)以及 user2
- 實踐技巧:統一使用 Gemini 原生格式,指令中寫明保留項,不在新一輪重複附上原圖
掌握這三點後,“皇冠換紅帽、再把粉心改藍”這類兩輪連續改圖就能穩定復現,同樣的結構也可以擴展到更多輪次。
推薦通過 API易 apiyi.com 快速驗證效果,平臺提供 OpenAI 兼容與 Gemini 原生格式接口,一個 API Key 即可調用 Nano Banana 系列及其他主流模型,按量計費,適合先小規模測試再逐步接入生產。
📚 參考資料
- Google Gemini API 圖片生成與編輯文檔:官方多輪圖片編輯說明
- 鏈接:
ai.google.dev/gemini-api/docs/image-generation -
說明:介紹圖片編輯的請求結構和連續編輯的對話方式
-
Google Gemini API 思維簽名文檔:thought signature 機制說明
- 鏈接:
ai.google.dev/gemini-api/docs/thought-signatures -
說明:解釋簽名的作用以及在多輪請求中如何回傳
-
API易 文檔中心:Nano Banana 系列開發指南、多輪對話實現指南、Gemini 原生格式調用指南
- 鏈接:
docs.apiyi.com - 說明:包含接入端點、原生格式路徑和歷史拼裝示例,是本文代碼落地的對照依據
作者:APIYI 技術團隊
技術交流:歡迎在 API易 網站首頁聯繫我們,更多 Nano Banana 系列接入資料可訪問 docs.apiyi.com 文檔中心
