原文:towardsdatascience.com/finding-my-ai-coding-assistant-why-codeium-wins-over-copilot-ef5b1d275599

声明:我与 Codeium 没有合作关系,这不是一篇付费广告,只是我的真实观点。

所以,我在开始新工作之前休假,在我之前的工作中,他们提供了 Google Gemini 和 Github Copilot 编码助手。它们是变革性的,尤其是 Copilot,我最终在我的工作中永久使用它。

然而,自从离开上一份工作后,我就失去了免费使用 Copilot 的好处,没有它进行编码变得非常痛苦。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/0e104124b0ee9740a198cd5701c6e440.png

Wouter De PraetereUnsplash 拍摄的照片

我能感觉到我的生产力正在逐渐停滞。

我拼命地试图再次习惯没有助手进行编码,但仅仅几天后我就无法忍受了。

当然,总有一些我可以免费使用的东西?

因此,我带着以下标准寻找新的编码助手:

  1. 它需要在 Visual Studio (VS) Code 上运行。我是一位狂热的粉丝,我所有的编码都是通过它完成的。

  2. 它需要是免费的。当整个数字行业都在强迫我们订阅、订阅、订阅时,我不想再为另一个月度订阅付费。

  3. 它需要在不设置 API 密钥或注册等麻烦的情况下运行。我只想将其安装到 VSCode 中,尽可能快地开始使用。

  4. 它需要与 Google Gemini/Github Copilot 相当的性能。我已经习惯了他们的表现,所以任何低于这个水平的都会让我的编码体验更加痛苦。

  5. 支持我使用的语言,例如 Python 和 SQL。

介绍 Codeium

因此,为了寻找 Copilot 的替代品,我进入了 VSCode 扩展市场,并在搜索框中输入了 ‘ai’,并不确定我会找到什么。

诚实地说,我纯属偶然发现了这个扩展 Codeium。但使用了一个月多后,我有信心说,它实际上比 Github Copilot 和 Google Gemini 都要好得多。

为什么?好吧…

我给出使用 Codeium 的四个理由,并通过示例展示如何使用其独特的功能,并证明它们的有用性。

1. 快速安装

Codeium 最好的地方是,你点击安装,登录(我使用了我的谷歌账户),然后你就可以开始了。没有麻烦,没有订阅,没有定制配置——我不到一分钟就准备好了,开始编码。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4c3a0d70812f4c2eda1644d6aaa63357.png

图片由作者提供。Visual Studio Code 扩展市场中的 Codeium 扩展页面。

2. Codeium 致力于提供真正免费的服务

我们习惯于认为免费的东西实际上永远不是免费的。所以,我自然地调查了 Codeium 设置了哪些陷阱来从我的钱包中诱骗金钱。

Codeium 是如何免费的?

然而,根据他们专门回答这个问题的页面,他们实际上承诺永远提供免费层,提供无限的自动完成、聊天和命令,没有任何附加条件。

这意味着:

  1. 我可以随意使用这个扩展,而不会被限制或限制速率,这似乎是其他提供商用来说服用户付费购买高级层的常用方法。

  2. 此外,他们明确表示他们不会出售用户数据来训练模型。

坦白说,因为我是在个人层面上使用它,所以我不介意如果第 2 点最终证明是一个大谎言。

最后,在使用此扩展时,他们不会对我设置任何未知的陷阱,这比其他提供商有很大的优势。

我可以随意使用它,没有任何服务中断或不断升级的提醒。

注意:免费提供项可在 MIT 许可证下使用。

3. 上下文感知建议和聊天

从功能上讲,上下文感知对于任何代码助手来说都是必不可少的。没有什么比一个随机代码建议更令人烦恼,这些代码是其他人写的,与我完全无关。

Codeium(如此页面所示)吹嘘(拥有):

  • 打开的文件上下文

  • 仓库范围内的上下文

让我们看看一个展示此功能的例子。

代码建议示例

我有一个 GitHub 仓库,专门存放与我 Medium 文章相关的任何代码:

GitHub – bl3e967/medium-articles:我 Medium 文章的配套代码。

其中相当一部分与使用 Python 可视化网络图有关。

我在所有与图相关的内容中使用的一个常见函数是生成一个由输入参数num_nodes指定的节点数量的随机networkx图。

但目前,它在不同 Jupyter Notebooks 中定义了多次,而它可以在一个公共 Python 文件中声明以供导入。所以…

