POST /v1/chat/completions- Cùng cổng với Gateway (ghép kênh WS + HTTP):
http://<gateway-host>:<port>/v1/chat/completions
GET /v1/modelsGET /v1/models/{id}POST /v1/embeddingsPOST /v1/responses
openclaw agent), nên định tuyến/quyền/cấu hình khớp với Gateway của bạn.
Xác thực
Sử dụng cấu hình xác thực của Gateway. Các đường dẫn xác thực HTTP phổ biến:- xác thực bằng bí mật dùng chung (
gateway.auth.mode="token"hoặc"password"):Authorization: Bearer <token-or-password> - xác thực HTTP mang danh tính đáng tin cậy (
gateway.auth.mode="trusted-proxy"): định tuyến qua proxy nhận biết danh tính đã cấu hình và để nó chèn các header danh tính bắt buộc - xác thực mở qua ingress riêng tư (
gateway.auth.mode="none"): không cần header xác thực
- Khi
gateway.auth.mode="token", dùnggateway.auth.token(hoặcOPENCLAW_GATEWAY_TOKEN). - Khi
gateway.auth.mode="password", dùnggateway.auth.password(hoặcOPENCLAW_GATEWAY_PASSWORD). - Khi
gateway.auth.mode="trusted-proxy", yêu cầu HTTP phải đến từ một nguồn proxy đáng tin cậy đã cấu hình; proxy loopback cùng máy chủ yêu cầu bật rõ rànggateway.auth.trustedProxy.allowLoopback = true. - Các caller nội bộ cùng máy chủ bỏ qua proxy có thể dùng
gateway.auth.password/OPENCLAW_GATEWAY_PASSWORDlàm phương án dự phòng trực tiếp cục bộ. Bất kỳ bằng chứng headerForwarded,X-Forwarded-*, hoặcX-Real-IPnào sẽ giữ yêu cầu trên đường dẫn trusted-proxy thay thế. - Nếu
gateway.auth.rateLimitđược cấu hình và xảy ra quá nhiều lỗi xác thực, điểm cuối trả về429kèmRetry-After.
Ranh giới bảo mật (quan trọng)
Hãy xem điểm cuối này là một bề mặt truy cập đầy đủ của operator cho phiên bản gateway.- Xác thực bearer HTTP ở đây không phải là mô hình phạm vi hẹp theo từng người dùng.
- Token/mật khẩu Gateway hợp lệ cho điểm cuối này nên được xem như thông tin xác thực của chủ sở hữu/operator.
- Các yêu cầu chạy qua cùng đường dẫn tác nhân control-plane như các hành động operator đáng tin cậy.
- Không có ranh giới công cụ riêng cho non-owner/theo từng người dùng trên điểm cuối này; một khi caller vượt qua xác thực Gateway ở đây, OpenClaw xem caller đó là operator đáng tin cậy cho gateway này.
- Với các chế độ xác thực bằng bí mật dùng chung (
tokenvàpassword), điểm cuối khôi phục các mặc định operator đầy đủ bình thường ngay cả khi caller gửi headerx-openclaw-scopeshẹp hơn. - Các chế độ HTTP mang danh tính đáng tin cậy (ví dụ xác thực proxy đáng tin cậy hoặc
gateway.auth.mode="none") tôn trọngx-openclaw-scopeskhi có mặt và nếu không thì quay về tập phạm vi operator mặc định bình thường. - Nếu chính sách tác nhân đích cho phép các công cụ nhạy cảm, điểm cuối này có thể dùng chúng.
- Chỉ giữ điểm cuối này trên loopback/tailnet/ingress riêng tư; không phơi bày trực tiếp ra internet công cộng.
gateway.auth.mode="token"hoặc"password"+Authorization: Bearer ...- chứng minh đang sở hữu bí mật operator gateway dùng chung
- bỏ qua
x-openclaw-scopeshẹp hơn - khôi phục tập phạm vi operator mặc định đầy đủ:
operator.admin,operator.approvals,operator.pairing,operator.read,operator.talk.secrets,operator.write - xem các lượt chat trên điểm cuối này là lượt do chủ sở hữu gửi
- các chế độ HTTP mang danh tính đáng tin cậy (ví dụ xác thực proxy đáng tin cậy, hoặc
gateway.auth.mode="none"trên ingress riêng tư)- xác thực một danh tính đáng tin cậy bên ngoài hoặc ranh giới triển khai
- tôn trọng
x-openclaw-scopeskhi header có mặt - quay về tập phạm vi operator mặc định bình thường khi header vắng mặt
- chỉ mất ngữ nghĩa chủ sở hữu khi caller thu hẹp phạm vi một cách rõ ràng và bỏ qua
operator.admin - yêu cầu
operator.admincho các điều khiển yêu cầu cấp chủ sở hữu nhưx-openclaw-model
Khi nào dùng điểm cuối này
Dùng/v1/chat/completions khi bạn đang tích hợp công cụ hoặc backend phía ứng dụng đáng tin cậy với một gateway hiện có và có thể giữ an toàn thông tin xác thực operator của gateway.
- Ưu tiên cách này thay vì thêm một kênh tích hợp sẵn mới khi tích hợp của bạn chỉ là một bề mặt operator/client khác cho cùng gateway.
- Với client di động native kết nối trực tiếp tới gateway từ xa, hãy ưu tiên WebChat hoặc Giao thức Gateway và triển khai luồng bootstrap thiết bị ghép cặp/device-token để thiết bị không cần token/mật khẩu HTTP dùng chung.
- Thay vào đó hãy xây dựng một Plugin kênh khi bạn đang tích hợp một mạng nhắn tin bên ngoài có người dùng, phòng, phân phối Webhook hoặc transport gửi đi riêng. Xem Xây dựng plugin.
Hợp đồng mô hình ưu tiên tác nhân
OpenClaw xem trường OpenAImodel là đích tác nhân, không phải id mô hình provider thô.
model: "openclaw"định tuyến tới tác nhân mặc định đã cấu hình.model: "openclaw/default"cũng định tuyến tới tác nhân mặc định đã cấu hình.model: "openclaw/<agentId>"định tuyến tới một tác nhân cụ thể.
x-openclaw-model: <provider/model-or-bare-id>ghi đè mô hình backend cho tác nhân đã chọn. Caller bearer dùng bí mật dùng chung có thể dùng header này. Caller mang danh tính, chẳng hạn yêu cầu trusted-proxy hoặc ingress riêng tư không xác thực cóx-openclaw-scopes, cầnoperator.admin; caller chỉ có quyền ghi nhận403 missing scope: operator.admin.x-openclaw-agent-id: <agentId>vẫn được hỗ trợ như một ghi đè tương thích.x-openclaw-session-key: <sessionKey>điều khiển định tuyến phiên một cách rõ ràng. Giá trị không được dùng các namespace phiên nội bộ dành riêng nhưsubagent:,cron:, hoặcacp:; các yêu cầu đó bị từ chối với400 invalid_request_error.x-openclaw-message-channel: <channel>đặt ngữ cảnh kênh ingress tổng hợp cho các prompt và chính sách nhận biết kênh.
model: "openclaw:<agentId>"model: "agent:<agentId>"
Bật điểm cuối
Đặtgateway.http.endpoints.chatCompletions.enabled thành true:
Tắt điểm cuối
Đặtgateway.http.endpoints.chatCompletions.enabled thành false:
Hành vi phiên
Theo mặc định, điểm cuối là không trạng thái theo từng yêu cầu (một khóa phiên mới được tạo cho mỗi lệnh gọi). Nếu yêu cầu bao gồm chuỗi OpenAIuser, Gateway dẫn xuất một khóa phiên ổn định từ chuỗi đó, để các lệnh gọi lặp lại có thể dùng chung một phiên tác nhân.
Với ứng dụng tùy chỉnh, mặc định an toàn nhất là dùng lại cùng giá trị user cho mỗi luồng hội thoại. Tránh định danh cấp tài khoản trừ khi bạn rõ ràng muốn nhiều cuộc hội thoại hoặc thiết bị dùng chung một phiên OpenClaw. Chỉ dùng x-openclaw-session-key khi bạn cần điều khiển định tuyến rõ ràng trên nhiều client hoặc luồng, và chọn các khóa do ứng dụng sở hữu không bắt đầu bằng namespace nội bộ dành riêng như subagent:, cron:, hoặc acp:.
Vì sao bề mặt này quan trọng
Đây là tập tương thích có đòn bẩy cao nhất cho frontend và công cụ tự lưu trữ:- Hầu hết thiết lập Open WebUI, LobeChat và LibreChat mong đợi
/v1/models. - Nhiều hệ thống RAG mong đợi
/v1/embeddings. - Các client chat OpenAI hiện có thường có thể bắt đầu với
/v1/chat/completions. - Các client thiên về tác nhân hơn ngày càng ưu tiên
/v1/responses.
Danh sách mô hình và định tuyến tác nhân
`/v1/models` trả về gì?
`/v1/models` trả về gì?
Một danh sách đích tác nhân OpenClaw.Các id được trả về là các mục
openclaw, openclaw/default, và openclaw/<agentId>.
Dùng chúng trực tiếp làm giá trị OpenAI model.`/v1/models` liệt kê tác nhân hay tác nhân con?
`/v1/models` liệt kê tác nhân hay tác nhân con?
Nó liệt kê các đích tác nhân cấp cao nhất, không phải mô hình provider backend và không phải tác nhân con.Tác nhân con vẫn là topo thực thi nội bộ. Chúng không xuất hiện như các pseudo-model.
Vì sao có `openclaw/default`?
Vì sao có `openclaw/default`?
openclaw/default là bí danh ổn định cho tác nhân mặc định đã cấu hình.Điều đó có nghĩa là client có thể tiếp tục dùng một id dự đoán được ngay cả khi id tác nhân mặc định thực tế thay đổi giữa các môi trường.Làm cách nào để ghi đè mô hình backend?
Làm cách nào để ghi đè mô hình backend?
Dùng
x-openclaw-model. Đây là ghi đè cấp chủ sở hữu: nó hoạt động với đường dẫn token/mật khẩu bearer dùng bí mật dùng chung của Gateway, và yêu cầu operator.admin trên các đường dẫn HTTP mang danh tính như xác thực proxy đáng tin cậy.Ví dụ:
x-openclaw-model: openai/gpt-5.4
x-openclaw-model: gpt-5.5Nếu bạn bỏ qua nó, tác nhân được chọn chạy với lựa chọn mô hình đã cấu hình bình thường của nó.Embeddings phù hợp với hợp đồng này như thế nào?
Embeddings phù hợp với hợp đồng này như thế nào?
/v1/embeddings dùng cùng các id model đích tác nhân.Dùng model: "openclaw/default" hoặc model: "openclaw/<agentId>".
Khi cần một mô hình embedding cụ thể, hãy gửi nó trong x-openclaw-model từ caller dùng bí mật dùng chung hoặc caller mang danh tính có operator.admin.
Không có header đó, yêu cầu được chuyển tiếp tới thiết lập embedding bình thường của tác nhân đã chọn.Streaming (SSE)
Đặtstream: true để nhận Server-Sent Events (SSE):
Content-Type: text/event-stream- Mỗi dòng sự kiện là
data: <json> - Luồng kết thúc bằng
data: [DONE]
Hợp đồng công cụ chat
/v1/chat/completions hỗ trợ một tập con function-tool tương thích với các client OpenAI Chat phổ biến.
Các trường yêu cầu được hỗ trợ
tools: mảng{ "type": "function", "function": { ... } }tool_choice:"auto","none","required", hoặc{ "type": "function", "function": { "name": "..." } }- các lượt theo sau
messages[*].role: "tool" messages[*].tool_call_idđể liên kết kết quả công cụ trở lại một lệnh gọi công cụ trước đómax_completion_tokens: số; giới hạn theo mỗi lệnh gọi cho tổng token hoàn tất (bao gồm token suy luận). Tên trường OpenAI Chat Completions hiện tại; được ưu tiên khi cảmax_completion_tokensvàmax_tokensđược gửi.max_tokens: số; bí danh cũ được chấp nhận để tương thích ngược. Bị bỏ qua khimax_completion_tokenscũng có mặt.temperature: số; nhiệt độ lấy mẫu theo best-effort được chuyển tiếp tới provider upstream qua kênh stream-param của tác nhân.top_p: số; lấy mẫu nucleus theo best-effort được chuyển tiếp tới provider upstream qua kênh stream-param của tác nhân.frequency_penalty: số; penalty tần suất theo best-effort được chuyển tiếp tới provider upstream qua kênh stream-param của tác nhân. Khoảng hợp lệ: -2.0 đến 2.0. Trả về400 invalid_request_errorcho giá trị ngoài khoảng.presence_penalty: số; penalty hiện diện theo best-effort được chuyển tiếp tới provider upstream qua kênh stream-param của tác nhân. Khoảng hợp lệ: -2.0 đến 2.0. Trả về400 invalid_request_errorcho giá trị ngoài khoảng.seed: số (số nguyên); seed theo best-effort được chuyển tiếp tới provider upstream qua kênh stream-param của tác nhân. Trả về400 invalid_request_errorcho giá trị không phải số nguyên.stop: chuỗi hoặc mảng tối đa 4 chuỗi; chuỗi dừng theo best-effort được chuyển tiếp tới provider upstream qua kênh stream-param của tác nhân. Trả về400 invalid_request_errornếu có hơn 4 chuỗi hoặc mục không phải chuỗi/rỗng.
max_completion_tokens cho các endpoint họ OpenAI, và max_tokens cho các nhà cung cấp chỉ chấp nhận tên kế thừa (chẳng hạn như Mistral và Chutes). Các trường sampling (temperature, top_p, frequency_penalty, presence_penalty, seed) đi theo cùng kênh stream-param; backend Codex Responses dựa trên ChatGPT sẽ loại bỏ chúng ở phía máy chủ vì backend này dùng sampling cố định. stop cũng đi qua kênh stream-param và ánh xạ tới trường stop của transport (stop cho các backend Chat Completions, stop_sequences cho Anthropic); API OpenAI Responses không có tham số stop, vì vậy stop không được áp dụng trên các model dùng backend Responses.
Các biến thể không được hỗ trợ
Endpoint trả về400 invalid_request_error cho các biến thể công cụ không được hỗ trợ, bao gồm:
toolskhông phải mảng- các mục công cụ không phải function
- thiếu
tool.function.name - các biến thể
tool_choicenhưallowed_toolsvàcustom - các giá trị
tool_choice.function.namekhông khớp vớitoolsđược cung cấp
tool_choice: "required" và tool_choice được ghim theo function, endpoint thu hẹp tập function-tool của client được hiển thị, hướng dẫn runtime gọi một công cụ client trước khi phản hồi, và trả về lỗi nếu phản hồi của tác tử không bao gồm lệnh gọi client-tool có cấu trúc khớp. Hợp đồng này áp dụng cho danh sách HTTP tools do bên gọi cung cấp, không phải mọi công cụ tác tử nội bộ của OpenClaw.
Hình dạng phản hồi công cụ không streaming
Khi tác tử quyết định gọi công cụ, phản hồi dùng:- các mục
choices[0].finish_reason = "tool_calls" choices[0].message.tool_calls[]với:idtype: "function"function.namefunction.arguments(chuỗi JSON)
choices[0].message.content (có thể trống).
Hình dạng phản hồi công cụ streaming
Khistream: true, các lệnh gọi công cụ được phát ra dưới dạng các chunk SSE tăng dần:
- delta vai trò assistant ban đầu
- các delta bình luận assistant tùy chọn
- một hoặc nhiều chunk
delta.tool_callsmang danh tính công cụ và các mảnh đối số - chunk cuối cùng với
finish_reason: "tool_calls" data: [DONE]
stream_options.include_usage=true, một chunk usage ở cuối sẽ được phát ra trước [DONE].
Vòng lặp theo dõi công cụ
Sau khi nhậntool_calls, client nên thực thi function được yêu cầu và gửi một yêu cầu tiếp theo bao gồm:
- tin nhắn gọi công cụ trước đó của assistant
- một hoặc nhiều tin nhắn
role: "tool"vớitool_call_idkhớp
Thiết lập nhanh Open WebUI
Đối với kết nối Open WebUI cơ bản:- URL cơ sở:
http://127.0.0.1:18789/v1 - URL cơ sở Docker trên macOS:
http://host.docker.internal:18789/v1 - Khóa API: token bearer Gateway của bạn
- Model:
openclaw/default
GET /v1/modelsnên liệt kêopenclaw/default- Open WebUI nên dùng
openclaw/defaultlàm id model chat - Nếu bạn muốn một nhà cung cấp/model backend cụ thể cho tác tử đó, hãy đặt model mặc định thông thường của tác tử hoặc gửi
x-openclaw-modeltừ bên gọi dùng shared-secret hoặc bên gọi có danh tính vớioperator.admin
openclaw/default, hầu hết thiết lập Open WebUI có thể kết nối bằng cùng URL cơ sở và token.
Ví dụ
Phiên ổn định cho một cuộc hội thoại ứng dụng:user trong các lệnh gọi sau cho cuộc hội thoại đó để tiếp tục cùng phiên tác tử.
Không streaming:
/v1/modelstrả về các mục tiêu tác tử OpenClaw, không phải catalog nhà cung cấp thô.openclaw/defaultluôn hiện diện để một id ổn định hoạt động trên nhiều môi trường.- Các ghi đè nhà cung cấp/model backend thuộc về
x-openclaw-model, không phải trường OpenAImodel. Trên các đường dẫn xác thực HTTP có danh tính, header này yêu cầuoperator.admin. /v1/embeddingshỗ trợinputlà chuỗi hoặc mảng chuỗi.