真实对比kimi、通义千问、文心一言的写代码能力,到底谁强?

🤖AI改变生活:最近都在说月之暗面的kimi的各项能力吊打国内其他大模型,今天我们真实感受下 kimi、通义千问、文心一言的根据需求写代码的能力。

测评结果让人震惊!

kimi

kimi编程过程

我们先看一下热捧的月之暗面的kimi模型。

第一次运行有错误,很正常,我们继续把错误发给kimi,让他修复。



kimi仿佛进入了错误死循环,始终无法修复错误,我认为他可能上下文理解错乱,所以重新描述了自己的需求,让他重新作答。结果依然无法使用。

而且错误变得很离谱,连包都没有导入。

又经过多轮对话,我发现他始终无法修复自己的错误。
最终我放弃和他的对话。

最终代码:

kimi的代码越改越复杂,使用canvas更复杂,有大部分错误发生在canvas绘制和字体选择上,没编程基础,都无法调试。

import os  
from tkinter import Tk, Button, Label, Entry, filedialog, messagebox  
from PIL import Image  
from reportlab.pdfbase import pdfmetrics  
from reportlab.pdfbase.ttfonts import TTFont  
from reportlab.pdfgen import canvas  
from reportlab.lib.pagesizes import A4  
  
# 注册字体  
def register_font(font_name, font_path):  
    try:  
    pdfmetrics.registerFont(TTFont(font_name, font_path))  
    except IOError as e:  
    print("Error registering font:", e)  
  
# 合并图片到PDF  
def merge_images_to_pdf(folder_path, output_pdf_path):  
    register_font('SimSun', r'C:\Windows\Fonts\simsun.ttc')  # 确保提供正确的字体文件路径  
    pdf = canvas.Canvas(output_pdf_path, pagesize=A4)  
    current_page = 1  
    page_height = pdf._pagesize[1]  
  
    images = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp'))]  
  
    for img_path in images:  
    img = Image.open(img_path).convert('RGB')  # 确保图像为RGB模式  
    width, height = img.size  
    if height > page_height:  
    # 如果图片高度大于页面高度,需要创建新页面  
    pdf.showPage()  
    current_page += 1  
    page_height = pdf._pagesize[1]  
    pdf.drawImage(img, width, height, x=(A4[0] - width) / 2, y=page_height - height)  
  
    pdf.save()  
    messagebox.showinfo("Success", "PDF Created Successfully!")  
  
# 选择文件夹  
def select_folder(entry):  
    folder_path = filedialog.askdirectory()  
    entry.delete(0, 'end')  
    entry.insert(0, folder_path)  
  
# GUI应用程序的主函数  
def main():  
    root = Tk()  
    root.title("Image to PDF Converter")  
  
    Label(root, text="Select the folder containing images:").pack()  
    folder_path_entry = Entry(root, width=50)  
    folder_path_entry.pack()  
  
    Button(root, text="Browse", command=lambda: select_folder(folder_path_entry)).pack()  
    Button(root, text="Run", command=lambda: merge_images_to_pdf(folder_path_entry.get(), "merged.pdf")).pack()  
  
    root.mainloop()  
  
if __name__ == "__main__":  
    main()

结论:kimi代码编写失败。

通义千问

通义千问编码过程

无一例外第一次都会报错。

很惊喜,通义千问修改代码后,代码就运行成功。

我们看下生成的pdf效果。

pdf内容是出来了,我们再让他优化下程序,将UI调大,pdf中图片调成一样大小。

有一个错误,让他修复,修复后成功。

最终UI效果:

最终PDF内容:

最终代码:

通义千问给的代码更少,选择的库img2pdf比较合适。

import os  
import tkinter as tk  
from tkinter import filedialog  
import img2pdf  
  
''' 
模型:通义千问
需求:把一个文件夹中的图片转换成pdf文件,要求有一个界面,可以选择图片所在路径,然后点击运行,可以生产pdf文件,然后输出pdf所在路径。请保证相关的包都导入,如果用到字体,使用宋体常规。
UI大小适中,pdf内容图片一样大小。
''' 
def select_folder():  
    folder_path = filedialog.askdirectory()  
    if folder_path:  
	    pdf_output_path = os.path.join(folder_path, "output.pdf")  
	    images_list = [os.path.join(folder_path, img) for img in os.listdir(folder_path) if img.endswith(('.png', '.jpg', '.jpeg'))]  
	  
	    # 按照文件名排序,确保顺序正确  
	    images_list.sort()  
	  
	    with open(pdf_output_path, "wb") as f:  
		    pdf_bytes = img2pdf.convert(images_list)  
		    f.write(pdf_bytes)  
	  
	    print(f"PDF文件已生成并保存至:{pdf_output_path}")  
	  
  
