本文作者: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 = %PresetsContainer
const 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。

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


阿里云云原生
1k 声望302 粉丝