当前位置: 首页 > news >正文

GitHub Copilot (Gen-AI) 很有用,但不是很好

摘要:以下是我在过去三个月中在实际 、 开发中使用 GitHub Copilot Pro 后的想法。由于技术发展迅速,值得注意的是,这些印象是基于我截至 2025 年 3 月的经验。

1 免费试用促使我订阅 GitHub Copilot Pro

我以前读过有关 AI 代码生成器的文章,也看过一些演示视频,但我并不确信它们是否真的可以投入生产。

3 个月前,由于我的 ASP.NET8 项目中的Visual Studio 2022自动激活了 GitHub Copilot Free 帐户,因此毫无缘由地开始出现所谓的**“幽灵文本”代码建议。我感到震惊,****有时它竟然能出色地**预测我将要编写/编写的内容。

对于那些不熟悉的人来说,**“幽灵文本”是 GitHub Copilot (GHC)**向用户呈现的灰色半透明文本建议,这些建议毫无理由地出现,是人工智能对用户下一步要做什么的预测。如果用户喜欢建议的代码,只需确认它,或者忽略它并完成他/她的工作。

几天后,我决定订阅完整的**GitHub Copilot PRO**来查看该工具。

2 准备 GitHub Copilot - AI 使用

2.1 训练

我总是认真对待工具,所以我会提前阅读手册,以便能够充分利用工具并意识到其局限性。

我在 GitHub Copilot 上听了大约十个小时的视频,主题包括“提示工程”、“什么是上下文”等。我制作了自己的提示命令和快捷键“备忘单”。经过 10 个小时的训练,我准备在 ASP.NET 8/C#/Bootstrap/EF8/JS 环境中的实际专业编码中尝试它。

2.2 快捷工程概述

我认为**“快速工程”是人工智能的失败**。20 年前,我听到的第一个关于人工智能系统的定义是,当我们能够用自然语言与计算机系统对话时,人工智能就实现了。

现在他们告诉你 GHC 是一个人工智能系统,但你无法用“自然语言”与它交谈;你需要使用“即时工程”,这实际上是**自然语言的子语言,**并使用 /、# 和 @ 等符号。在我看来,这就像自然语言和编程语言的某种混合。他们想向你出售他们现在拥有的人工智能系统,5 年后,他们可能会告诉你“现在我们有了真正的人工智能,不再需要即时工程”。

因此,“快速工程”这一表达来自于与 AI 系统交互的唯一方式是通过命令提示符的时期。然后,创建命令的一些“艺术”或“科学”(我称之为“伪科学”)将帮助您使这些 AI 系统更好地工作。我读过几篇这样的文章,它们都是“常识”,但由于目标 AI 系统始终是一个“黑匣子”,因此没有真正的指标来显示一位作者的建议是否比另一位作者的规则列表更好。此外,系统会随着时间的推移而发展和变化,因此严格来说,这些作者需要再次针对新一代系统测试他们的建议。通常,他们不会这样做,而是提供“常识”理由,这种理由基于将 AI 视为另一种人类智慧的感知。而人类的“常识”可能与 AI 系统不同。所以,我有点怀疑,并不完全相信所有关于“快速工程”的建议,因为没有针对不同代 AI 系统的实际指标和测试。他们提供的只是“常识”和来自一些命令执行的轶事证据。

2.3. GitHub Copilot 中的快速工程

因此,在 GitHub Copilot (GHC) 系统的背景下谈论“快速工程”时,不仅包括命令行界面,还包括通过 Visual Studio GUI 进行的一些交互。这基本上就是“GitHub Copilot 的用户界面”。

如果想要高效使用 GitHub Copilot,就需要熟悉 GitHub Copilot UI。因此,我学会了所有命令,例如 /fix、/optimize、#file1.cs、Alt+/(调用 GitHub Copilot)等。

2.4 对话世界

多年前,我在高中学习哲学时,就学过“对话世界”的概念。在每一次对话中,它都是隐含的,对话中的话题通常指的是当前的“对话世界”。它可以帮助人们理解正在谈论的内容,因为某些话题和术语是在该框架内假设或理所当然的。这是一个哲学概念,在许多世纪前就已定义,描述了人类之间的交流。只要地球上还有人类,它的定义就不会改变。

2.5 人工智能世界中的“上下文”是什么

从事人工智能的科技公司发明了“上下文”一词,其含义与上述哲学术语相似。我想将术语分开,因为科技公司喜欢强行定义世界应该是什么样子,以努力销售他们的产品和股票。此外,随着技术的发展,可能会有 AI-Context-2025 的定义和 AI-Context-2026 的新定义,等等。

