序言
在过去的一段时间里,通义千问团队基于Qwen2 语言模型获得的更多语言模型反馈,专注于创建更智能、更博学的语言模型,最新发布包括了语言模型 Qwen2.5,以及专门针对编程的 Qwen2.5-Coder 和数学的 Qwen2.5-Math 模型。所有开放权重的模型都是稠密的、decoder-only的语言模型,提供多种不同规模的版本,包括:
- Qwen2.5: 0.5B, 1.5B, 3B, 7B, 14B, 32B, 以及72B;
- Qwen2.5-Coder: 1.5B, 7B, 以及即将推出的32B;
- Qwen2.5-Math: 1.5B, 7B, 以及72B。
除了3B和72B的版本外,Qwen2.5所有的开源模型都采用了 Apache 2.0 许可证。您可以在相应的模型仓库中找到许可证文件。此外,本次通义千问团队还开源了性能不输于GPT-4o的 Qwen2-VL-72B。
官方对于Qwen2.5系列本次开源内容,给出了详细的内容阐述,包括:
- 更大的训练数据集:Qwen2.5 语言模型的所有尺寸都在最新的大规模数据集上进行了预训练,该数据集包含多达 18T tokens。相较于 Qwen2,Qwen2.5 获得了显著更多的知识(MMLU:85+),并在编程能力(HumanEval 85+)和数学能力(MATH 80+)方面有了大幅提升。
- 更强的指令遵循能力:新模型在指令执行、生成长文本(超过 8K 标记)、理解结构化数据(例如表格)以及生成结构化输出特别是 JSON 方面取得了显著改进。Qwen2.5 模型总体上对各种system prompt更具适应性,增强了角色扮演实现和聊天机器人的条件设置功能。
- 长文本支持能力:与 Qwen2 类似,Qwen2.5 语言模型支持高达 128K tokens,并能生成最多 8K tokens的内容。
- 强大的多语言能力:它们同样保持了对包括中文、英文、法文、西班牙文、葡萄牙文、德文、意大利文、俄文、日文、韩文、越南文、泰文、阿拉伯文等 29 种以上语言的支持。
- 专业领域的专家语言模型能力增强,即用于编程的 Qwen2.5-Coder 和用于数学的 Qwen2.5-Math,相比其前身 CodeQwen1.5 和 Qwen2-Math 有了实质性的改进。具体来说,Qwen2.5-Coder 在包含 5.5 T tokens 编程相关数据上进行了训练,使即使较小的编程专用模型也能在编程评估基准测试中表现出媲美大型语言模型的竞争力。同时,Qwen2.5-Math 支持 中文 和 英文,并整合了多种推理方法,包括CoT(Chain of Thought)、PoT(Program of Thought)和 TIR(Tool-Integrated Reasoning)。
本文主要是基于Qwen2.5-Coder 快速搭建应用管理系统,那么下面先来了解一下什么是 Qwen2.5-Coder。
Qwen2.5-Coder
自从推出 CodeQwen1.5 以来,通义千问吸引了大量依赖该模型完成各种编程任务的用户,这些任务包括调试、回答编程相关的问题以及提供代码建议。Qwen2.5-Coder 特别为编程应用而设计。在本节展示了 Qwen2.5-Coder-7B-Instruct 的性能结果,并将其与领先的开源模型进行了基准测试,其中包括那些参数量大得多的模型。
Qwen2.5-Coder 是您个人编程助手的优秀选择。尽管它的体积较小,但在多种编程语言和任务中,它的表现超过了众多大型语言模型,展现了其卓越的编程能力。
如何基于 Qwen2.5-Coder 快速搭建应用管理系统,下面开始详细讲解。
快速搭建应用管理系统
在快速搭建应用管理系统之前,我们先要进入到魔塔社区,通义千问Qwen开源模型库地址:https://www.modelscope.cn/organization/Qwen,点击链接地址进入ModelScope 通义千问Qwen 模型详情页
我们今天主要需要使用的通义千问Qwen开源模型 为 Qwen2.5-Coder,点击Qwen2.5-Coder 模型合集进入Qwen2.5-Coder 模型合集详情页,
这里我们选择 通义千问2.5-代码-demo 点击模型tab进入模型详情页,在模型详情页输入我们的需求【基于springboot生成一个项目代码包】
通义千问2.5-代码-demo 生成内容如下,我们按照通义千问2.5-代码-demo 提供的内容以及搭建项目代码包所需要的内容进行逐步操作,
创建Spring Boot项目
我直接按照 通义千问2.5-代码-demo 模型生成内容,先访问 https://start.spring.io/ 然后配置项目信息
这里配置项目信息我选择默认的项目信息,根据具体的环境选择需要的内容 包括开发语言 Java ,项目构建方式 Maven ,Springboot 版本 3.3.6以及打包方式 war ,Java 版本这里没有更低的版本可以选择,只能选择 Java 17
在Spring boot 初始化项目页面选择完之后,按照 Qwen2.5-Coder 的步骤,点击 Generate 生成代码,并将代码导入到本地的开发工具 IDEA
代码成功导入本地开发工具 IDEA中之后,我们为项目配置本地已经安装好的 Maven 工具,
配置完成后等待项目Maven 加载完成即可。
项目结构
这里我们根据 Qwen2.5-Coder 提供的项目结构,
结合 Spring Initializr 生成的初始化项目结构补充后面生成的 代码示例中的 HelloController.java 以及 HelloService.java 文件
这是我们可以直接复制 Qwen2.5-Coder 生成的 HelloController.java 和 HelloService.java
到项目中
package com.example.demo.controller; import com.example.demo.service.HelloService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; public class HelloController { private HelloService helloService; "/hello") ( public String sayHello( (value = "name", defaultValue = "World") String name) { return helloService.getGreeting(name); } }
package com.example.demo.service; import org.springframework.stereotype.Service; public class HelloService { public String getGreeting(String name) { return String.format("Hello, %s!", name); } }
补充了 HelloController.java 以及 HelloService.java 文件 后的代码结构如图
运行项目
springboot项目可以直接使用 DemoApplication 来运行,这里我们选择 DemoApplication.java 文件,执行 Main 函数
执行报错,【java: 警告: 源发行版 17 需要目标发行版 17】 这是因为我本地电脑环境只有 Java 8 ,而刚才在 Qwen2.5-Coder 生成的springboot项目初始化的页面最低只能选择 Java 17,因此这里我在当前的 demo项目中,将 Java 的版本更改回 Java 8。
变更Java 版本
这里假设我们并不懂代码如何变更 Java 版本,那么我们将运行项目时的报错信息直接给 Qwen2.5-Coder ,让 Qwen2.5-Coder 来为我们解决问题
这里我按照 Qwen2.5-Coder 提供的解决方案,先是验证当前本地环境的java 版本
java -version
可以看到目前的 Java 版本是 Java 8,那么按照 Qwen2.5-Coder 将 pom.xml 中的 java.version 更改为当前本地的 Java 版本后再运行项目
修改后的 pom.xml文件如图
变更java 版本后再次启动项目,提示如下错误信息,
java: 无法访问org.springframework.beans.factory.annotation.Autowired 错误的类文件: /D:/Repositories/ricet/org/springframework/spring-beans/6.1.15/spring-beans-6.1.15.jar!/org/springframework/beans/factory/annotation/Autowired.class 类文件具有错误的版本 61.0, 应为 52.0
这里猜想应该是由于Java 版本变更引起的问题,那么我们这里继续处理这个问题,将错误信息放在 Qwen2.5-Coder 询问可知应是Spring Boot 版本与 Java 8 是否兼容问题,根据 Qwen2.5-Coder 给出的提示,
修改项目中springboot相关jar 包版本为 2.7.5,再次执行 mvn clean 之后启动项目尝试
再次执行 mvn clean install 后运行项目,看到项目启动成功
这里需要注意一点就是,项目运行成功后,立刻就结束了,这里看到如下信息 Process finished with exit code 0 ,基于此是什么原因,那么再次将错误信息抛给 Qwen2.5-Coder 来看具体的解决办法。
运行报错
这里我们将控制台打印信息抛给 Qwen2.5-Coder 来看具体的解决办法,输入【Process finished with exit code 0 启动成功就结束了,怎么解决】
这里可以看到 Qwen2.5-Coder 给与的详细分析
按照 Qwen2.5-Coder 详细排查具体的启动类注解配置 @SpringBootApplication 以及 pom.xml文件中关于 spring-boot-starter-tomcat 的配置,这里看到在 Qwen2.5-Coder 的解决方案描述中,spring-boot-starter-tomcat 的 scope 并没有限定具体的范围
而我们通过 springboot 初始化项目生成的项目配置中却指定了具体的 scope 为 provided
这里我将具体的 <scope>provided</scope> 在 Qwen2.5-Coder 页面进行询问可以看到具体的解释信息,可以看到在第一行就已经给出了解决方案
下面继续对于这个标识给出了详细的解释,这样就明白为什么对于刚才的运行项目,已经成功,但是却自动结束
下面我们再来访问我们已经搭建好的应用管理系统。
访问应用
项目运行成功之后,在浏览器中输入 http://localhost:8080/hello?name=Qwen可以看到项目的具体返回结果
应用优化
这时,虽然我们看到我们的应用管理系统已经可以成功运行了,但是页面只有一个 Hello, Qwen! 的返回有点太粗糙了,那么这时候我们可以再让 Qwen2.5-Coder 再帮我们生成一个用户管理的内容,在 Qwen2.5-Coder 对话框输入【生成一个用户管理页面】这时候可以看到具体的信息。
功能优化
按照Qwen2.5-Coder 提供的步骤执行,先在 pom.xml 中添加Thymeleaf依赖
添加依赖完成后,再创建一个 User 的实体类,在项目中添加文件夹 model,复制 User.java 到指定目录下
User 实体类创建完成之后,在 controller 目录下创建创建一个控制器UserController.java 来处理用户管理的请求
控制器UserController.java 创建完成后,继续 在 src/main/resources/templates 目录下创建以下Thymeleaf模板文件 users.html
同时依次创建 add-user.html 、edit-user.html文件
添加完成之后再次看一下具体的目录结构,可以看到我们刚才添加的关于用户管理的页面信息
运行项目,项目启动后,你可以通过浏览器访问 http://localhost:8080/users 来查看用户管理页面
这里可以看到,虽然我们的页面虽然已经不是单单的字母的展示了,但是这里页面没有对应的样式,觉得还是不够丰富。
页面优化
那么我们再继续让 Qwen2.5-Coder 为我们的页面增加一点样式,继续输入内容【为用户管理页面添加样式】,
下面继续按照 Qwen2.5-Coder 提供的操作步骤逐步进行,再次操作完成之后,项目的目录结构发生了如下变化,同时更新了页面,加入了页面css 元素内容
再次运行项目后,访问 http://localhost:8080/users 可以看到页面样式生效了,但是显示效果很不好,
另外根据刚才的对用户管理页面,新增,修改,列表页的操作来看,页面加载比较慢,这个时候打开浏览器 F12 工具查看,可以看到加载时间长是因为获取远程的 bootstrap.min.css 失败导致的,那么这个时候我们就可以将 bootstrap.min.css 下载下来放到项目中,这样就可以减少到远程访问的时间浪费
下载 bootstrap.min.css 放到本地项目中之后,再来看下增加了css 的 bootstrap.min.css 后页面的目录结构,同时将三个页面中对 bootstrap.min.css 的引用都改成从本地项目中引用,
再次启动项目后,在浏览器输入 http://localhost:8080/users 可以看到页面的效果以及 静态文件的加载结果
最终,经过页面优化以及功能优化后的应用管理系统的效果如图
到这里,基于Qwen2.5-Coder 快速搭建应用管理系统的操作就完成了,下面来说一下这次操作的体验感受。
体验感受
这次基于 Qwen2.5-Coder 快速搭建应用管理系统 ,整个过程中对于代码的操作完全基于在Qwen2.5-Coder 提出问题后,返回的操作步骤内容上,个人并没有任何多余的代码编写操作。在提出想要的内容后,通过 Qwen2.5-Coder 的反馈进行逐步的操作,目录结构以及代码类名等也是按照生成的进行编写。最终运行的结果是完全符合预期的。在整个快速搭建应用管理系统的过程中,遇到的问题也同样通过 Qwen2.5-Coder 得到了有效的处理。
可以说,本文基于Qwen2.5-Coder 快速搭建应用管理系统 真正的实现了 0 代码搭建网站应用的操作。虽然项目的整体内容目前看是比较简单,但是可以在当前代码结构的基础上继续通过 Qwen2.5-Coder 来不断丰富完善。这里有一点比较好,就是 Qwen2.5-Coder 生成的内容有上下文的关联,当你后面的操作是基于前面操作的优化时,Qwen2.5-Coder 生成的代码目录结构往往是和上面生成的目录结构是有一定的关联关系的,这样就可以使得每一位想要使用 Qwen2.5-Coder 大模型来进行代码开发的小伙伴可以基于最初的需求一直不断的优化丰富下去,最终形成一个可以落地,比较有功能性的应用管理系统。
最后附上可运行代码链接:https://gitee.com/null_096_1927/demo