:chat/completions、流式 SSE 與工具調(diào)用一學(xué)就會(huì))
【免費(fèi)下載鏈接】mlx-serveNative LLM inference server for Apple Silicon. OpenAI Anthropic API compatible. No Python. Zig backend, Swift frontend macOS app with chat, music, voice, video generation.項(xiàng)目地址https://gitcode.com/gh_mirrors/ml/mlx-serve點(diǎn)擊查看免費(fèi)下載mlx-serve是專為 Apple Silicon 打造的本地 LLM 推理服務(wù)器默認(rèn)在http://localhost:11234一個(gè)端口上同時(shí)提供OpenAI 兼容 API/v1/chat/completions、Anthropic Messages、Ollama 協(xié)議以及流式 SSE 與工具調(diào)用tool calling能力。本文是一份面向新手和普通用戶的速查手冊(cè)從啟動(dòng)服務(wù)器到發(fā)第一封chat/completions請(qǐng)求、讀懂流式 SSE 的每個(gè) data 塊再到完成一次完整的工具調(diào)用閉環(huán)照抄即可跑通。一、3 分鐘上手安裝并啟動(dòng) mlx-serve 服務(wù)器mlx-serve 無需 Python是一個(gè)約 7 MB 的 Zig 二進(jìn)制默認(rèn)綁定0.0.0.0:11234。最省事的啟動(dòng)方式是 Ollama 風(fēng)格的命令——自動(dòng)下載模型并直接起服務(wù)mlx-serve run gemma4 # 下載 Gemma 4 E4B4-bit并進(jìn)入終端聊天 mlx-serve serve # 服務(wù)本地 ~/.mlx-serve/models 下所有模型按需加載也支持 Homebrew 安裝brew install --cask mlx-serve # 菜單欄 App推薦 brew install mlx-serve # 僅 CLI 服務(wù)器啟動(dòng)后用兩個(gè)只讀端點(diǎn)驗(yàn)證服務(wù)器活著curl http://localhost:11234/health # 健康檢查 curl http://localhost:11234/v1/models # 列出已加載模型及上下文窗口 小貼士/v1/models返回的每一行都會(huì)廣播該模型真實(shí)的上下文窗口meta.context_length配置第三方客戶端時(shí)直接引用它不要手寫一個(gè)更大的數(shù)字否則會(huì)溢出。二、OpenAI 兼容核心POST /v1/chat/completions 全參數(shù)速查/v1/chat/completions與 OpenAI SDK 完全同構(gòu)把 SDK 的base_url指向http://localhost:11234/v1、API Key 隨便填如mlx-serve即可。最小請(qǐng)求curl http://localhost:11234/v1/chat/completions \ -H Content-Type: application/json \ -d { messages: [{role: user, content: 寫一首關(guān)于編程的俳句}], max_tokens: 256, stream: false }mlx-serve 支持的常用請(qǐng)求參數(shù)一覽完整清單見 docs/api.md參數(shù)作用新手建議messages對(duì)話歷史支持system/user/assistant/tool角色必填max_tokens生成上限必填避免燒內(nèi)存temperature/top_p/top_k采樣控制不填則按模型默認(rèn)stream是否 SSE 流式交互場景設(shè)truestream_options流式附帶 usage{include_usage: true}tools/tool_choice工具調(diào)用聲明見第四節(jié)response_formatJSON 模式 / JSON Schema 約束解碼結(jié)構(gòu)化輸出時(shí)用logprobs/top_logprobs每 token 對(duì)數(shù)概率調(diào)試用enable_thinking/reasoning_effort/reasoning_budget_tokens思考開關(guān)與預(yù)算思考類模型用kv_quant/kv_attn_mode按請(qǐng)求覆蓋 KV 緩存量化高級(jí)選項(xiàng)image_url消息內(nèi)視覺模型傳圖base64 或 URL支持視覺的模型可用響應(yīng)中值得關(guān)注的字段finish_reasonstop正常結(jié)束或length達(dá)到max_tokensfinish_details當(dāng)模型陷入復(fù)讀循環(huán)被服務(wù)端主動(dòng)截?cái)鄷r(shí)會(huì)報(bào){type: repetition_loop}這是 mlx-serve 獨(dú)有的診斷信息幫你區(qū)分模型卡住了和配額用完了usage.prompt_tokens_details.cached_tokens始終攜帶告訴你這次請(qǐng)求命中了多少緩存 token前綴緩存的效果直接可見。三、流式 SSE逐塊讀懂 data 與 [DONE]把stream設(shè)為true響應(yīng)就從一次性 JSON 變成SSEServer-Sent Events流每行data: {...}是一個(gè)獨(dú)立的 JSON chunk流末尾以data: [DONE]收尾。一個(gè)典型的流式會(huì)話長這樣data: {id:chatcmpl-...,object:chat.completion.chunk,choices:[{index:0,delta:{role:assistant,content:編程},...}]} data: {object:chat.completion.chunk,choices:[{index:0,delta:{content:之美},...}]} data: {object:chat.completion.chunk,choices:[{index:0,delta:{},finish_reason:stop},...]} data: [DONE]新手只需記住三條規(guī)則object永遠(yuǎn)是chat.completion.chunk正文增量在choices[0].delta.content里逐塊拼接即可還原完整回答delta.tool_calls同理分塊到達(dá)——工具調(diào)用的name和argumentsJSON 是分段流式下發(fā)的客戶端要按index拼回完整參數(shù)mlx-serve 保證拼好的arguments一定是合法 JSONdata: [DONE]是唯一終止信號(hào)見到它即可關(guān)閉流。若想拿到最終 usage請(qǐng)求里加stream_options: {include_usage: true}服務(wù)器會(huì)在結(jié)尾追加一個(gè)choices為空的 usage chunk。? 流式 思考模型思考內(nèi)容走delta.reasoning_content字段與正文content分開前端可以渲染成折疊的思考過程。四、工具調(diào)用 tools聲明、下發(fā)、回傳三步閉環(huán)mlx-serve 原生支持 OpenAI 風(fēng)格的函數(shù)調(diào)用一次完整的工具循環(huán)分三步第 1 步聲明工具。請(qǐng)求體里帶tools數(shù)組標(biāo)準(zhǔn) JSON Schema和可選的tool_choiceauto/none/required/ 指定函數(shù)名{ messages: [{role: user, content: 北京現(xiàn)在多少度}], tools: [{ type: function, function: { name: get_weather, description: 查詢城市天氣, parameters: { type: object, properties: {city: {type: string}}, required: [city] } } }] }第 2 步接收tool_calls。模型決定調(diào)用工具時(shí)響應(yīng)的choices[0].message.tool_calls里返回結(jié)構(gòu)化的id、function.name和function.argumentsJSON 字符串此時(shí)finish_reason為tool_calls。第 3 步回傳工具結(jié)果。把模型消息原樣塞回歷史再追加一條role: tool消息帶上tool_call_id服務(wù)器會(huì)繼續(xù)生成最終回答。mlx-serve 在工具調(diào)用鏈路上做了大量健壯性工程對(duì)新手非常友好Schema 驅(qū)動(dòng)的自動(dòng)修復(fù)模型輸出的參數(shù)值若與聲明類型不符如把false寫成字符串False服務(wù)器會(huì)按 Schema 自動(dòng)糾正小模型寫壞 JSON 轉(zhuǎn)義時(shí)也有容錯(cuò)重序列化兜底最大限度保證arguments是永遠(yuǎn)合法的 JSONtool_choice: required是真約束不只是提示詞建議解碼層會(huì)強(qiáng)制模型發(fā)起調(diào)用關(guān)閉自動(dòng)修復(fù)可用啟動(dòng)參數(shù)--no-tool-autocorrect。解析與修復(fù)的具體實(shí)現(xiàn)可以查看 src/chat.zig工具調(diào)用解析器與格式語料測(cè)試在 src/format_corpus_test.zig已知問題的排查記錄見 docs/gotchas/tool-calling.md。五、不止 OpenAI同一個(gè)端口上的另外三套協(xié)議mlx-serve 的一大優(yōu)勢(shì)是一個(gè)端口、四套協(xié)議你現(xiàn)有的客戶端基本零改動(dòng)就能接入?yún)f(xié)議端點(diǎn)典型客戶端OpenAI Chat CompletionsPOST /v1/chat/completionsOpenAI SDK、Continue、CursorOpenAI ResponsesPOST /v1/responses含 WebSocketCodexAnthropic MessagesPOST /v1/messagesClaude Code設(shè)ANTHROPIC_BASE_URLOllamaPOST /api/chat等Open WebUI、Raycast、ollama-python例如讓 Claude Code 直連本地export ANTHROPIC_BASE_URLhttp://localhost:11234 claude各客戶端的詳細(xì)配置見 docs/integrations.md服務(wù)器全部啟動(dòng)參數(shù)見 docs/cli.md。六、新手排障速查表癥狀可能原因解決辦法連不上 11234服務(wù)器沒啟動(dòng)或端口被改curl /health驗(yàn)證確認(rèn)--port模型名報(bào) 404/未加載模型未下載或名字不對(duì)mlx-serve list、查/v1/models流式中途沒收到[DONE]客戶端提前斷開檢查代理/超時(shí)的 keepalive 配置回答被截?cái)嗲規(guī)epetition_loop模型復(fù)讀被安全閘截?cái)嗾{(diào)低 temperature 或換采樣參數(shù)finish_reason: length撞了max_tokens調(diào)大max_tokens工具調(diào)用參數(shù)被客戶端拒收模型輸出與 Schema 不符確認(rèn)未開--no-tool-autocorrect七、延伸閱讀與代碼路徑HTTP API 完整參考含嵌入、媒體生成等端點(diǎn)docs/api.md、docs/zh-CN/api.md服務(wù)器路由實(shí)現(xiàn)/v1/chat/completions、SSE 發(fā)射器src/server.zig工具調(diào)用解析與思考?jí)K切分src/chat.zigSSE 流式與連接行為的自動(dòng)化測(cè)試tests/test_connection_thread_reaping.sh性能與加速機(jī)制投機(jī)解碼、KV 量化docs/performance.md照著這份手冊(cè)你現(xiàn)在應(yīng)該已經(jīng)能在自己的 Mac 上跑起一個(gè) OpenAI 兼容的本地推理服務(wù)并完整掌握chat/completions、流式 SSE 和工具調(diào)用三大核心用法了。贊分享【免費(fèi)下載鏈接】mlx-serveNative LLM inference server for Apple Silicon. OpenAI Anthropic API compatible. No Python. Zig backend, Swift frontend macOS app with chat, music, voice, video generation.項(xiàng)目地址https://gitcode.com/gh_mirrors/ml/mlx-serve點(diǎn)擊查看免費(fèi)下載相關(guān)推薦OpenClaw 如何啟用 OpenAI 兼容的 /v1/chat/completions HTTP 端點(diǎn)供外部工具調(diào)用OpenClaw 如何啟用 OpenAI 兼容的 /v1/chat/completions HTTP 端點(diǎn)供外部工具調(diào)用 如果你已經(jīng)在運(yùn)行 OpenClawAI 應(yīng)用AI Agent交互助手后端即時(shí)通訊網(wǎng)關(guān)Stylis與PostCSS對(duì)比分析選擇最適合項(xiàng)目的CSS工具指南 Stylis與PostCSS對(duì)比分析選擇最適合項(xiàng)目的CSS工具指南 在前端開發(fā)的世界中CSS預(yù)處理工具的選擇直接影響著項(xiàng)目的開發(fā)效率和性能表現(xiàn)。今天我用 ADK Go 的 openaimodel 驅(qū)動(dòng) OpenAI Chat Completions一個(gè)字段切換任意 OpenAI 兼容提供商用 ADK Go 的 openaimodel 驅(qū)動(dòng) OpenAI Chat Completions一個(gè)字段切換任意 OpenAI 兼容提供商 導(dǎo)讀 本文圍繞人工智能大模型AI AgentAgent 框架多智能體工具調(diào)用MCP ClientsAgent 記憶創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考