在我看来,“对话世界”这个哲学术语将保持不变,因为它描述的是人与人之间的交流。而“语境”描述的是人与人工智能系统之间的交流,其定义将随着人工智能系统技术的不同世代而改变。

因此,截至 2025 年 3 月的当前上下文定义(您可以称之为 AI-Context-2025)将是:用户需要向 AI 系统提供的附加信息,以便它了解需要做什么。

2.6 GitHub Copilot 中的“上下文”是什么

在 GitHub Copilot 的培训视频中,我们非常强调为您的请求提供适当的“上下文”。在我看来,他们似乎要求明确列举包含相关代码的文件。我认为“隐含上下文”应该是您的 Visual Studio 项目/解决方案,但至少目前还不是。

实际上,GitHub Copilot VS2022 中有一个小小的 GUI 复选框,您可以单击它来确认是否希望将当前打开的文档包含在每个请求的“上下文”中。(顺便说一句,他们称之为“提示工程”,而您正在单击 GUI 复选框……也许“GUI 工程”会是一个更好的名字 😉 )。还要求您使用 # 前缀枚举相关文件,例如 #file1.cs。

因此,如果您想高效地使用 GitHub Copilot,则需要遵循一定的使用步骤,并为其推荐一个命令提示符/GUI 界面。就这样吧。我已经学习/阅读了所有说明,并希望看到 AI 为我的 VS2022 项目生成漂亮的代码。

我理解的是,他们希望你在请求中非常具体,并用代码列举所有相关文件。我认为这类似于向另一位程序员发出指令,具有一定的特异性。与开发人员学习的众多编程语言相比,这并不难。

第一周后的 3 次印象

GHC 只是一个代码辅助工具。它并不那么“智能”和“聪明”,但它擅长处理重复性任务,可以节省一些打字时间。它擅长反复应用代码中的模式,但在创建原始解决方案方面却非常非常愚蠢。

与它“聊天”很浪费时间,更快的方式是去 Google 自己阅读以解决一些原始问题。

但是一旦我创建了一个很好的模式来解决问题,它就可以节省一些打字时间,因为它会学习该模式并自动重新应用它。

它还会产生大量的“垃圾代码”,因此人类必须过滤掉生成的内容,但使用“删除”按钮并保留“好的片段”并不难。

比方说,根据我目前所见,我预计它可以节省我 5% 的打字时间。

1.5 个月后的 4 次印象

**GitHub-Copilot(Gen-AI)很有用,但不是很好。**它有时很有用,但只适用于局部范围的问题,无法看到更大的图景。

有时它很精彩,但有时它会犯太多错误,当被问到时,它会给出几页文字的答案,浪费你的时间,特别是因为它给出的冗长的答案往往偏离主题

对于严重的问题来说,它是无用的;最好自己读一篇 StackOverflow 文章并弄清楚。但有时,它很出色,可以为重复的任务生成相当不错的代码。

我的“个人感觉”是**“它不太了解”,它正在“试图猜测**”,而且由于它是一台拥有数百万行代码的巨型内存的机器,所以猜测有时很精彩,有时则偏离主题

3 个月后的 5 次印象

