开发者新选择:用DeepSeek实现Cursor级智能编程的免费方案
前言
去年下半年 cursor 非常火,让很多一行代码都不懂的小白,也可以做自己的网站和搭 App,当时一下子就引爆了独立开发的热潮。
不过每月20dollar的价格也不算便宜,这时候可以使用 cline , aider composer + continue 之类的插件搭配其他大模型后端来实现,也能实现类似的效果。
关于AI编程
AI编程现在主要有两种玩法,简单介绍下:
- 全自动模式(比如Cline、Aider这些工具):你动嘴,AI动手。直接把需求甩给它就能生成代码,适合搞点小项目——比如做个单页网页、写个命令行工具啥的。不过目前技术还不太行,复杂项目容易翻车。
- 半自动模式(Copilot这种经典款):你和AI组队写代码。你自己握方向盘,AI在旁边帮你补全代码、查漏补缺,相当于副驾驶随时递工具。
重点来了:只要不是全交给AI干,生成的代码千万别直接照单全收!最好开着Git这类版本控制工具,多commit几次。每次AI改完代码就拉出来对比看看,这样既能及时发现问题,又能避免代码越堆越乱——这算是用AI编程的保命小技巧了。
cline的问题
网上说 cline 非常烧 token (使用大模型需要付费,根据消耗的 token数量进行付费),我试了一下还真是,一个页面还没写完,我充了20块的某模型 token 就全都用完了……
使用本地部署的 DeepSeek 模型
试了下 cline 自动写代码,但花钱如流水,还不如我自己写呢…
上次部署了 DeepSeek 的蒸馏模型(原版671B,其他模型都是llama/qwen等开源模型蒸馏的),效果还可以,这时候可以拿来当 cline 的后端。
遇到问题
不过在默认配置下是无法使用的
会提示
Cline is having trouble...
Cline uses complex prompts and iterative task execution that may be challenging for less capable models. For best results, it's recommended to use Claude 3.5 Sonnet for its advanced agentic coding capabilities.
这个提示的根本原因是 Cline 的工作模式,通常需要模型具备较强的“代理式”推理、分步骤思考、以及对复杂指令的理解和执行能力。相对而言,一些开源大模型(如 DeepSeek-R1 14B)可能在链式推理、代码解释或复杂上下文推断上还不够完备,或者对交互回合数、上下文格式都有所限制,因此在 Cline 这样的多回合 Agentic 插件下就容易“跟不上”,从而触发了“Cline is having trouble…”的警告信息。
从原理上来说,Cline 的交互流程是:
- Cline 根据你的指令生成比较复杂、带有代理特征的 Prompt,其中包含“你是谁”“你的目标是什么”“你需要如何自省、复盘”等指导信息。
- 让模型多回合(多次)迭代思考,把每一次思考的内容和输出再用来生成后续回合的提示,从而不断 refine 解决方案。
- 如果模型无法很好地遵循或记住这些多回合的提示,或是对其中的指导指令理解不准确,就会出现答非所问、上下文混乱等情况。Cline 会侦测到这些现象并报错/提示不兼容等。
问题的核心在于默认的上下文长度(Context Length)太小,而 Cline 插件又需要保留较多的多轮对话上下文,导致模型没办法处理足够长的提示,从而出现 “Cline is having trouble…” 的提示。
在坚持使用 Ollama 的情况下,就只能通过调整上下文长度来解决这个问题了。(参考: https://github.com/deepseek-ai/DeepSeek-R1/issues/28)
调整上下文长度
上下文长度(Context Length)是什么?
- 所谓 “上下文长度” 指的是模型在一次推理过程中能记住并处理的 Token 数量上限(你可以把它简单理解为模型的“记忆容量”)。
- 如果这个容量不够,当你给模型多轮指令或大段文本时,后续部分会被截断或遗忘,所以任务可能无法被完整地理解和执行。
许多开源模型初始设置的上下文窗口往往是 2K、4K,如果 Cline 生成了长 Prompt 或者你跟它多次对话累积了很多历史信息,那么原先的 4K 上下文就很容易不足。
在 Ollama 里创建带有大上下文长度的模型镜像
创建一个名为 deepseek-r1-14b-32k.ollama
(文件名自定)的文件,放在哪里都行,Ollama 并不会强制你把它放在某个固定位置,只要命令行能找到该文件即可。
一旦你用 ollama create
命令创建了新的模型,它就会被存储到 Ollama 的模型仓库,后续引用时只需要模型名称,不需要再关心这个文件在哪。
内容大致如下:
FROM deepseek-r1:14b
PARAMETER num_ctx 32768
然后使用 Ollama 命令行把这个文件转为一个新的模型。例如:
ollama create deepseek-r1-14b-32k -f deepseek-r1-14b-32k.ollama
完成后,就相当于你有一个带 32k 上下文窗口的 DeepSeek-R1 14B 模型副本。
完成之后可以执行 ollama list
验证一下
$ ollama list
NAME ID SIZE MODIFIED
deepseek-r1-14b-32k:latest 6ecc115f8ae2 9.0 GB 1 second ago
deepseek-r1:14b ea35dfe18182 9.0 GB 21 hours ago
下次在 Cline 中,将模型切换到这个 “deepseek-r1-14b-32k” 就可以使用 32k 的上下文容量,避免因为上下文不足导致的中途报错。
映射Ollama服务到本地
上一篇文章我把模型部署在服务器上
为了让本地能调用,需要使用SSH隧道转发一下。
ssh -L 11434:localhost:11434 用户名@服务器地址 -p 端口
配置 cline 插件
点击右上角的齿轮按钮
在 API Provider 选择 Ollama,模型选择我们刚才创建的 deepseek-r1-14b-32k
设置完成之后点击「Done」保存
火力全开写代码
这里我让AI制作一个「新年祝福生成器」(参考小破站某up主的想法)
这里我用的提示词写得比较详细,把设计的细节都告诉AI,可以减少后续修改次数。
这个提示词比较长,限于篇幅我就不放在正文里了,有需要参考的同学可以在公众号后台回复「提示词」获取完整版。
需要开发其他功能也可以把这篇提示词交给 DeepSeek ,让其参考。
输入提示词之后,就开始写代码了,可以看到代码一行行自动生成。
完成之后发现有标红的警告,别担心,AI会根据提示信息自动修改
几个显卡都跑起来了,Ollama的调度真神奇
实现效果
生成出来的代码只能说一般,DeepSeek-14B 应该还是受到模型参数规模限制了。
首先是出现了以下代码
<p className="text-sm opacity-70 mt-2">距离春节还有 {new Date().getDaysLeftToChineseNewYear()} 天</p>
但是却没有定义这个原型扩展方法。
然后是它对 tailwindcss 的认知很有限,说好的背景颜色并没有生效。
在我手动修复了 bug 之后,运行起来的页面长这样
但是也不能说 DeepSeek-14B 的代码能力就完全不行
很可能是因为 cline 插件的上下文太长了
我直接与模型对话,同样的需求,生成出来的代码直接就能 run
部署 LocalAI(可选)
https://github.com/mudler/LocalAI
LocalAI 充当一个兼容 OpenAI API 协议的网关,对外提供 /v1/xxx
路由(如 /v1/completions
, /v1/chat/completions
)。
- 你可以用任何支持 OpenAI API 的客户端(如 Python
openai
库、LangChain、或各种开源/商用工具)去调用 LocalAI 的地址。 - LocalAI 后台则会在本地加载 .bin 或 .gguf 模型,并用 CPU 或 GPU 进行推理,将结果以 OpenAI 兼容的 JSON 格式返回给客户端。
由于我这次使用的 cline 插件支持直接调用 Ollama,所以就不部署 LocalAI 了,有兴趣的同学可以自行尝试。
参考资料
小结
勉强能用,cline 需要消耗的 token 是真的多,我下次试试其他插件有没有改善。
开发者新选择:用DeepSeek实现Cursor级智能编程的免费方案的更多相关文章
- Mego(03) - ORM框架的新选择
前言 从之前的两遍文章可以看出ORM的现状. Mego(01) - NET中主流ORM框架性能对比 Mego(02) - NET主流ORM框架分析 首先我们先谈下一个我们希望的ORM框架是什么样子的: ...
- 前端工程师的新选择WebApp
作为新一代移动端应用分发入口,小程序的趋势明朗化,竞争也在急剧激烈化.战线从手机 QQ.QQ 浏览器.支付宝.手机淘宝,华为,小米等九家手机厂商推出“快应用”,再拉到了谷歌的 Instant App ...
- 破解“低代码”的4大误区,拥抱低门槛高效率的软件开发新选择 ZT
最近,每个人似乎都在谈论“低代码”.以美国的Outsystems.Kinvey,以及国内的活字格为代表的低代码开发平台,正在风靡整个IT世界.毕竟,能够以最少的编码快速开发应用的想法本身就很吸引人.但 ...
- 微信小程序,创业新选择
微信小程序,创业新选择 创业者们 总是站在时代的风口浪尖,他们踌躇满志无所畏惧,这大概就是梦想的力量.但是,如果没有把梦想拆解成没有可预期的目标和可执行的实现路径那么一切都只能叫做梦想. 小程序 张小 ...
- NOSQL—MongoDB之外的新选择
MongoDB之外的新选择 MongoDB拥有灵活的文档型数据结构和方便的操作语法,在新兴的互联网应用中得到了广泛的部署,但对于其底层的存储引擎一直未对外开放,虽说开源却有失完整.Mongo版本3中开 ...
- JDK的版本有多少种,Java开发者应该选择哪一种?
JDK的版本有多少种,Java开发者应该选择哪一种?先说结果,一般情况下,我们多数会选择OpenJDK或者AdoptOpenJDK的JDK实现,因为这是最精简最标准的版本,而且没有商业风险.另外,需要 ...
- 集大软件工程15级结对编程week1
集大软件工程15级结对编程week1 0. 团队成员 姓名 学号 博客园首页 码云主页 孙志威 20152112307 Agt Eurekaaa 孙慧君 201521123098 野原泽君 野原泽君 ...
- Linux下实现秒级定时任务的两种方案
Linux下实现秒级定时任务的两种方案(Crontab 每秒运行): 第一种方案,当然是写一个后台运行的脚本一直循环,然后每次循环sleep一段时间. while true ;do command s ...
- 易用BPM时代,软件开发者缘何选择H3?
近年来,企业级软件开发市场暗流汹涌,呈现出多种态势.软件开发团队规模趋于小型化,工作方式趋于快捷化,超过半数的软件开发者在工作中会选择使用易用的软件开发工具.随着流程管理越来越受到企业的重视,流程开发 ...
- MySQL 5.7:非结构化数据存储的新选择
本文转载自:http://www.innomysql.net/article/23959.html (只作转载, 不代表本站和博主同意文中观点或证实文中信息) 工作10余年,没有一个版本能像MySQL ...
随机推荐
- 通过Java代码发送OutLook邮件
准备 我们想通过Java代码实现发送OutLook邮件,必须准备以下材料: OutLook邮箱 目标邮箱 查看OutLook邮箱信息 打开OutLook邮箱,在Settings中搜索或找到SMTP: ...
- .NET9 - 新功能体验(三)
书接上回,我们继续来聊聊.NET9和C#13带来的新变化. 01.Linq新方法 CountBy 和 AggregateBy 引入了新的方法 CountBy 和 AggregateBy后,可以在不经过 ...
- Linux下二维码识别库Zbar的安装与使用
1. 安装Zbar sudo apt-get install libzbar-dev 2. 识别流程 读取图像并转换为Zbar内建图像类型 创建Zbar扫描器 设置扫描参数 扫描图像并获取结果 #in ...
- Kafka之入门
什么是 Kafka Kafka 是一个分布式流式平台,它有三个关键能力 订阅发布记录流,它类似于企业中的消息队列 或 企业消息传递系统 以容错的方式存储记录流 实时记录流 Kafka 的应用 作为消息 ...
- 系统日志查询之journalctl
journalctl是什么 查询系统日志的工具 journalctl -xe是什么意思 -xe是排查问题时最常用的参数:-e 从结尾开始看-x 相关目录(如:问题相关的网址) journalctl - ...
- bitmap的特性和应用
BitMap 是什么? BitMap 简称位图,实际上是一个散列表,只不过这个散列表中各个槽是计算机存储中的最小单元bit. 那BitMap数据结构长什么样呢? 一个长度为8的BitMap是下面这样的 ...
- vue使用less 有报错(loaderContext.getResolve is not a function)
1.安装less npm install less-loader --save 2.main.js 引入 import less from 'less' Vue.use(less) warning:如 ...
- 【Vue】vue项目搭建、ES6的简单使用(大觅)
目录 项目搭建与基本配置 项目搭建 安装淘宝NPM镜像 cnpm 安装webpack 新建项目 运行项目 运行时出现的一些问题和解决方案 框架安装 安装UI框架iView 引入UI框架iView 引入 ...
- 微服务之调用链(Feign+SpringCloud)
终于到了我们的重点,微服务了. 与使用OkHttp3来实现的客户端类似,Feign接口本来也就是一个Http调用,依然可以使用Http头传值的方式,将 Trace 往下传. 本文更多的是关于 Spri ...
- 关于Qt中的qss样式表需要注意的坑
关于QSS要注意的坑. qss源自css,相当于css的一个子集,主要支持的是css2标准,很多网上的css3的标准的写法在qss这里是不生效的,所以不要大惊小怪. qss也不是完全支持所有的css2 ...