当前位置:AIGC资讯 > AIGC > 正文

实习结帖(flask加上AIGC实现设计符合OpenAPI要求的OpenAPI Schema,让AIGC运行时可以调用api,协助公司门后迁移新后端等)

          终于,笔者的实习生活也要告一段落了,最后的几天都在忙着和公司做AIGC的项目,在搞api的设计以及公司门户网站的迁移。

牛马搬运工(牛马了3天)

        先说这个门户网站的迁移,我原本以为只是换个后端(若依),数据库改改就能用,结果居然是换一个服务器,那就寄了,更寄的是,在转移新闻数据的时候,时间跨度大(20年初),结果就是新闻里面的图片采用的保存技术不同!

DataURIscheme

        DataURIscheme是一种将小数据直接嵌入网页中的技术,减少HTTP请求,提高页面加载速度。(案例转载从https://blog.csdn.net/bbc2005/article/details/73369893)

        例如你有一个图片,希望在前端展示,而他可能需要通过以下这种方式获取

这就是http URI scheme 。

<img src="http://sjolzy.cn/images/A.jpg"/>

而Data URI scheme是将http转为base64

以下这种方式就是Data URI scheme 。


<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAIAAAA7ljmRAAAAGElEQVQIW2P4DwcMDAxAfBvMAhEQMYgcACEHG8ELxtbPAAAAAElFTkSuQmCC" />

它把一些 8-bit 数据翻译成标准 ASCII 字符,虽然人看不懂了,但是

  base64编码把图片文件增加了1/3,Data URI和MHTML同时使用相当于增加了2/3,但CSS和JavaScript可以使用gzip压缩,其可以节省2/3的数据量,所以使用gzip压缩后的最终数据量是(1 + 1/3) * 2 * (1/3) = 8/9,所以最终流量是减少的。还能减少请求数节约大量的时间。

        而通过全选复制下的新闻内容包括了其中的富文本内容,也就导致复制的图片呈现的是base64的字符串,并且他不是一个图片文件,而是链接,一旦弃用原数据库图片就就地升天,这个问题的发现是在转移过程中出现了。

### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large (6,066,082 > 4,194,304). You can change this value on the server by setting the 'max_allowed_packet' variable. ### The error may exist in com/xuanyuan/portal/mapper/PortalInformationMapper.java (best guess) ### The error may involve com.xuanyuan.portal.mapper.PortalInformationMapper.insert-Inline ### The error occurred while setting parameters ### SQL: INSERT INTO portal_information ( information_id, title, cover, content, status, type, sort, create_by, create_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ? ) ### Cause: com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large (6,066,082 > 4,194,304). You can change this value on the server by setting the 'max_allowed_packet' variable. ; Packet for query is too large (6,066,082 > 4,194,304). You can change this value on the server by setting the 'max_allowed_packet' variable.; nested exception is com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large (6,066,082 > 4,194,304). You can change this value on the server by setting the 'max_allowed_packet' variable.

后端数据库塞不进去了,数据太长了,query不足,虽然可以调整mysql策略解决,当问题是导入的图片仅仅是链接而不是本体。以下为同一种图片两种情况的存储,可以发现小图片base64塞满了数据且比原图片还大。

不转码保存但是网页协议落后

        一般来说,网络协议落后也没有什么问题,但是http协议加载不出图片,需要改为https才能访问图片,不过很好的是出问题的这些不再是转base64保存,不用看哪些又臭又长的链接,但是原门户网站只能通过http访问,想要图片则必须将图片新开标签自己在前面加上https,只能说这实在是太折磨了而且不同后端存储的设置也不一样,转图片在改一样不方便。就这样这三天我感觉我都要得腱鞘炎了,我有没有工伤我不知道,但是我的鼠标倒是今创业未半而中道崩殂了。

利用flask搭建后端,设计功能开放api给AIGC使用

这个东西如果你们想尝试,可以去看看文擎毕昇或其他的AIGC平台,对应的就是工具这一块,我们需要实现的,就是设计了flask(python的一个框架)的各个路由分支,和他的功能实现就好了,下面是一个获取系统的运行时长的案例。(注意:理论上api的调用需要使用域名,理论上使用网络隧穿可能是一种无合法域名的实现方式之一,当然如果你是本地部署的,那直接localhost:端口也没问题)

1.	from flask import Flask, jsonify
2.	import time
3.	
4.	app = Flask(__name__)
5.	
6.	start_time = time.time()
7.	
8.	@app.route('/uptime', methods=['GET'])
9.	def get_uptime():
10.	    uptime_seconds = time.time() - start_time
11.	    return jsonify({'uptime': uptime_seconds})
12.	
13.	if __name__ == '__main__':
14.	    app.run(debug=True)

这是与其对应的OpenAPI Schema。

1.	{
2.	  "openapi": "3.1.0",
3.	  "info": {
4.	    "title": "Uptime API",
5.	    "description": "API to check the server uptime",
6.	    "version": "v1.0.0"
7.	  },
8.	  "servers": [
9.	    {
10.	      "url": "http://localhost:5000"
11.	    }
12.	  ],
13.	  "paths": {
14.	    "/uptime": {
15.	      "get": {
16.	        "summary": "Get Uptime",
17.	        "description": "Returns the uptime of the server in seconds.",
18.	        "operationId": "getUptime",
19.	        "responses": {
20.	          "200": {
21.	            "description": "Uptime in seconds",
22.	            "content": {
23.	              "application/json": {
24.	                "schema": {
25.	                  "type": "object",
26.	                  "properties": {
27.	                    "uptime": {
28.	                      "type": "number",
29.	                      "description": "Uptime in seconds"
30.	                    }
31.	                  }
32.	                }
33.	              }
34.	            }
35.	          }
36.	        }
37.	      }
38.	    }
39.	  },
40.	  "components": {
41.	    "schemas": {}
42.	  }
43.	}
44.	

输入的OpenAPI Schema支持json和yaml两种常见格式,都需要满足openapi格式,什么,你不会写,这都ai时代了个,找大语言模型跑一下,或者拿AIGC试着做一个小助手都可以啊!为了保证api的实现唯一接口,需要为每一个操作提供opreationID,人工智能将会自动解析对应需求,在实际应用中将会自动设计数据包发送给后端。

         说起网络隧穿,就想起了以前高中大学的时候搞这个,一个为了mc联机,一个为了去教室拿ipad玩电脑。现在呢,真的感慨时间流逝真快,变化之大,以前网络隧穿效果其实并不好(远程连接),而现在mumu出了一个gamevivewer能更好的远程控制,还能电脑多开桌面,手机控制后台的桌面,当然我用这个只是为了上课签到。。。。早八打开远程定位打卡。

 这个隧穿也陪伴了我好久。

结语

        整个实习我接触了很多新东西,不仅是技术上的,与人处事人际交往也是如此,很多时候纸上得来终觉浅绝知此事要躬行,也是一句真理,回过头才发现,不知不觉就实习了这么长的时间,也有些感慨,大四了,也快毕业了,那以后的人生,也差不多开始完全靠自己书写了。

         估计高中那时的我们都没能想象到今天是怎么样的,没想过人工智能这么强大,没想过qq宠物也有一天会离我们远去,没想过高中电脑课学的VB到今天已经是半截入土的,没想过flash也会收费,未来到底是怎么样的呢,现在的我倒也有点感到伤感,感觉一天一天和时代脱轨,未来到底是怎么样的,希望是美好的吧,也希望每一年也能告诉自己,一年过去了,我也有了新变化,也有了成长吧。

总结

### 文章总结:《实习生活回顾与 技术挑战感悟》
本文回顾了作者实习生活的即将结束阶段,聚焦在项目工作中的几大挑战与技术学习心得。
#### 门户网站迁移挑战
- **任务概述**:作者原以为仅涉及后端更换与数据库调整,却意外发现需迁移服务器,这引发了数据保存技术的巨大挑战。
- **DataURI方案遇到问题**:新闻内容中包含的图片采用了不同保存技术,如DataURI scheme(将数据直接嵌入网页中减少HTTP请求)。由于新闻数据时间跨度大,图片保存方式不一致,导致迁移过程中出现问题。
- **技术细节**:重点是DataURI通过base64编码将二进制数据转换为ASCII字符串嵌入HTML中,提高了加载速度但增加了数据量。同时,迁移过程中遇到MySQL数据库“PacketTooBigException”错误,提示数据包过大,需调整`max_allowed_packet`设置,但根本问题在于图片数据以链接形式而非本体存储。

#### Flask后端API设计
- **项目背景**:作者参与了利用Flask框架为公司AIGC项目设计与开放API的工作。
- **技术实践**:展示了如何创建一个简单的Flask应用来计算并返回服务器的运行时长;介绍了OpenAPI Schema的用法,以标准格式定义API,涵盖信息描述、服务器URL、路径及操作定义等。
- **现代工具应用**:提及了在AI时代下,可以利用大语言模型或AIGC辅助API设计,展现了科技与工具在实际工作中的应用潜力。
#### 个人感悟与未来展望
- **实习收获**:作者不仅掌握了多项技术技能,还在人际交往方面有所成长,体会到了“纸上得来终觉浅,绝知此事要躬行”的道理。
- **对未来的思考**:回顾高中与大学的点滴,感慨时间流逝与技术革新的迅速,反思自身变化并期待未来充满美好与挑战。同时,表达了对未来不确定性的伤感与期待相交织的情绪。
本文通过具体的技术问题和解决方案,不仅展示了作者的实践成果,也深刻反映了其对于技术与人生的思考。

更新时间 2024-10-01