GitHub Copilot (GHC) 是一款 Gen-AI 工具,在有限范围的任务中非常有用。

  • GHC 有时很聪明。所以,是的,有时 GHC 很聪明,能够预测您要编写的代码,并提示您“幽灵文本”,您只需将其接受到您的代码中即可。
  • GHC 学习速度很快。GHC比周围的任何同事都更快地学习你的编程风格(我如何处理和记录异常),并遵循你的风格为你提供预测的“幽灵文本”代码。我非常喜欢这一点,周围的每个人都倾向于有自己的日志制作风格等。
  • GHC 危险地添加了自己的风格。GHC很危险,因为它认为自己比你聪明,会以自己的方式改变一些东西,而你却没有注意到。在数据库检索中,如果出现异常,我返回的是 null。在编码过程中,GHC 用“幽灵文本”提示我完成我的方法,我只是看了一眼就接受了。它产生了一个错误;在发生异常时,它返回的不是 null,而是空对象,而我的其他地方的代码被破坏了。教训是:在接受它提供给你的代码建议之前,请仔细阅读它们
  • GHC 可以“生成代码”,但不能“编写代码”。很难解释,但简单来说,GHC 不能很好地理解 C# 语法。它创建了精彩的 C# 代码片段,但有小的语法错误。您需要对从 GHC 获得的代码进行单独的语法检查。这绝对不是我们习惯从机器/自动代码助手那里得到的。
  • GHC 无法很好地理解 C# 语法。首先,它在可空性方面失败了,比如 string vs string? 类型。您需要使用编译器检查它并自行完善它。这并不难,但您希望将这种工作委托给机器/自动代码助手。我只能猜测它可能将 C#-.NET-Framework 代码片段与 C#-.NET-Core 代码片段混合在一起。
  • GHC 无法很好地理解 C# 语法。它会将代码片段插入到您的 VS2022 代码项目中,但它会弄乱代码块的开/闭花括号。您需要自己计算它们并添加/删除所需的内容。浪费您的时间,有时还会造成很大的混乱。令人失望的是,生成的代码不能立即编译
  • **GHC 不能很好地理解 C# 的方法/属性。**它为我提供了看起来不错的代码,我接受了。但是 C# 类对象根本没有该方法。它很接近,它的父对象有该方法,因此我自己算出来了。好吧,它很接近,并且让我走上了正轨。但这就是机器的用途。没有人能记住我在编码中使用的大约 10,000 个 .NET8 API C# 类的所有方法。我希望机器能帮助我做到这一点。但是,不,即使是 GHC 也不确定哪个类上有哪个方法。它给你布置了一项小作业让你自己手动检查。它给你的代码无法编译,但“接近”。看起来GHC 产生了幻觉,认为 C# 类有某种方法,但事实并非如此。
  • GHC 不能很好地理解 C# 方法/属性。我在 VS2022 项目中使用 EF8,并且有一个类 Customer。我开始编写一些对 Customer DB 表的访问方法,GHC 在“幽灵文本”中为我提供了 GetCustomer 方法预测。概念是可靠的,是的,该 DB 表有一个主键,但它不叫 CustomerId。看起来GHC 只是幻觉认为应该存在具有该名称的类属性,但事实并非如此。预测的代码将无法编译,我需要去检查类 Customer 中主键的确切名称到底是什么。令人失望的是,机器/自动代码助手GHC 无法自行检查正确的属性/方法名称。它只是 VS2022 项目中的另一个类。因此,代码片段在概念上很接近,但我需要自己手动修复语法错误。我遇到过 100 多次这种情况。
  • **GHC 不太了解 C# 方法/属性。**印象中 GHC 很浅显,它只看到几页代码,并且试图“猜测”VS2022 项目的其余部分是什么样子。
  • GHC 聊天往往会浪费你的时间。它用猜测浪费你的时间。我没有时间阅读超过 2 个生成的代码提案。我需要做一些工作。在 1-2 次错误的猜测之后,我会忽略 GHC 并自己编写代码。我尝试过“与 GHC 聊天”,有时在 5-7 次聊天互动之后,它仍然会像对话开始时一样愚蠢。感觉就像在某个售票网站上与非 AI 聊天机器人交谈。它一直重复它的文本,而GHC 并没有关注你真正需要的东西。我尝试过几次这种方法,在交互式聊天中“细化”我的请求,但感觉就像在和一个白痴说话。我不再这样做了,我尊重并节省我的时间和精力。我忽略 GHC 并进行一些直接编码并以老式的方式获得结果。所以,结论是:我给 GHC 1-2 次机会说它要说的话,然后忽略它以免浪费我的时间,然后手动进行编码
  • GHC 聊天往往会浪费你的时间。GHC并不总是一个好的信息来源。它可以非常出色,并为您提供比您希望的更好的信息和代码示例。但是存在不确定性。它可能会失败。如果您尝试就一些非常常见的话题获取建议,只是稍微针对您的需求,那么它将在无休止的聊天会话中浪费您的时间。最好自己去 Google 找一篇有关 Stack Overflow 的文章。GHC 是一个文本生成器,该机器可以生成大量文本和代码示例作为对您问题的回答。我被它给您的代码示例数量震惊了。对于您提出的问题,它会为您提供可能需要 15 分钟才能阅读和理解的文本和代码示例。它几乎就像在给您分配一项任务:阅读这个,然后我们再讨论。然后一个接一个的回答。GHC 可以永远这样做,例如,指导您 HTTP 的工作原理,而您只问一个标头。问题是,它没有焦点那不是我问的。所有这些都是与主题无关的垃圾。去 Google 并过滤/打开几个链接来找到问题的答案会更快。所以,结论是:我问 GHC 并阅读 1-2 个答案,然后去 Google,不浪费我的时间
  • GHC 不严格遵循用户说明。看起来 GHC 不严格遵循用户的说明,它认为自己比用户更聪明,它松散地遵循说明,并提供它认为对用户更好的内容。因此,我希望以某种方式/样式在整个应用程序中统一创建 HTML ASP.NET Razor 表单,但不使用 GHC,当我告诉它时,它仍然给我一个像教科书一样的 HTML 表单。在其他情况下也发生过这种情况。
  • **GHC 反馈表浪费时间。**因此,软件公司想出了一个绝妙的主意:他们会对产品收费,但同时请用户免费参与产品测试。因此,与许多其他产品一样,一些对话框会弹出来询问您的反馈。问题是,即使您填写了表格,是否有人会阅读您写的内容。许多产品都会弹出对话框告诉您新功能,并要求对他们产生的每个结果进行 5 星评价,甚至书面评论。这样的对话框只会弄乱我的工作空间,而我通常有更严肃的事情要做,而不是回答几个问题来评估我得到的每项服务。基本上,他们希望大量用户通过评估每个答案来帮助训练他们的 AI 系统。
  • **GHC 擅长处理小型、有限范围的任务。**我需要一种方法来 Trim() EF 类中的所有字符串;我想要一个通用的解决方案。我知道反射是可行的方法,但在一行命令请求中,GHC 为我生成了完美的 30 行方法。在这些情况下,GHC 是人类无法击败的。我需要花时间找到合适的反射方法、阅读一些 API 等。这样,我在 20 秒内就搞定了。但是,GHC 有时很出色,有时即使在这种场景中也毫无用处。
  • GHC 在一个有点复杂的 JavaScript 任务中失败了。我遇到了一个简单的问题,范围有限,我需要一个 10 行的方法来等待 jQuery 加载完成,因为我在 jQuery 加载时使用了“defer”属性。这看起来像是 GHC 的完美任务。但我震惊了。即使经过五次尝试,GHC 仍然生成了一些执行其他操作的 JS 代码。它无法理解我想要什么。它只是不断地生成一些看似与问题相关但实际上毫无用处的片段。就像你给一个“声称”懂一些 JS 的初级程序员一个任务,它不断地给你带来他在网上找到的随机代码示例,但没有人做你要求的简单事情。后来,我自己在 StackOverflow 上找到了一个代码片段。也许在 Google 上点击三次我就能找到它。GHC有时候真的很低劣
  • **GHC 生成的 C# 注释很浅。**我使用 GHC 为我的方法添加了一些注释,生成的注释有点浅;它们没有看到该方法试图实现的总体目标。这比逐行注释更重要,现在我们分配这个或那个。它可以从方法的英文名称推断出该方法的用途,但大多数时候仍然不太令人印象深刻。
  • GHC 不能很好地理解 C# 注释。当被要求为某个方法创建注释时,GHC 会删除一些真实代码行。请小心并仔细阅读给您的答案。这很麻烦,您需要手动重读整个方法,而且您不能信任 GHC。看起来GHC 不能很好地理解语法,以及什么是注释,它只看到文本。这发生在我身上,我非常仔细地查看了原因。我设置了一些属性,在上面的注释中,是一个我测试并注释掉的旧设置。GHC将它们都删除了,代码和旧的注释代码。在代码的很多地方都有这样的情况。因此,对于只是添加一些注释的简单请求,存在很高的不需要的代码操纵风险。所有生成的注释代码都需要手动审查。
  • GHC“背景”故事并不像广告中说的那样有效。看起来,科技公司正在进行一场“互相指责”的游戏,将 AI-Gen 产品的失败归咎于开发者。简单来说,目前的 Gen-AI 工具在现实生活中并不像广告中说的那么有用。但是,无论当前一代 AI 工具有多么不完善,人们都在进行巨大的“销售努力”来销售它们,并立即产生一些收入。因此,对于失败和局限性,指责的对象是用户:“工具很棒,你只是不知道如何使用它们”。科技公司表示:AI 工具失败是用户的失败,而不是当前的 AI 工具存在问题。GHC的“背景”设置就是这样一种指责游戏。
  • **GHC“上下文”的故事并不像宣传的那样有效。我厌倦了阅读/听到:“你没有很好地指定上下文”。这只是一个借口,因为我确实遵循了所有的建议,而 GHC 仍然很愚蠢,浪费了我的时间生成甚至无法编译的无用代码片段,更不用说它们偏离了主题。我读过关于“快速工程”和“上下文”的文章,但经过我最大的努力,我相信GHC 还不够聪明,无法完成工作。**让我们等 6 个月再尝试更新的工具。现在试图从 GHC 中榨取更多是浪费时间。所以,事实是,目前(2025 年 3 月),GHC 相当愚蠢,无论多少“给出的上下文信息”都无法帮助它解决中级任务。
  • GHC 无法解决简单的异常。我的代码抛出了异常,我想使用 GHC 来解决它。我在 Visual Studio 中定位到异常,并使用 /FIX 调用 GHC。它生成了文本,包括“记录更多内容以更好地了解代码缺陷”的建议,但没有具体答案。这很容易,我只需将异常文本复制到 Google 中,第三个链接就是解释。更不用说 Google 上有更多关于 EF9 失败原因等的文本。GHC在常规任务中表现如此低劣
  • GHC 无法从普通 C# 类中枚举属性。我正在做一些 LINQ 并从相互继承的类中复制了一些对象。我想复制所有匹配的属性。大约有 25 个属性。我开始分配 2-3 个属性,并希望 GHC 选择模式并为其余属性插入代码。不,它不会。它无序添加了一些属性(这是一个问题,您无法跟踪哪些添加了,哪些没有添加),然后发明了**一些不存在的属性的名称(产生幻觉?),**然后它被堆叠了。我试图从命令提示符发出命令,但它误解了我,将整个 C# 类插入到位等。我在不同的地方尝试了几次,因为我有很多大的 DTO,所以这样的复制通常是这项任务。我无法让它为我做这件事。我很无聊,自己手动复制了属性。我厌倦了给一个看似愚蠢的工具发指令。奇怪的是你不能将这么简单的任务委托给 GHC。有时,IntelliSense 比 GHC 更智能、更有用。
  • GHC 无法完成 4 个 C# 文件的小项目。因此,我渴望在我的 VS2022/C# 项目中使用生成式 AI,并正在寻找合适的机会。我注意到一个,我正在创建 HTML/Razor/ASP.NET8/Bootstrap 视图,这些视图呈现一些与 DB 表相对应的 HTML 表。这有点复杂;视图里面有面包屑 UI、一些 AJAX 等。因此,我手动为 Customers 表创建了一个 MVC Action/View,并想对 Contracts 执行完全相同的操作。都一样,只是另一个 DB 表(对应于 EF8 类),另一个具有新属性的 EF 类名。我想要生成的 HTML 表应该看起来一样,Bootstrap 风格。所以,典型的“在 4 个文件中遵循模式”问题。我看过几个视频,强调“上下文”的重要性。因此,在一个单独的文本编辑器中,我开始为 GitHub Copilot 编写精确的说明。我解释了任务,说明了我想要哪个文件作为模板,并用 # 标记了文件名。我解释了 MVC 模型将来自何处、哪个文件等等。我甚至为 GHC 检查了我的小段落任务的拼写。我花了一些时间以清晰的方式准备任务说明。然后我将它提供给 GHC。它生成的第一个表单没有遵循我明确提到的模板。GHC 给了我一个像教科书一样的 HTML 表单,而不是在 Bootstrap 中为我的应用程序定制的表单。我要求生成新一代的代码文件。第二个看起来像我已经创建的表单,但是在 15 个 DB 表属性中,它只创建了 4 个。后来,我发现GHC 无法读取依赖文件,并且大多数时候都在猜测属性名称。它猜对了,因为我在不同的 EF 类中严格遵循相同的命名约定,所以 GHC 的猜测是有效的。我手动完成了文件,手动添加了 10 多个缺失的属性。人们期望将这种重复性任务委托给 GHC,但事实并非如此,GHC 无法完成这种简单重复的工作
  • GHC 无法完成一个由 4 个 C# 文件组成的小项目。我再次尝试了类似的情况,即在我的 VS2022/C# 项目中基于清晰的模式原型文件生成一些文件。结果并不是很好,尽管那是宣传的那样,为 GHC 成功做好了准备。逻辑并不复杂,需要明确的名称替换,只是一个有点复杂的 HTML 表对应另一个 DB 表。但是,GHC 似乎无法从第三个文件读取 EF8 属性并枚举它们以创建看起来类似的 HTML 表。此外,它会通过对 C# 属性产生幻觉,在生成的文件中引入大量错误。有时甚至会无缘无故地更改文件代码,因此需要逐行手动检查生成的文件。此外,通过命令行与 GHC 聊天并要求更改会浪费时间,而且由于结果无法保证且包含错误,所以最终不是一种有效的软件开发方式
  • GHC 无法完成一个由 4 个 C# 文件组成的小项目。回想起来,我对“上下文”规范的描述再精确不过了。任何人都会理解给定的书面任务和指定的上下文。我的结论是,GHC 不够智能,无法处理由 4 个文件组成的小生成,即使给定了一个非常面向模板/模式的任务。我不想再听“适当的上下文”的故事了,因为我努力把每件事都做好。在我的 VS2022/C# 项目中,一遍又一遍地要求 GHC 生成文件并重新阅读每个新生成的代码是浪费时间和精力。我试过了,每次你要求时 GHC 都会生成另一个文件,我厌倦了研究失败的尝试。
  • GHC 无法完成一个由 4 个 C# 文件组成的小项目。现在,当我遇到类似的情况,需要根据我已有的模板生成一个新的 HTML 视图(一个基于模式的任务)时,我不再询问 GHC 了。在我的 VS2022/C# 项目中,我只是使用带有查找/替换功能的文本编辑器,花费的时间相同,但更确定。因为当我使用查找/替换时,我确切地知道我得到了什么,GHC 会更改字符串,但有时会主动对代码进行一些更改,所以我永远不确定它是否更改或删除了一两行原始模板代码。这是一项无聊的工作,但“智能”GHC 在“改进”我的代码时并不会带来意想不到的惊喜。
  • GHC 犯了 Bootstrap 的愚蠢错误。我记不住 Bootstrap 类名,但我想放大按钮的左右两侧。我问了 GHC,它给了我 Bootstrap 类名。我应用了它们,它放大了按钮的上下两侧。很奇怪,它怎么会犯这样的错误。我需要的正是所有 Bootstrap CSS 类的帮助,我记不住它们。这是一个非常简单的问题,但 GHC 却做不到。

