三个月前,我开始怀疑 Cursor 是不是被神化了。
那时我正在重构一个老项目------一个跑了五年的内部 ERP 系统。代码 8 万行,文档 12 万字,注释散落在 30 多个 README 里,连我自己都快忘了某些模块是干什么的。
按以前的工作模式,我大概要花两周:先读文档理清架构,再逐个文件看代码,再画时序图,再写重构方案。
但那天晚上,我做了一件事。
我把所有文档、所有 README、所有设计稿、所有 wiki 链接,一次性全塞进了 Cursor 的对话框。
Cursor 显示:「已加载 87,432 tokens。」
然后我敲了一行字:「帮我做一份重构方案,保留所有对外接口,调整内部架构。」
回车。
我盯着屏幕,看那个绿色的 token 计数器一点一点往上跳------从 8 万到 9 万,再从 9 万跳到 10 万。
Cursor 真的在「读」我塞进去的所有东西。
它到底是怎么做到的
我后来翻了下技术文档,长上下文模型的原理没我想的那么玄。说白了就是三件事:
1. 上下文窗口变大了 Claude 4 / GPT-5 这一代模型,上下文窗口已经能做到 100 万 token 以上,相当于一本 800 页的书一次性塞进去。
2. 检索增强(RAG)做了兜底 模型不是「全记住」所有内容,而是把长文档切成小块,建索引,回复时按相关性拉取最相关的部分。
3. 注意力机制的优化 新模型用了稀疏注意力、滑动窗口注意力等技术,让长文本处理不会随长度指数级变慢。
python
python
# 用 Cursor 官方 API 做长上下文实战
import requests
API_KEY = "your-cursor-api-key"
ENDPOINT = "https://api.cursor.sh/v1/chat"
def chat_with_long_context(project_files: dict, question: str):
"""
project_files: {filename: content} 字典
把整个项目作为上下文传进去
"""
context = "\n\n".join(
[f"=== {name} ===\n{content}"
for name, content in project_files.items()]
)
payload = {
"model": "claude-sonnet-4.5",
"messages": [{
"role": "user",
"content": f"{context}\n\n---\n\n问题:{question}"
}],
"max_tokens": 8000
}
headers = {"Authorization": f"Bearer {API_KEY}"}
return requests.post(ENDPOINT, json=payload, headers=headers).json()
那次重构,结果是这样的
Cursor 给我吐出来的方案,把我自己吓了一跳。
它没有一上来就说「你应该改成微服务」这种正确的废话。
它做的是:
第一步:先梳理了所有对外接口。 它从 8 万行代码里,把所有 HTTP API、gRPC 接口、消息队列的 topic 全部列了出来,分门别类,还标注了哪些是 deprecated 的。
第二步:画出了模块依赖图。 它识别出了 23 个核心模块之间的调用关系,标注了循环依赖和重复依赖。
第三步:给了 3 套重构方案。 激进版(拆微服务)、保守版(原地重构)、折中版(按业务域拆模块)。每一套都标了风险点和预计工时。
第四步:生成了迁移 checklist。 具体到「先动哪个文件」「先迁移哪个接口」「哪些测试要保留」。
整套方案大概 1.2 万字,逻辑严密,比我自己花一周整理的还清晰。
长上下文不是万能的,但它改变了什么
用了三个月之后,我对长上下文有了新的认知:
它不是用来「替代思考」的,而是用来「替代记忆」的。
以前我要记住:哪个接口在哪个文件、哪个函数依赖哪个类、哪个 bug 是哪个版本的、哪个设计文档在哪一页。
现在我只需要记住一件事:「这些东西存在」。
至于具体细节,AI 来记。我只负责想清楚「我想做什么」。
它改变了「读代码」这件事的成本。
以前读别人的代码,要一行一行追变量、一层一层调栈。
现在可以让 AI 先做一遍摘要:「这个文件做了什么」「这个函数的调用链是什么」「这段代码的潜在问题在哪」。
AI 给的总结不一定完全对,但比从零开始读,要快 10 倍。
我现在的日常用法
经过三个月的摸索,我总结了一套自己的用法:
读老项目时:把所有 README + 主要文件 + 架构图丢进去,问「这个项目是干什么的,架构是什么」。
重构时:把要改的模块及其依赖全部丢进去,问「如果要 X 该怎么改,给我三个方案」。
写新功能时:把相关模块 + 类似功能的现有实现 + 设计文档丢进去,问「这个新功能怎么写最符合现有架构」。
查 bug 时:把报错信息 + 相关代码 + 最近的部署记录丢进去,问「可能是哪里出了问题」。
python
python
def daily_cursor_use_case(project_root: str, task: str):
"""
我的 Cursor 日常用法模板
"""
# 1. 收集上下文
important_files = collect_core_files(project_root)
docs = collect_all_docs(project_root)
git_log = get_recent_git_log(project_root, days=7)
# 2. 打包成结构化提示词
context = {
"files": important_files,
"docs": docs,
"recent_changes": git_log,
"task": task
}
# 3. 一次性喂给 Cursor
return ask_cursor(context)
但是,长上下文有几个坑
用了这么久,我也踩过几个坑,必须说在前面:
1. 不是越长越好。 塞 50 万字进去,它也会「走神」。我一般控制在 10-15 万字以内,重要的放最前面,无关的别塞。
2. 它会一本正经地胡说八道。 长上下文不等于「完全准确」。尤其是当文档本身就过时的时候,AI 会把过时的内容当成事实输出。必须人工核对。
3. 不要相信它给的代码不跑测试。 它写的代码看起来很对,但边界条件经常漏。一定一定要跑测试。
4. 别让它「记住」敏感信息。 API key、密码、客户数据别往里塞。即使厂商说安全,也别赌。
那天重构完了之后
整个重构花了 8 天(以前预计两周)。
代码量从 8 万行降到 6.5 万行。性能提升了 40%。Bug 数量在接下来的一个月里减少了 60%。
最重要的是------我终于有空去想「为什么这个产品要这样做」,而不是陷在「这个函数在干嘛」里。
长上下文没有让我变强。它只是让我终于能去做只有我能做的事。
你用过 Cursor 或类似的工具做大型项目重构吗?长上下文对你来说是「真香」还是「噱头」? 评论区聊聊,我们互相种草。