任务: 假设我想创建一个 Python 文件,包含这个函数,我可以将其导入到所有的 Jupyter 笔记本中。

我创建了一个名为test_graph_generator.py的新文件,导入networkx,并输入def来声明一个函数。然后我让 Codeium 建议接下来应该做什么,同时在一个标签页中打开定义此函数的 Jupyter 笔记本。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/84ae28a973fb7cb3bc736b6bbce7ec5f.png

图片由作者提供。Codeium 提供的代码建议的截图

因此,我们可以看到 Codeium 已经捕捉到我的意图,并完整地建议了正确的函数,并且它自己还识别出需要指定num_nodes参数。

上述截图展示了打开文件上下文意识。

当我重新加载 VSCode 并关闭所有打开的文件时:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/17f4cc25f23a6a88e20125ac496eb031.png

图片由作者提供。Codeium 提供的代码建议的截图(未打开文件)。

你可以看到,即使在没有打开相关文件的情况下,代码建议仍然能够建议正确的函数,这证明了全局上下文意识。

这不是衡量性能最精确或最准确的方法,但你能抓住要点。它完成了工作。

命令示例

这次,我们使用命令功能来指示 Codeium 为我编写这个文件。我故意给出一个非常模糊的提示:“添加生成 networkx 图的函数”。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/9e4f7284c063334690fd44ca8e20c187.png

图片由作者提供。Codeium 命令界面和用于填充 test_graph_generator.py 文件的命令截图。

注意,我使用复数形式的“functions”,因为我知道我实际上在 repo 的不同子目录中定义了两个不同的图形生成函数版本:

  • get_new_test_graph
def get_new_test_graph():
    NUM_NODES = 50
    p = 0.5
    seed = 1
    test_graph = nx.dual_barabasi_albert_graph(n=NUM_NODES, p=p, seed=seed, m1=2, m2=1)

    # append node properties
    nx.set_node_attributes(test_graph, dict(test_graph.degree()), name='degree')
    nx.set_node_attributes(test_graph, nx.betweenness_centrality(test_graph), name='betweenness_centrality')

    for node, data in test_graph.nodes(data=True):
        data['node_identifier'] = str(uuid.uuid4())
        data['feature1'] = np.random.random()
        data['feature2'] = np.random.randint(0, high=100)
        data['feature3'] = 1 if np.random.random() > 0.5 else 0

    # append edge properties
    for _, _, data in test_graph.edges(data=True):
        data['feature1'] = np.random.random()
        data['feature2'] = np.random.randint(0, high=100)

    return test_graph
  • get_new_test_digraph
def get_new_test_digraph(num_nodes:int=50):
    test_graph = nx.scale_free_graph(n=num_nodes, seed=0, alpha=0.5, beta=0.2, gamma=0.3)

    # append node properties
    nx.set_node_attributes(test_graph, dict(test_graph.degree()), name='degree')
    nx.set_node_attributes(test_graph, nx.betweenness_centrality(test_graph), name='betweenness_centrality')

    for node, data in test_graph.nodes(data=True):

        data['node_type'] = 0 if node < 25 else 1

        data['node_identifier'] = str(uuid.uuid4())
        data['feature1'] = np.random.random()
        data['feature2'] = np.random.randint(0, high=100)
        data['feature3'] = 1 if np.random.random() > 0.5 else 0

    # append edge properties
    for _, _, data in test_graph.edges(data=True):
        data['feature1'] = np.random.random()
        data['feature2'] = np.random.randint(0, high=100)

    return test_graph

理想情况下,我希望 Codeium 能够注意到这一点,并将这两个函数一次性添加到这个文件中。

哇,成功了:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/94e4a75e838d276663e1db16033b60f9.png

图片由作者提供。Codeium 通过命令提供的代码建议。

它已经识别出两个不同的版本:

  • 来自“‘Enhance Your Network Visualisations with the Power of a Graph DB’”的一个版本

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e90bfd75c6c3bd145109f2d8280cdfad.png

图片由作者提供。Codeium 将 get_new_test_digraph 函数作为上下文所采用的代码截图。

  • 以及来自“‘The New Best Python Package for Visualising Network Graphs’”的另一个版本

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/fc5bc319148522cea95a9facbc3d8b2a.png

图片由作者提供。Codeium 将 get_new_test_graph 函数作为上下文所采用的代码截图。

4. @提及

我个人非常喜欢这个功能。