6 如何描述像 GitHub Copilot 这样的 AI 系统

对新事物的典型良好定义由两部分组成:1)它相似的对象/概念,2)它与相似对象/概念的不同之处

所以,当谈论智能系统时,人们通常以人类作为参考。他们倾向于说:AI-Gen 系统处于初级程序员的水平,但在某些方面更好/更差。

但我觉得对于像 GitHub Copilot (GHC) 这样的人工智能系统,人类并不是一个好的参考对象。人类的智力是逐渐进步的,他们首先有能力解决简单的任务,然后是更复杂的任务等等。

我对自闭症了解不多,除了汤姆·克鲁斯主演的好莱坞电影《雨人》(1988 年)。但如果我们要将 GHC 与人类进行比较,GHC 看起来就像电影中那个自闭症角色。它可以很聪明,可以快速解决复杂的难题,但它可能会在非常简单的任务上失败

我会把 GHC 这样的人工智能系统归入自己的类别。它们的速度和巨大的内存,以及快速生成大量文本/代码的能力使它们无法与人类相比。这就像一个白痴,他的记忆力和数学能力比任何人都好一百万倍,但在简单的问题面前仍然是个白痴。你能说它是愚蠢的吗,因为它不会“逻辑地编写代码”,而是可能在内存中搜索数百万行代码并比你更快地找到问题的解决方案?

