<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Windsurf on 逍遥笔记</title><link>https://blog.7qiang.com/tags/windsurf/</link><description>Recent content in Windsurf on 逍遥笔记</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>逍遥笔记</copyright><lastBuildDate>Sun, 19 Apr 2026 14:45:00 +0800</lastBuildDate><atom:link href="https://blog.7qiang.com/tags/windsurf/index.xml" rel="self" type="application/rss+xml"/><item><title>Windsurf 开源反代工具：59 个 AI 模型一站式接入</title><link>https://blog.7qiang.com/posts/windsurf-api-proxy/</link><pubDate>Sun, 19 Apr 2026 14:45:00 +0800</pubDate><guid>https://blog.7qiang.com/posts/windsurf-api-proxy/</guid><description>&lt;img src="https://blog.7qiang.com/blog-cover-cyber-mask.gif" alt="Featured image of post Windsurf 开源反代工具：59 个 AI 模型一站式接入" /&gt;&lt;section class="xiaoyao-contact-card" aria-label="联系逍遥"&gt;
 &lt;img class="xiaoyao-contact-card__qr" src="https://blog.7qiang.com/contact-qr.png" width="690" height="690" loading="lazy" decoding="async" alt="逍遥微信二维码"&gt;
 &lt;div class="xiaoyao-contact-card__content"&gt;
 &lt;h3 class="xiaoyao-contact-card__title"&gt;联系逍遥&lt;/h3&gt;
 &lt;p class="xiaoyao-contact-card__description"&gt;扫码添加微信，或点击下方按钮复制联系方式。&lt;/p&gt;
 &lt;div class="xiaoyao-contact-buttons" data-contact-buttons&gt;
 &lt;button class="xiaoyao-contact-button xiaoyao-contact-button--wechat" type="button" data-copy-contact="plus6566" data-copy-label="微信号"&gt;
 &lt;span class="xiaoyao-contact-button__label"&gt;微信&lt;/span&gt;
 &lt;span class="xiaoyao-contact-button__value"&gt;plus6566&lt;/span&gt;
 &lt;span class="xiaoyao-contact-button__status" data-copy-status&gt;点击复制&lt;/span&gt;
 &lt;/button&gt;
 &lt;button class="xiaoyao-contact-button xiaoyao-contact-button--qq" type="button" data-copy-contact="826215906" data-copy-label="QQ 号"&gt;
 &lt;span class="xiaoyao-contact-button__label"&gt;QQ&lt;/span&gt;
 &lt;span class="xiaoyao-contact-button__value"&gt;826215906&lt;/span&gt;
 &lt;span class="xiaoyao-contact-button__status" data-copy-status&gt;点击复制&lt;/span&gt;
 &lt;/button&gt;
 &lt;span class="xiaoyao-contact-feedback" role="status" aria-live="polite"&gt;&lt;/span&gt;
&lt;/div&gt;

 &lt;/div&gt;
&lt;/section&gt;

&lt;p&gt;进微信群请联系博主，各位觉得文章对你有帮助的话可否打赏一些呀~&lt;/p&gt;
&lt;hr&gt;

 &lt;blockquote&gt;
 &lt;p&gt;一分钟速读：WindsurfAPI 把 Windsurf IDE 的后端 Language Server 独立部署，封装成 OpenAI 兼容接口，支持 59 个大模型调用，自带账号管理和负载均衡。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="项目背景"&gt;项目背景
&lt;/h2&gt;&lt;p&gt;Windsurf 是一款专注于 AI 辅助编程的集成开发环境（之前叫 Codeium），在开发者圈子里口碑不错。它内置的 Language Server 负责与各种大模型通信，让开发者能在 IDE 里直接调用 Claude、GPT 等模型的能力。&lt;/p&gt;
&lt;p&gt;一位 GitHub 开发者（@dwgx）发现，这个 Language Server 其实可以独立运行。于是他做了个有趣的尝试——把它从 IDE 里抽离出来，包装成标准的 OpenAI API 格式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;项目仓库&lt;/strong&gt;：https://github.com/dwgx/WindsurfAPI&lt;/p&gt;
&lt;p&gt;这样一来，你不需要打开 Windsurf 编辑器，也能通过 HTTP 接口调用那些 AI 模型。任何支持 OpenAI 协议的工具或 SDK，改个配置就能接入。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="核心价值"&gt;核心价值
&lt;/h2&gt;&lt;h3 id="1-统一接口多模型切换"&gt;1. 统一接口，多模型切换
&lt;/h3&gt;&lt;p&gt;不同 AI 厂商的 API 格式各不相同，想换个模型用用，得重新研究文档、调整代码。WindsurfAPI 把这些差异都屏蔽了，你只需要改一个参数：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;model: &lt;span class="s2"&gt;&amp;#34;claude-opus-4-7-max&amp;#34;&lt;/span&gt; &lt;span class="c1"&gt;# 切换模型&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;支持的模型阵容：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;厂商&lt;/th&gt;
 &lt;th&gt;可用模型&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Anthropic&lt;/td&gt;
 &lt;td&gt;Claude Opus 4.7 Max、4.6&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;OpenAI&lt;/td&gt;
 &lt;td&gt;GPT-5.4、4o-mini&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Google&lt;/td&gt;
 &lt;td&gt;Gemini 2.5 Flash&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;其他&lt;/td&gt;
 &lt;td&gt;DeepSeek、Grok、通义千问、Kimi 2.5、SWE&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="2-账号池与负载均衡"&gt;2. 账号池与负载均衡
