跳到主要内容
solidway

切换语言

中文English

主题

SolidwayLLM 网关

Solidway v0.1.0 已以 AGPL-3.0 发布,源码与 Releases 在 GitHub 上。文档正在按发布版本重写:除「快速开始」与「参考」外,其余页面仍在描述计划中的行为。当前权威说明见仓库内的 docs/getting-started.md 与 docs/architecture.md。

保真转发

转发路径保留什么、改了什么,以及请求如何找到路由。

转发路径只做一件事:把字节从客户端搬到上游,再搬回来,不改它们。这一页把两边都写清楚——哪些原样保留, 以及那份很短的例外清单。

原样到达上游的内容

  • 请求体 —— 逐字节保留(下面模型别名的例外除外)。
  • 响应体 —— 逐字节保留(反向的模型别名例外除外)。
  • 提示词前缀 —— 从不改写,所以上游的 prompt cache 仍然有效。
  • 流式帧边界 —— 见流式。

两处必须说清的例外

1. 模型别名。 如果凭据把客户端模型名映射到不同的上游 id,网关会改写请求体的顶层 model, 并把客户端模型名写回响应的顶层 model。请求体其他地方不动;别名与上游 id 相同时,完全不碰请求体。

2. Header 的顺序与大小写不保留。 Header 按值转发,但 HTTP 层用 map 存储:顺序与原始大小写可能被规范化。 依赖原始 Header 字节做签名的上游,不在这条路径的支持范围内。

出站时增加或改变的内容

改变 原因
一个凭据 Header 或签名 向上游账号鉴权
Host 请求是发给上游的,不是发给网关的
丢弃 hop-by-hop Header HTTP/1.1 与 HTTP/2 的要求
路径替换为渲染后的端点 上游路径来自凭据的模板({model}、{action}、project/location 等)

读取但不改写的内容

  • API Key:用于解析路由。
  • 模型名:用于别名映射与选号。
  • 用量计数:用于记账。

为记账而读取不等于改写:转发出去的字节就是收到的字节。

请求如何找到路由

入站只有四个端点,各属于一个协议族:

端点 协议族
POST /v1/chat/completions OpenAI Chat Completions
POST /v1/responses OpenAI Responses
POST /v1/messages Anthropic Messages
POST /v1/messages/count_tokens Anthropic Messages

请求里的 API Key 解析出路由,路径决定协议族。其他路径返回 404;Key 缺失或未知返回 401, 路由被停用返回 403。网关不在协议族之间翻译——请求以什么方言进来,就以什么方言转发。

下一步