Skip to content

架构总览

LLM Fence 是一个 Rust 实现的 LLM API 代理。主服务同时承载代理 API、内置管理端、管理 API 和运行配置加载。

启动流程

text
load llm-fence.toml
  -> load LLM_FENCE_SECRET_KEY
  -> connect MongoDB and verify transaction support
  -> ensure indexes
  -> load runtime_configs.active
  -> decrypt runtime secrets
  -> build RuntimeState
  -> mount /api/admin, /v1 and optional admin UI

llm-fence.toml 只保存启动前必须知道的信息。Provider、模型、processor、审计和上游超时等运行配置保存在 MongoDB runtime_configs.active

请求链路

text
Client
  -> Salvo router
  -> RuntimeInjector
  -> AuthMiddleware
  -> Chat Handler
  -> ModelResolver
  -> PreProcessor pipeline
  -> AdapterFactory / LlmAdapter
  -> upstream provider
  -> PostProcessor pipeline
  -> response
  -> Observer pipeline async

如果运行配置尚未初始化,RuntimeInjector 会让代理 API 返回未初始化错误,管理端仍可用于首次配置。

入口层

src/main.rs

  • 读取 llm-fence.toml
  • 支持 --init-mongo-replica-set 初始化开发用单机副本集。
  • 支持 release 构建下通过 --admin-docs 临时开启 OpenAPI / Swagger。
  • 挂载代理 API:/v1/chat/completions/v1/responses/v1/messages/v1/models
  • 根据 server.admin_ui 决定是否在 / 挂载内置管理端前端。

配置层

src/config/mod.rs

  • BootstrapConfig:从 llm-fence.toml 读取启动配置。
  • Config:由启动配置和 MongoDB 运行配置合成的运行时快照。
  • ProviderConfig:使用 supported_formatsauto_convert 控制格式支持与转换。
  • SecretString:避免 secret 在 Debug 输出中泄露。

src/db/runtime_config.rs

  • 读取和替换 runtime_configs.active
  • 使用 MongoDB transaction 将旧配置归档到 runtime_config_revisions
  • 加密 / 解密 Provider 和 processor 中的 secret。
  • 校验 processor 白名单、Provider 字段和审计配置结构。

管理面

src/control_api/

  • /api/admin/* 管理 API。
  • admin_session HttpOnly Cookie 认证。
  • 写请求使用 X-CSRF-Token 防护。
  • OpenAPI 文档由 Salvo oapi 生成,release 默认不挂载。

管理端前端位于 app/,构建产物通过 include_dir 嵌入二进制。

认证层

src/middleware/auth.rs

  • OpenAI 格式:Authorization: Bearer <key>
  • Anthropic 格式:x-api-key: <key>
  • 业务 Key 不保存明文,认证时用当前 LLM_FENCE_SECRET_KEY 计算 HMAC 后查询 api_keys.client_key_hash

路由层

src/router/resolver.rs

根据请求模型名遍历运行配置中的 Provider 和 model,解析出:

  • Provider 配置
  • Model 配置
  • 上游模型名
  • 格式转换决策

适配器层

src/adapter/

文件职责
base.rsLlmAdapter trait
factory.rs按 Provider 类型创建 adapter
format/generic.rs通用请求构造、认证头和 endpoint 处理
provider/newapi.rsNewAPI / OneAPI 兼容上游
provider/deepseek.rsDeepSeek 上游
provider/llm_fence.rsLLM Fence 链式转发

处理器层

src/processor/

处理器阶段功能
client_guardPre客户端类型识别与 Key 白名单校验
model_guardPre模型白名单校验
ip_guardPreIP/CIDR 白名单校验
format_converterPre/Post/StreamOpenAI 与 Anthropic 格式互转
stream_usageStream流式用量处理
request_loggerObserver请求日志写入 MongoDB
auditObserverAI 旁路审计

数据库层

src/db/

文件职责
mongo.rsMongoDB 连接、事务能力检测、副本集初始化
client_key.rs业务 Key 哈希存储、创建、更新、软删除和轮换
runtime_config.rs运行配置、版本归档、secret 加密
request_log.rs请求日志
audit_log.rs审计日志
admin_settings.rs管理后台设置
operation_log.rs管理操作日志

主要依赖

Crate用途
salvo / salvo-oapiHTTP 框架和 OpenAPI
mongodb配置、Key、用户和日志存储
reqwest上游 HTTP 调用
anyllm_translateOpenAI / Anthropic 格式转换
aes-gcmsecret 加密
argon2管理员密码哈希
tracing结构化日志