def main():  
    root = tk.Tk()  
    root.title("图片转PDF工具")  
  
    browse_button = tk.Button(root, text="选择图片文件夹", command=select_folder)  
    browse_button.pack(pady=10)  
  
    root.mainloop()  
  
  
if __name__ == "__main__":  
    main()

结论:通义千问代码编写成功。

上面还有一个小问题,是通义千问给的UI并没有“运行”按钮,如果需要,可以继续让他添加按钮,但是已经很好了。

文心一言

文心一言编码过程

文心一言给的这段代码连编译都错误,很明显下面代码中少了一个右括号

img = img.resize((int(img_width * 0.75), int(img_height * 0.75)), Image.ANTIALIAS  


经过我的提示,它好像明白了,但是给的修正后的代码依然没有添加右括号🙄。
算了,原谅它的无知,我手动添加括号试试。

文心一言后面就和kimi一样,进入了错误循环。
大概又经过4次调试,代码终于调通,能够生成pdf,但是文件内容不完整。

最终代码

文心一言和kimi给的代码非常多,使用canvas库,复杂度更高,更难以调试。

from tkinter import Tk, filedialog, Label, Button, Entry, mainloop  
from PIL import Image  
from reportlab.pdfgen import canvas  
from reportlab.lib.pagesizes import letter  
import os  
  
  
def resize_image(image_path, max_width=None, max_height=None):  
    """  
    Resize an image to fit within the given maximum width and height.  
    Aspect ratio is preserved.  
    """  
    with Image.open(image_path) as img:  
    orig_width, orig_height = img.size  
    if max_width is None and max_height is None:  
    # No resizing needed if no max width or height is specified  
    return img  
    if max_width is None:  
    max_width = orig_width  
    if max_height is None:  
    max_height = orig_height  
  
    # Calculate the scaling factor to fit the image  
    width_ratio = max_width / float(orig_width)  
    height_ratio = max_height / float(orig_height)  
    ratio = min(width_ratio, height_ratio)  
  
    # Resize the image  
    new_size = (int(orig_width * ratio), int(orig_height * ratio))  
    resized_img = img.resize(new_size, Image.ANTIALIAS)  
    return resized_img  
  
  
def convert_images_to_pdf(image_folder, output_pdf):  
    images = [img for img in os.listdir(image_folder) if  
    img.lower().endswith((".png", ".jpg", ".jpeg", ".tiff", ".bmp", ".gif"))]  
    if not images:  
    print("No images found in the folder.")  
    return  
  
    c = canvas.Canvas(output_pdf, pagesize=letter)  
    height = letter[1] - 72  # 72 is the margin at the top  
  
    for img_name in images:  
    img_path = os.path.join(image_folder, img_name)  
  
    # Resize the image to fit the page width (or a specified maximum size)  
    resized_img = resize_image(img_path, max_width=letter[0] - 72)  # 72 is for the left and right margins  
  
    # Calculate the new height based on the resized width to preserve aspect ratio  
    new_height = int((resized_img.size[1] * (letter[0] - 72) / resized_img.size[0])  
  
    # Draw the resized image onto the canvas  
    c.drawImage(resized_img, 36, height - new_height, width=resized_img.size[0], height=new_height)  
  
    # Update the current height for the next image  
    height -= new_height + 12  # 12 is the gap between images  
  
    if height < 36:  # Add a new page if needed  
    c.showPage()  
    height = letter[1] - 72  
  
    # Save the PDF and close the canvas  
    c.save()  
    print(f"PDF saved to: {output_pdf}")  
  
  
def select_directory():  
    directory = filedialog.askdirectory()  
    entry_image_folder.delete(0, 'end')  
    entry_image_folder.insert(0, directory)  
  
  
# 创建GUI界面  
root = Tk()  
root.title('Image to PDF Converter')  
  
# 图片文件夹输入  
label_image_folder = Label(root, text='Select Image Folder:')  
label_image_folder.pack()  
entry_image_folder = Entry(root, width=50)  
entry_image_folder.pack()  
  
# 选择文件夹按钮  
button_select_folder = Button(root, text='Select Folder', command=select_directory)  
button_select_folder.pack()  
  
# 转换按钮  
button_convert = Button(root, text='Convert to PDF',  
                        command=lambda: convert_images_to_pdf(entry_image_folder.get(), 'output.pdf'))  
button_convert.pack()  
  
# 运行GUI主循环  
mainloop()

我想让他继续优化pdf内容,但是接下来再调试,也无法调试成功。放弃吧~

结论:文心一言代码编写失败。

总结

按照编码运行结果排序:通义千问 > 文心一言 > kimi。

按照编码纠错效率排序:通义千问 > 文心一言 > kimi。

按照代码质量排序:通义千问> kimi / 文心一言 。

如果您对测评结果有疑问,欢迎交流,更多大模型案例在公众号首发。

#AIGC #kimi #通义千问 #文心一言 #大模型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/524038.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring之BeanFactoryPostProcessor详解

目录 功能与作用 使用案例 spring提供的常见BeanFactoryPostProcessor 1.EventListenerMethodProcessor 2.BeanDefinitionRegistryPostProcessor 功能与作用 使用案例 spring提供的唯一BeanDefinitionRegistryPostProcessor 总结 功能与作用 参考BeanFactoryPostProce…

[StartingPoint][Tier1]Pennyworth

Important Jenkins是一个用于自动化构建、测试和部署软件项目的开源持续集成和持续部署&#xff08;CI/CD&#xff09;工具。它允许开发团队自动执行和监控在软件开发过程中的重复性任务&#xff0c;例如构建代码、运行测试、部署应用程序等。Jenkins提供了一个易于使用的Web界…

力扣---分隔链表

给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1&#xff1a; 输入&#xff1a;head [1,4,3,2,5,2], x 3 输出&a…

【Java基础】面试题汇总

Java基础面试题1. JVM vs JDK vs JRE 2. 什么是字节码?采用字节码的好处是什么?3. 为什么说 Java 语言“编译与解释并存”&#xff1f;4. AOT 有什么优点&#xff1f;为什么不全部使用 AOT 呢&#xff1f;5. Java 和 C 的区别&#xff1f;6. Java 中的基本数据类型&#xff1…

算法第三十九天-验证二叉树的前序序列化

验证二叉树的前序序列化 题目要求 解题思路 方法一&#xff1a;栈 栈的思路是「自底向上」的想法。下面要结合本题是「前序遍历」这个重要特点。 我们知道「前序遍历」是按照「根节点-左子树-右子树」的顺序遍历的&#xff0c;只有当根节点的所有左子树遍历完成之后&#xf…

代码随想录第32天|455.分发饼干 376. 摆动序列

理论基础 贪心算法核心&#xff1a;选择每一阶段的局部最优&#xff0c;从而达到全局最优。 455.分发饼干 455. 分发饼干 - 力扣&#xff08;LeetCode&#xff09;代码随想录 (programmercarl.com)455. 分发饼干 - 力扣&#xff08;LeetCode&#xff09; 贪心算法理论基础&am…

LeetCode:1483. 树节点的第 K 个祖先(倍增 Java)

目录 1483. 树节点的第 K 个祖先 题目描述&#xff1a; 实现代码与解析&#xff1a; 倍增 原理思路&#xff1a; 1483. 树节点的第 K 个祖先 题目描述&#xff1a; 给你一棵树&#xff0c;树上有 n 个节点&#xff0c;按从 0 到 n-1 编号。树以父节点数组的形式给出&#…

【Vue】Vue3中的OptionsAPI与CompositionAPI

文章目录 OptionsAPICompositionAPI对比总结 OptionsAPI 中文名:选项式API通过定义methods,computed,watch,data等属性方法&#xff0c;处理页面逻辑。以下是OptionsAPI代码结构 实例代码: <script lang"ts">// js或者tsimport { defineComponent } from vu…

HubSpot如何通过自动化和优化客户服务流程,提升客户满意度和忠诚度?

HubSpot通过自动化和优化客户服务流程&#xff0c;可以有效地提升客户满意度和忠诚度。以下是HubSpot实现这一目标的几个关键步骤&#xff1a; 建立清晰的服务流程&#xff1a;首先&#xff0c;HubSpot帮助企业建立清晰、标准化的客户服务流程。这包括明确的服务阶段定义&…

git分支 - 分支简介

分支 几乎每个版本控制系统都有某种形式的分支支持。分支意味着偏离了主开发线&#xff0c;并继续进行工作&#xff0c;而不会影响到主开发线。在许多版本控制系统工具中&#xff0c;这是一个比较昂贵的过程&#xff0c;通常需要创建源代码目录的一个新副本&#xff0c;对于大…

第7章 数据安全

思维导图 7.1 引言 数据安全包括安全策略和过程的规划、建立与执行&#xff0c;为数据和信息资产提供正确的身份验证、授权、访问和审计。虽然数据安全的详细情况(如哪些数据需要保护)因行业和国家有所不同&#xff0c;但是数据安全实践的目标是相同的&#xff0c;即根据隐私和…

链表之双向链表的实现

铁汁们大家好&#xff0c;我们上一篇博客学习了单链表&#xff0c;这节课让我们继续往深学习&#xff0c;学习一下双线链表&#xff0c;话不多说&#xff0c;我们开始吧&#xff01; 目录 1.双向链表 2.顺序表和链表的优缺点 3.双向链表的实现 1.双向链表 1.我们要实现的双线…

Elasticsearch快速上手

基本概念 索引&#xff08;Index&#xff09; 索引是文档的容器&#xff0c;就像关系数据库中&#xff0c;要存储行记录必须先创建数据库和表一样。 类型&#xff08;Type&#xff09; ES6 及之前的版本还存在”类型“的概念&#xff0c;一个索引下可以存储多个类型的文档&am…

探索数据结构:特殊的双向队列

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 双向队列的定义 **双向队列(double‑ended queue)**是一种特殊的队列…

Ant Design Pro | 前端项目初始化

初始化项目 环境确认 这里使用的版本如下&#xff1a; 新建文件夹&#xff08;fapi&#xff09; 执行项目初始化命令 cmd进入命令行执行项目初始化命令&#xff0c;参考官网https://pro.ant.design/zh-CN/ # 使用 npm npm i ant-design/pro-cli -g # fapi-frontend是项目…

树莓派固件烧录教程(2024)

一、烧录工具准备 硬件准备&#xff1a; 16G及以上TF卡和读卡器&#xff0c;TF卡建议高速卡&#xff08;卡的读写速度直接影响树莓派的运行速度&#xff09;。 软件准备&#xff1a;&#xff08;下面二方法选其一即可&#xff09; 方法1&#xff1a;raspberry官方烧录工具R…

【高校科研前沿】中国科学院南京地理与湖泊研究所肖启涛博士为一作在Sci. Bull发文:我国湖泊二氧化碳从大气的源向汇转变

目录 1.文章简介 2.研究内容 3.文章引用 1.文章简介 论文名称&#xff1a;Lakes shifted from a carbon dioxide source to a sink over past two decades in China 第一作者及通讯作者&#xff1a;肖启涛&#xff08;博士生&#xff09;&#xff0c;段洪涛&#xff08;研究…

JavaSE继承和多态(下)

在了解多态之前我们先弄清以下三个概念&#xff1a; 方法的重写向上转型和向下转型动态绑定和静态绑定 一.方法的重写 重写(override)&#xff1a;也称为覆盖。重写是子类对父类非静态、非private修饰&#xff0c;非final修饰&#xff0c;非构造方法等的实现过程 进行重新编写,…

如何使用 langchain 与 openAI 连接

上一篇写了如何安装 langchain https://www.cnblogs.com/hailexuexi/p/18087602 这里主要说一个 langchain的使用 创建一个目录 langchain &#xff0c;在这个目录下创建两个文件 main.py 这段python代码&#xff0c;用到了openAI&#xff0c;需要openAI及FQ。这里只做…

c++的学习之路:16、string(3)

上章有一些东西当时没学到&#xff0c;这里学到了将在补充&#xff0c;文章末附上代码&#xff0c;思维导图。 目录 一、赋值重载 二、带模板的创建 三、析构函数 四、代码 五、思维导图 一、赋值重载 这里的赋值重载就是直接利用交换函数进行把传参生成的临时数据和需要…