最近在看课代表在推广他的课程,关于AI的课程,鸭哥是他的合作伙伴。因此就找来鸭哥的博客来看看。
这是鸭哥的博客:yage.ai/
最近他的博客在写关于AI相关的事情,也可以看到他使用AI的发展历程,先从ChatGPT的web网页、在到各种其他模型的web界面,再到OpenWebUI,再到Cursor等等。他对于AI的使用有一个这样的历程,当然啦,在课代表的直播课程中,鸭哥讲解的时候也是按照这样的讲解去做的。(他们的课程挺贵的,不知道怎样计算出来的,😄)
很久之前就听说过cursor了,自己也用了,但是始终没看到他的便利性。但是跟着鸭哥稍微学了点,就立刻看到了cursor的便利性,甚至感觉有点颠覆性。
因为如果像github copilot那样仅仅预测当前文件的那几行代码,那么其实生产力提高最多就几倍而已。但如果是AI能够帮你自动生成好几个所需的文件,然后自动去进行校验判断是否出错,如果出错则尝试修复bug,接着尝试,那么这将是颠覆性的事情。
最简单的例子,我用的就是鸭哥的例子,我想要知道亚马逊和谷歌最近五年的股票走势,生成一个图表。如果使用旧的方法,那么我要自己想办法如何得到数据,得到数据后该调用哪些类库,这些类库的doc去查询任何使用,接着查询如何生成图表,生成图表的api如何使用,接着去调节图表参数,让图表更好看些。我真不知道如果自己按照以前老的开发流程,要花多长时间。
现在我们使用cursor,接着点击composer的agent模式,接着输入如下提示词:我想要比较亚马逊和谷歌的最近五年的股票走势,最终生成一个图表。你可以使用Python语言编写程序,可以使用任何类库,最终将图表放到一个markdown文件中。
输入完prompt,让cursor去做就好了,基本上再做两三次的微调,就能得到想要的答案。如果你用的熟练的话,五分钟就能搞定这个需求。
下面的英文部分,是我用cursor完成了一个vue界面的小需求,整个过程我几乎很少实际该代码,如果有哪些我不满意,我直接告诉cursor他就会帮我改。比如cursor生成的代码,页面加载的时候同一个接口调用了两次,那么我直接跟cursor说,他就帮我改了。比如我觉得弹窗宽度有点小,我直接告诉cursor把宽度调大,他就直接帮我改了。
最近的github copilot也发布了跟cursor agent一样的功能,但是用于界面ui的限制,或者vscode本身的产品设计问题,导致他没有cursor好用。
Github copilot vs cursor
Today i used copilot and cursor. I used it to generate my vue code. And it is work. Although it make some mistakes, i think that because i’m not use it correctly.
I think the code writing change. It’s not Efficiency Improvement. It change the mode. I don’t need learn and exercise a programing language.
I think copilot and cursor is same. Now cusor is better than copilot, because cursor agent mode is better. But in the future, maybe copilot will be better. Cursor don’t have Competitive Advantage.
./cursorrules
It’s file that descripe project information, so that cursor can generator better answers.
You can see this project: github.com/PatrickJS/a…
This file is very helpful. I need learn more.
同样的github copilot 和 windsurf 都有类似的文件。这个文件可以用来帮助AI更好的理解我们项目的信息并且生成我们想要的代码。
文件内容可以写:项目简介、可用的工具类、项目目录结构、编程规范、测试规范、性能指标、执行长任务时可存储过程文件等等。
issue
在实际使用过程中我们需要知道AI的边界,AI能做什么,不能做什么,这样才能得到我们想要的结果。
比如说我今天拿了一张图片,我希望AI能够编写程序帮我去除这张图片的背景,只保留图片里面的人物。然后AI确实写了一个Python程序,然后调用一些类库将背景去除了,但是效果不太好,人物的胳膊也被去除了。然后我告诉了AI说效果不好,少了胳膊,让AI重写或者调参,迭代了几次效果还是不好。
说明去除图片的背景这件事不是调调某个Python类库就能解决的,因此我从google上面搜索一些去除背景图的网站,找到了remove.bg这个网站,这个网站提供了API可供调用。
接着我让AI去搜索一些能够去除图片背景的网站,他列举了一些网站,其中第一个就是removeBg这个网站。那么接下来,我让使用 cursor composer agent模式去让AI调用 API 来去除图片的背景。It dose work!
从上面的例子中我们知道,
- Python的类库能力有限,对于稍微复杂的图片的背景移除不能很好的处理
- 我们对于AI的提问不应该局限,我的问题一开始是让AI用Python程序来去除背景图,那么AI直接使用Python类库,效果并不好。我应该一开始先让AI思考,如果我要去除一个图片的背景,有哪些方法?比如AI可能会列举,1. 使用Python类库 2. 使用API 3. 使用PS
- 一步一步来。我应该让AI一步一步来,如果要完成一个任务。首先是查询各种方案,然后进行权衡决策,最后实施执行。当然在执行的时候我们还可以进行各种调整,但总体是一步一步来的。
第二个例子是,我通过鸭哥给的爬虫工具,爬取了一个blog上面的文章,我告诉AI他应该使用爬虫工具爬取这个website上面的文章,然后转换成markdown格式。然后我使用cursor agent模式,他运行的很好。但是我发现,当他将html爬取下来后,将html转换成md时,速度非常慢。这时我就在想,我觉得他应该是将html作为prompt直接传给model了,然后去做转换,这样就很慢。我应该让他提前写一个html转换为md格式的Python脚本,这样的话就会很快了。
局限性
看鸭哥对于 AI 的局限性的文章。
先说来源吧,来自 2017 年的论文arxiv.org/pdf/1706.03… 这篇论文让 NLP 的训练可以并行,充分利用 GPU 的能力。还有 GPT 的一些论文等,让科学家不需要微调模型,修改程序,就能够满足不同人们的不同需求。人们只需要说出自己的问题,GPT 就可以回答不同人类给的不同问题。
NLP 是预测下一个单词的艺术。因此他只是在众多的数据文本中,学习到了下一个最可能的词。
因此,如果数据源对于某一些领域的数据较少,那么预测结果可能就会很差。比如某个组织的内部信息,GPT 就无法回答。
context window,AI 能理解的上下文长度有限,因此我们对于一个大任务,可能需要进行切分。
正确性,既然是预测,那么就不可能一定对。
AI 只是从 A→B, A→C, B→D 这种大量的指向性的数据中,找到一些概率,然后统计,由此得到输入最可能的输出。AI的数据集太大了,他的统计能力太强了,强的让他能够回答大部分的知识。但是要清醒的认识,他并没有实际的思考能力,逻辑能力。
他的知识库有限,我们应该通过 agent 来让他能够进行网页搜索,或者扫描我们的文档,来更新他的知识库。
如何得到想要的
- 数据源,首先得有数据呀,巧妇难为无米之炊。我们可以通过引入搜索引擎,让 AI 支持网页搜索功能。可以让 AI 扫描我们的文档,总之要获得我们的数据,一般来说提供的数据越多,经过应该更精准。
- One by One。如果一个任务稍微有点大,或者并没有那么容易,那么就要一步一步的问。首先问他如果要解决这个问题,尽可能让他想到多的方案。然后比较不同方案差别,当然我们没有实际执行具体方案,并不知道方案结果是否能达到预期。但是如果我们直接问 AI我们想要什么,AI 可能只会从集中方案中直接选择一种来完成,如果这个方案效果并不好,我们就会在这个方案上浪费太多时间。在执行的过程中也是这样,如果一件事情有多种实现方式,那么就让 AI 把所有方式都列举出来,这样的话,如果某条线路不同,则快速尝试其他方案。
- Context window。由于 AI 的上下文限制,他不可能记录很长的执行细节,这时我们可以将执行路径记录下来,这样能保证 AI 在一个长的任务上,能够按照之前的安排一步步做下去。比如在cursorrules文件中记录历史。
- Agent,对于数学计算、实时新闻等缺失数据的,应该接触外界工具。