通义灵码试用体验 - 阿里云的 AI 编程辅助工具

阿里云的通义灵码全面开放公测。通义灵码可以在编程时作为辅助。在作用上类似 GitHub 的 Copilot。我之前也试用过类似 Cursor 这样的工具,确实对编程开发有一定的帮助。对于阿里云的通义灵码也是有所期待。

通义灵码支持 VS Code 和 JetBrains IDE。我使用的是 VS Code。在 VS Code 上搜索 “lingma” 并安装通义灵码的扩展即可。

VS Code 扩展

安装之后需要登录阿里云的账号。完成登录就可以使用了。在 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 的实现。

NodeJS 实现

运行之后出现错误:DOMParser is not defined。直接把错误发送给通义灵码,得到了一个使用 jsdom 的解决方案。

JS dom

很明显,获取百度首页HTML的代码需要与之前生成的 getBaiduHot 方法结合起来。getBaiduHot 方法体中的 document 需要提取成参数,然后把 jsdom 解析的 document 对象传过去。通义灵码并不支持 Cursor 的选中代码之后直接提问的方式。选中代码之后只有解释代码、生成单元测试和生成注释的选项。这是通义灵码的一个很大的限制。因此只能手动把 getBaiduHotdocument 提取出来。

把程序运行起来之后会发现,没有输出任何内容。猜测就是 HTML 解析出错了。CSS 类名可能不对。遗憾的是,通义灵码并不能回答这个问题。只能自己查看百度首页的 HTML 代码。

CSS

经过一段时间的调试,就得到了最终的代码。在这个过程中,通义灵码提供了很多帮助,生成了基本的骨架代码。作为程序员,所要做的是调试和修改。

// 提取百度首页上的百度热搜
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);
  });

最后的输出如下所示:

输出结果

总的来说,这一次使用通义灵码的体验还是不错的。不过通义灵码要改进的地方也不少。

版权所有 © 2024 灵动代码