7 体验之后,我现在如何使用 GitHub Copilot

7.1 GitHub Copilot 犯了许多 C# 错误

关于代码辅助生成,GHC 令人大失所望**,它无法始终正确使用 C# 语法,也无法自行检查 C# 属性/方法的存在**。这绝对不是人们期望从机器身上看到的。我的感觉是它根本无法进行逻辑推理,否则,它应该能够始终遵循简单的语法规则,而不会因多余的括号而造成混乱,也不会对不存在的 C# 类方法或属性产生幻觉。

令人震惊的是,当要求 GHC 添加注释时,它删除了活动代码行,因为类似的代码行被注释掉了。GHC**并不完全理解什么是“活动代码行”,**否则它不会删除它。它似乎只是看到某种文本,并生成“相似”的文本。更像是一个拥有巨大内存和速度的孩子在玩弄代码,而不是广告中所说的“结对程序员”或“同伴程序员”。

7.2 何时使用 GitHub Copilot

所以,我有编码任务要做,玩 GHC 很有趣,但现在是时候认真了。我的时间有限,我的精力需要集中起来,富有成效。

  • 我经常使用 GHC 的“幽灵测试”,对其进行审查,并在我喜欢时接受建议。它不会浪费我的精力,文本会直接弹出到我的 VS2022/C# 项目中,有时它很有用,有时看看 AI 认为我现在应该做什么会很有趣,阅读 AI 建议也很有趣
  • 我在我的 VS2022/C# 项目中选择一个文件中的一部分代码,并要求进行一些更改或评论。GHC 可以很好地理解此类任务。我专注于有限的几行代码,可能是 50 行,并征求建议。有时 GHC 的建议很有用,但很多时候它无法理解我想要什么或给出错误的答案。即使在 3-4 次聊天提示之后,它也可能迷失方向,例如我需要哪个特定的 Bootstrap CSS 类等简单问题。但是,我已经完全控制了它,它并没有浪费我太多时间。如果它不知道答案,我会去谷歌寻找解决方案。
  • 我使用 GHC 文本提示页面来请求生成具有明确功能的代码片段或小函数。GHC 非常适合这类任务。在这里,它有时确实非常出色,但有时它会给出错误答案的代码片段。不能保证 GHC 会在这里成功,但如果成功了,那就太棒了
  • 我不再尝试同时涉及 3-4 个文件的较大更改,因为与 GHC 聊天很麻烦,也很费力。更糟糕的是,每次 GHC 干预后生成的代码都需要重新阅读,因为人们永远不确定 GHC 还会更改什么。使用 GHC 执行此类任务浪费我的时间。答案充其量是不完整的,有很多错误,比如不存在的 C# 属性和方法(它产生幻觉了?)。它没有紧密遵循给定的模式,因此我需要仔细阅读 VS2022/C# 项目中生成的代码,因为它可能会删除一行代码或添加一些自己的代码,这在特殊情况下是错误的。此外,审查 GHC 提供的每个答案非常耗时耗力,那是一台可以永远生成示例代码新迭代的机器。而我只是一个凡人,我可能需要全神贯注地花 10 分钟来审查 GHC 在 2 秒内生成的 300 行 C#/Razor/CSS/JS 代码。如果我要求它重新生成答案,也就是给我一个新的解决方案,我需要从头开始重新审查所有内容。
  • 我在想,为什么它会对众所周知且常用的 API(例如与 Http 上下文相关的 API)中不存在的 C# 属性和方法产生幻觉?也许它从 .NET4.8 Framework 中复制了一个代码片段,而该方法在 .NET Core 中不再存在……但是,对于我 VS2022 项目中的 C# 类(例如 EF8 类),它似乎并没有读取它们,它只是试图猜测,一定有一个名为 CustomerId 的主键,但实际上它的名称不同,所以我需要手动打开 EF8 类并复制粘贴属性的正确名称。
  • 我不相信“适当的上下文”故事,而只是相信GHC 这个工具不够智能,无法完成严肃的工作,直接编写代码比与 GHC 无休止地聊天更快。
  • 那个“适当的背景”故事是生产 AI 工具的公司在推卸责任,试图将无法正确使用 AI 产品的责任推给开发人员。所以,我已经对“快速工程”有了足够的了解,并正在认真努力利用 GHC 在我的 VS2022/C# 项目中为我生成代码,但失败了。我甚至计划将 GHC 用于适合它的任务,遵循我制作的模式(如 HTML 表)并生成类似的代码,但不,GHC 还不够好。总而言之,对于涉及 4 个文件的分配的基于模式的任务,它生成的混乱多于有用的代码
  • 我回到了处理 UI 模式文件的老方法。例如,基于非常相似的“ListOfCustomers”UI 表单创建“ListOfContracts”HTML(相当高级的 AJAX 表单)。我复制并重命名文件。然后,我使用文本编辑器 Find-Replace 修改 VS2022/C# 项目中的表单。虽然速度很慢,但进度有保证,不会出现缺少代码行或添加意外代码行的令人讨厌的意外情况。我原本想使用 GHC 来完成这种寻找模式的任务,但直接手动编码更省时、更省力。
  • 我向 GHC 寻求帮助解决问题,但最多只阅读 2 条聊天回复。它的答案往往很冗长,如果它知道答案,我会在 2 次尝试后得到答案,有时这很巧妙。如果它在 2 次尝试后没有给我一个好的答案,我会去 Google 上查找同样的问题。GHC 可以生成大量文本和代码示例并指导你做一些好的事情,但我有一个具体的问题需要解决,没有时间无休止地聊天。GHC存在严重的注意力问题,答案经常偏离主题。

