我尝试AI编程主要是解决,我熟悉后台开发,但不熟悉前台的开发,自己写web应用前端页面搞的非常纠结,想通过AI解决这个痛点,于是入坑。
一开始我尝试了阿里的通义灵码,尝试使用akshare库,编制一些简单获取筛选数据代码,但感觉存在一些问题,例如
“使用akshare最新接口,查询全市场行情后,再在其中筛选出600029的最新市场价”
1 可能是因为我选的是开源库接口并不是太稳定,以及按老接口编制的程序信息在数量上压倒最新的接口,代码准确率偏低
注意这里至少有两个问题:
1) ak.stock_zh_a_spot() 是新浪接口,非常的慢
2) akshare新版本把列名的返回值改成中文,而给出的是英语
所以我尝试纠错,要求AI,请使用akshare最新接口,但是结果不尽如人意
AI在编造接口!!! ak.stock_zh_a_spot_newest() 是什么鬼…
注意,我希望是使用较快的 ak.stock_zh_a_spot_em()
2 其次目前通义灵码需要手工粘贴代码,就是只能支持代码片段,很难进行工程化
--------------------失望的分隔线-----------------------------
然后我尝试使用 千问(qwen)大模型的限时免费版本——qwen_max
千问大模型API的申请可参考 ,官方 千问API以及用户经验 [从零开始 通义千问大模型本地化到阿里云通义千问API调用](https://blog.csdn.net/qq_51116518/article/details/134448138?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-134448138-blog-135868918.235%5Ev43%5Epc_blog_bottom_relevance_base6&spm=1001.2101.3001.4242.1&utm_relevant_index=4)
这是支持多轮对话的场景代码(注意我略去了 API token 请自行补充)
from http import HTTPStatus
import dashscope
from dashscope import Generation
from dashscope.api_entities.dashscope_response import Role
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()
messages.append({'role': 'assistant', 'content': whole_message})
if __name__ == '__main__':
conversation_mutual()
我们来看一下测试效果
注意,千问提供的这段代码需要修改才能运行的,例如返回值代码需要修改为sh600029,返回值需要中文等等,问题是首先要解决ak.stock_zh_a_spot() 是很慢的接口,让我们再来精进一下**: stock_zh_a_spot()较慢,请使用akshare较快的实时行情接口,例如东财的接口**
执行代码报错,显然返回值里没有‘当前价’
于是告知AI,stock_zh_a_spot_em()返回值,当前价不存在
AI完成修改,这次执行成功了
当然千问AI仍然有一定的可能胡编接口,需要主人对编程和相关库接口有一定的了解,才能逐步矫正,当然实际应用不需要做到完全没有问题,一般问题,直接改代码就成。
完成代码生成,接下来就要想办法把代码保存到本地可执行文件,很容易想到,千问提供的内容,引入正则表达式筛选’''pyhon … ‘’'之间的内容,保存为py代码脚本即可,
pyContent = re.findall(r'```python(.*?)```', whole_message, re.DOTALL)
我们在接入千问API程序的基础上略做改进
from http import HTTPStatus
import dashscope
import re
from dashscope import Generation
from dashscope.api_entities.dashscope_response import Role
def conversation_mutual():
messages = []
while True:
message = input('user:')
messages.append({'role': Role.USER, 'content': message})
whole_message = ''
responses = Generation.call(Generation.Models.qwen_turbo, 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')
#每轮对话都进行正则过滤
targetPath="/home/cfets/gitea/pyWebTest1/server/" #保存目录
fileName=targetPath+"test2.py" #保存文件名
#print('message:'+message)
#对两个```之间内容进行萃取
pyContent = re.findall(r'```python(.*?)```', whole_message, re.DOTALL)
#print('pyContent:'+pyContent[0])
#保存至文件
with open(fileName, 'w') as f:
f.write(pyContent[0])
print()
messages.append({'role': 'assistant', 'content': whole_message})
if __name__ == '__main__':
conversation_mutual()
保存为test2,执行成功
后续准备利用AI搭建一个Flask轻量级的前后台应用,且听下回分解