通义灵码试用体验 - 阿里云的 AI 编程辅助工具
阿里云的通义灵码全面开放公测。通义灵码可以在编程时作为辅助。在作用上类似 GitHub 的 Copilot。我之前也试用过类似 Cursor 这样的工具,确实对编程开发有一定的帮助。对于阿里云的通义灵码也是有所期待。
通义灵码支持 VS Code 和 JetBrains IDE。我使用的是 VS Code。在 VS Code 上搜索 “lingma” 并安装通义灵码的扩展即可。
安装之后需要登录阿里云的账号。完成登录就可以使用了。在 VS Code 右下角的状态栏里面有通义灵码的图标。
我尝试编写的程序和之前试用 Cursor 是一样的。用 JavaScript 来解析百度首页上百度热搜的标题。
我首先尝试的是从注释生成代码。我输入的一段注释:提取百度首页上的百度热搜。通义灵码生成了下面的代码。通义灵码会给出几个备选项。这个选项看起来最合理。生成的 getBaiduHot
方法用 DOM 来解析 HTML 页面并提取其中的文本。看起来还不错,先保留了。
// 提取百度首页上的百度热搜
function getBaiduHot() {
var hot = [];
var hot_list = document.getElementsByClassName("hot-list")[0].children;
for (var i = 0; i < hot_list.length; i++) {
var hot_item = hot_list[i];
var hot_item_a = hot_item.children[0];
var hot_item_a_text = hot_item_a.innerText;
hot.push(hot_item_a_text);
}
return hot;
}
光有这一个方法也是不够的。我们需要的是完整的程序。于是从 VS Code 的侧边栏打开通义灵码的聊天会话窗口。在这里可以与通义灵码交互。
在聊天框输入:javascript 解析百度首页的内容。通义灵码给出了一段代码实现。可以直接插入到 VS Code 编辑器中,也可以复制。
通义灵码给出的是一个基于 fetch
的实现,在 NodeJS 上跑不了。要求改成 nodejs 实现。通义灵码又给出了一个使用 axios
的实现。
运行之后出现错误:DOMParser is not defined。直接把错误发送给通义灵码,得到了一个使用 jsdom 的解决方案。
很明显,获取百度首页HTML的代码需要与之前生成的 getBaiduHot
方法结合起来。getBaiduHot
方法体中的 document
需要提取成参数,然后把 jsdom 解析的 document
对象传过去。通义灵码并不支持 Cursor 的选中代码之后直接提问的方式。选中代码之后只有解释代码、生成单元测试和生成注释的选项。这是通义灵码的一个很大的限制。因此只能手动把 getBaiduHot
的 document
提取出来。
把程序运行起来之后会发现,没有输出任何内容。猜测就是 HTML 解析出错了。CSS 类名可能不对。遗憾的是,通义灵码并不能回答这个问题。只能自己查看百度首页的 HTML 代码。
经过一段时间的调试,就得到了最终的代码。在这个过程中,通义灵码提供了很多帮助,生成了基本的骨架代码。作为程序员,所要做的是调试和修改。
// 提取百度首页上的百度热搜
function getBaiduHot(document) {
var hot = [];
var hot_list = document.getElementsByClassName("s-hotsearch-content")[0]
.children;
for (var i = 0; i < hot_list.length; i++) {
var hot_item = hot_list[i];
var hot_item_a = hot_item.children[0];
hot.push(hot_item_a.textContent);
}
return hot;
}
const axios = require("axios");
const { JSDOM } = require("jsdom");
axios
.get("http://www.baidu.com/")
.then((response) => {
const parser = new JSDOM(`<!DOCTYPE html>${response.data}`);
const window = parser.window;
const doc = window.document;
var hot = getBaiduHot(doc);
console.log(hot);
})
.catch((error) => {
console.error("Error:", error);
});
最后的输出如下所示:
总的来说,这一次使用通义灵码的体验还是不错的。不过通义灵码要改进的地方也不少。