企業平台
Vertex AI 上的 Claude 實戰功能:串流、輸出控制與內建工具
Vertex AI 上的 Claude 實戰功能:串流、輸出控制與內建工具
環境接好、對話跑通之後,接下來是把體驗跟輸出品質做出來的部分。這一篇挑出投資報酬率最高的四組功能:串流回應、預填 assistant 訊息、stop sequences,以及 Claude 內建的兩個工具。
它們的共同點是:程式碼改動都很小,但一個改善使用者的等待體驗,一個讓你精準控制輸出,最後一個直接幫 Claude 長出操作檔案與查網路的手腳。
你將學到什麼
串流回應
讓回應逐塊出現,使用者不再盯著轉圈圈。
預填與停止序列
控制 Claude 從哪裡開始說、說到哪裡停。
結構化資料
兩招合體,拿到不含多餘說明的純 JSON。
內建工具
text editor 與 web search 的開箱用法。
串流回應:別讓使用者乾等
一個回應可能要生成十幾二十秒,標準做法是等全部生成完才回傳,使用者只能盯著載入動畫。串流把這件事翻過來:Claude 一邊生成、一邊把文字分塊送回來,你的伺服器再即時轉發給前端,使用者看著回答逐字浮現。
事件有好幾種(MessageStart、ContentBlockStart、ContentBlockDelta、ContentBlockStop、MessageDelta、MessageStop),做文字顯示只要關心 ContentBlockDelta。與其自己解析事件,直接用 SDK 的簡化介面最省事:
with client.messages.stream(
model=model,
max_tokens=1000,
messages=messages
) as stream:
for text in stream.text_stream:
print(text, end="")
final_message = stream.get_final_message()
text_stream 會自動濾掉雜訊、只吐文字;跑完之後 get_final_message 給你組裝好的完整訊息,拿去存資料庫或接回對話歷史都方便。留意每個文字塊不保證剛好一個字,可能是好幾個詞甚至一整句。實務上,前端通常透過 WebSocket 或 Server-Sent Events 接收這些文字塊。
預填 assistant 訊息:指定開頭
第二招是預填(prefill):在訊息清單最後放一則你先寫好開頭的 assistant 訊息。Claude 看到會認為「我已經開始回答了」,於是從你寫的開頭接著寫下去,不會重複那段文字。問「早餐喝茶還是咖啡好」,正常會得到兩邊都講的平衡回答;但預填一句開頭,走向就由你定了:
messages = []
add_user_message(messages, "Is tea or coffee better at breakfast?")
add_assistant_message(messages, "Coffee is better because")
answer = chat(messages)
換一句預填就換一個立場:想幫茶說話就預填茶的開頭,想要唱反調就預填「兩個都不怎麼樣,因為」。這是引導回答方向成本最低的一招。
Stop sequences:說到哪裡停
stop sequences 是一份字串清單:Claude 一旦生成其中任何一個字串,立刻停止並回傳到目前為止的內容。請它從 1 數到 10、停止序列設成 5,你就只會拿到 1 到 4:
add_user_message(messages, "Count from 1 to 10")
answer = chat(messages, stop_sequences=["5"])
# => "1, 2, 3, 4, "
停止字串可以寫得更精準:想去掉尾巴的逗號與空格,就把序列設成含逗號的完整片段。常見用途包括限制清單長度、在特定分隔符號停下、避免回應無限延伸。
兩招合體:拿到乾淨的結構化資料
要 Claude 生成 JSON 這類結構化資料時,它總想「順便解釋一下」,前後包一堆說明文字與 markdown 圍欄,使用者沒辦法按下複製就直接用。解法是把預填跟停止序列合體:預填一個 markdown 程式碼區塊的開頭,再把區塊結尾的三個反引號設成停止序列。
messages = []
add_user_message(messages, "Generate a very short event bridge rule as json")
add_assistant_message(messages, "```json")
text = chat(messages, stop_sequences=["```"])
Claude 看到預填,認定 JSON 區塊已經開了頭,直接寫內容;寫完想收尾補上三個反引號的瞬間,撞上停止序列,生成即停。你拿到的就是頭尾之間乾乾淨淨的 JSON,頂多 strip 掉幾個換行再解析驗證。這招對任何格式都有效:Python 程式碼、條列清單,原理相同。
內建工具:text editor 與 web search
Claude 還帶著兩個不用從零打造的內建工具。第一個是 text editor 工具:檢視檔案與目錄、看指定行數範圍、取代文字、建立新檔、插入內容、復原編輯,等於讓 Claude 具備動手改檔案的能力。
有個示範很有畫面:請 Claude 打開 main.py 摘要內容,它會自己用工具檢視檔案再回報;再請它寫一個把圓周率算到小數第五位的函式、順便建立 test.py 測試檔,它就一步一步檢視、改寫、建檔。要注意分工:工具的 schema 是 Claude 內建的,你只要附一個小小的 schema 存根,但實際執行檔案操作的函式要自己寫。
Claude 知道怎麼提出請求,執行端在你手上,這也是安全邊界所在。各模型對應的工具版本字串,以 docs.anthropic.com 的官方文件為準。
第二個是 web search 工具,而且它更省事:連實作都不用寫,搜尋整段由 Claude 端自動完成。你只要在 tools 清單裡放一個 schema:
web_search_schema = {
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 5,
"allowed_domains": ["nih.gov"]
}
max_uses 限制搜尋次數,因為 Claude 可能依初步結果追加搜尋;allowed_domains 把來源限定在你信任的網域,例如只查官方或學術網站,而不是隨便一篇部落格。回應裡除了文字,還帶著搜尋查詢、逐筆結果與引用位置,前端可以把來源清單與內文引用一起渲染出來,讓使用者能核對每一句話的出處。
延伸學習
ChatGPT 很強,但真正讓你下班的是 Google
六小時完整實錄。從「AI 很厲害,為什麼你還是每天加班」這個問題出發,把 Google Workspace 當成真正的工作平台重新設計一次流程 ── Sheets 的資料結構、Drive 與 Docs 的文件流、Gmail 與 Calendar 的通知系統,再用 Apps Script 讓它自己跑起來,最後收斂成一張屬於你自己的 AI 工作能力地圖。
NT$ 4,599
AI Native 工作法
四小時完整實錄。工作已經不是以前的工作了 ── 這門課拆解 AI Native 的四個核心能力,帶你把自己的工作做成一份可執行的 AI Native Blueprint,從「會用 AI 的人」變成「工作本身就長在 AI 上的人」。
NT$ 2,599