8 人工智能产品的营销非常强大

科技公司对人工智能产品的营销非常强大,因此人们必须努力在当前时刻了解人工智能产品的能力。

  • 营销之所以强大,是因为科技公司已经投入了资金,现在就想获得一些销售和收入。即使实际的人工智能产品尚未“投入生产”,他们也希望**通过“愿景故事”来销售它们。**为了赚钱,营销会编造任何需要的故事。一个好的销售故事不需要准确反映技术现实。
  • 他们正在讨论**“结对编程”,这意味着你不会单独工作,而是“结对”,你们两个一起工作**,一个是你,另一个是 GHC 这样的人工智能专家。也许将来会这样,但截至 2025 年 3 月,我认为 GHC 只是另一个代码辅助工具。
  • 他们谈论的是**“同伴编程”,这意味着人工智能将在你的任务上与你平等**。截至 2025 年 3 月,GHC 在 C# 语法方面仍然存在很大问题,并且对某些 .NET Core API C# 类的确切样子产生了一些幻觉。它无法读取 VS2022 项目中的文件,但GHC 却给了人类任务来检查语法并完成其工作,而事实应该恰恰相反;人类应该将这些无聊的任务委托给人工智能工具。
  • 为了让开发人员自我感觉良好,他们编造了一些富有想象力的营销故事,比如**“驾驶飞机”和“有副驾驶”**。归根结底,你只是一个坐在键盘和显示器前的人,而不是坐在豪华飞机上环游世界。而你拥有的 GHC“AI 伙伴”(截至 2025 年 3 月)在我看来有点自闭,话很多,有时很聪明,有时很愚蠢,最好检查他所做的/说的每一句话,因为听起来他可能知道一些事情,但也可能错了。
  • 许多AI 代码生成器都在一些经过安排的非现实场景中公开演示。它们将演示限制为生成一个 50 行的小函数,如“阶乘”或“斐波那契数”。这些都是众所周知的编程教科书任务。AI 系统擅长数学,甚至可能只是从其巨大的代码片段内存中提取代码样本。这样的演示并不能展示这样的系统在面对现实生活中的 300 多个代码软件开发项目文件时会如何表现。

