为什么需要这套流程
海外 AI 工具(OpenAI、Claude、Gemini、Hugging Face 等)在国内直接连接通常不稳定或被阻断。本教程给出从网络层到应用层的完整部署方法论,每步附带可复制命令与配置,兼顾人类阅读和 AI Agent 执行。
1. 网络层:确保基础连通
1.1 方案选择
| 方案 | 适用场景 | 推荐工具 |
|---|---|---|
| HTTP/HTTPS 代理 | CLI、Python、Docker | Clash(Meta)、v2rayA |
| SOCKS5 代理 | 需要 UDP 或全协议转发 | ShadowSocks + redsocks |
| 透明代理(TUN) | 整个操作系统 | Clash Premium(TUN)、sing-box |
| 中转 API | 不需要原站域名 | api2d、OpenCat、Cloudflare Workers |
AI Agent 提示:部署前先确认
curl -v https://api.openai.com是否能通。不通则必须选择代理或中转方案。
1.2 配置系统代理(HTTP/HTTPS)
Clash 配置示例(config.yaml):
port: 7890
socks-port: 7891
allow-lan: true
mode: Rule
log-level: info
proxies:
- name: "my-proxy"
type: ss
server: your-server.com
port: 8388
cipher: aes-256-gcm
password: "your-password"
proxy-groups:
- name: "PROXY"
type: select
proxies: ["my-proxy"]
rules:
- MATCH,PROXY设置终端环境变量(临时):
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export no_proxy=localhost,127.0.0.1,::1,10.0.0.0/8,192.168.0.0/16,*.local永久写入 shell config(~/.bashrc 或 ~/.zshrc):
# 代理开关函数
proxy_on() {
export http_proxy=http://127.0.0.1:7890
export https_proxy=$http_proxy
export no_proxy="localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16,*.local"
echo "Proxy on"
}
proxy_off() {
unset http_proxy https_proxy no_proxy
echo "Proxy off"
}1.3 配置 Docker 代理
Docker 守护进程默认不走系统代理,需要单独配置。
方法一:daemon.json(全局)
// /etc/docker/daemon.json
{
"proxies": {
"default": {
"httpProxy": "http://host.docker.internal:7890",
"httpsProxy": "http://host.docker.internal:7890",
"noProxy": "localhost,127.0.0.1,::1"
}
}
}重启 Docker:sudo systemctl restart docker
方法二:运行容器时指定(适合单个容器)
docker run -e HTTP_PROXY=http://host.docker.internal:7890 \
-e HTTPS_PROXY=http://host.docker.internal:7890 \
-e NO_PROXY=localhost,127.0.0.1 \
your-image注意:
host.docker.internal仅在 Docker Desktop(macOS/Windows)自动支持。Linux 需用--network host或宿主机 IP。
1.4 使用中转 API
如果不想管理代理,可以直接将海外 AI 的 API endpoint 替换为国内可访问的中转地址。
OpenAI 中转示例(python):
import openai
openai.api_base = "https://your-mirror.com/v1"
openai.api_key = "你的中转密钥"Claude 中转示例(anthropic SDK):
import anthropic
client = anthropic.Anthropic(
base_url="https://your-mirror.com",
api_key="你的中转密钥"
)2. API 访问层:配置 SDK 与 CLI
2.1 Python 环境代理配置
安装 Python 包时确保走代理:
pip install openai anthropic --proxy http://127.0.0.1:7890或者全局设置(环境变量方式同 1.2)。
2.2 curl / 命令行请求
带代理的 curl 测试:
curl -x http://127.0.0.1:7890 -s https://api.openai.com/v1/models | head2.3 Node.js / npm 代理
npm config set proxy http://127.0.0.1:7890
npm config set https-proxy http://127.0.0.1:7890
npm config set registry https://registry.npmmirror.com # 可选:国内镜像2.4 使用 proxychains 透明代理
无需修改应用自身配置,通过 LD_PRELOAD 劫持 socket 调用。
安装:sudo apt install proxychains4 或 brew install proxychains-ng
配置 /etc/proxychains4.conf:
strict_chain
proxy_dns
tcp_read_time_out 15000
tcp_connect_time_out 8000
[ProxyList]
# 格式:type host port [user pass]
http 127.0.0.1 7890
socks5 127.0.0.1 7891使用:
proxychains4 curl https://api.openai.com
proxychains4 python your_ai_script.py3. 应用层:部署具体 AI 工具
3.1 部署 ChatGPT-Next-Web(开源前端)
该工具需要访问 OpenAI API。我们在 Docker 中同时运行代理容器。
docker-compose.yml:
version: '3.8'
services:
# 代理容器(使用 v2rayA 或 tinyproxy)
proxy:
image: monokal/tinyproxy:latest
environment:
- TINYPROXY_USERNAME= # 留空则无需认证
- TINYPROXY_PASSWORD=
- TINYPROXY_ALLOW=0.0.0.0/0
ports:
- "8888:8888"
networks:
- ai-net
chatgpt-next-web:
image: yidadaa/chatgpt-next-web:latest
ports:
- "3000:3000"
environment:
- OPENAI_API_KEY=sk-xxx
- OPENAI_BASE_URL=https://api.openai.com # 若用中转则改此
# 通过代理出口
- HTTP_PROXY=http://proxy:8888
- HTTPS_PROXY=http://proxy:8888
- NO_PROXY=localhost,127.0.0.1,10.0.0.0/8
depends_on:
- proxy
networks:
- ai-net
networks:
ai-net:
driver: bridgeAI Agent 注意:使用
depends_on确保代理先启动。如果代理启动慢,增加restart: unless-stopped。
3.2 部署 LobeChat(支持多模型)
LobeChat 支持 OpenAI、Claude、Gemini 等。配置类似,但需要设置多个环境变量。
示例(略去代理容器,复用上面):
lobe-chat:
image: lobehub/lobe-chat:latest
ports:
- "3210:3210"
environment:
- OPENAI_API_KEY=sk-xxx
- OPENAI_PROXY_URL=http://proxy:8888 # 单独支持代理
- ANTHROPIC_API_KEY=sk-ant-xxx
- ANTHROPIC_BASE_URL=https://api.anthropic.com # 或中转
- HTTP_PROXY=http://proxy:8888
- HTTPS_PROXY=http://proxy:8888
- NO_PROXY=localhost,127.0.0.13.3 部署 Claude Code(VS Code 插件)
Claude Code 使用 Anthropic API,VS Code 扩展的网络请求可通过以下方式走代理:
- 在 VS Code 设置中搜索
http.proxy,填入http://127.0.0.1:7890。 - 或者使用系统代理(需开启 Clash TUN 模式让 VS Code 自动走代理,不推荐因可能影响性能)。
- 命令行启动 VS Code 时指定代理:
code --proxy-server="http://127.0.0.1:7890"3.4 部署 Hugging Face 模型(文本生成、图片生成)
Hugging Face 的模型下载可通过镜像加速。
下载时设置镜像:
export HF_ENDPOINT=https://hf-mirror.com
pip install huggingface_hub
huggingface-cli download --resume-download meta-llama/Llama-2-7b-chat-hf --local-dir ./llama推理时走代理(若需要调用 API 如 inference endpoints):
import requests
proxies = {"http": "http://127.0.0.1:7890", "https": "http://127.0.0.1:7890"}
response = requests.post("https://api-inference.huggingface.co/models/gpt2",
headers={"Authorization": "Bearer hf_xxx"},
json={"inputs": "Hello"},
proxies=proxies)4. 综合部署:一键启动 AI 工具栈
以下 docker-compose 整合了代理、ChatGPT-Next-Web、Claude 代理访问、以及简单的 Ollama(本地模型)示范。
version: '3.8'
networks:
ai-net:
services:
# ---------- 透明代理服务 ----------
nginx-proxy:
image: nginx:alpine
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
ports:
- "80:80" # 用于健康检查
networks:
ai-net:
aliases:
- proxy.local
# ---------- AI 前端 ----------
nextweb:
image: yidadaa/chatgpt-next-web:latest
ports:
- "3000:3000"
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- OPENAI_BASE_URL=${OPENAI_BASE_URL:-https://api.openai.com}
- HTTP_PROXY=http://nginx-proxy:80
- HTTPS_PROXY=http://nginx-proxy:80
- NO_PROXY=localhost,127.0.0.1
depends_on:
- nginx-proxy
networks:
- ai-net
# ---------- Ollama(本地模型,不走代理) ----------
ollama:
image: ollama/ollama:latest
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
environment:
- OLLAMA_HOST=0.0.0.0
networks:
- ai-net
volumes:
ollama_data:nginx 代理配置(nginx.conf):
events {}
http {
server {
listen 80;
location / {
# 转发到上游(需配置实际代理软件,此处仅为示例)
proxy_pass http://clash:7890;
}
}
}实际使用时,将 nginx-proxy 换成真实的代理容器(如 v2rayA、socks5 转 http 的 tinyproxy)。上面仅为示意。
5. 调试与排错
5.1 检查代理是否生效
# 查看出口 IP
curl -x http://127.0.0.1:7890 -s https://httpbin.org/ip
# 应返回代理服务器 IP,而非本地 IP
# 测试 OpenAI 可达性
curl -x http://127.0.0.1:7890 -s -o /dev/null -w "%{http_code}" https://api.openai.com/v1/models5.2 DNS 污染处理
海外域名若解析到错误 IP,可强制使用公共 DNS 或代理的 DNS。
- Clash 中设置
dns.enable: true并配置nameserver为8.8.8.8。 - 或者在
/etc/resolv.conf中加入nameserver 8.8.8.8(注意系统可能覆盖)。 - 使用
proxychains4并启用proxy_dns选项。
5.3 证书问题
若使用自建代理或中转,SSL 错误常见。解决方案:
- 将代理工具(如 Clash)的 CA 证书安装到系统信任列表(参考
~/.config/clash/certificate或官方文档)。 - Python 中临时忽略证书验证(仅调试用):
verify=False,生产禁止。 - 使用
REQUESTS_CA_BUNDLE环境变量指向自定义证书。
export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt5.4 Docker 代理不生效
检查容器内环境变量:
docker exec <容器名> env | grep -i proxy若没有,确认 daemon.json 生效或启动容器时添加了 -e 参数。
6. 最佳实践总结
- 优先使用环境变量代理,可兼容最多程序。
- Docker 部署时统一用代理容器,方便管理和升级。
- 中转 API 做兜底:当自己维护代理不稳定时,直接使用第三方中转 API,降低运维成本。
- 不要将所有流量走代理:国内网站、AI 模型下载等应走直连或镜像,定义好
NO_PROXY和规则。 - 定期检查代理可用性:写一个 cron 脚本定时测试
https://api.openai.com连通性,失败发告警。
按照本教程,你可以从零开始在国内容纳海外 AI 工具的部署,同时保持网络稳定与可控。AI Agent 可直接执行上述命令和配置,人类可理解每步的原理和变量替换点。