Files
ModelRouter/docs/adapters.md
JianFeeeee f7e926ccb7 docs: README 拆分为主题文档 + 中性化竞品表述
README 从 642 行降到 131 行,只保留简介、核心能力、最小快速开始、文档索引、
改名说明、目录结构与测试入口。其余内容迁到 docs/,中英文索引一一对应:

  docs/features.md       实现与完整特性清单(原 README 的"实现/特性")
  docs/configuration.md  配置文件、自动探测模型、多密钥与配额
  docs/routing.md        模型路由、AUTO 链、冷却与半冷却、源/适配器、源模板
  docs/performance.md    实测内存占用与调优、thinking 预算
  docs/webui.md          WebUI 使用
  docs/adapters.md       Lua 适配器协议与内置适配器清单
  docs/gui.md            桌面端 Headless/Desktop 两种产物与构建
  docs/development.md    目录职责、开发协作、测试
  docs/deployment.md     部署、发行包、目录权限、llmsproxy 迁移与验证清单

中性化:README / README_EN / GUI 注释里的 `Clash Verge` 类比全部改为
「桌面壳 / desktop shell」,仓库内(源码与文档)已无该表述。
2026-10-26 22:28:24 +08:00

2.7 KiB
Raw Permalink Blame History

适配器协议

本文档由 README 拆分而来:Lua 适配器协议与内置适配器清单。 编写适配器的完整参考见 lua-adapters.md。 返回 README。

Lua 适配器协议

完整 API 见 Lua 适配器 API 文档(English)。

每个适配器是一个返回 table 的 Lua 脚本(internal/lua/adapters/<name>.lua), 加载时可被 adapter_dir 下的同名脚本覆盖——改 Lua 脚本无需重编译, 重启即生效;通过 WebUI 上传的适配器与在线编辑的源配置则即时生效。

return {
  name = "mysrc",
  version = "1.0.0",
  endpoint = "/chat/completions",        -- 上游路径(可被 source.endpoint 覆盖)
  headers = { ["X-Static"] = "v" },      -- 静态默认请求头(build_headers 缺省时使用)

  -- 请求转换:把 OpenAI 格式 req 转成上游原生格式,返回字符串
  transform_request = function(raw_json) ... end,

  -- 响应转换:把上游原生响应转成统一格式字符串
  --   { content, reasoning_content, finish_reason, token_usage{...}, tool_calls[{...}] }
  transform_response = function(raw_json) ... end,

  -- 流式分块转换:把上游 SSE data 转成 { content, done, ... },返回 "" 则跳过
  transform_stream_chunk = function(raw_chunk) ... end,

  -- [可选] 动态请求头/签名钩子
  -- meta = { url, method, body, api_key, timestamp, source={ name, meta={...} } }
  build_headers = function(meta) return { ["X-App-Sign"] = sign } end,

  -- [可选] 出向序列化(契约 v2):上游不是 OpenAI 协议时接管写给客户端的字节。
  -- 不声明则沿用内核的 OpenAI 兜底;声明即完全取代,内核不再混合字段。
  serialize_response = function(result) return body_str end,
  serialize_open_preamble = function(result) return bytes end,
  serialize_chunk = function(delta) return bytes end,
  serialize_close = function(result) return bytes end,
}

内置信号辅助:hmac_sha256_hex(key, data)、sha256_hex(data)、base64_encode(s)、 tohex(s)、json.encode/decode、log(level, msg)。

内置适配器

openai deepseek anthropic gemini github groq mistral ollama kimicode qwen38 sensenova trae。

anthropic/gemini/ollama 适配器内置多模态转换(image_url → 各自上游格式); 推理开关由中立的 thinking 字段表达,deepseek 适配器把它映射为 thinking.type = "disabled"。

kimicode 是展示 build_headers 的样例:云端校验调用方 app,需要按 meta.app_secret 对时间戳+URL+请求体哈希做 HMAC 签名并附 X-App-Sign 等头。 配好 sources[].meta.{app_id, app_secret, app_agent} 即可。