如何高质量的接入AI - Developer
0X00 Intro
今年年初的时候,写过一篇名为如何高质量地接入AI的文章,现在十个月过去了,经过这一年的探索和总结,现在我已经找到了一个非常适合开发者的 AI 接入方案(至少非常适合我自己),现在打算在这里跟大家做一个简单的分享。
我个人使用这些 LLM 的经历主要是分成三个阶段:
- 最开始是 2023 年,注册了一个 ChatGPT 的账户,就只用 GPT-3.5 这种模型。不过那段时间 LLM 的能力还比较有限,使用量也并不大,很多时候都是以玩的心态在用;
- 后面随着模型能力上升,需求也跟着上升了,索性订阅了 POE,每个月要花掉 $20。不过当时 GPT-o1 和 Claude 3.5 这些模型还是给我工作学习明显提供了帮助的
- POE 的年度订阅过期之后我试图找到一个比 POE 更合适我自己的技术方案,也就是下面将会介绍的这个了
0X01 Struct
当时在探索方案的时候我的需求就是:按量计费、多平台统一、多模型可用、高度定制化、显得高级(满足虚荣心 🤣)。那么最终得到的就是下面这样一个结构。

先来简单介绍一下这个方案的优势:
- 按量计费:因为是用 API 接入的,所以是纯粹的按量计费;
- 多平台统一:Open WebUI 毕竟是 web 应用,并且做了自适应布局,所以在电脑和手机上的使用体验都是不错的;
- 多模型可用:任何 LLM 服务商都提供了 API 接入方式,所以不管是接入国内的 GLM、Deepseek 甚至是前几天开放的小米模型,还是直连 OpenAI 和 Anthropic 都是没问题的;
- 高度定制化:Open WebUI 的定制化程度很高,很适合我们这种所谓的“高级用户”;
0X02 Open WebUI
Open WebUI 是一个用户友好的 WebUI,开源版本可以实现接入多个 API 上游、多用户管理(意味着你可以把你的服务通过独立账号的方式分享给你的亲朋好友们,假设你的 API 用量顶得住的话)。

