初探腾讯混元大模型进行AIGC、代码优化:瑕不掩瑜,期待未来发展

本文最后更新于 2023年11月23日 下午

不得不说,现在AI模型的发展很快;之前觉得,AI可以帮忙做一些重复性高、有规律的工作,没想到一下子可以进入创造环节,也诞生出AIGC(人工智能生成内容)这个概念。

AIGC&AI画图

目前比较火的模型有OpenAI的ChatGPT、Anthropic的Claude以及专注于代码方面的Codeium等等。

个人测试几天下来,感觉目前腾讯混元大模型综合使用趋向于GPT3.5,目前内测阶段未达到GPT4.0、Claude2.0的通用性。尤其是上下文的联系,非常明显弱后于这些爆火产品

代码生成方面,比较薄弱,总体弱于GPT3.5、Codeium。

本文就和大家来分享一下腾讯混元大模型的使用,并且用于AIGC体验如何? 使用的是小程序版本的腾讯混元大模型: 腾讯混元助手。

代码编写阶段

代码编写阶段,不知道大家怎么用AI的,我个人挺喜欢一些简单的算法交给AI来做,比如:

  • 日志文件和一些原始数据,需要使用正则进行脏数据过滤和提取
  • Java使用stream方法,优雅地进行数据过滤和排序;
  • 前台CSS样式生成,JavaScript与TypeScript语法互转
  • Markdown的表格生成,Mermaid流程图批量定义;
  • Python上使用Pandas操作数据,处理二维数据表

上述都是一些经典的例子,这里我几个我平常经常在其他AIGC模型上使用的例子,对比腾讯混元模型。

注释生成器

为什么我把这个功能放在最前面呢?因为真的很好用。

嘿嘿

在公司里的项目一个接一个,甚至会碰到一些“祖传”项目,原本开发的项目成员都换了好几批人了,突然间需要变更,需要修改多年前就尘封的代码……

这个时候,使用AI先进行注释的生成,实在是太方便。

举个例子,存在JS代码:

JS代码

我们看名字可以知道是用于统计字数的,我们可以询问腾讯混元大模型:

问: JavaScript内存在统计中英字数的方法:{代码内容}

最后的结果…… 差强人意(没错,就是总体还算满意的意思),有了基础的注释辅助:

生成的代码注释

再扩展一下呢?如果你不知道正则表达式中c.match(/[\u4e00-\u9fa5]/)的意义呢?我们是否可以进一步追问呢?

询问正则的意义

可以说,确实是标准答案。大家看到\u4e00-\u9fa5肯定会联想到字符的Unicode编码;但是,我就不信有人可以背的出来Unicode编码具体对应的字符是什么!

这个时候,腾讯混元大模型助手的答案就很方便了,不仅告诉我们为什么要使用字符的Unicode来辨识中文,还告诉我们可能存在的问题;甚至,还告诉我们代码的逻辑,联系上文iTotal加一后代表的具体含意。

就是…… 体验不是很好,小程序…… 不方便复制了~~

哎呀

当然,毕竟现在是内测阶段。不能复制也合情合理。

另外,我有时候也喜欢用来生成SQL注释,不然手敲SQL的中文,有时候还是麻烦点:

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE `short_url` (
`id` bigint NOT NULL,
`base_url` varchar(255) DEFAULT NULL,
`suffix_url` varchar(255) DEFAULT NULL,
`full_url` varchar(1000) DEFAULT NULL,
`short_code` varchar(255) DEFAULT NULL,
`total_click_count` int DEFAULT 0,
`expiration_date` datetime DEFAULT NULL,
`message` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
);

利用腾讯云混元模型生成注释

可以看到,混元模型直接根据字段名和数据库表名,根据大数据完成了注释的猜测,并且生成了注释,还是很方便的。

代码错误分析

当代码出现问题的时候,与其在网上不停地搜索答案,不如直接问个AI?找出问题的答案多快好省!

尤其是编程语言都提前写好了内置的错误的捕捉和抛出,自有函数的报错基本异常类是固定的,在多数情况下是非常好定位的。

举个例子:我最近写了一个Python脚本,批量读取一个文件夹里的所有图片,转为Webp格式,非PNG、JPEG结尾的文件自动拷贝,但是居然报错了TypeError: slice indices must be integers orNone or have an _index_method,于是进行提问:

