我的代码到底传到了哪里

wescode · 2026-10-12 · 数据安全 / 隐私 / 痛点

利益声明:本文作者参与了 wescode 的开发。文中涉及 wescode 的技术描述基于内部测试数据;涉及其他工具的描述基于各家公开文档和社区反馈。

你用 AI 编程工具改了一段业务逻辑。AI 帮你改好了。

那段代码——包含你公司的数据库表结构、API 密钥前缀、内部接口命名规范——在这个过程中去了哪里?

大多数人没想过这个问题。因为 AI 编程工具的界面看起来就像本地操作——你在编辑器里对话、在编辑器里看改动——好像什么都没出去。

但其实有。


一个容易被忽略的事实

AI 需要看到你的代码才能帮你改代码。 这不是 bug,是基本原理。

LLM 的工作方式是:你把代码放进 prompt → 模型处理 → 返回建议。这意味着代码必须以某种形式到达运行模型的服务器上。

问题不在于"代码有没有出去"——只要你用云端 AI 模型,代码一定出去了(某种形式上)。

问题在于:出去的路径上经过了谁、停留了多久、以什么形式保存。


数据流路径对比:中间经过了几个节点

各工具数据路径差异

你以为所有 AI 编程工具的数据流都是一样的:编辑器 → 模型供应商。

实际上,大部分工具在中间多了一个节点——工具方的后端服务器。这个节点做代码索引、prompt 组装、Embedding 计算、日志记录。区别在于这个节点存在不存在。

Cursor 的数据流

你的代码
  │
  ▼
[Cursor 客户端]
  │
  │── (网络) ──▶ [Cursor 后端服务器]
  │                  ├─ 代码索引:代码片段上传,计算 Embedding 向量
  │                  ├─ Prompt 组装:把上下文拼成 prompt
  │                  ├─ 存储:Embedding 向量 + 混淆文件名长期存数据库
  │                  └─ 转发请求
  │                       │
  │                       ▼
  │              [OpenAI / Anthropic]
  │
  ▼
返回结果

Cursor 官方确认:即使你用自己的 API Key,请求仍然经过 Cursor 的后端做 prompt 组装("Even if you use your API key, your requests will still go through our backend." — Cursor Privacy FAQ)。代码索引时,代码片段上传到 Cursor 服务器计算 Embedding——明文不持久存储,但 Embedding 向量和混淆后的文件名长期存在他们的数据库里。

wescode 的数据流(BYOK 直连模式)

你的代码
  │
  ▼
[wescode 本地进程]
  ├─ 代码解析:tree-sitter 本地 AST 解析
  ├─ 索引存储:SQLite 本地文件(~/.wescode/cells/)
  ├─ Prompt 组装:本地拼接上下文 + 用户指令
  │
  │── (网络) ──▶ [OpenAI / Anthropic / DeepSeek](直连,无中间节点)
  │
  ▼
返回结果

wescode + 本地模型(零出站模式)

你的代码
  │
  ▼
[wescode 本地进程]
  ├─ 代码解析:本地
  ├─ 索引存储:本地
  ├─ Prompt 组装:本地
  │
  │── (本机回环) ──▶ [Ollama / vLLM](本地运行,零网络出站)
  │
  ▼
返回结果(全程未离开你的电脑)

区别一目了然:Cursor 的路径上有一个你不控制的中间节点;wescode 的路径上没有。


各工具安全特性完整对比

隐私安全对比

不同工具的数据处理方式差异很大。下面是一个尽可能客观的对比:

维度CursorClaude CodeGitHub Copilot通义灵码Traewescode
代码是否经过第三方服务器✅ 经过 Cursor 后端✅ 经 Anthropic API✅ 经 GitHub/Microsoft 后端✅ 经阿里云后端✅ 经字节后端否,BYOK 直连供应商
索引数据存储位置Cursor 数据库(Embedding + 混淆文件名)无持久索引GitHub 数据库阿里云字节服务端本地 SQLite
Privacy Mode✅ 有(不训练、不持久存明文)✅ 默认不训练✅ Business 版可关闭遥测⚠️ 有声明但细节较少⚠️ 有声明但细节较少N/A(不经第三方)
数据驻留区域美国美国美国中国中国你指定的 API 地址
BYOK 时是否仍经后端⚠️ 是N/A⚠️ 是N/AN/A否,不经过
本地模型支持不支持不支持不支持不支持不支持支持(Ollama/vLLM)
可达到零出站不支持不支持不支持不支持不支持支持

几个要注意的点:


wescode 的安全架构:五层模型

wescode 的"代码不出设备"不是一句口号,而是五层架构设计的结果——每一层都在做一件具体的事:

安全架构