9 结论

**GitHub Copilot (GHC)(截至 2025 年 3 月)是一款实用的工具,我会继续在编程中使用它。**它有时会提供代码片段和建议,确实为我节省了大量时间。

目前的科技水平使得GitHub Copilot (GHC) 无法胜任同时处理多个文件的复杂任务。在这种情况下,与直接手动编程相比,结果不完整且不省时

一个严重的问题是,GitHub Copilot (GHC) 倾向于对不存在的 C# 方法和属性产生幻觉。GHC生成的代码不会立即编译,需要大量的手动工作才能完成

事情发展得很快,所以上面的说明几乎已经过时了——显然,几天前刚刚发布了一款名为 GPT-4o 的新工具。似乎 AI 科技公司正在幕后悄悄升级这些工具,让它们越来越好,而用户却没有收到任何明确的通知。

一些媒体报道称,大型语言模型 (LLM) 已经达到了极限,单纯通过扩展,它们并没有变得更好。也许我们需要等待人工智能科学的一些理论进展,才能看到人工智能工具的真正进步。

2025 年 3 月的 GitHub Copilot版本很有用,尽管不如宣传的那么好。我们可以预期,随着时间的推移,它会变得更好。但是,仍然需要在现实中观察/验证。

原文地址:https://mp.weixin.qq.com/s/FRvjFWsDvnSogVkRYVJ70A

