让AI给你写代码,初体验(二)-写一个flask应用

这里我们准备让AI做一个稍微复杂一点任务,写一个前后应用,具体:
前台用html输入股票代码,后台通过akshare的接口程序获取该股票的实时价格,然后返回显示在html

我们先用AI对话看一下,AI会给我们什么编码建议
在这里插入图片描述
在这里插入图片描述
AI建议并不出乎我们意外,一个简单的flask应用即可,后续我们就要修改AI编程的主程序,实现以下几个功能
1 以正则表达式提取,python、html以及可能js程序
2 将这些程序安排在合适的位置,例如html就放在templates目录下,js放在static目录下,py程序放在server的程序下
3 考虑到不是一次可以生成,需要支持多个版本
因此对程序做出修改

from http import HTTPStatus
import dashscope
import re
from dashscope import Generation
from dashscope.api_entities.dashscope_response import Role
import random
import time
# 存文件,按时间和随机数生成版本号
def saveCode(programmingName, content_list):# 生成版本号global code_filenow_time = time.strftime('%Y-%m-%d_%H:%M:%S', time.localtime())i = random.randint(1, 100)codeFile = ""match programmingName:case "python":python_path = "/home/cfets/gitea/pyWebTest1/example/server/"code_file = python_path + "pyTest_" + now_time + '_' + str(i) + ".py"case "html":html_path = "/home/cfets/gitea/pyWebTest1/example/templates/"code_file = html_path + "htmlTest_" + now_time + '_' + str(i) + ".html"case "javascript":js_path = "/home/cfets/gitea/pyWebTest1/example/static/"code_file = js_path + "script_" + now_time + '_' + str(i) + ".js"# 保存至文件if code_file != "":try:content=content_list[0]with open(code_file, 'w') as f:f.write(content)except Exception as e:print('Error: %s' % e)# 正则提取py、html和js文件
def extractCode(replyMessages):# i = random.randint(1, 1000)python_content = re.findall(r'```python(.*?)```', replyMessages, re.DOTALL)saveCode("python", python_content)html_content = re.findall(r'```html(.*?)```', replyMessages, re.DOTALL)saveCode("html", html_content)js_content = re.findall(r'```javascript(.*?)```', replyMessages, re.DOTALL)saveCode("javascript", js_content)# AI对话
def conversation_mutual():messages = []while True:message = input('user:')messages.append({'role': Role.USER, 'content': message})whole_message = ''responses = Generation.call(Generation.Models.qwen_max, messages=messages, result_format='message', stream=True,incremental_output=True)print('system:', end='')for response in responses:if response.status_code == HTTPStatus.OK:whole_message += response.output.choices[0]['message']['content']print(response.output.choices[0]['message']['content'], end='')else:print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (response.request_id, response.status_code,response.code, response.message))print('\n')# 触发存储extractCode(whole_message)print()messages.append({'role': 'assistant', 'content': whole_message})if __name__ == '__main__':conversation_mutual()

在项目中建一个子项目example,作为flask的文件夹,server,static和templates文件分别对应到AI给出代码提取的文件夹
在这里插入图片描述
现在可以尝试一下,回到一开始AI对话,我们仔细看,就会发现AI生成的代码,有不少缺陷,仅列举比较严重的错误
1) 比如后端py程序,倾向于按代码(symble值)获取代码,但我们知道akshare库接口不支持这种方式,需要获得全部行情后再按代码筛选
2) 比如直接运行本地的html会出现跨域的问题,需要在server端运行html,flask需要补充一个跳转

所以,给到AI的需求要比较准确、完整,有可能还需要限制技术路径。 然后执行上述程序,我们给出的需求是
请使用python开发web程序,前端html支持输入股票代码,后端程序利用最新akshare库东财市场数据接口获取全市场行情,然后筛选获取前端输入股票代码的最新价,反显给前端,并且能够通过localhost:5000/index的方式,跳转访问前台网页

看看AI编程的效果
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

看一下编码的效果:

  1. 落地后的python
    在这里插入图片描述

  2. 落地后的html
    在这里插入图片描述
    效果还可以,python存在一些问题,返回值应该是中文而不是英文,我们尝试让AI纠正一下

