这里我们准备让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_file

now_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编程的效果

看一下编码的效果:

落地后的python 落地后的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对特定文件实现特定需求的编码实现,比如在现有前后台应用增加一个功能,而不涉及代码基本不变…

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: