写点什么

比 Copilot 快两倍以上!在我的开源项目 AI Godot 桌宠中用通义灵码解决问题

  • 2024-11-13
    浙江
  • 本文字数:2208 字

    阅读完需:约 7 分钟


本文作者:plzpj6bp7mjr4,内容选自通义灵码超级个体创新实践大赛,并对部分内容做了微调,感谢作者分享的最佳实践!


最近,阿里的开源大模型刷屏了,我一直都是通义的用户,也本地部署过 Qwen 系列模型,自己也是 AI 代码助手的高度依赖用户,同时也是 AI 项目的开发者。


Qwen 开源模型在开源榜单上大杀四方,所以不得心生几分好感,通义灵码底层基于 Qwen2.5 最新模型,代码补全和问答能力全面升级。


正好最近我正在开发一款开源桌宠软件,链接地址如下:


https://github.com/jihe520/Desktop-Pet-Godot


项目简介:🤖👾🐶一款由大语言模型驱动、Godot 制作的 AI 桌宠,旨在提供一个全能的、丰富的桌面 AI 宠物。



项目使用的是开源的 Godot 游戏引擎,使用的语言是自带的 gdscript,语法类似 Python 但是和游戏引擎绑定更紧密,这个项目对 Copilot 来说,还是有很多难度。


因为该语言语法 API 变化快,godot3 和 godot4 的语法发生大变化,许多 LLM 都是给的 godot3 淘汰的语法,不能给出最新的语法,该语言也比较小众,缺少训练资料,让我来测测通义灵码能力。



难点:


  • 更好的泛化能力,对小众语言学习能力强

  • 对整个大项目理解程度高

  • 训练数据集是否及时更新,能否适应语法 API 的更新变化


以上考察的难点,也是我最关心的点,也算是技术难点吧。


废话少说,接下来开始使用。


首先,我在 VSCode 里装上通义灵码插件,操作很简单,点击扩展-搜索 Tongyilingma,点击下载安装即可。


项目结构

为方便演示,我先让通义灵码整体认识我的项目,这里我使用的是通义灵码本地工程问答能力 @workspace。


当你需要快速了解一个工程、查找工程内的实现逻辑,或有新诉求需要进行代码变更时,可以在通义灵码智能问答窗口中通过 @ 可唤起 @workspace,选中后输入你的问题或诉求,通义灵码可快速结合当前仓库进行工程理解、代码查询、代码问答等,同时可以通过自然语言描述需求,结合当前工程生成简单需求或缺陷的整体修改建议和相关建议代码。


@workspace 怎么用?

1)快速上手熟悉新的代码工程


可以询问当前项目的任何细节,如“项目的结构和功能是什么?”,“订单管理的代码实现在哪”,“如何构建和运行当前项目”。与灵码对话,消除陌生感,快速上手新项目。


2)头脑风暴,协助实现新需求


可以结合当前代码工程,分析用户的需求问题,提供实现代码或头脑风暴。如“如何增加用户鉴权逻辑”,“实现一个功能,批量添加我的收藏里的商品到购物车”,“增加删除文章的接口,包含后端 controller,service,mapper 前端 vue 的变更”等,让灵码快速提供解决方案及代码。

解释代码

我忘记了 Globals.gd 里面的逻辑关系,我便让通义灵码给我解释下,它出乎我的意料,还给出了相关流程图,帮助我更好的理解。开发者用通义灵码可以提高代码理解和调试效率,简化复杂代码、提高协作效率、节省时间。


通义灵码支持代码逻辑可视化,可以把你的每段代码画成流程图,帮助程序员清晰地展示代码逻辑、业务流程、系统架构,还可以绘制时序图、类图、状态图等。通过简单的文本描述生成图表,更直观地展示代码结构、流程和关系。



30秒!用通义灵码画 SpaceX 星链发射流程图

解决 bug

bug 1:保存预设时候,每次按钮会成倍添加


代码如下:


extends Control@onready var presets_container: GridContainer = %PresetsContainerconst PRESET_PANEL = preload("res://send/store_preset/preset_panel.tscn"func _ready() -> void:    Globals.add_new_preset_panel.connect(_load_presets)    _load_presets()func _load_presets():    for preset in Globals.presets:        var preset_panel : PresetPanel = PRESET_PANEL.instantiate()        preset_panel.panel_type = PresetPanel.PanelType.PresetType        preset_panel.label_name = preset        preset_panel.preset = Globals.presets[preset]        presets_container.add_child(preset_panel)
复制代码


出现问题,第一时间找到通义灵码向他提问,他会快速分析问题,并很快给出了优化后的代码!



优化代码如下:


func _load_presets():        # 清除现有的预设面板    for child in presets_container.get_children():        if child is PresetPanel:            child.queue_free()    for preset in Globals.presets:        var preset_panel : PresetPanel = PRESET_PANEL.instantiate()        preset_panel.panel_type = PresetPanel.PanelType.PresetType        preset_panel.label_name = preset        preset_panel.preset = Globals.presets[preset]        presets_container.add_child(preset_panel)
复制代码


通义灵码非常聪明,帮我排查出问题并给出解决措施。通义灵码正确使用了 gdscript 最新的 API,具有很好的泛化能力和学习能力。 并且还在清除前做了个判断,保证代码的健壮性。

bug 2:当点击发送按钮,大模型没有返回内容


首先怀疑是请求模型的数据没有正确加载,我点击按钮时候发现,没有反应,我就让 通义灵码帮我打印一些信息出来,方便调试。发现填写的 API 和数据结构错误,很快的解决了。


不得不说,通义灵码的补全速度很快 比 Copilot 快两倍以上,这点对写代码很重要。

结尾

最后,我有个非常困难的需求:使用 github action 将项目自动化打包。我本人也不是很懂这个 github action。



对于这类不是我此前接触过的新问题,我交给通义灵码,他快速拆解了解决问题的步骤,并给出了示例代码,很快代码跑起来,完成!

发布于: 刚刚阅读数: 3
用户头像

阿里云云原生 2019-05-21 加入

还未添加个人简介

评论

发布
暂无评论
比 Copilot 快两倍以上!在我的开源项目 AI Godot 桌宠中用通义灵码解决问题_阿里云_阿里巴巴云原生_InfoQ写作社区