一、项目简介
本项目是基于星火大模型实现的一个AI小工具,调用了Spark4.0 Ultra,图片理解,图片生成三个大模型的API接口。大模型的代码使用了讯飞开放平台上的Java示例代码。该系统实现的主要功能是:用户登录、用户注册、修改密码、智能问答、图片理解、图片生成、与AI对话进行数字炸弹游戏、查看图片理解及智能问答的历史聊天记录。
项目 | 内容 |
---|---|
团队博客链接 | |
个人负责任务 | 前期调查导入第三方库、用户登录、用户注册、修改密码、图片生成、数字炸弹、将程序打包成jar包并以exe程序运行 |
git仓库地址 | https://gitee.com/lin-yuan-long/git_spark-ai.git |
参考资料 | https://console.xfyun.cn/services/bm4 |
二、功能架构图
三、个人任务简述
1. 完成的任务和功能
序号 | 完成的功能与任务 | 描述 |
---|---|---|
1 | 前期调查下载第三方库 | 该系统调用了星火大模型的API接口,利用官方所给的示例代码实现与大模型的交互,其中使用了许多第三方库。根据示例代码的依赖信息,手动下载第三方jar包。 |
2 | 登录功能 | 通过反序列化读取文件获取用户信息,再根据用户输入的信息与读取的信息进行校验,实现登录逻辑。 |
3 | 注册功能 | 使用序列化技术将用户输入的注册信息存储到文件。对用户注册信息的输入进行了限制,保证了用户名的唯一性。 |
4 | 修改密码 | 为用户提供了修改用户密码的功能,并同步到文件中。 |
5 | 图片生成 | 基于星火大模型的图片生成接口,根据官方所给的示例代码进一步改进实现的文生图功能。 |
6 | 数字炸弹 | 基于Spark4.0 ultra,以与大模型对话的形式实现的数字炸弹小游戏。 |
7 | 打包成独立可运行的程序 | 利用IDEA的构建功能将整个系统打包成jar包,再使用exe4j将整个系统打包成exe程序,使程序可以脱离编译器独立运行。 |
2. git提交记录截图
四、本人负责功能详解
1. 面向对象设计
包图:
①ui包中主要存储了实现UI界面的类,包含LoginFrame
类,Register
类,MainFrame
类,ChangePasswordFrame
类,AdminFrame
类,HRFrame
类,ImageGenerateFrame
类,HistoryFrame
类等。
② tools
包存储了对于用户信息处理的工具类UsersOperate
和UsersValidate
。
③ game
包中主要存储基于大模型实现的游戏类guessFrame
以及与大模型连接的BigModelNew
类。
④ entity
中存储了user
类,主要用于存储用户信息
⑤ demo
中存储了智能问答向大模型发起连接的工具类BigModelNew
。
⑥ generate
包中主要存储关于图片生成的类。包含MainApplication
和Myutil
类,都是向大模型发起连接的类。
⑦ understand
包中存储图片理解相关类,包含与大模型交互的BigModelNew
类,ImageUtil
类,ImageHistoryFrame
类,ChooseFrame
类。
类与类之间的关系:
-
用户管理:
LoginFrame
和Register
通过UsersOperate
和UsersValidate
进行用户信息的读取和验证。AdminFrame
用于管理员管理用户信息。ChangePasswordFrame
用于用户修改密码,修改成功后返回LoginFrame
进行重新登录。
-
主功能:
MainFrame
提供功能入口,用户可以通过菜单栏选择HRFrame
、ImageGenerateFrame
、guessFrame
和ChooseFrame
。HRFrame
通过BigModelNew
调用大模型API,获取答案,并通过 HistoryFrame 查看历史记录。ChooseFrame
提供一个可选择图片的问答功能,通过BigModelNew
调用大模型API,生成图像,并通过ImageHistoryFrame
查看历史记录。guessFrame
提供数字炸弹游戏功能,该功能也是利用BigModelNew
与大模型建立连接,通过与大模型进行对话的形式进行游戏ImageGenerateFrame
也是利用MainApplication
和Myutil
类与大模型建立连接,实现通过文字生成图片的功能
-
历史记录:
HistoryFrame
和ImageHistoryFrame
分别用于查看智能问答和图片理解功能的历史记录。 -
辅助功能:
BigModelNew
提供大模型调用功能,支持HRFrame
、guessFrame
等需要与大模型进行交互的功能
UsersOperate
和UsersValidate
提供用户信息操作和验证功能,支持LoginFrame
和Register
,实现对用户信息的操作。 -
类图如下图所示:
2. 图片生成
主要技术:HTTP客户端请求(调用示例代码)、JSON处理、图像处理、SwingGUI。
难点及解决办法:
- 难点:生成符合要求的鉴权 URL,处理 HTTP 请求的头信息和参数。
解决方法:代码示例中使用okhttp3
库生成鉴权 URL,确保所有必要的参数和签名都正确。 - 难点:构建复杂的 JSON 请求体,确保所有字段都正确无误。所给示例代码在构建请求体时程序无法正常运行,需手动修改。
解决方法:用如下图所示的代码逐步构建 JSON 对象,逐层添加字段,确保每个字段都符合 API 要求。 - 难点:将生成的图像字节数组转换为 BufferedImage,并显示在 GUI 中。
解决方法:使用javax.imageio.ImageIO
读取字节数组为BufferedImage
,使用javax.swing.ImageIcon
将BufferedImage
显示在JLabel
中。 - 难点:处理用户输入事件,如按钮点击和键盘事件,确保界面响应及时。
解决方法:使用ActionListener
和KeyAdapter
处理按钮点击和键盘事件。
使用JFileChooser
处理文件保存操作,确保用户可以方便地保存生成的图像。
关键代码截图:
3. 数字炸弹
关键技术:SwingGUI界面的设计
难点:结合BigModelNew将需求发送给大模型,并且要设计一个直观且友好的用户交互界面。
解决方法:
使用 JTextArea 和 JScrollPane 组件显示聊天历史,确保内容可滚动。JTextArea 组件让用户输入答案,设置字体和行 wrap 以提高可读性。使用 JButton 组件创建开始、提交、继续和退出按钮,设置边框和布局管理器(GridBagLayout
)以确保按钮排列整齐。
关键代码截图:
4. 程序可独立运行
先利用IDEA构建jar包,再使用exe4j工具,将程序打包成exe文件。
难点:在构建exe文件时,由于路径问题导致图片和相关文件无法加载。
解决办法:修改相关文件的路径,用getResource方法加载图片。
5. 登录功能
主要技术:SwingGUI技术,反序列化技术
难点:获得一个直观的交互界面,对用户登录进行严密校验,还要区分用户登录时的用户类型,进入相应界面。
解决方法:使用了绝对布局管理器,使界面更好排布。使用合理的登录逻辑实现对用户登录信息的校验。
关键代码:
6. 注册功能
主要技术:序列化技术、SwingGUI技术。
难点:将用户注册信息存储,注册界面更直观,对用户类型的区分注册,禁用秘钥文本框。
解决方法:使用了绝对布局管理器,注册界面可以根据自己需要灵活修改,使用序列化技术将用户信息存储于文件中,使用setEnable(false)禁用文本框
关键代码:
7. 修改密码
难点:更新密码到文件中
解决方法:反序列化读取文件中的用户信息,查找到对应用户,使用setPassword将新密码替换掉旧密码。再写回文件中。
关键代码:
五、课程设计总结及展望
5.1 总结
- 在这个项目中完成了图片生成,数字炸弹这两个主要功能,这些功能均是与大模型对话实现的。
- 完成了基础的用户交互界面,登录功能,注册功能,以及用户的分类等功能。
- 本次课设实现了程序的可独立运行,使用exe程序来实现这一功能。
- 使用了git对系统代码进行管理。
5.2 展望
- 对于系统的包的管理并不是很恰当,有一些根据功能划分,有些又根据所属类别划分,存在许多不合理的地方,需要重新对包进行管理,一些类的命名并没有很规范。
- 系统的对第三方库的依赖较多,希望后续可以试着使用Maven来实现这个系统。
六、课程设计感想
- 本次面向对象课程设计使用了科大讯飞的星火大模型实现一个AI小工具,最主要的难点在于与大模型建立联系,而官方网站中正好有相关的代码示例可以借鉴引用,但是那些代码都是基于Maven项目来实现的,对于Maven项目的并不是很熟悉,加上时间匆忙,挑战性较高。在了解相关的Maven知识后,我选择根据Maven项目中的依赖信息去手动下载jar包,解决了将demo导入这个项目的问题。
- 将程序打包成可独立运行的exe程序的过程中,出现了图片读取不了,文件读取不了的问题,在对教程的认真研究过后,通过修改一些文件路径得以解决问题。
- 对于git管理项目,都是从头开始学习的,这次的课设让我对使用git管理项目代码有了一定的了解和使用。