-
开心播播 Zed AI简介过火与Cursor AI的相比|代码|ai|裁剪器|险峻文|json|cursor
发布日期:2024-10-07 21:32 点击次数:102起原:云云众生s开心播播
与 Cursor 肖似,Zed AI 将大型谈话模子集成到一个令东谈主印象深切的代码裁剪器中。咱们试用了 Zed AI 并将其与 Cursor 进行了相比。
译自An Introduction to Zed AI and How It Compares to Cursor AI,作家 David Eastman。
在我上一篇著作中从新凝视了Cursor之后,我觉得当今亦然时候从新凝视Zed了,它一直在忙于将 AI 集成到其多东谈主代码裁剪器中。Zed AI 在“驱动发布技能免费”,但咱们应该很快就会看到收费——这么的功能可能是 Zed(一家由风险投资救助的初创公司)夙昔入手盈利的方式。
Zed是一个重新入手编写的代码裁剪器——它用 Rust 编写,并有用地欺诈了多核处理器和 GPU。它的创建者有教导,他们还创建了 Atom 和 Tree-sitter。因此,Zed 有契机透彻按捺 AI 的完毕方式——与 Cursor 不同,Cursor 分叉了 Visual Studio Code。Cursor 在代码窗口和 AI 救助之间完毕了明显的分散,因此这将是一个酷爱的相比。
默许情况下,Zed 还使用 Anthropic 的Claude 3.5 Sonnet。然而,也可以插入不同的 LLM 提供商,能够使用腹地选项。
我只使用 Zed 进行裁剪;我会保握 VS Code 掀开以进行构建。Zed 尚未在 Windows 上完毕,也莫得任何信得过的计算这么作念,这可能会影响你对该选项的概念。我将使用我的可靠的 MacBook。
我将络续使用我上一篇著作中的高分示例。
咱们将把添加的分数补助为单独的 JSON 文献;咱们将加载 JSON 文献;咱们将添加一个排行。
这是咱们在废除舞弊用户 Kim 之后到达的场所:
Usertim=new("12345","Timbo"); Userjim=new("45123","Jimbo"); Userkim=new("6534","Kimbo"); TopScorets=new TopScore(); ts.AddScore(Score.RegisteredGame.MatterBlatter, tim,1000,"Level 3"); ts.AddScore(Score.RegisteredGame.MatterBlatter, tim,1200,"Level 4"); ts.AddScore(Score.RegisteredGame.MasterBlaster, jim,1000,"HellGate"); ts.AddScore(Score.RegisteredGame.MasterBlaster, tim,1200,"FinalBoss"); ts.AddScore(Score.RegisteredGame.MatterBlatter, kim,1000,"Level 3"); ts.AddScore(Score.RegisteredGame.MatterBlatter, kim,3200,"Level 5"); ts.PurgeUser(kim); List
topscores= ts.FormattedTopScoreTable(Score.RegisteredGame.MatterBlatter); Console.WriteLine($"TOP SCORES FOR {Score.RegisteredGame.MatterBlatter}"); topscores.ForEach(sc => Console.WriteLine(sc)); publicstructUser{ publicstringPlayerId; publicstringKnownAs; publicUser(stringplayerId,stringknownAs){ PlayerId=playerId; KnownAs=knownAs; } } publicclassScore:IComparable
{ publicenumRegisteredGame{MatterBlatter,MasterBlaster,MinionPinion} publicDateTimeEntrydate; publicintScoreValue;publicstringLevel=""; publicRegisteredGameGame; publicUserPlayer; publicintCompareTo(Score? other){ return(other.ScoreValue -ScoreValue); } publicScore(RegisteredGameregisteredGame,Userplayer,intscoreValue,stringlevel=""){ Game=registeredGame; Entrydate= DateTime.Now; ScoreValue=scoreValue; Level=level; Player=player; } } publicclassTopScore{ privateList
scores=newList
(); constshortTABLESIZE=10; publicvoidAddScore(Score.RegisteredGame registeredGame,Useruser,intscorevalue,stringlevel){ Scorescore=new(registeredGame, user, scorevalue, level); scores.Add(score); } publicvoidPurgeUser(Useruser){ scores.RemoveAll(score => score.Player.PlayerId == user.PlayerId); } publicList
FormattedTopScoreTable(Score.RegisteredGame registeredGame){ List
toptable=newList
();//First sort it List
justOnegame= scores.FindAll(sc => sc.Game ==registeredGame); justOnegame.Sort();//Grab subset List
topItems=(justOnegame.Count
)justOnegame.Take(TABLESIZE); topItems.ForEach(sc => toptable.Add($"{sc.ScoreValue}{sc.Player.KnownAs} ({sc.Level})")); returntoptable; } }
助手面板和内联补助
当 Zed 更新时,莫得痕迹标明 AI 是否开启,但当我尝试掀开助手面板(非凡于聊天式界面区域)时,咱们得到了以下收尾:
然后,您会看到一个包含各式模子的清单,您可以聘用流通其中一个。我聘用流通 Anthropic,这意味着我需要获得一个密钥(适宜:这在 Cursor 中照旧为您完成)。我使用评估计算创建了密钥开心播播,但我似乎莫得聘用条件和条件。刻下,这有点阑珊词语。
当助手最终准备好后,一切运行邃密。我的第一个任务是从文献中读取分数。
收尾是正确的,然后可以字据我的要求将其摈弃在单独的文献中:
[ { "game": "MatterBlatter", "player": "tim", "score": 1000, "level": "Level 3" }, { "game": "MatterBlatter", "player": "tim", "score": 1200, "level": "Level 4" }, { "game": "MasterBlaster", "player": "jim", "score": 1000, "level": "HellGate" }, { "game": "MasterBlaster", "player": "tim", "score": 1200, "level": "FinalBoss" }, { "game": "MatterBlatter", "player": "kim", "score": 1000, "level": "Level 3" }, { "game": "MatterBlatter", "player": "kim", "score": 3200, "level": "Level 5" } ]
这很好,因为它判辨我念念将摆设补助为字符串。(横祸的是,它还使用了局部变量名而不是PlayerId,这将在以后变成问题。)
我的下一步将是苦求读取scores.json文献的适现代码,并将其补助为TopScore对象的参数。我使用新的“斜杠”号召/file将我刚刚使用 JSON 创建的新分数文献添加到助手以供参考。可以将其视为颠倒的 RAG之类的补充:
然后,我就可以构建辅导:
诚然这不是我不时进行的无数代码创建查询,但咱们如实进行了好多使用 Llama 3 进行 JSON 握久化。天然,Claude 对此毫无问题。
它以老式的 Main 方式编写了代码,咱们将尝试使用内联补助在所有这个词这个词代码中添加改动。助手面板和代码自身的内联补助之间的互相作用是 Zed AI 将事物分开的方式。
因此,在这里,我要求内联助手将ScoreEntry类添加到 LLM 在右侧助手创建的主代码中:
它完成了:
请适宜,我可以使用勾号经受代码添加。
酷爱的是,提出的 JSON 加载代码补助与助手中的原始提出不同:
改良产生了一个酷爱的失实。它试图手动将玩家姓名与给定的用户进行匹配,而不是向 User 添加注册和按姓名搜索功能。但失实如实提醒了我我方莫得在 JSON 中使用 PlayerId 的失实。
算作又名建树东谈主员,即使有这些 LLM 失实,这仍然代表着成果的晋升。这可能会让过度信任 LLM 处分决策的入门者堕入窘境,但要是您仅仅将其视为一个可靠的起初,一切皆会好起来的。我深信要是我念念以这种方式算帐代码,Claude 和我还可以进行进一步的对话。
在改良了 Users 代码后,咱们回到了这么的收尾(来自 VS Code):
终末,咱们念念添加一个排行以晋升可读性。让咱们望望是否可以要求这么作念。
折叠的文本是所有这个词这个词文献,并使用/tab添加,它仅仅将所有这个词这个词掀开的文献算作险峻文添加。
我很难要求内联助手用新代码替换冗余代码。它不肯意删除旧代码——这可能是一件善事!
在为 Jim 添加了一些颠倒的分数以增多道感性后,咱们得到了一个漂亮的排行表:
雷同,Claude 立即判辨了在这个高分表险峻文中“排行”的含义,并创建了正确的代码。最终代码如下:
using System.Text.Json; Usertim=new("12345","Timbo"); Userjim=new("45123","Jimbo"); Userkim=new("6534","Kimbo"); TopScorets=new TopScore(); stringjsonString= File.ReadAllText("scores.json"); List
scoreEntries= JsonSerializer.Deserialize
>(jsonString); foreach(var entry in scoreEntries){ ts.AddScore( Enum.Parse
日本少妇(entry.game), User.FindByPlayerId(entry.player), entry.score, entry.level ); } ts.PurgeUser(kim); List
topscores= ts.FormattedTopScoreTable(Score.RegisteredGame.MatterBlatter); Console.WriteLine($"TOP SCORES FOR {Score.RegisteredGame.MatterBlatter}"); topscores.ForEach(sc => Console.WriteLine(sc)); publicstructUser{ publicstringPlayerId; publicstringKnownAs; privatestaticList
registeredUsers=new(); publicUser(stringplayerId,stringknownAs){ PlayerId=playerId; KnownAs=knownAs; registeredUsers.Add(this); } publicstatic User FindByPlayerId(stringid){ return registeredUsers.FirstOrDefault(u => u.PlayerId ==id); } } publicclassScoreEntry{ publicstringgame{get;set;} publicstringplayer{get;set;} publicintscore{get;set;} publicstringlevel{get;set;} } publicclassScore:IComparable
{ publicenumRegisteredGame{MatterBlatter,MasterBlaster,MinionPinion} publicDateTimeEntrydate; publicintScoreValue; publicstringLevel=""; publicRegisteredGameGame; publicUserPlayer; publicintCompareTo(Score?other){ return(other.ScoreValue -ScoreValue); } publicScore(RegisteredGameregisteredGame,Userplayer,intscoreValue,stringlevel="") { Game=registeredGame; Entrydate= DateTime.Now; ScoreValue=scoreValue; Level=level; Player=player; } } publicclassTopScore{ privateList
scores=newList
(); constshortTABLESIZE=10; publicvoidAddScore(Score.RegisteredGame registeredGame,Useruser,intscorevalue,stringlevel){ Scorescore=new(registeredGame, user, scorevalue, level); scores.Add(score); } publicvoidPurgeUser(Useruser){ scores.RemoveAll(score => score.Player.PlayerId == user.PlayerId); } publicList
FormattedTopScoreTable(Score.RegisteredGame registeredGame){ List
toptable=newList
();//First sort it List
justOnegame= scores.FindAll(sc => sc.Game ==registeredGame); justOnegame.Sort();//Grab subset List
topItems=(justOnegame.Count
)justOnegame.Take(TABLESIZE); for(inti=0;i
论断
我与 Zed AI 的合营非凡可以——就 Claude 而言相称好,在 Zed 助手与内联补助之间的交互方面或然有点舛错。我心爱 Cursor 和 Zed 用来在 Claude 和你的代码之间集成提出这两种尝试。刻下,Cursor 在交互方面更熟悉——但当今照旧早期。
我心爱在 Zed AI 中以类 RAG 的方式网罗信息来增多险峻文,并将其算作折叠文本添加的念念法。但天然,咱们永恒不会信得过知谈需要什么,能够什么时候需要。
最大的可能是,在不到一年的时间内,跟着一个更具示范性的添加/删除/替换机制,Cursor 和 Zed 皆将成为使用 AI 的代码流的典范。
本文在云云众生(https://yylives.cc/)首发开心播播,接待公共走访。