&lt;/h3&gt;&lt;p&gt;单个账号的调用次数有限制，团队协作或高频使用时很容易触顶。WindsurfAPI 允许多个账号组成资源池：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自动在账号间轮换请求&lt;/li&gt;
&lt;li&gt;某个账号额度不足时自动切换&lt;/li&gt;
&lt;li&gt;模型级别的故障不影响其他调用&lt;/li&gt;
&lt;li&gt;实时监控账号状态，提前预警&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;从调用方的角度看，就像有一个「无限额度」的账号在背后支撑。&lt;/p&gt;
&lt;h3 id="3-零外部依赖"&gt;3. 零外部依赖
&lt;/h3&gt;&lt;p&gt;这个项目最让人印象深刻的是代码风格——完全不依赖第三方 npm 包，全部使用 Node.js 原生模块：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP 服务：&lt;code&gt;http&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;文件系统：&lt;code&gt;fs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;路径处理：&lt;code&gt;path&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;环境变量：&lt;code&gt;process.env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;gRPC 通信：内置实现&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在 JavaScript 生态里，这种「洁癖式」的写法相当罕见。好处也很明显：没有供应链攻击风险，部署简单，维护成本低。&lt;/p&gt;
&lt;h3 id="4-web-管理界面"&gt;4. Web 管理界面
&lt;/h3&gt;&lt;p&gt;访问 &lt;code&gt;http://你的服务器:3003/dashboard&lt;/code&gt; 可以打开管理后台：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;账号管理功能&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;添加或删除 Windsurf 账号&lt;/li&gt;
&lt;li&gt;启用/禁用特定账号&lt;/li&gt;
&lt;li&gt;查看各账号的使用统计&lt;/li&gt;
&lt;li&gt;批量导入 Token&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;监控仪表盘&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;实时请求量&lt;/li&gt;
&lt;li&gt;平均响应时间&lt;/li&gt;
&lt;li&gt;错误率变化趋势&lt;/li&gt;
&lt;li&gt;各模型调用占比&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;代理与限流&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;全局 HTTP/SOCKS5 代理配置&lt;/li&gt;
&lt;li&gt;单账号独立代理设置&lt;/li&gt;
&lt;li&gt;模型访问白名单/黑名单&lt;/li&gt;
&lt;li&gt;请求频率限制&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于需要管理多个账号的场景，这个界面能省不少事。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="技术架构"&gt;技术架构
&lt;/h2&gt;&lt;p&gt;系统分为四个层次：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;客户端（OpenAI SDK / curl）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;WindsurfAPI（Node.js 服务，3003 端口）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Language Server（gRPC，42100 端口）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Windsurf 官方后端
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;关键接口 &lt;code&gt;/v1/chat/completions&lt;/code&gt; 和 &lt;code&gt;/v1/models&lt;/code&gt; 都已实现，兼容所有基于 OpenAI API 构建的工具：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OpenAI 官方 SDK（Python、Node.js、Go 等语言）&lt;/li&gt;
&lt;li&gt;LangChain 框架&lt;/li&gt;
&lt;li&gt;LlamaIndex&lt;/li&gt;
&lt;li&gt;其他第三方封装库&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Python 调用示例：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;任意值&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# 实际验证由 WindsurfAPI 处理&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://你的服务器:3003/v1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;claude-opus-4-7-max&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;role&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;user&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;你好&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="部署指南"&gt;部署指南
&lt;/h2&gt;&lt;h3 id="前置条件"&gt;前置条件
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Node.js 20 或更高版本&lt;/li&gt;
&lt;li&gt;至少一个 Windsurf 账号（免费版即可）&lt;/li&gt;
&lt;li&gt;Language Server 可执行文件（需自行提取）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="提取-language-server"&gt;提取 Language Server
&lt;/h4&gt;&lt;p&gt;该文件不包含在项目仓库中，需要从 Windsurf 官方安装包中提取：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 下载安装包&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://downloads.windsurf.com/windsurf-linux.deb
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 解压&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dpkg-deb -x windsurf-linux.deb windsurf-extracted
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 定位文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find windsurf-extracted -name &lt;span class="s2"&gt;&amp;#34;language_server_linux_x64&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="安装流程"&gt;安装流程
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1. 获取项目&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/dwgx/WindsurfAPI.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; WindsurfAPI
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2. 部署 Language Server&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p /opt/windsurf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cp language_server_linux_x64 /opt/windsurf/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod +x /opt/windsurf/language_server_linux_x64
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 3. 准备数据目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p /opt/windsurf/data/db
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 4. 设置环境变量&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &amp;gt; .env &lt;span class="s"&gt;&amp;lt;&amp;lt; &amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;PORT=3003
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;API_KEY=
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;DEFAULT_MODEL=gpt-4o-mini
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;MAX_TOKENS=8192
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;LOG_LEVEL=info
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;LS_BINARY_PATH=/opt/windsurf/language_server_linux_x64
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;LS_PORT=42100
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;DASHBOARD_PASSWORD=你的密码
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 5. 运行服务&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;node src/index.js
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;服务启动后监听 &lt;code&gt;http://0.0.0.0:3003&lt;/code&gt;。&lt;/p&gt;
&lt;h4 id="环境变量参考"&gt;环境变量参考
&lt;/h4&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;变量名&lt;/th&gt;
 &lt;th&gt;说明&lt;/th&gt;
 &lt;th&gt;默认值&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;PORT&lt;/td&gt;
 &lt;td&gt;HTTP 服务端口&lt;/td&gt;
 &lt;td&gt;3003&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;API_KEY&lt;/td&gt;
 &lt;td&gt;API 访问密钥（可选）&lt;/td&gt;
 &lt;td&gt;空&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;DEFAULT_MODEL&lt;/td&gt;
 &lt;td&gt;默认使用的模型&lt;/td&gt;
 &lt;td&gt;gpt-4o-mini&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MAX_TOKENS&lt;/td&gt;
 &lt;td&gt;单次请求最大 token 数&lt;/td&gt;
 &lt;td&gt;8192&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LOG_LEVEL&lt;/td&gt;
 &lt;td&gt;日志详细程度&lt;/td&gt;
 &lt;td&gt;info&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LS_BINARY_PATH&lt;/td&gt;
 &lt;td&gt;Language Server 文件路径&lt;/td&gt;
 &lt;td&gt;必填&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LS_PORT&lt;/td&gt;
 &lt;td&gt;Language Server 端口&lt;/td&gt;
 &lt;td&gt;42100&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;DASHBOARD_PASSWORD&lt;/td&gt;
 &lt;td&gt;管理后台登录密码&lt;/td&gt;
 &lt;td&gt;必填&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="进程守护pm2"&gt;进程守护（PM2）
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 安装 PM2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install -g pm2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 启动应用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pm2 start src/index.js --name windsurf-api
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 持久化配置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pm2 save
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 配置开机自启&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pm2 startup
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="重启的正确方式"&gt;重启的正确方式
&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;不要使用 &lt;code&gt;pm2 restart&lt;/code&gt;&lt;/strong&gt;，这会导致 Language Server 进程残留成为僵尸进程。&lt;/p&gt;
&lt;p&gt;推荐做法：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pm2 stop windsurf-api
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pm2 delete windsurf-api
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fuser -k 3003/tcp 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sleep &lt;span class="m"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pm2 start src/index.js --name windsurf-api --cwd /root/WindsurfAPI
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;先完全停止并删除进程，清理端口占用，再重新启动。&lt;/p&gt;
&lt;h3 id="网络配置"&gt;网络配置
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Ubuntu 防火墙&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ufw allow 3003/tcp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# CentOS 防火墙&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;firewall-cmd --add-port&lt;span class="o"&gt;=&lt;/span&gt;3003/tcp --permanent
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;firewall-cmd --reload
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 云服务器：在安全组规则中开放 3003 端口&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="配置-windsurf-账号"&gt;配置 Windsurf 账号
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 单个账号（使用 Token）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -X POST http://localhost:3003/auth/login &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{&amp;#34;token&amp;#34;: &amp;#34;你的 windsurf-token&amp;#34;}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 批量添加&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -X POST http://localhost:3003/auth/login &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{&amp;#34;accounts&amp;#34;: [{&amp;#34;token&amp;#34;: &amp;#34;token1&amp;#34;}, {&amp;#34;token&amp;#34;: &amp;#34;token2&amp;#34;}]}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="获取-token"&gt;获取 Token
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;启动 Windsurf IDE&lt;/li&gt;
&lt;li&gt;进入设置（Settings）&lt;/li&gt;
&lt;li&gt;找到 Account 或 Profile 页面&lt;/li&gt;
&lt;li&gt;复制 Token 字符串&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果找不到 Token 选项，也可以使用账号密码方式登录，但 Token 方式更安全便捷。&lt;/p&gt;
&lt;h3 id="验证部署"&gt;验证部署
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl http://localhost:3003/v1/chat/completions &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;model&amp;#34;: &amp;#34;gpt-4o-mini&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;messages&amp;#34;: [{&amp;#34;role&amp;#34;: &amp;#34;user&amp;#34;, &amp;#34;content&amp;#34;: &amp;#34;你好&amp;#34;}],
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;stream&amp;#34;: false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;收到正常响应即表示部署成功。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="使用须知"&gt;使用须知
&lt;/h2&gt;&lt;h3 id="开源协议"&gt;开源协议
&lt;/h3&gt;&lt;p&gt;项目采用 MIT 许可证，但作者在 README 中附加了额外条款：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;禁止商业用途（除非获得书面授权）&lt;/li&gt;
&lt;li&gt;禁止转售或代部署服务&lt;/li&gt;
&lt;li&gt;个人学习和研究不受限制&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用前请仔细阅读相关条款。&lt;/p&gt;
&lt;h3 id="安全建议"&gt;安全建议
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;管理后台密码必须设置&lt;/strong&gt;：&lt;code&gt;DASHBOARD_PASSWORD&lt;/code&gt; 环境变量不要留空，否则任何人都能访问你的后台并查看账号信息。&lt;/p&gt;
&lt;h3 id="代理支持"&gt;代理支持
&lt;/h3&gt;&lt;p&gt;如果服务器网络需要代理，可以在管理后台配置：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 全局代理配置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -X POST http://localhost:3003/proxy/config &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{&amp;#34;type&amp;#34;: &amp;#34;http&amp;#34;, &amp;#34;host&amp;#34;: &amp;#34;proxy.example.com&amp;#34;, &amp;#34;port&amp;#34;: 8080}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 单账号代理&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -X POST http://localhost:3003/account/1/proxy &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{&amp;#34;type&amp;#34;: &amp;#34;socks5&amp;#34;, &amp;#34;host&amp;#34;: &amp;#34;proxy.example.com&amp;#34;, &amp;#34;port&amp;#34;: 1080}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;支持 HTTP 和 SOCKS5 两种协议，可以全局配置也可以为单个账号单独设置。&lt;/p&gt;
&lt;h3 id="模型访问权限"&gt;模型访问权限
&lt;/h3&gt;&lt;p&gt;Windsurf 对不同订阅等级的账号开放了不同的模型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;免费账号&lt;/strong&gt;：gpt-4o-mini、gemini-2.5-flash 等基础模型&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pro 订阅&lt;/strong&gt;：Claude 系列、GPT-5.4、Kimi 2.5 等高级模型&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;具体可用模型列表可在管理后台查看。&lt;/p&gt;
&lt;h3 id="调用限额"&gt;调用限额
&lt;/h3&gt;&lt;p&gt;Windsurf 对账号实行周限额制度：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;账号类型&lt;/th&gt;
 &lt;th&gt;周调用次数&lt;/th&gt;
 &lt;th&gt;备注&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;免费版&lt;/td&gt;
 &lt;td&gt;约 300 次&lt;/td&gt;
 &lt;td&gt;仅限基础模型&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Pro 版&lt;/td&gt;
 &lt;td&gt;约 2000 次&lt;/td&gt;
 &lt;td&gt;全部模型可用&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;多账号池的设计初衷就是为了解决这个问题。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="结语"&gt;结语
&lt;/h2&gt;&lt;p&gt;开源社区的魅力在于，总有人能发现工具的新用法。&lt;/p&gt;
&lt;p&gt;把 IDE 的后端独立出来变成通用 API 代理，这种思路值得借鉴。如果你对这类项目感兴趣，不妨去 GitHub 上给作者点个 Star。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;项目仓库&lt;/strong&gt;：https://github.com/dwgx/WindsurfAPI&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本文仅做技术分享，请遵守开源协议和相关法律法规。&lt;/p&gt;</description></item></channel></rss>