通过使用@运算符,你可以具体引用特定的文件、差异、目录、仓库,甚至终端输出,以便在使用聊天功能时更准确地表达你的意图。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ef3e4d4bbca26f7608842942913a91ff.png

图片由作者提供。当在文本框中输入‘@’时显示的聊天窗口截图。

示例 1

这里,我让它在我的整个medium-articles仓库@.中搜索任何生成测试networkx图的函数。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/dc70278496e17ff13aa8586c1a7f879f.png

图片由作者提供。Codeium 聊天输出的截图。

示例 2

这里,我让它总结test_graph_generator.py文件的差异:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/0d39c1b9a7300c0b6566efcedbc1edec.png

图片由作者提供。Codeium 提供的响应截图。

示例 3

你甚至可以引用公开可用的仓库来提问:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ce133dcb5703903b6553958cd4c0cec8.png

图片由作者提供。在聊天窗口中提及‘numpy’的截图。

我认为这非常实用,可以节省大量在 StackOverflow 上查找资料的时间。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/892fa4e5b0b1a5f18901e3d37617160d.png

图片由作者提供。Codeium 对 numpy 问题的响应截图。

一些限制

现在,我已经详细介绍了所有我免费享受的最佳功能。

然而,有一些要点我应该让你知道——这些并不是决定性的,但我感觉有责任让你了解,以便你全面了解 Codeium 提供的内容。

1. 上下文感知限制

我提到免费层提供无限使用自动完成、编辑器聊天、命令指令,这很棒。

然而,免费层显然对可以通过他们的月度订阅扩展的上下文感知有限制。他们似乎选择了无限使用,同时限制他们专有的上下文感知以吸引用户升级到高级计划。

我个人一直在没有问题的情况下使用 Codeium,并且我认为即使是基本上下文感知功能也是一个很大的加分项。但有一点需要注意,因为这并不是“每个人都能免费得到一切”的情况。

2. 模型限制

另一点需要注意是,免费层仅提供对他们的基础模型访问权限,该模型基于Meta 的 Llama 3.1 70B

模型 – Codeium 文档

如果你想要使用其他模型,包括 GPT-4o、Claude 3.5 Sonnett 或 Codeium 的 Premier 模型,你需要订阅他们的付费服务。

3. 价格

如果您选择 Codeium 的付费订阅,那么让我们比较一下与 Copilot 的成本。

Copilot Individual: $10/month vs Codeium Individual: Free

Copilot Individual: $10 vs Codeium pro: $10

Copilot Business: $19/month vs Codeium Teams: $24

Copilot Enterprise: $39 vs Codeium Enterprise: 需要与销售沟通

对于个人用户来说,Codeium 在价格上似乎更有优势。但如果您选择商务/企业级服务,Codeium 可能更贵。这是一个值得思考的问题,是否值得选择商务订阅。

总结

总结来说,以下是我选择 Codeium 作为我的编码助手的原因:

  1. 简单设置 – 无需烦恼即可开始。

  2. 免费且将继续免费,不会影响功能。

  3. 非常好的上下文感知能力。

  4. 非常有用的@提及功能,适用于定制查询。

文章中未提及的功能还有…

  • **上下文固定:**类似于@提及功能,为代码建议和命令固定特定上下文。

  • **自定义聊天指令:**为所有聊天提示添加起始****指令。例如,你的回答应在两句话之内让我们一步步思考,这样您就不需要每次都写出来。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/cb146393360c2756cc5ef78d17cd8c46.png

图片由作者提供。上下文固定和自定义聊天指令设置截图。

…这里只是简单提及,以便您可以自行探索这些功能。我不会尝试解释它们的实用性,因为我没有感觉到需要经常使用它们。

最后,上述演示并不是衡量编码助手性能的最准确方法,读者应意识到上述内容受我自身偏见和生成示例的特定性影响。

然而,我提供的示例表明 Codeium 确实如其名,全功尽善。它完成了工作,没有什么可大惊小怪的。

享受。


希望您喜欢这篇文章。

如果您觉得它有帮助,请点赞(如果您真的非常喜欢,一次可以点 50 个),有任何问题请留言。

如果您对上述提到的任何文章感兴趣,您可以在以下链接找到它们:

为您的图神经网络解释提供交互式可视化

可视化网络图的最新最佳 Python 包

绘制交互式网络图的两大最佳工具

更多信息可以在我的个人资料中找到:

本杰明·李 – Medium

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