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
相关文章:
GitHub Copilot (Gen-AI) 很有用,但不是很好
摘要:以下是我在过去三个月中在实际 、 开发中使用 GitHub Copilot Pro 后的想法。由于技术发展迅速,值得注意的是,这些印象是基于我截至 2025 年 3 月的经验。 1 免费试用促使我订阅 GitHub Copilot Pro 我以前读过有关 AI 代码生成器的文…...
K8S Service 原理、案例
一、理论介绍 1.1、3W 法则 1、是什么? Service 是一种为一组功能相同的 pod 提供单一不变的接入点的资源。当 Service 存在时,它的IP地址和端口不会改变。客户端通过IP地址和端口号与 Service 建立连接,这些连接会被路由到提供该 Service 的…...
Base64编码原理:二进制数据与文本的转换技术
🔄 Base64编码原理:二进制数据与文本的转换技术 开发者的数据编码困境 作为开发者,你是否曾遇到这些与Base64相关的挑战: 📊 需要在JSON中传输二进制数据,但不确定如何正确编码🖼️ 想要在HT…...
系统设计(1)—前端—CDN—Nginx—服务集群
简介: 本指南旨涵盖前端、CDN、Nginx 负载均衡、服务集群、Redis 缓存、消息队列、数据库设计、熔断限流降级以及系统优化等模块的核心要点。我们将介绍各模块常见的设计方案与优化策略,并结合电商秒杀、SaaS CRM 系统、支付系统等高并发场景讨论实践技巧…...
Easysearch 基础运维扫盲指南:从 HTTP 到 HTTPS、认证与安全访问全解析
Easysearch 基础运维扫盲指南:从 HTTP 到 HTTPS、认证与安全访问全解析 众所周知,原生 Elasticsearch 默认开启的是 HTTP 明文接口,并且不开启任何身份认证或传输加密。若想启用 TLS/SSL 加密及账号密码验证,通常需要配置繁琐的安…...
在Android中如何使用Protobuf上传协议
在 Android 中使用 Protobuf(Protocol Buffers)主要分为以下几个步骤: ✅ 1. 添加 Protobuf 插件和依赖 在项目的 build.gradle(Project 级)文件中添加 Google 的 Maven 仓库(通常默认已有)&am…...
【数据可视化艺术·应用篇】三维管线分析如何重构城市“生命线“管理?
在智慧城市、能源管理、工业4.0等领域的快速发展中,地下管线、工业管道、电力通信网络等“城市血管”的复杂性呈指数级增长。传统二维管理模式已难以应对跨层级、多维度、动态变化的管线管理需求。三维管线分析技术应运而生,成为破解这一难题的核心工具。…...
2025年的营销趋势-矩阵IP
从 2025 年的营销生态来看,创始人 IP 与智能矩阵的结合确实呈现出颠覆性趋势,这一现象背后隐藏着三个值得深度解析的商业逻辑: 一、创始人 IP 的本质是 "信任货币" 的数字化迁徙 当新能源汽车市场陷入参数混战,雷军将个…...
对接金蝶获取接口授权代码
接口服务信息 using RestSharp; using System.Configuration; using System.Threading.Tasks; public class KingdeeAccessTokenService { private readonly RestClient _client; private readonly KingdeeApiConfig _config; public KingdeeAccessTokenService() …...
探秘 3D 展厅之卓越优势,解锁沉浸式体验新境界
(一)打破时空枷锁,全球触达 3D 展厅的首要优势便是打破了时空限制。在传统展厅中,观众需要亲临现场,且必须在展厅开放的特定时间内参观。而 3D 展厅依托互联网,让观众无论身处世界哪个角落,只…...
prometheus通过Endpoints自定义grafana的dashboard模块
1、prometheus自定义的dashboard模块 文件路径/etc/prometheus/config_out/prometheus-env.yaml - job_name: serviceMonitor/monitoring/pfil/0honor_labels: falsekubernetes_sd_configs:- role: endpointsnamespaces:names:- monitoringrelabel_configs:- source_labels:- …...
java排序算法-计数排序
计数排序的思路 计数排序的基本思路: 确定取值范围: 遍历整个待排序的数组,确定数组中元素的取值范围,找到最小值和最大值。创建计数数组: 创建一个计数数组,其长度为取值范围的大小,用于统计…...
力扣-hot100(滑动窗口最大值)
239. 滑动窗口最大值 困难 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输入:nums […...
每日c/c++题 备战蓝桥杯(P1049 [NOIP 2001 普及组] 装箱问题)
洛谷P1049 装箱问题题解:动态规划在背包问题中的经典应用 题目描述 P1049 装箱问题是一道典型的0-1背包问题变种。题目要求在给定箱子容量V和n个物品体积的情况下,选择若干物品装入箱子,使得箱子的剩余空间最小。最终输出这个最小剩余空间的…...
【尚硅谷Redis6】自用学习笔记
Redis介绍 Redis是单线程 多路IO复用技术(类似黄牛买票) 默认有16个库,用select进行切换 默认端口号为6379 Memcached:多线程 锁(数据类型单一,不支持持久化) 五大常用数据类型 Redis key …...
产品更新丨谷云科技ETLCloud V3.9.2版本发布
谷云科技 ETLCloud 集成平台迎来了每月一次的功能迭代,本月发布版本号为 3.9.2 版本,为用户带来了新的功能、优化改进以及问题修复,以下是详细介绍: 新增组件 本次更新新增了众多实用组件,涵盖了京东和 Shopify 相关…...
Promise并发控制与HTTP请求优化
Promise并发方法对比 #mermaid-svg-tnmGzOkgNUCrbvfI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-tnmGzOkgNUCrbvfI .error-icon{fill:#552222;}#mermaid-svg-tnmGzOkgNUCrbvfI .error-text{fill:#552222;stroke…...
G1垃圾回收器中YoungGC和MixedGC的区别
在 G1 垃圾回收器中,Mixed GC 和 Young GC 的区别主要体现在以下几个方面: 作用范围 Young GC:仅针对年轻代中的Region进行回收,包括 Eden 区和 Survivor 区的 Region。Mixed GC:会回收所有年轻代的 Region 以及部分…...
Web4.0身份革命:去中心化身份系统的全栈实现路径
去中心化身份(DID)技术栈正在重构数字世界的信任根基,本文从密码学协议、存储网络、验证框架三个维度,解析符合W3C标准的身份系统构建方案。通过Hyperledger Aries架构实践,揭示如何实现跨链身份互通、数据主权控制、零…...
iOS/Flutter混合开发之PlatformView配置与使用
环境:Xcode 16.3、Flutter 3.29.2、Dart 3.7.2。 使用背景:需要在flutter界面中嵌入一个iOS原生控件。 步骤: 1. iOS侧实现: 1.1:PlatformView实现 class FLNativeView: NSObject, FlutterPlatformView {private v…...
Libconfig 修改配置文件里的某个节点
THCommandStatus ( { Status "1"; index 5; }, { Status "2"; index 8; }, { Status "3"; index 7; }, { Status "4"; index 0; } ); 比如这是配置文件的内容ÿ…...
【金仓数据库征文】_AI 赋能数据库运维:金仓KES的智能化未来
AI 赋能数据库运维:金仓KES的智能化未来 🌟嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 在当今数字经济飞速发展的时代࿰…...
【MySQL】3分钟解决MySQL深度分页问题
什么是深度分页问题?该如何解决呢?这篇文章展开讲讲 什么是深度分页? 当查询结果集非常大时,需要获取靠后页码的数据,比如第1000页、10000页。 如: SELECT * FROM table LIMIT 10000, 10; -- 获取第10001-10010条…...
GitHub 趋势日报 (2025年04月24日)
本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ 📈 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1kortix-ai/sunaSuna - Open Source Generalist AI Agent⭐ 1105⭐ 3639TypeScript2cloudcommunity/Free-CertificationsA curated …...
一种双模式机器人辅助股骨干骨折钢板植入方法
股骨干骨折是一种常见的高能损伤,微创内固定是首选治疗方法。然而,钢板植入过程中存在不可见、不准确和不稳定等问题。山东大学研究团队提出了一种双模式机器人辅助钢板植入方法,通过神经网络模型规划钢板植入轨迹,然后利用机械臂…...
全球碳化硅晶片市场深度解析:技术迭代、产业重构与未来赛道争夺战(2025-2031)
一、行业全景:从“材料突破”到“能源革命”的核心引擎 碳化硅(SiC)作为第三代半导体材料的代表,凭借其宽禁带(3.26eV)、高临界击穿场强(3MV/cm)、高热导率(4.9W/cmK&…...
IDEA搭建环境的五种方式
一、普通的java项目 File--New--Project 选择Java,jdk选择1.8版本,然后点next 输入项目名和路径名,点击Finish 创建包结构,编写Class类 编写主方法,输出Hello标志完成 二、普通的javaWeb项目 Java Enterprise-- 勾选…...
隐形革命:环境智能如何重构“人-机-境“共生新秩序
引言 在万物互联的时代,环境智能(Ambient Intelligence, AmI)正以“隐形革命者”的姿态重塑人类生活场景。通过分布式传感器、边缘计算与自适应算法的深度融合,AmI构建出能感知、学习并响应人类行为的智慧环境。 本文基于多领域研…...
Mysql唯一性约束
唯一性约束(Unique Constraint)是数据库设计中用于保证表中某一列或多列组合的值具有唯一性的一种规则。它可以防止在指定列中插入重复的数据,有助于维护数据的完整性和准确性。下面从几个方面为你详细解释 作用 确保数据准确性:…...
QuecPython+GNSS:实现快速定位
概述 QuecPython 结合 GNSS(全球导航卫星系统)模块为物联网设备提供开箱即用的定位能力解决方案。该方案支持 GPS/北斗/GLONASS/Galileo 多系统联合定位,为物联网开发者提供从硬件接入到云端服务的全栈式定位解决方案。 优势特点 多体系定…...
【从零开始:自制一个Java消息队列(MQ)】
🚀 从零开始:自制一个Java消息队列(MQ) 在现代分布式系统中,消息队列(Message Queue,MQ)已经成为一个至关重要的组件。它帮助系统在异步处理、负载均衡、解耦等方面提供了强大的支持…...
WHAT - 已阅读书单
指数基金投资指南✅ 我们终将变富 纳瓦尔宝典 围城✅ 许三观卖血记✅ 骆驼祥子✅ 活着 白鹿原✅ 百年孤独 君主论 阿Q正传✅ 蛤蟆先生去看心理医生✅ 思考,快与慢 三体✅ 人类简史:从动物到上帝✅ 明朝那些事✅ 三国演义✅ 中国历代政治得失✅ 资治…...
代码随想录算法训练营第60期第十七天打卡
今天我们继续进入二叉树的下一个章节,今天的内容我在写今天的博客前大致看了一下部分题目难度不算大,那我们就进入今天的题目。 第一题对应力扣编号为654的题目最大二叉树 这道题目的坑相当多,我第一次题目没有看明白就是我不知道到底是如何…...
C 语言数组详解
一、数组的基本概念 在 C 语言中,数组是一种相同数据类型元素的集合,这些元素在内存中连续存储。通过数组,我们可以用一个统一的名字来管理一组相关的数据,并且通过下标(索引)快速访问其中的每一个元素。例…...
ADVB协议同步
关于视频传输,有多种控制时序。协议标准允许设计者选择有限的几个速率的接口来满足 系统设计目标。例如,一些系统使用总线时序发送信息通过line-by-line;在这个案例中, 容器的sof作为vsync同步的点。horizontal line blanding将插入idles,ADV…...
基于LAB颜色空间的增强型颜色迁移算法
本文算法使用Grok完成所有内容,包含算法改进和代码编写,可大大提升代码编写速度,算法改进速度,提供相关idea,提升效率; 概述 本文档描述了一种基于LAB颜色空间的颜色迁移算法,用于将缩略图D的…...
复合材料高置信度 DIC 测量与高级实验技术研讨会邀请函
邀请函 2025年5月8日 上海 中国复合材料学会官网会议通知 您可以点击上方蓝字跳转官网查看官网信息 主办单位: 中国复合材料学会 协办单位: 研索仪器科技(上海)有限公司 数字图像相关技术(Digital Image Correla…...
解决docker部署MySQL的max_allowed_packet 限制问题
报错 Error querying database. Cause: com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large (2,471 > 2,048). You can change this value on the server by setting the max_allowed_packet variable. ### The error may exist in file …...
【XR手柄交互】Unity 中使用 InputActions 实现手柄控制详解(基于 OpenXR + Unity新输入系统(Input Actions))
摘要: 本文主要介绍如何使用 Input Actions(Unity 新输入系统) OpenXR 来实现 VR手柄控制(监听ABXY按钮、摇杆、抓握等操作)。 🎮 Unity 中使用 InputActions 实现手柄控制详解(基于 OpenXR 新…...
C++:继承机制详解
目录 一.继承的概念及定义 一).继承的概念 二).继承定义 1.定义格式 2.继承类型 3.继承类模板 二.基类和派生类间的转换 三.继承中的作用域 四.派生类的默认成员函数 一).4个常见默认成员函数 二).不可被继承的类 五…...
自然语言处理+知识图谱:智能导诊的“大脑”是如何工作的?
智能导诊系统定义与作用 智能导诊系统是一种基于人工智能技术的医疗辅助工具,旨在提高医疗服务效率、改善患者就医体验、降低医院运营成本,通过自然语言处理技术,智能导诊系统能够自动回答患者的常见问题,帮助患者快速了解自己的…...
论文阅读笔记——ZeroGrasp: Zero-Shot Shape Reconstruction Enabled Robotic Grasping
ZeroGrasp 论文 多视角重建计算大、配置复杂,本文将稀疏体素重建(快且效果好)引入机器人抓取且只考虑单目重建,通过利用基于物理的接触约束与碰撞检测(这对精确抓取至关重要),提升三维重建质量将…...
Qt 调试信息重定向到本地文件
1、在Qt软件开发过程中,我们经常使用qDebug()输出一些调试信息在QtCreator终端上。 但若将软件编译、生成、打包为一个完整的可运行的程序并安装在系统中后,系统中没有QtCreator和编译环境,那应用程序出现问题,如何输出信息排查…...
Android Studio开发中Application和Activity生命周期详解
文章目录 Application生命周期Application生命周期概述Application关键回调方法onCreate()onConfigurationChanged()onLowMemory()onTrimMemory()onTerminate() Application生命周期管理最佳实践 Activity生命周期Activity生命周期概述Activity生命周期回调方法onCreate()onSta…...
vite+vue2+elementui构建之 package.json
webpack版本太低,构建依赖太多,头大。 各种查阅资料,弄了一份直通构建vite构建elementUi核心文件, 构建基于开源若依vue2vue3版本改造,感谢开源,感谢若依。 vitevue2elementui构建之 vite.config.js-CSD…...
安全编排自动化与响应(SOAR):从事件响应到智能编排的技术实践
安全编排自动化与响应(SOAR):从事件响应到智能编排的技术实践 在网络安全威胁复杂度指数级增长的今天,人工处理安全事件的效率已难以应对高频攻击(如日均万级的恶意IP扫描)。安全编排自动化与响应…...
《Keras 3 :使用 TFServing 提供 TensorFlow 模型》
《Keras 3 :使用 TFServing 提供 TensorFlow 模型》 作者:Dimitre Oliveira 创建日期:2023/01/02 最后修改时间:2023/01/02 描述:如何使用 TensorFlow Serving 为 TensorFlow 模型提供服务。 (i) 此示例使用 Keras 3 在 Colab 中查看 GitHub 源 介绍 构建机器学习模…...
深入理解C++ 中的list容器
目录 一、引言 二、list的基本介绍 2.1 底层结构 2.2 特性 三、list的使用 3.1 构造函数 3.2 迭代器的使用 3.3 容量相关操作 3.4 元素访问相关操作 3.5 修改器操作 3.6 迭代器失效问题 四、list的模拟实现 4.1 节点定义 4.2 迭代器实现 4.3 list类实现 五、lis…...
附赠二张图,阐述我对大模型的生态发展、技术架构认识。
文章精炼,用两张图说明大模型发展业态方向,以及大模型主体技术架构。(目前还需要进一步验证我的Thought && ideas,等待机会吧.........) 图一:探究大模型三个层次应用方向,浅层次入门简…...
Java实现加密(七)国密SM2算法的签名和验签(附商用密码检测相关国家标准/国密标准下载)
目录 一、国密标准中,关于SM2签名验签的定义二、SM2签名和验签的实现原理1. 前置知识2. 签名生成过程3. 验签过程4. 数学正确性证明5. 安全性与注意事项 三、带userId、不带userId的区别1. 核心区别2.算法区别(1) 哈希计算过程(2) 签名验签流程 四、Java代码实现1. …...