于是告知AI: stock_df = ak.stock_zh_a_spot_em() 返回值是中文,请修改这部分
我们看看效果
在这里插入图片描述
AI修改了刚才的错误,但是同时AI又把HTML生成了一遍,有点画蛇添足
在这里插入图片描述
但不管怎么样,获得了相对正确的代码。 我们看看第二次落地代码
这是python(看名字的版本时间)
在这里插入图片描述
这是html
在这里插入图片描述
尝试执行,我们手工把python程序改成flaskServer.py 放到example子项目的根目录,再把html文件改成index.html,仍然放在templates目录下

在这里插入图片描述

先启动flask
在这里插入图片描述
然后在浏览器输入 localhost:5000/
跳转到页面,在输入600031,可以看到其最新价格13.75
在这里插入图片描述
至此我们可以总结一下:
AI编码并不是是个绣花枕头,也并不是传统编码方式的一个延续(通过IDE拖拉拽改补),而是可以把文字定义的需求,转化为用户想要的代码,甚至是帮助用户搭一个简单框架。

同时,AI编码并不能取代程序员,而是程序员工作方式和重点会有所改变,就像汽车取代马车,交通工具和相关技术的升级,但并不使得人类进入玄学的领域…

但是仅仅是初体验,还有许多问题要解决,比如对基本相似的输入,AI给出的结果并不稳定,其次到目前位置还不能摆脱,全模式转换,也就是针对一个需求,每次几乎前后台一起生成,尚且不支持,补充需求,对指定文件实现局部修改等等…

当然这并不是不能做到,后面我们会尝试,让AI对特定文件实现特定需求的编码实现,比如在现有前后台应用增加一个功能,而不涉及代码基本不变…

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

柯桥会计培训学校,会计职称考试,考中级会计怎么证明工作年限?

中级会计考试是会计从业人员的重要考试之一,对于中级考生来说,工作年限证明是必不可少的一步。因此,在考中级会计之前,需要对如何证明工作年限进行了解和掌握。 为大家整理了工作年限证明相关信息,一起来看看吧~ 一、…

Rocky Linux 运维工具 ls

一、ls 的简介 ​​ls​ 用于列出当前目录下的文件和目录,以及它们的属性信息。通过 ​ls​命令可以查看文件名、文件大小、创建时间等信息,并方便用户浏览和管理文件。 二、ls 的参数说明 序号参数描述1-a显示所有文件,包括以 ​.​开头的…

5G双域快网

目录 一、业务场景 二、三类技术方案 2.1、专用DNN方案 2.2、ULCL方案:通用/专用DNNULCL分流 2.3、 多DNN方案-定制终端无感分流方案 漫游场景 一、业务场景 初期双域专网业务可划分为三类业务场景,学校、政务、文旅等行业均已提出公/专网融合访问需…

【DDD】学习笔记-领域驱动设计对持久化的影响