层技术机制保护什么对应的 Cursor 处理方式
1. 代码解析tree-sitter 本地 AST 解析源码不上传做语法分析远端索引需上传代码片段
2. 索引存储SQLite 本地文件(CKG 图谱 + FTS5 全文索引)索引数据不上传Embedding 向量存在 Cursor 数据库
3. Prompt 组装本地拼接:CKG 上下文 + 文件内容 + 用户指令上下文组装不经中间方prompt 在 Cursor 后端组装
4. LLM 调用BYOK 直连模型供应商 API请求不经 wescode 服务器即使 BYOK,请求仍经 Cursor 后端
5. 本地模型Ollama / vLLM 本地推理全程零网络出站不支持接本地模型

每一层展开来看:

第 1 层:本地代码解析。 wescode 使用 tree-sitter 在本地做 AST(抽象语法树)解析。这意味着代码的语法分析——函数边界、调用关系、类型信息——完全在你的电脑上完成。Cursor 的代码索引需要把代码片段上传到后端计算 Embedding——这是功能差异导致的架构差异。

第 2 层:本地索引存储。 CKG(代码知识图谱)的 10-Pass 索引结果、FTS5 全文搜索索引,全部存在本地 SQLite 文件里(位于 ~/.wescode/cells/ws-{hash}/ 目录下)。这些索引包含了你的函数签名、调用关系、文件结构——如果上传到云端,本质上等于上传了你项目的架构蓝图。

第 3 层:本地 Prompt 组装。 当你对 AI 提问时,wescode 在本地把 CKG 检索到的上下文、当前文件内容、你的指令拼接成 prompt。这个过程不经过任何远端服务器。Cursor 的 prompt 组装发生在它的后端——这就是为什么即使 BYOK,请求仍然经过 Cursor 服务器。

第 4 层:BYOK 直连。 拼好的 prompt 直接发送到你指定的模型供应商 API(OpenAI / Anthropic / DeepSeek),不经过 wescode 的任何服务器。你可以用 tcpdump 验证——出站请求的目标 IP 只有模型供应商的地址。

第 5 层:本地模型。 接 Ollama 或 vLLM,整个流程零网络出站。这是安全要求最极端的场景——代码从始至终没有离开你的电脑。

前四层保证"你的代码只在两个地方出现过:你的电脑和模型供应商"。第五层保证"你的代码只在一个地方出现过:你的电脑"。


"开了 Privacy Mode 就安全了"?精确看看它保护什么

Cursor 和 Copilot 都提供 Privacy Mode。开了之后确实更安全——但它保护的范围和很多人以为的不一样:

Privacy Mode 保护的 vs 不保护的

Privacy Mode 保护的Privacy Mode 不保护的
代码不用于模型训练代码仍经过 Cursor 后端——请求路径没变
明文代码不被持久存储(请求处理期间除外)Embedding 向量仍存在数据库——索引数据长期保留
代码不被分享给其他用户混淆后的文件名仍存在数据库——目录结构指纹保留
代码不出现在 Cursor 的训练数据集里风控触发时数据可能被留存调查——这是合理的安全实践,但意味着"不持久存储"有例外

Privacy Mode 解决的是"我的代码会不会被拿去训练别人的模型"——对大多数个人开发者来说,这已经够了。

但它没有解决"我的代码是否经过了第三方服务器"——对有安审要求的公司来说,代码途经第三方本身就是一个合规问题,不管这个第三方承诺了什么。

Embedding 向量到底能暴露什么

"Embedding 向量又不是代码原文,有什么好担心的?"

从技术上说,Embedding 向量不能直接还原代码文本——这是对的。但它携带的信息比很多人以为的多:

学术界已经有多项研究表明,文本 Embedding 可以在一定条件下被反向工程。2023 年的一项研究(Text Embeddings Reveal (Almost) As Much As Text, Morris et al.)证明了在特定条件下,可以从 Embedding 向量恢复出原始文本的近似内容。虽然代码 Embedding 的反向难度比自然语言更高(代码结构更复杂),但"Embedding 完全安全"这个假设并不成立。

对个人项目和开源代码来说,这些信息泄漏的影响几乎为零。

但对安全要求最高的场景——国防系统、金融核心交易系统、医疗数据处理——即使不能还原代码原文,能推断出系统的功能领域和架构模式本身就构成安全风险。如果攻击者知道你的支付系统用了哪种架构模式、知道哪些模块最近在改动,这些信息就是攻击面。


tcpdump 抓包验证:企业安审的实操流程

安全审计

如果你是企业安审人员,或者你的公司要求验证 AI 编程工具的数据流向——下面是一个可以实际执行的验证流程:

步骤 1:抓取 wescode 的出站流量

# macOS / Linux
# 启动 tcpdump,只抓 wescode 相关进程的 TCP 流量
# 先找到 wescode 后端进程的 PID
ps aux | grep wescode