问: Python3 在写了if not (file.endswith('png', 'jpeg', 'jpg')后运行报错TypeError: slice indices must be integers orNone or have an _index_method?

首先,我们分析原因;file.endswith是用来判断文件名的末尾是什么字符串?经常用于粗略判断文件的类型;为什么会报错呢?原因就是这个方法传入的参数:

PyCharm上看方法源码

这样看过去,我们传入『’png’, ‘jpeg’, ‘jpg’』,可以触发哪一个方法呢?实际我们触发def endswith(self, suffix, start=None, end=None),这也是为什么,我们的程序会报错的原因。需要传入的是『开始位置』和『结束截取位置』,但是我们传入的却是字符串“jepg”和“jpg”

分析结束,现在看看混元大模型如何进行回答呢?(节选):

腾讯混元模型的回答

混元模型,轻松定位了代码的问题,这一点和GPT3.5和GPT4.0是一样的,不同的是,GP4.0(好像有点大材小用了)回答的内容会少一些,可能是为了节约Token?

GPT4.0的回答比较简略

综合看二者的回答…… 说实话,我还是更喜欢GPT4.0的回答。混元模型虽然解释了我代码想要运行的最终效果: 匹配文件扩展名是不是在限定范围内。

慢!听我解释

混元模型并没有告诉我,file.endswith()函数究竟为什么会报错。实际上,就是因为传入的参数错误,如果更改为『元组』,触发其他重载方法,并且重载方法可以解析『元组』即可。

莫非是混元模型的数据没有训练到么?非也,如果你进行追问,其实混元模型是可以告诉你的,可能是回答的优先级不一样,模型的侧重有所偏差:

回答就正常多了

代码算法优化

代码的算法优化,可以包含很多方面,比如:for循环嵌套优化、函数的语法转制等等。

首先我们看看函数语法的转制,JavaScript和TypeScript的互相转制,是一个典型的Demo,毕竟TypeScript本质就是严格语法类型版本的JavaScript。但是,如果是写法的转换呢?

现在的Vue3,进行变量和函数的声明,可以使用函数式和组合式。我之前用Vue2的时候,都是用函数式,转到Vue3,伴随一阵“镇痛期”后,逐渐爱上了组合式;虽然Vue3里面,既可以使用函数式,也可以使用组合式,但是这样不利于维护,索性把旧的代码全部换成组合式。

函数式对比组合式

既然这样,有没有更快的进行转换呢?

函数式代码

这个时候,当然可以使用腾讯混元模型啦:

自动函数式

贴到编译器上看看:

编译器上格式化

非常不错,直接转换逻辑为组合式代码,这样可以极大地加快我们代码的统一程度。再优化代码?毕竟newLink.value = decodeURIComponent(url) + "?code=" + code这样的代码,确实有些不雅观:

问: 能否优化代码,避免出现newLink.value = decodeURIComponent(url) + "?code=" + code这样不符合规范的代码。

询问腾讯混元模型进行代码优化

可以看到,混元模型优化为:

编译器上再次格式化

恩,确实是一个很不错的方法;当然,具体取决于自己或者公司的操作风格。比如换成我,我更喜欢这样的写法:

我自己写的代码

后续如果支持开发定制,相信这种代码风格问题,是可以很轻易解决;如果还能“投喂”自己的数据,嘿嘿

嘿嘿

再举个后端Java的例子,我们使用MyBatisPlus,是不是可以选择在Mapper的XML内编写SQL的方法,进行增删改查? 如果需要排序或者内容筛选,除了在XML内部的SQL实现……

我们也可以在Java层,使用后台Java进行计算。比如我就喜欢使用stream进行操作,让我们看看腾讯混元模型会不会用stream,毕竟这可是JDK8开始就支持的:

问: Java语法内,List内部,如何快速调整recordId为8848的对象orderNum属性值为8?并且把调整后的List,使用orderNum完成排序。使用一个Stream完成。

询问混元模型进行Stream操作

可能有点看不清,我们粘贴代码出来细看一下:

编译器内展示Stream代码

非常不错,首先使用map对元素进行遍历和修改,之后在映射完成后,使用集合方法进行排序,也许有一些不足的就是: 为什么不用peek方法取代map呢?感觉使用peek方法取代map可读性会更高些,我们可以再次追问:

问: 为什么不使用peek取代map呢? 可读性会更高吧?

询问为什么不使用peek取代map

同样,我们把代码贴到编译器上,方便预览:

peek取代map效果

非常不错,简直和我平时写的一模一样。本身使用stream的链式编程已经很舒爽了,现在更舒爽了。

那么? 如果公司有新来的应届生,看不懂怎么办? 这个时候,就可以用上文的方法,把混元模型变成“注释生成器”:

帮助应届生了解Stream

哈哈,相信应届生应该也会看得懂。

嘿嘿,Nice

综合上述,使用混元模型辅助操作代码,我们可以洋洋洒洒,写出高效的代码和项目了~~

项目部署

现在很流行分布式部署,并且使用容器化项目;不同于K8s(Kubernetes),你需要掌握巨量的配置、管理和调度知识,甚至是路由的知识;但是,使用Docker,或许是最简单的容器化方法之一(或许没有之一),入门比K8s简单地多。

容器部署

我们问问AI,看看生成的Dockerfile怎么样:

问: 使用Docker部署项目,有一个hexo博客,希望使用容器化部署,Dockerfile如何编写比较好?

首先,如果是我写Dockerfile,我可能这样写:

我自己写的Dockerfile

接下来看看ChatGPT3.5是怎么写的?

GPT3.5是这样写的

怎么说呢? 其实和我写的差不多。

再看看腾讯的混元模型: 其实差不多,就是比较奇怪,混元会先拷贝package,之后进行构建,再拷贝所有文件,如果追问一下,解释的也不是很合理了:

腾讯混元模型编写Dockerfile

可能混元这方面训练的不多。尤其是后续追问,“如何推送到其他服务器?”。

没有进行标签操作就算了,追问两次,就“走丢”了。也许是内测期间,限制了上下文的Token关联:

追问后“走丢”

如果是Claude的话,基本也是没什么问题的:

Claude的回答

亦或者是Docker、K8S这样的容器化部署,内容比较新;加上中文互联网上的资源确实也没外文那么丰富,导致混元模型展示在这一方面比较薄弱。

经典部署

我们看看经典的非容器化部署的话,腾讯混元模型是不是“轻车熟路”?在我看来,个人用户,尤其是刚刚学习Linux的运维朋友,在面对一些Linux常见的运维、部署应用问题,碰到问题是很正常,但是确实让人觉得很棘手

尤其是有时候需要分析系统日志、配置Nginx的关键时间点……

所以,就让我们就看看『Linux命令』和『Nginx基础设置』吧。

问: Linux上,如何使用find命令,找到最近30min内更新的文件?

这个问题实在是太经典了,有时候不知道生成的生成的日志文件在那里? 甚至是攻防AWD比赛时候都会用到:

find命令的回答

其实我自己比较喜欢用命令: find . -cmin -30

于是就追问,使用-mtime-cmin的区别:

-mtime和-cmin的区别

可以说,回答的是相当准确的了。首先解释了-mtime-cmin分别是什么词的缩写,方便用户理解命令字面含意,之后描述命令的实际效果;可以说是标准的正确答案。

至于刚刚部署时候经常要用的Nginx,我们也可以进行提问:

问: Linux配置Nginx的时候,Nginx的Nginx.conf文件中,如何配置数据的反向代理,解决跨域问题?

Nginx的跨域问题

总的来说,回答简单问题,还是都挺让人满意的。并且像Nginx这样,实战数据非常丰富(可能比K8S多一个数量级?)、使用非常广泛的应用,腾讯混元大模型的数据是基本涵盖到的,我们使用其解决一般性的问题,是绰绰有余的。

未来可期

从上文可以看到,腾讯云混元模型,在用于软件设计、编程和维护上面还是非常不错的。中小企业,日后或许就不用高成本地训练自己的模型和建模了,对于企业和个人开发,也是一片向好。如果后续价格可以合适,我相信是一款成熟、稳定的产品。

当然,也存在一些遗憾…… 最让我感觉遗憾的就是上下文的联系。可能是内测阶段,限制了上下文的关联Token,导致对话内容多、或者次数多后,上下文的联系存在一定的偏差

这点在一些较新问题提问的时候,尤为体现。比如:

问: Nuxt3是怎么做到SSR渲染的?这样对SEO有什么好处?

Nuxt3和SSR渲染

可以看到,回答就有些答非所问了。

首先我简单解释一下:Nuxt3确实是一个SSR框架,解决的主要问题就是JavaScript渲染的页面,爬虫无法获取真实DOM。举个例子,当百度、Google和Bing等爬虫,对Vue3JS网站项目进行爬取时候,会爬取到什么内容呢?答案是单页,并且很有可能<body></body>标签内,只存在一个带有ID的元素。

页面请求实际DOM内容

这是因为,页面的DOM元素,是在JavaScript载入后,进行加载渲染的,爬虫类似于API请求,无法进行JavaScript的渲染。而使用SSR框架,也就是服务器端进行渲染,返回渲染后的DOM结果给浏览器,进行达到优化SEO的目的。

腾讯的混元模型,基本上概念是知道的,但是,很明显数据的更新情况不理想,基本回答的是Nuxt2的东西,在Nuxt3开始,Nuxt支持自动装载配置并把默认框架从Webpack切换为Vite,这些看得出来,混元模型并没有训练数据。

同时,并没有给我回答出Nuxt3或者Nuxt2的渲染实现,我想要它解释的其实就是为什么Nuxt可以做到SSR渲染?是如何实现的?​相比之下,我很喜欢Claude的回答,基本和Nuxt官方介绍视频里的内容大同小异:

Claude回答SSR就非常好

与此同时,混元模型也不支持投喂数据,继续追问作用也不是很大;或许是没触发到关键词?

追问腾讯混元模型Nuxt有关内容

首先,Nuxt的官方文档里,并没有介绍使用VueX;并且,我认为还是没有解释核心问题:“如何做到SSR渲染”,并且从使用的结果上看,混元模型并不能链接网络,亦或者获取网页的内容,不然Nuxt3里面重点介绍的Data fetch不至于不讲解。

其次,也可能是模型策略问题? 混元模型可能是优先保证给出数据的精准型,其次才是给出数据的全面性

概括一下,主要的问题是:

  • 模型数据不足,无法推演出Nuxt的SSR内容;
  • 无法联网查询,我传输的数据都是官方,有可能混元模型小程序版本无法联网;

不过,好在这样的情况比较少;现有的模型数据,基本满足开发和运维的日常需要。

END

尽管混元模型目前在一些领域的训练可能还不够充分,导致在某些专业领域的问题上表现较为薄弱,但随着模型的不断优化和数据的不断增加,相信未来的混元模型会为用户提供更加全面和精准的帮助。

虽然有一些小遗憾,但是综合上述内容,混元模型的体验还是可以的。如果后续的API版本,可以“投喂”数据,更可以帮我们处理定制化的代码逻辑了

另外,还有一点非常关键! 小程序实在是太受限了! 就算我现阶段想用混元模型帮我写写代码,存在多个问题:

  • 小程序上,上下滚动是与操作系统反向的;这或许是小程序适配手指滑动问题?
  • 小程序在电脑上使用,无法进行精准的复制;要知道,不能复制,这得多影响开发?(滑稽)
  • 排版问题;代码虽然有代码高亮,但是小程序无法调整窗口大小,导致代码3~4个单词就会换行,严重影响代码的可读性。

希望上面问题,后续能有解决的方案。

另外,肯定会有小伙伴问:

问: 目前腾讯混元模型,相当于ChatGPT3.5还是4.0呢? 对比Claude呢?

这个…… 其实确实不太好比,毕竟训练的数据都不一样,各家也没有公开…… 但是综合体验来说,应该是和ChatGPT3.5差不多。明显感觉弱于Claude2.0。或许在公测和开发API后,有所改变。

总而言之,腾讯云的混元模型对于软件设计、编程和维护等方面有着不错的助力。虽然目前存在一些小的遗憾和局限性,但随着技术的不断进步和模型的不断改进,相信混元模型的未来将会更加可期,为用户提供更好的服务和支持。让我们拭目以待,期待混元模型能在AI技术领域发挥更大的作用!

还不错

彩蛋

哈哈,这里发一个“彩蛋”,正常来说MD5是不可逆的,并且存在多对一的情况。如果问AI,正常应该要懂得拒绝才对,Claude对比GPT,明显就会感觉到,Claude不会的或者无法操作的,它就会拒绝:

拒绝回答

但是,GPT却会回答;有趣的是,它居然回答对了?

居然回答了!

当然,问了一下混元大模型,似乎还是存在“慈祥奶奶的问题”,挺有趣的(虽然给出的原始字符串是错误的…):

“慈祥的奶奶”

不知道后续什么版本会改了,挺有趣的。



初探腾讯混元大模型进行AIGC、代码优化:瑕不掩瑜,期待未来发展
https://www.mintimate.cn/2023/11/23/hunyuanExperience/
作者
Mintimate
发布于
2023年11月23日
许可协议