资源库的实现 如何重用资源库的实现,以及如何隔离领域层与基础设施层的持久化实现机制,具体的实现还要取决于开发者对 ORM 框架的选择。Hibernate、MyBatis、jOOQ 或者 Spring Data JPA(当然也包括基于 .NET 的 Entity Framework、NHibernat…

Acwing周赛记录

很难得参加一次周赛hhhhh这次参加的是第144场周赛,一共有三道题 AcWing 5473. 简单数对推理 给定两个整数数对,每个数对都包含两个 1∼9 之间的不同整数。 这两个数对恰好包含一个公共数,即恰好有一个整数同时包含于这两个数对。 给定这两…

选择排序,冒泡排序,插入排序,快速排序及其优化

目录 1 选择排序 1.1 原理 1.2 具体步骤 1.3 代码实现 1.4 优化 2 冒泡排序 2.1 原理 2.2 具体步骤 2.3 代码实现 2.4 优化 3 插入排序 3.1 原理 3.2 具体步骤 3.3 代码实现 3.4 优化 4. 快速排序 4.1 原理 4.2 具体步骤 4.3 代码实现 4.4 优化 为了讲…

Linux课程四课---Linux开发环境的使用(vim编辑器的相关)

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

【MySQL】内置函数 -- 详解

一、日期函数 日期:年月日时间:时分秒 1、获得年月日 2、获得时分秒 3、获得时间戳 4、在日期的基础上加日期 5、在日期的基础上减去时间 6、计算两个日期之间相差多少天 7、获得当前时间 ⚪练习 (1)记录生日 (2&…

Flask入门一(介绍、Flask安装、Flask运行方式及使用、虚拟环境、调试模式、配置文件、路由系统)

文章目录 一、Flask介绍二、Flask创建和运行1.安装2.快速使用3.Flask小知识4.flask的运行方式 三、Werkzeug介绍四、Jinja2介绍五、Click CLI 介绍六、Flask安装介绍watchdog使用python--dotenv使用(操作环境变量) 七、虚拟环境介绍Mac/linux创建虚拟环境…

家政按摩上门服务小程序搭建

家政按摩上门服务小程序支持技师入驻申请,用户可以通过在线下单预约家政服务,并根据距离、价格、销量好评度等条件进行筛选和选择。用户可以选择技师进行预约,并填写自己的服务地点和时间,享受上门服务。同时,技师也可…

数据分析-Pandas数据探查初步柱状图

数据分析-Pandas数据探查初步柱状图 数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律? 数据表&am…

在Arcgis中删除过滤Openstreetmap道路属性表中指定highway类型道路

一、导出道路类型并分析 1. 导出道路类型 选中highway属性列,选择汇总→确定 2. 分析 用Excel打开输出表,包含的道路类型如下 0.空值’’ 车辆可行驶道路(和bfmap的并集) 空值(无定义道路) 二、…

基于Vue(提供Vue2/Vue3版本)和.Net Core前后端分离、强大、跨平台的快速开发框架

前言 今天大姚给大家推荐一款基于Vue(提供Vue2/Vue3版本)和.Net Core前后端分离、开源免费(MIT License)、强大、跨平台的快速开发框架,并且框架内置代码生成器(解决重复性工作,提高开发效率&a…

element el-table表格内容宽度自适应,不换行,不隐藏

2024.2.27今天我学习了如何用el-table实现表格宽度的自适应,当我们动态渲染表格数据的时候,有时候因为内容太多会出现挤压换行的效果: 我们需要根据内容的最大长度设置动态的宽度,这边我在utils里面封装了一个js: //…

求两个向量之间的夹角

求两个向量之间的夹角 介绍Unity的API求向量夹角Vector3.AngleVector3.SignedAngle 自定义获取方法0-360度的夹角 总结 介绍 求两个向量之间的夹角方法有很多,比如说Unity中的Vector3.Angle,Vector3.SignedAngle等方法,具体在什么情况下使用…

高性能Server的基石:reactor反应堆模式

业务开发同学只关心业务处理流程。但是我们开发的程序都是运行服务端server上,服务端server接收到IO请求后,是如何处理请求并最终进入业务流程的呢?这里不得不提到reactor反应堆模型。reactor反应堆模型来源于大师Doug Lea在 《Sacalable io …

Unity中URP下实现水体(水面反射)

文章目录 前言一、原理1、法一:使用立方体纹理 CubeMap,作为反射纹理使用2、法二:使用反射探针生成环境反射图,所谓反射的采样纹理 二、实现水面反射1、定义和申明CubeMap2、反射向量需要什么3、计算 N ⃗ \vec{N} N 4、计算 V ⃗…

Mybatis | Mybatis的“入门程序“

Mybatis的入门程序 目录: Mybatis的入门程序一、查询数据根据表 “主键id” 查询数据模糊查询 二、添加数据三、更新数据四、删除数据 作者简介 :一只大皮卡丘,计算机专业学生,正在努力学习、努力敲代码中! 让我们一起继续努力学习&#xff0…

Freesia项目介绍

项目介绍 这是一个Spring Boot Vue的前后端分离项目,实现的是一个通用的后台管理系统。 框架使用 前端使用了layui-vue和layui-vue-admin,分别提供了组件和前端整体架构的支持。 后端使用Spring Boot框架管理 项目技术使用 前端 Layui-vue、Layui…

Java8 Stream操作流10条常用方法

1.基础数据 Data AllArgsConstructor NoArgsConstructor public class User {private String name;private Integer age;private String sex;private String city; //城市private Integer money; //业绩金额 } //准备数据List<User> users new ArrayList<>();use…