有关这个项目的简单使用方法就不多说了,大家有两分钟就摸索清楚了。这里提一个自己觉得有用的 tips:首先是分组,它并不是单纯的 Group 功能,更像是创建了一个 Assistant,是可以在分组里写 System Prompts 的,写好之后在这个分组里的每次对话都会默认使用你设置好的 System Prompts 了。比如我有一个 MySQL 的分组,里面设置的 System Prompts 就是下面这样的。如果你多次就一个话题和 AI 展开探讨的话,就可以用这种方式。
你是一名精通 MySQL 的数据库专家。用户是一名中级 MySQL 用户,掌握基本的 CRUD 操作、DDL 语句和基础性能优化知识,现在遇到技术问题向你请教。
## 核心原则
1. **确保准确性**:提供事实正确的信息。当涉及版本特性、存储引擎行为、锁机制细节等不确定时,明确说明不确定性,不要猜测。
2. **专业表达**:
- 使用精确的数据库术语(InnoDB、MVCC、redo log、buffer pool 等)
- 避免生活化比喻和类比
- 假定用户理解基础概念(索引、事务、范式、执行计划等)
3. **程序员思维**:
- 逻辑清晰、结构化组织回答
- 提供可验证的 SQL 语句或配置示例
- 说明性能影响、锁竞争、数据一致性等关键权衡
- 必要时引用官方文档或 EXPLAIN 分析结果
4. **简明原则**:
- 简单查询问题给出简洁 SQL 示例
- 性能或架构问题进行深入分析
- 避免不必要的铺垫或重复问题
## 回答规范
- SQL 优化问题:基于执行计划分析,指出索引使用、扫描方式、join 策略等关键点
- 索引设计:说明覆盖索引、联合索引顺序、索引选择性等考量因素
- 事务与锁:明确隔离级别、锁类型、死锁场景
- 架构设计:讨论分库分表、主从复制、读写分离的适用场景和代价
- 版本差异:明确指出 MySQL 5.7 vs 8.0 等版本间的行为差异
## 避免事项
- 不解释 SELECT、JOIN、INDEX 等基础概念,除非被明确询问
- 不使用"数据库就像仓库..."等类比
- 不添加鼓励性内容
- 不对基本语法提供逐步教学式指导
- 不在已知版本时给出过于宽泛的"取决于版本"回答
如果你打算使用 Open WebUI 的话,有两个设置需要注意,一个是需要给 Nginx 的反向代理设置上 websocket 相关的转发配置;另一个是需要传入两个环境变量(我下面示例配置里的 CHAT_STREAM_RESPONSE_CHUNK_MAX_BUFFER_SIZE 和 REPLACE_IMAGE_URLS_IN_CHAT_RESPONSE),否则在使用类似 nano banana 的模型生图时图片会返不回来。
我自己的 Nginx 反向代理参考配置
server {
listen 80;
server_name <INPUT_YOUR_DOMAIN>;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name ai.just666.com;
ssl_certificate <YOUR_SSL_CONFIG>;
ssl_certificate_key <YOUR_SSL_CONFIG>;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
client_max_body_size 50M;
location / {
proxy_pass http://127.0.0.1:3005;
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_set_header X-Forwarded-Proto $scheme;
# WebSocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off;
proxy_request_buffering off;
proxy_connect_timeout 30s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
}
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
我自己的 docker compose 参考配置,里面的变量写在和 docker-compose.yml 同级的名为 .env 的文件中
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: unless-stopped
ports:
- "3005:8080"
volumes:
- open-webui-data:/app/backend/data
environment:
# 关闭默认的 Ollama 连接(如果不需要本地模型)
- ENABLE_OLLAMA_API=false
- WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY:-your-secret-key-change-this}
- ENABLE_SIGNUP=${ENABLE_SIGNUP:-true}
- DEFAULT_USER_ROLE=${DEFAULT_USER_ROLE:-user}
- AIOHTTP_CLIENT_TIMEOUT=300
- CHAT_STREAM_RESPONSE_CHUNK_MAX_BUFFER_SIZE=10485760
- REPLACE_IMAGE_URLS_IN_CHAT_RESPONSE=true
- TIMEOUT=600
- AIOHTTP_CONNECTOR_LIMIT=100
- AIOHTTP_CONNECTOR_LIMIT_PER_HOST=10
volumes:
open-webui-data:
driver: local
0X03 OpenRouter
现在 WebUI 已经准备好了,只需要简单配置后端 API 就可以开始用了。我目前使用体感下来,其实就只在用两个模型:Claude 4.5 Sonnet 和 GLM 4.6。但是偶尔还是会用到 GPT 系列模型、Grok 系列和 Gemini 系列,所以这里还是更加推荐大家使用 OpenRouter 这个 API “二道贩子”。它应该是目前规模最大,最稳定的“二道贩子”了,而且模型上新也非常非常快,最重要的是 OpenRouter 不会拒绝中国的 Visa 卡付款,OpenRouter 不会拒绝中国的 Visa 卡付款,OpenRouter 不会拒绝中国的 Visa 卡付款!!!
众所周知现在搞 OpenAI、Anthropic 这种开发平台账号是很费劲的,而且一不小心还有封号不退款的风险。相比起来虽然 OpenRouter 会收取 5.5% 的手续费,但胜在快速稳定可靠呀。
另外 Open WebUI 是可以接入多个上游 API 平台的,所以我自己是将 OpenRouter、GLM、Deepseek 都接进去了,想用的时候点一下就能切。
还有非常重要的一点,OpenRouter 中有不少免费模型,比如当前可以看到下面这些模型都是免费的:

⚠️ 使用 OpenRouter 的时候需要非常注意一点:钱。比如你看到最近新出的 GPT-5.2 有点猛,打算去试试看,结果在 Open WebUI 上点开筛选,输入 GPT-5.2 然后随便选了一个就开始用,没准三两下你的余额就被干完了。因为目前 OpenRouter 提供的 3 个名为 GPT-5.2 的分别是 GPT-5.2、GPT-5.2 Chat、GPT-5.2 Pro,而前两者的百万 tokens 输入输出价格分别是 1.75 和 14 美元,Pro 则是 21 和 168 美元。本来你一天高强度用 GPT 5.2 可能花掉两瓶可乐钱,现在可能因为手抖选了 5.2 Pro 就变成了一大箱可乐钱 🤣
解决方案要么就是自己小心点别选错,要么就是在 Open WebUI 的模型设置里直接把所有高价模型都禁用
0X04 Summary
以我目前的使用量,一个月下来 OpenRouter 会扣掉我大概 $10,还是明显比之前用 POE 的时候更省钱了。哪怕是后面涨到每月 $25 我估计也不会换回用 POE 了,因为这套方案的使用体验起码对我来说是明显优于 POE 的。
这里再根据我的经验提供两个 OpenWebUI 的替代品:web 端的 NextChat 和 Linux/Mac/PC 端的 Cherry Studio。





