why anthropic web search not works?

前情提要 為什麼我明明就有設定要使用web search tool,但查詢出來的結果就是舊的資料呢? 在使用ai api很常會使用到的tool有兩個,一個是web search,另一個是structured outputs,也就是將你的結果變成程式看得懂的格式,讓程式比較好處理 舉例來說,我是一個加密貨幣的平台,我希望可以顯示跟比特幣相關的新聞,讓使用者可以瀏覽.這時我可以使用ai api,請他幫我取得最新10筆有關比特幣的文章,且幫我轉成我指定的json格式,這樣前端就可以直接拿來使用了 node.js example code如下 const message = await anthropic.messages.create({ model: "claude-sonnet-3", max_tokens: 4096, messages: [ { role: "user", content: "give me the latest 10 news about bitcoins", }, ], tools: [ { type: "web_search_20250305", name: "web_search", max_uses: 5, }, { name: "article_format", description: "Provide the article info with url and title", input_schema: { type: "object", properties: { url: { type: "string", description:"The article resource url", }, title: { type: "string", description:"The article title", } }, required: ["url", "title"], }, }, ], tool_choice: { type: "tool", name: "article_format", }, temperature: 0.3, }); 問題說明 我希望ai回傳的資料一定要是特定的資料結構,所以我設定了tool_choice來確article_format他一定會執行,的確資料都有正確被format,但問題來了,結果web search沒反應了,該怎麼辦? ...

October 21, 2025 · 1 min

GraphQL是什麼?

GraphQL是什麼? GraphQL 是由 Facebook 在 2012 年提出,並於 2015 年開源的一種API 資料查詢語言(Query Language for APIs),它讓前端可以用一種直覺、靈活的方式向後端請資料,只拿到自己需要的資料,不多也不少 Sample GraphQL Schema Schema是GraphQL裡面一個很重要的概念,定義了兩件事情 資料的結構與型別 type Product { id: ID! name: String description: String } 有哪些方法可以使用(query, mutation , subscription) query:查詢資料 mutation :異動資料 (包含INSERT,UPDATE, DELETE) subscription:訂閱事件 type Query { user(id: ID!): User } type Mutation { createPost(title: String!, content: String, authorId: ID!): Post } Resolver 實際執行查詢、拿資料、組回傳格式,與Data Source溝通的地方,每個欄位都有自己對應的resolver type Query { post(id: ID!): Post } type Post { id: ID! title: String author: User } type User { id: ID! name: String } const resolvers = { Query: { post: (_, { id }) => fetchPostById(id), }, Post: { author: (parent) => fetchAuthor(parent.authorId), }, }; GraphQL實際做了什麼? 定義格式與查詢流程 ...

July 7, 2025 · 2 min

WebSocket是什麼?

什麼時候需要使用WebSocket? Websocket主要是解決HTTP協定的即時性和互動性不足的問題 適合運用的場景有 即時性的需求,server有新資料希望client馬上反應的功能,例如:股價即時跳動的trading view 互動性的需求,client與server會頻繁的傳遞資訊的功能,例如:聊天室的功能 在沒有WebSocket之前,如果要做到聊天室的功能,多數會使用http polling來實現,client每隔一段時間向server更新資料,即便polling間隔很短,也會有延遲 (你應該不會接受一個,固定每隔一段時間才更新的聊天室吧,又不是在寫信😂) 此外在資料更新頻率較低的狀況,大多時候會取得相同的資料而導致浪費,且不同的資料需要建立不同的HTTP polling 在使用WebSocket前可以思考什麼? 在知道使用WebSocket的好處跟適合的狀況,以下會提到在使用上你需要注意的事情 規範中沒有定義Connection limit,但WebSocket是長連接,所以每一條連線都會佔用memory資源,所以在使用上需要注意connection的數量,可以善用ping/pong的機制,將沒有回應的client connection移除 安全性相關的設定並沒有像HTTP那樣的齊全,很多需要自己寫,像是cors, auth等相關的安全檢查沒有支援的那麼完整,之後會特別在寫一篇文章關於在node.js websocket server可以做哪些安全性的設定,以及要怎麼做,在這篇就先不展開討論了 如果系統沒有即時性和互動性的需求,基本上HTTP就蠻夠用的了,不一定要使用到Websocket,但如果有這樣的需求,WebSocket會是你的好夥伴,再也不用在前端為每一個需要定時更新的資料設定一大堆setTimeout啦!!!一個websocket就搞定 什麼是WebSocket? WebSocket是一種傳輸協定,和HTTP不同的地方是,WebSocket是一個雙向傳輸的協定,而HTTP是單向傳輸,只能由client發起 以下有幾個重點 WebSocket和HTTP一樣在傳輸層都依賴於TCP的協定 WebSocket跟HTTP一樣都有使用TLS加密後的版本,參考範例如下 ws://example.com/wsapi //沒有TLS wss://secure.example.com/wsapi //有TLS WebSocket會使用和HTTP一樣的port進行傳輸,主要是為了避免被防火牆阻止非Web網路連接,ws走80 port, wss走443 port WebSocket是怎麼運作的? Handshake Client send upgrade request GET /chat HTTP/1.1 Host: example.com:8000 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==ß Sec-WebSocket-Version: 13 Server response HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= 欄位說明 Connection必須設定Upgrade,表示客戶端希望連接升級。 Upgrade欄位必須設定Websocket,表示希望升級到Websocket協定。 Sec-WebSocket-Key是隨機的字串,伺服器端會用這些資料來構造出一個SHA-1的資訊摘要。把「Sec-WebSocket-Key」加上一個特殊字串「258EAFA5-E914-47DA-95CA-C5AB0DC85B11」,然後計算SHA-1摘要,之後進行Base64編碼,將結果做為「Sec-WebSocket-Accept」頭的值,返回給客戶端 Sec-WebSocket-Version 表示支援的Websocket版本。RFC6455要求使用的版本是13,之前草案的版本均應當棄用。 Origin欄位是必須的。如果缺少origin欄位,WebSocket伺服器需要回覆HTTP 403 狀態碼(禁止訪問)。 Send message WebSocket在傳遞訊息時,利用Frame-based message的格式,來進行傳輸 ...

July 1, 2025 · 2 min