# 抓取所有出站 TCP 连接(排除本地回环)
sudo tcpdump -i any -n 'tcp and not host 127.0.0.1' \
  -w wescode_traffic.pcap &

# 正常使用 wescode 10 分钟——对话、代码补全、搜索
# 做你平常做的操作

# 停止抓包
sudo kill %1

步骤 2:分析出站目标

# 提取所有出站目标 IP 和端口
tcpdump -r wescode_traffic.pcap -n 'dst port 443' | \
  awk '{print $5}' | sort -u

# 你应该只看到模型供应商的 IP 地址:
# api.openai.com     → 104.18.x.x 系列
# api.anthropic.com  → 104.18.x.x 系列
# api.deepseek.com   → 相应 IP

步骤 3:对比验证——用 Cursor 做同样的操作

# 对 Cursor 做同样的抓包
sudo tcpdump -i any -n 'tcp and not host 127.0.0.1' \
  -w cursor_traffic.pcap &

# 使用 Cursor 10 分钟

sudo kill %1

# 分析 Cursor 的出站目标
tcpdump -r cursor_traffic.pcap -n 'dst port 443' | \
  awk '{print $5}' | sort -u

# 你会看到除了模型供应商之外,还有 Cursor 自己的服务器 IP

步骤 4:零出站验证(本地模型模式)

# 配置 wescode 使用本地 Ollama
# 然后重复抓包步骤

sudo tcpdump -i any -n 'tcp and not host 127.0.0.1' \
  -w wescode_local_traffic.pcap &

# 使用 wescode + Ollama 10 分钟

sudo kill %1

# 分析——应该看到零出站连接(排除系统自身的 DNS 等)
tcpdump -r wescode_local_traffic.pcap -n 'dst port 443' | wc -l
# 预期输出:0

这是可复现的验证——任何安审人员都可以执行这个流程,用客观的网络流量数据来验证"代码有没有出去"。


不同安全级别场景的推荐方案

不是所有场景都需要"零出站"——过度防御和防御不足一样有害(因为过度防御通常导致"根本不用")。

安全级别典型场景推荐方案理由
Level 1:个人/开源个人项目、开源项目任意工具 + Privacy Mode代码本来就是公开的,隐私风险极低
Level 2:普通企业一般商业代码、SaaS 产品Copilot Business 或 wescode BYOKPrivacy Mode + 不训练承诺对大多数企业已足够
Level 3:严格合规金融代码、政企系统wescode BYOK(直连模式)代码不经第三方服务器,可通过 tcpdump 审计
Level 4:最高安全国防、核心交易、医疗数据wescode + 本地模型(零出站)代码全程不离开设备,可物理断网验证

Level 2 和 Level 3 之间的分界线在于:你的公司是否有"代码不得传输到第三方服务"的安全策略。如果有——那么 Cursor 即使开了 Privacy Mode 也过不了(因为代码仍经过 Cursor 后端)。这种情况下需要 Level 3 的方案。

Level 3 和 Level 4 之间的分界线在于:你是否需要"可证明的零出站"。Level 3 的 BYOK 直连仍然有网络出站(到模型供应商),你需要信任供应商不会持久存储或滥用你的 prompt。Level 4 的本地模型则完全消除了这个信任依赖。


对你意味着什么

如果你是个人开发者、开源项目:

如果你是公司员工:

如果你在金融、政企、医疗:


你能做什么

  1. 了解你工具的数据路径——不是看营销页面,是看隐私政策和官方 FAQ。Cursor 的关键文档在 cursor.com/privacy;Copilot 的在 GitHub Docs 的 Copilot Privacy 章节
  2. 开 Privacy Mode——如果你的工具有的话(Cursor、Copilot Business 都有)。不能防止代码经过后端,但能防止被用于训练
  3. 用 .cursorignore / .gitignore 排除敏感文件——API 密钥、配置文件、内部文档这些不要被 AI 索引
  4. 如果公司有安审要求,提前确认——别等到安审的时候才发现你的代码一直在经过第三方服务器
  5. 要求供应商提供可验证的证据——"我们不存储"是承诺,tcpdump 抓包是证据。对安全要求高的场景,用技术手段验证比相信承诺更可靠

这篇不是在说"云端 AI 工具不安全"。对大多数场景,它们够安全。这篇想说的是:你至少应该知道代码去了哪里,而不是假设它哪也没去。

如果你需要"代码不出设备"——wescode 的五层安全架构做到了这一点:第 1-3 层(本地解析+本地索引+本地组装)确保代码不经中间方;第 4 层(BYOK 直连)确保请求直达供应商;第 5 层(本地模型)在需要时做到全程零出站。