AI 编程平台扛并发实战:从网关限流到模型网关的完整配置方案
AI编程 高并发解决方案|附配置文件
在 AI 编程应用快速普及的今天,越来越多的企业开始将大模型能力接入到自己的业务系统中,例如智能客服、代码生成、知识库问答、自动化测试、数据分析助手、Agent 工作流平台等。随着用户规模增长,一个非常现实的问题会迅速暴露出来:高并发访问下,AI 服务如何稳定、低延迟、可扩展地运行?
和传统 Web 系统相比,AI 编程类应用的并发挑战更加复杂。普通接口可能几十毫秒即可返回,而一次大模型调用往往需要数秒甚至数十秒;普通接口主要消耗 CPU、内存和数据库连接,而 AI 应用还会受到 GPU、模型上下文长度、Token 生成速度、第三方模型 API 限流、向量数据库检索性能等多方面影响。因此,设计 AI 编程系统时,不能只考虑“功能能跑”,还必须从一开始就考虑并发架构、限流策略、异步处理、缓存机制、服务拆分和可观测性。
本文将围绕 AI 编程场景,系统讲解一套可落地的高并发解决方案,并附带常用配置文件示例,帮助你从架构层面提升 AI 应用的稳定性和吞吐能力。
一、AI 编程系统为什么容易遇到高并发瓶颈?
AI 编程系统通常包含以下几个核心模块:
-
前端交互层
用户通过 Web、IDE 插件、企业微信、飞书、钉钉等入口提交问题或代码任务。 -
网关层
负责统一鉴权、限流、日志、灰度发布、路由转发。 -
业务服务层
处理用户会话、项目上下文、权限校验、Prompt 组装、任务调度等逻辑。 -
模型调用层
调用 OpenAI、Claude、通义千问、DeepSeek、智谱、文心一言,或者企业内部私有化部署的大模型。 -
向量检索层
对代码库、文档、知识库进行 Embedding、检索和召回。 -
缓存与消息队列层
负责结果缓存、任务削峰、异步处理。 -
数据库与对象存储层
保存用户、会话、代码片段、生成结果、日志和文件。
在并发量较小时,这些模块可能看不出明显问题。但当同时在线用户达到几百、几千甚至更多时,系统会开始出现以下典型瓶颈:
- 模型接口响应慢,导致请求线程长时间占用;
- 上游用户请求过多,超过第三方模型 API 限额;
- 数据库连接池耗尽;
- Redis 热点 Key 访问压力过大;
- 向量数据库检索延迟增加;
- Web 服务内存持续上涨;
- 长连接 SSE/WebSocket 数量过多;
- 日志量暴增,影响磁盘 IO;
- 缺乏降级机制,局部故障引发整体雪崩。
因此,高并发 AI 编程系统的核心目标不是单纯“提高机器配置”,而是要通过合理架构实现:
削峰填谷、快速失败、异步解耦、分层限流、弹性扩容、故障隔离、持续观测。
二、高并发 AI 编程系统整体架构
推荐的整体架构如下:
用户端
│
▼
CDN / WAF
│
▼
Nginx / API Gateway
│
├── 限流
├── 鉴权
├── 路由
└── 日志
│
▼
业务服务集群 Spring Boot / Node.js / Go
│
├── 会话管理
├── Prompt 编排
├── 上下文压缩
├── 权限校验
└── 任务分发
│
├──────────────► Redis 缓存
│
├──────────────► MySQL / PostgreSQL
│
├──────────────► Kafka / RabbitMQ
│
├──────────────► 向量数据库 Milvus / Qdrant / Elasticsearch
│
▼
模型调用服务 Model Gateway
│
├── 多模型路由
├── 熔断降级
├── Token 预算控制
├── 重试策略
└── 调用审计
│
▼
LLM API / 私有化大模型推理服务
这套架构的关键在于:不要让用户请求直接打到模型接口上。业务服务和模型之间应该有一个独立的 Model Gateway,用于统一管理模型调用、限流、重试、熔断、成本统计和多模型切换。
三、核心方案一:网关层限流,挡住无效流量
高并发系统第一道防线一定是网关层。它的作用不是处理所有业务细节,而是在流量入口处完成基础治理。
常见策略包括:
- 根据 IP 限流;
- 根据用户 ID 限流;
- 根据接口路径限流;
- 根据租户套餐限流;
- 根据请求 Token 数限流;
- 根据模型类型限流;
- 对异常请求快速拒绝。
例如,一个免费用户每分钟只能发起 10 次 AI 生成请求,付费用户每分钟 100 次,企业用户则根据独立配额控制。
Nginx 限流配置示例
worker_processes auto;
events {
worker_connections 40960;
multi_accept on;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
client_max_body_size 20m;
# 根据 IP 进行限流,每个 IP 每秒最多 10 个请求
limit_req_zone $binary_remote_addr zone=api_limit:20m rate=10r/s;
# 限制并发连接数
limit_conn_zone $binary_remote_addr zone=conn_limit:20m;
upstream ai_backend {
least_conn;
server 10.0.0.11:8080 max_fails=3 fail_timeout=30s;
server 10.0.0.12:8080 max_fails=3 fail_timeout=30s;
server 10.0.0.13:8080 max_fails=3 fail_timeout=30s;
keepalive 256;
}
server {
listen 80;
server_name ai.example.com;
location /api/ {
limit_req zone=api_limit burst=30 nodelay;
limit_conn conn_limit 50;
proxy_pass http://ai_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 5s;
proxy_send_timeout 60s;
proxy_read_timeout 300s;
}
location /health {
access_log off;
return 200 "ok";
}
}
}
这里需要注意:AI 生成类接口通常是长耗时请求,因此 proxy_read_timeout 不能设置得过短。如果使用 SSE 流式输出,还要避免被代理层提前断开连接。
四、核心方案二:业务服务无状态化,支持水平扩容
高并发系统要想扩容方便,业务服务必须尽量无状态。所谓无状态,并不是系统没有状态,而是状态不要保存在单个应用实例内存中。
例如:
- 用户登录状态存入 Redis 或 JWT;
- 会话历史存入数据库或对象存储;
- 任务状态存入 Redis / MySQL;
- 文件上传存入 OSS / MinIO;
- 模型调用结果可缓存到 Redis;
- 分布式锁使用 Redis 或 ZooKeeper。
这样做的好处是,任何一个业务服务实例宕机,都不会影响用户状态;同时可以通过 Kubernetes、Docker Compose 或云服务器弹性扩容业务实例。
Spring Boot 线程池配置示例
AI 应用中,如果所有请求都使用默认 Tomcat 线程池,很容易出现线程被模型调用长时间占用的问题。因此建议将模型调用、向量检索、文件解析等耗时任务拆到独立线程池。
server:
port: 8080
tomcat:
threads:
max: 500
min-spare: 50
accept-count: 1000
connection-timeout: 5000
spring:
application:
name: ai-code-service
datasource:
url: jdbc:mysql://mysql:3306/ai_code?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: ai_user
password: your_password
hikari:
maximum-pool-size: 80
minimum-idle: 10
connection-timeout: 3000
idle-timeout: 300000
max-lifetime: 1800000
data:
redis:
host: redis
port: 6379
password: your_redis_password
timeout: 3000ms
lettuce:
pool:
max-active: 200
max-idle: 50
min-idle: 10
max-wait: 1000ms
ai:
thread-pool:
model-call:
core-size: 100
max-size: 300
queue-capacity: 2000
keep-alive-seconds: 60
vector-search:
core-size: 50
max-size: 150
queue-capacity: 1000
keep-alive-seconds: 60
model:
default-provider: deepseek
timeout-ms: 60000
max-retry: 2
max-input-tokens: 12000
max-output-tokens: 4000
线程池的设置不要盲目追求越大越好。线程太多会导致上下文切换严重,最终反而降低吞吐。实际生产中应结合 CPU 核数、模型接口耗时、数据库连接数、Redis 连接数和机器内存综合压测。
五、核心方案三:引入消息队列,实现削峰填谷
AI 编程系统中,不是所有请求都必须同步返回。例如:
- 扫描整个代码仓库;
- 生成大型项目文档;
- 批量代码审查;
- 自动生成单元测试;
- 大文件解析和向量化;
- 多 Agent 协作任务;
- CI/CD 中的 AI 质量分析。
这些任务耗时长、资源消耗大,如果全部同步处理,系统很快会被拖垮。正确做法是把它们放入消息队列,由后台 Worker 慢慢消费。
RabbitMQ 配置示例
spring:
rabbitmq:
host: rabbitmq
port: 5672
username: ai_user
password: ai_password
virtual-host: /ai
listener:
simple:
concurrency: 10
max-concurrency: 50
prefetch: 5
retry:
enabled: true
initial-interval: 1000
max-attempts: 3
multiplier: 2
队列设计建议
ai.code.review.queue # 代码审查任务
ai.code.test.queue # 单元测试生成任务
ai.doc.generate.queue # 文档生成任务
ai.embedding.queue # 向量化任务
ai.agent.workflow.queue # Agent 工作流任务
ai.dead.letter.queue # 死信队列
任务进入队列后,接口可以立即返回任务 ID,前端通过轮询、SSE 或 WebSocket 获取任务进度。这样可以显著降低同步接口压力,也能避免用户长时间等待导致连接断开。
六、核心方案四:模型调用网关,统一管理大模型资源
在 AI 编程系统中,模型调用是最昂贵、最不稳定、最需要治理的部分。建议单独建设 Model Gateway,负责以下能力:
-
多模型适配
统一封装 OpenAI、DeepSeek、Claude、通义、智谱以及本地模型接口。 -
动态路由
根据任务类型选择模型。例如简单代码解释使用便宜模型,复杂架构分析使用高能力模型。 -
限流和配额
按用户、租户、模型、Token 数进行控制。 -
熔断降级
某个模型服务异常时,自动切换到备用模型。 -
重试机制
对网络抖动、临时 429、502、503 做有限重试。 -
Token 预算控制
防止用户一次性提交超大上下文,造成成本失控。 -
日志审计
记录模型调用耗时、Token 消耗、错误码、用户来源。
Model Gateway 配置示例
model-gateway:
default-timeout-ms: 60000
enable-fallback: true
providers:
deepseek:
base-url: https://api.deepseek.com
api-key: ${DEEPSEEK_API_KEY}
connect-timeout-ms: 3000
read-timeout-ms: 60000
qps-limit: 100
max-concurrent: 300
retry:
max-attempts: 2
backoff-ms: 1000
openai:
base-url: https://api.openai.com
api-key: ${OPENAI_API_KEY}
connect-timeout-ms: 3000
read-timeout-ms: 60000
qps-limit: 80
max-concurrent: 200
retry:
max-attempts: 2
backoff-ms: 1500
local-qwen:
base-url: http://qwen-inference:8000
api-key: local
connect-timeout-ms: 2000
read-timeout-ms: 120000
qps-limit: 50
max-concurrent: 100
retry:
max-attempts: 1
backoff-ms: 500
routing:
rules:
- scene: code_completion
primary: deepseek
fallback: local-qwen
- scene: code_review
primary: openai
fallback: deepseek
- scene: document_summary
primary: local-qwen
fallback: deepseek
- scene: unit_test_generation
primary: deepseek
fallback: openai
通过模型网关,可以避免业务服务中到处散落模型调用逻辑。后续如果要新增模型、调整限流、修改重试策略,也不需要改动大量业务代码。
七、核心方案五:缓存热点结果,降低重复调用成本
很多 AI 编程场景并不需要每次都重新调用大模型。例如:
- 常见报错解释;
- 常见代码片段说明;
- 重复的 SQL 优化建议;
- 固定版本框架的 API 用法;
- 标准化代码规范检查;
- 相同 Prompt 和上下文下的生成结果。
可以将 Prompt、模型参数和上下文摘要做哈希,作为缓存 Key。如果命中缓存,直接返回结果,避免重复调用模型。
Redis 缓存 Key 设计
ai:response:{model}:{prompt_hash}
ai:quota:user:{user_id}:{yyyyMMdd}
ai:quota:tenant:{tenant_id}:{yyyyMMdd}
ai:session:{session_id}
ai:task:{task_id}
ai:lock:embedding:{file_hash}
Redis 配置示例
bind 0.0.0.0
port 6379
requirepass your_redis_password
maxmemory 8gb
maxmemory-policy allkeys-lru
appendonly yes
appendfsync everysec
tcp-keepalive 300
timeout 0
databases 16
save 900 1
save 300 10
save 60 10000
缓存需要注意两个问题:
第一,不能缓存包含敏感信息的结果,或者必须做好租户隔离。
第二,缓存不能影响结果准确性。如果任务依赖实时上下文,例如最新代码仓库内容,就必须将代码版本号、Commit ID 或文件 Hash 纳入缓存 Key。
八、核心方案六:向量检索优化,避免 RAG 成为瓶颈
AI 编程系统经常需要基于代码库进行问答,例如“这个函数在哪里被调用”“帮我解释这个模块设计”“根据当前项目生成接口文档”等。这类能力通常依赖 RAG,即检索增强生成。
但在高并发下,向量数据库也可能成为瓶颈。优化方向包括:
- 文档切分要合理,避免 Chunk 过大或过小;
- Embedding 任务异步化,不要在用户请求时临时向量化整个文件;
- 对高频知识库进行预热;
- 检索结果数量 TopK 不宜过大;
- 增加关键词检索和向量检索混合召回;
- 对同一个代码版本的检索结果做短期缓存;
- 大型代码库按模块、语言、目录建立索引。
RAG 检索配置示例
rag:
embedding:
provider: local
model: bge-large-zh
batch-size: 64
timeout-ms: 30000
queue-name: ai.embedding.queue
chunk:
max-tokens: 800
overlap-tokens: 120
split-by:
- function
- class
- markdown-title
- paragraph
retrieval:
top-k: 8
score-threshold: 0.72
hybrid-search: true
keyword-weight: 0.35
vector-weight: 0.65
cache-ttl-seconds: 600
rerank:
enabled: true
model: bge-reranker-large
top-n: 5
在代码场景中,切分策略非常关键。普通文本可以按段落切分,但代码最好按函数、类、接口、文件结构切分,否则检索出来的内容容易缺少上下文,导致模型生成错误答案。
九、核心方案七:SSE 流式输出,降低用户感知延迟
AI 生成任务通常耗时较长。如果用户点击按钮后等待 20 秒才看到结果,体验会非常差。更好的方式是使用 SSE 或 WebSocket 进行流式输出。
SSE 的好处是实现简单、兼容 HTTP、适合服务端持续推送文本流。在 AI 编程场景中,模型生成的 Token 可以边生成边返回给前端。
Nginx SSE 配置注意事项
location /api/ai/stream {
proxy_pass http://ai_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering off;
proxy_cache off;
proxy_connect_timeout 5s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
chunked_transfer_encoding on;
}
流式输出并不能减少模型真实计算时间,但可以显著降低用户感知等待时间。同时,前端可以支持“停止生成”,后端收到取消信号后及时中断模型调用,避免无意义的 Token 消耗。
十、核心方案八:熔断、降级与快速失败
高并发系统最怕的问题不是单点失败,而是故障扩散。例如模型接口变慢后,业务服务线程被大量占满,数据库连接也被拖住,最终整个系统不可用。
因此必须引入熔断降级策略:
- 模型调用超时立即失败;
- 超过并发阈值直接拒绝;
- 第三方模型 429 时降级到备用模型;
- 向量数据库异常时仅使用关键词检索;
- 生成失败时返回模板化建议;
- 免费用户在高峰期降低输出长度;
- 非核心任务进入延迟队列。
Resilience4j 配置示例
resilience4j:
circuitbreaker:
instances:
modelService:
sliding-window-type: COUNT_BASED
sliding-window-size: 100
failure-rate-threshold: 50
slow-call-rate-threshold: 60
slow-call-duration-threshold: 10s
wait-duration-in-open-state: 30s
permitted-number-of-calls-in-half-open-state: 10
timelimiter:
instances:
modelService:
timeout-duration: 60s
cancel-running-future: true
bulkhead:
instances:
modelService:
max-concurrent-calls: 300
max-wait-duration: 100ms
retry:
instances:
modelService:
max-attempts: 2
wait-duration: 1s
retry-exceptions:
- java.io.IOException
- java.net.SocketTimeoutException
需要强调的是,重试并不是越多越好。在高并发场景下,大量重试可能会放大流量,形成“重试风暴”。因此重试必须配合限流、退避和熔断一起使用。
十一、核心方案九:数据库连接池与慢查询治理
AI 编程系统虽然核心是模型能力,但数据库仍然非常重要。会话、任务、用户、权限、账单、调用日志都需要数据库支持。
高并发下数据库常见问题包括:
- 连接池设置不合理;
- 缺少索引;
- 大字段直接存 MySQL;
- 调用日志写入过于频繁;
- 任务表状态轮询压力大;
- 会话历史无限增长;
- 分页查询没有使用游标或时间范围。
建议:
- 大文本结果存对象存储,数据库只存 URL;
- 调用日志异步写入;
- 会话历史定期归档;
- 高频状态存 Redis;
- 任务表按时间分区;
- 核心查询字段建立组合索引;
- 读多写少场景使用只读副本。
MySQL 连接池建议
spring:
datasource:
hikari:
maximum-pool-size: 80
minimum-idle: 10
connection-timeout: 3000
validation-timeout: 1000
idle-timeout: 300000
max-lifetime: 1800000
连接池不是越大越好。如果应用实例很多,每个实例都配置 100 个连接,很容易把 MySQL 最大连接数打满。应该根据数据库最大连接数、服务实例数量、读写比例合理分配。
十二、核心方案十:Kubernetes 弹性伸缩部署
当业务服务无状态化后,就可以使用 Kubernetes 进行弹性伸缩。根据 CPU、内存、QPS、队列长度等指标自动扩容,可以有效应对高峰流量。
Deployment 配置示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: ai-code-service
namespace: ai-prod
spec:
replicas: 4
selector:
matchLabels:
app: ai-code-service
template:
metadata:
labels:
app: ai-code-service
spec:
containers:
- name: ai-code-service
image: registry.example.com/ai/ai-code-service:1.0.0
ports:
- containerPort: 8080
env:
- name: JAVA_OPTS
value: "-Xms2g -Xmx2g -XX:+UseG1GC"
- name: DEEPSEEK_API_KEY
valueFrom:
secretKeyRef:
name: ai-secrets
key: deepseek-api-key
resources:
requests:
cpu: "1"
memory: "3Gi"
limits:
cpu: "2"
memory: "4Gi"
readinessProbe:
httpGet:
path: /actuator/health/readiness
port: 8080
initialDelaySeconds: 20
periodSeconds: 10
livenessProbe:
httpGet:
path: /actuator/health/liveness
port: 8080
initialDelaySeconds: 60
periodSeconds: 20
HPA 自动扩容配置
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: ai-code-service-hpa
namespace: ai-prod
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: ai-code-service
minReplicas: 4
maxReplicas: 30
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 65
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 75
对于 AI 系统来说,仅根据 CPU 扩容有时并不准确。更理想的方式是结合自定义指标,例如请求队列长度、模型调用等待时间、SSE 连接数、任务积压数量等。
十三、核心方案十一:可观测性建设
高并发系统上线后,不能只看“服务是否启动”,而要持续观察系统运行质量。建议至少监控以下指标:
1. 接口指标
- QPS;
- P50、P90、P95、P99 延迟;
- 错误率;
- 超时率;
- 限流次数;
- 活跃连接数。
2. 模型指标
- 模型调用次数;
- 平均输入 Token;
- 平均输出 Token;
- Token 总消耗;
- 模型响应耗时;
- 各模型错误码分布;
- 备用模型切换次数。
3. 队列指标
- 消息堆积数;
- 消费速率;
- 死信数量;
- 重试次数;
- 单任务平均耗时。
4. 基础设施指标
- CPU;
- 内存;
- GC;
- 磁盘 IO;
- 网络 IO;
- Redis 命中率;
- MySQL 慢查询;
- 向量库检索延迟。
Prometheus 指标示例
management:
endpoints:
web:
exposure:
include: health,info,prometheus,metrics
metrics:
tags:
application: ai-code-service
endpoint:
prometheus:
enabled: true
可观测性的价值在于提前发现问题。例如 P99 延迟突然升高,可能说明某个模型供应商变慢;Redis 命中率下降,可能说明缓存 Key 设计有问题;队列堆积持续增加,则说明 Worker 数量不足或下游模型处理能力不够。
十四、生产环境参数参考
以下是一套中等规模 AI 编程平台的参考配置,适合日活几万、峰值并发几千的场景。实际配置需要结合压测结果调整。
production-reference:
nginx:
worker-processes: auto
worker-connections: 40960
api-rate-limit: 10r/s/ip
burst: 30
app-service:
replicas: 8
cpu-per-pod: 2
memory-per-pod: 4Gi
tomcat-max-threads: 500
model-thread-pool-max: 300
redis:
memory: 16Gi
maxmemory-policy: allkeys-lru
connection-pool-max-active: 300
mysql:
max-connections: 2000
app-hikari-max-pool-size: 80
slow-query-threshold-ms: 500
rabbitmq:
consumer-concurrency: 30
max-concurrency: 100
prefetch: 5
model-gateway:
max-concurrent: 1000
timeout-ms: 60000
retry-max-attempts: 2
circuit-breaker-failure-rate: 50
rag:
top-k: 8
rerank-top-n: 5
retrieval-cache-ttl: 600
十五、压测与容量评估方法
上线前必须进行压测。AI 编程系统压测不能只压普通接口,还要模拟真实业务场景。
推荐压测场景:
- 普通问答接口;
- 代码解释接口;
- 流式生成接口;
- RAG 检索增强接口;
- 批量代码审查任务;
- 文件上传和向量化任务;
- 模型供应商限流场景;
- 下游模型超时场景;
- Redis 或向量库延迟升高场景。
容量评估可以使用一个简单公式:
系统最大并发 ≈ 平均吞吐能力 × 平均响应时间
例如模型网关每秒稳定处理 100 个请求,平均响应时间为 10 秒,那么系统中同时存在的模型调用请求可能达到 1000 个。此时必须保证业务线程池、连接池、网关连接数、模型并发配额都能承载这个规模。
十六、最佳实践总结
AI 编程高并发解决方案可以总结为以下几点:
-
入口限流
在 Nginx、API Gateway 层限制异常流量,防止系统被瞬时打垮。 -
服务无状态化
将会话、任务、文件、缓存等状态外置,方便横向扩容。 -
异步解耦
长耗时任务进入消息队列,避免阻塞同步接口。 -
模型网关化
所有模型调用统一经过 Model Gateway,便于限流、熔断、路由和审计。 -
缓存优先
对重复 Prompt、检索结果和常见答案做缓存,降低模型成本。 -
RAG 预处理
文件解析、Embedding、索引构建提前完成,不要在用户请求时临时处理。 -
流式响应
使用 SSE 或 WebSocket 提升用户体验,并支持用户主动取消生成。 -
熔断降级
下游模型异常时快速失败或切换备用服务,避免雪崩。 -
资源隔离
普通问答、代码审查、文档生成、向量化任务使用不同线程池和队列。 -
持续观测
用指标、日志、链路追踪掌握系统真实运行情况。
结语
AI 编程应用的高并发问题,本质上不是单一技术点能够解决的,而是一套完整的工程体系。它涉及网关、缓存、数据库、消息队列、模型调用、向量检索、容器部署、监控告警等多个环节。
真正稳定的 AI 系统,必须做到:入口可控、任务可排队、模型可切换、异常可隔离、容量可扩展、问题可观测。只有这样,当用户量快速增长、业务场景持续复杂化时,系统才能保持稳定可靠。
如果你正在搭建 AI 编程平台,建议不要等到流量上来后再补高并发架构,而是在初期设计时就预留扩展能力。先把限流、队列、缓存、模型网关、可观测性这些基础设施搭好,后续无论是接入更多模型,还是支撑更多用户,都会轻松很多。