相关文章:

  • 【Python】保持Selenium稳定爬取的方法(防检测策略)
  • 点云从入门到精通技术详解100篇-基于二次误差和高斯混合模型的点云配准算法
  • Java学习手册:时间戳、时区等相关概念
  • 项目笔记2:post请求是什么,还有什么请求
  • 应力腐蚀环功能及指标
  • 【AI平台】n8n入门2:第一个工作流,调用本地大模型
  • 【金仓数据库征文】_AI 赋能数据库运维:金仓KES的智能化未来
  • 虚拟滚动;懒加载;高并发组件
  • Java与Kotlin在Android开发中的全面对比分析
  • Python Cookbook-6.8 避免属性读写的冗余代码
  • TCP粘包拆包全攻略:Netty实战解决高并发通信难题
  • AKM旭化成微电子全新推出能量收集IC“AP4413系列”
  • iOS/Android 使用 C++ 跨平台模块时的内存与生命周期管理
  • kvm网卡发现的采集信息脚本COLT_CMDB_KVM_NETDISC.sh
  • ViewPager FragmentPagerAdapter在系统杀死应用后重建时UI不刷新的问题
  • 河北省大数据应用创新大赛样题
  • 大模型——快速部署和使用 Deep Research Web UI
  • SOLID 原则在单片机环境下的 C 语言实现示例,结合嵌入式开发常见场景进行详细说明
  • [吾爱出品] 【键鼠自动化工具】支持识别窗口、识图、发送文本、按键组合等
  • 基于AI应用创业IDEA:使用百度搜索开放平台的MCP广场智能推荐MCPServices服务
  • 李公明|一周画记:哈佛打响第一枪
  • 新加坡选情渐热:播客、短视频各显神通,总理反对身份政治
  • 陈平评《艺术科学的目的与界限》|现代艺术史学的奠基时代
  • 国务院同意在海南全岛和秦皇岛等15个城市(地区)设立跨境电子商务综合试验区
  • 好未来:2025财年收入增长51%,下个财年提高整体盈利能力是首要任务
  • 安徽一交通事故责任认定引质疑:民警和司法鉴定人被处罚,已中止诉讼