结合上一篇 让AI给你写代码(六)- 结合语意匹配,引导AI小助手逐步完善代码,新增功能(上)
我们看一个实际的通过提示引导小助手逐步集成构建代码的实例
例子很简单: 获得指定股票最近一定时间的(最)高|开(盘)|(最)低|收(盘)价格,然后画一个K线图
图例说明:
黑体是对话主体,分为
master:主人提示输入
小助手: AI小助手回复
from AI : 千问大模型给出的信息
斜体: 是执行匹配过程,可以验证语意匹配结果
【说明】: 我加的说明,不是程序显示
第一轮,给出初始需求, 获得指定股票最近一定时间的高开低收价格
master:请使用python给出例子,通过akshare接口获取指定股票最近5天的行情,如果股票代码包含“300”,请增加前缀“sz“,例如”300001”转换成“sz300001”,如果股票包含“600”,请增加前缀“sh“,例如"600029"转换成“sh600029”,请先用最新历史行情接口,按个股获取最近5天的开盘价、收盘价,最高价,最低价,返回列表,并用print方法打印数据
tensor([[0.0921, 0.0712, 0.2320, 0.2590, 0.0598]])
torch.return_types.max(
values=tensor([0.2590]),
indices=tensor([3]))
【说明:语意匹配,没有一个高于0.7,因此小助手会提交AI】
from AI:首先,你需要安装akshare库,可以通过pip进行安装:
pip install akshare
然后,你可以使用以下Python代码来实现你的需求:
import akshare as ak
def transform_stock_code(stock_code):
if stock_code.startswith("300"):
return "sz" + stock_code
elif stock_code.startswith("600"):
return "sh" + stock_code
else:
return stock_code # 对于非300和600开头的股票代码,这里假设它们已经是正确格式
def get_recent_5_days_quotes(stock_code):
adjusted_stock_code = transform_stock_code(stock_code)
stock_daily_df = ak.stock_zh_a_spot(symbol=adjusted_stock_code, period="5d")
# 提取开盘价、收盘价、最高价、最低价
quotes_data = [
{
"open": float(row["open"]),
"close": float(row["close"]),
"high": float(row["high"]),
"low": float(row["low"])
} for index, row in stock_daily_df.iterrows()
]
return quotes_data
# 测试
stock_code = "300001"
quotes = get_recent_5_days_quotes(stock_code)
for quote in quotes:
print(quote)
stock_code = "600029"
quotes = get_recent_5_days_quotes(stock_code)
for quote in quotes:
print(quote)
注意:akshare的stock_zh_a_spot
接口可能无法直接获取最近5天的数据,它通常返回的是最新的交易日数据。如果你需要获取最近5个交易日的历史数据,你可能需要调用stock_zh_a_daily
接口并自行处理日期范围。以上代码仅作为逻辑参考,实际获取特定日期范围内的历史行情,请查阅akshare相关文档以获得准确的接口调用方式。
【说明:请注意生成的代码,ak.stock_zh_a_spot这个接口是错的】
第二轮: 试图直接修正 ak.stock_zh_a_spot接口
master:ak.stock_zh_a_spot接口错误,请修正为akshare库获取历史行情接口,并给出代码
tensor([[0.1464, 0.0556, 0.2491, 0.2474, 0.0199]])
torch.return_types.max(
values=tensor([0.2491]),
indices=tensor([2]))
**from AI:**在 akshare 库中,获取沪深A股历史行情数据的正确接口是 stock_zh_a_daily
,以下是示例代码:
import akshare as ak
# 获取沪深A股历史日线行情数据
df_stock = ak.stock_zh_a_daily(symbol="600848", start_date="20200101", end_date="20201231")
# 输出数据
print(df_stock)
上述代码将获取股票代码为 “600848” 的从 2020 年 1 月 1 日到 2020 年 12 月 31 日的历史日线行情数据。
请注意,你需要先通过 pip install akshare
安装 akshare 库。同时,日期格式为 “YYYYMMDD”,并且需要确保输入的日期区间在 akshare 支持的数据范围内。
【说明:大失所望,AI虽然修正了接口,但前面的内容却遗忘了,只好另起炉灶】
第三轮: 重新提出要求
master:请使用python给出例子,通过akshare接口获取指定股票最近5天的行情,如果股票代码包含“300”,请增加前缀“sz“,例如”300001”转换成“sz300001”,如果股票包含“600”,请增加前缀“sh“,例如"600029"转换成“sh600029”,请先用最新历史行情接口,按个股获取最近5天的开盘价、收盘价,最高价,最低价,返回列表,并用print方法打印数据
【说明: copy+paste 第一轮…】
tensor([[0.0921, 0.0712, 0.2320, 0.2590, 0.0598]])
torch.return_types.max(
values=tensor([0.2590]),
indices=tensor([3]))
from AI:首先,确保你已经安装了akshare库。如果没有,可以通过pip进行安装:
pip install akshare
以下是一个示例代码片段,它将获取指定股票最近5天的行情数据并按照要求添加股票代码前缀:
import akshare as ak
# 输入股票代码
stock_code = "300001" # 或 "600029"
# 根据股票代码添加前缀
if "300" in stock_code:
stock_code = "sz" + stock_code
elif "600" in stock_code:
stock_code = "sh" + stock_code
# 获取最近5天的历史行情数据
stock_df = ak.stock_zh_a_daily(symbol=stock_code, adjust="qfq", start_date=(ak.get_today_date() - "5d"))
# 提取开盘价、收盘价,最高价,最低价
data_list = stock_df[["open", "close", "high", "low"]].values.tolist()
# 打印数据
for day_data in data_list:
print(day_data)
注意:akshare的stock_zh_a_daily
接口默认获取的是最近一个交易日的数据,但是目前不支持直接获取最近N天的数据,你需要自己处理日期范围。上述代码中 (ak.get_today_date() - "5d")
是尝试获取五天前的日期,但实际使用时可能需要根据akshare接口的实际情况调整日期获取方式。
另外,akshare库在获取历史数据时,通常是从其数据库中获取,可能无法获取到实时的最近5个交易日数据。如果你需要实时获取最近5个交易日的数据,可能需要寻找其他API或服务。
【说明:这次主要接口终于正确,像那么回事了,但很显然start_date=(ak.get_today_date() - “5d”) 这是胡说八道,但是如果要AI修改,怎么避免重蹈覆辙呢? 】
第四轮: 先保存代码,再打开代码,然后再和修改的需求一起提交
master:请保存代码
tensor([[0.3954, 0.5478, 0.8770, 0.7324, 0.3002]])
torch.return_types.max(
values=tensor([0.8770]),
indices=tensor([2]))
【说明,匹配“保存代码“”成功】
小助手:保存成功
master:麻烦打开文件 pyTest_2024-03-27_10:53:33_57.py
tensor([[0.9382, 0.5697, 0.3258, 0.3463, 0.3775]])
torch.return_types.max(
values=tensor([0.9382]),
indices=tensor([0]))
Error: [Errno 2] No such file or directory: ‘/home/cfets/gitea/pyWebTest1/example/server/麻烦打开文件 pyTest_2024-03-27_10:53:33_57.py’
小助手:打开文件失败: [Errno 2] No such file or directory: ‘/home/cfets/gitea/pyWebTest1/example/server/麻烦打开文件 pyTest_2024-03-27_10:53:33_57.py’ ,请重新输入
【说明,匹配“打开文件“”成功,但文件名忘记加/】
master:麻烦打开文件 /pyTest_2024-03-27_10:53:33_57.py
tensor([[0.9382, 0.5697, 0.3258, 0.3463, 0.3775]])
torch.return_types.max(
values=tensor([0.9382]),
indices=tensor([0]))
小助手: 【说明:反显打开的文件】
import akshare as ak
#输入股票代码
stock_code = “300001” # 或 “600029”
#根据股票代码添加前缀
if “300” in stock_code:
stock_code = “sz” + stock_code
elif “600” in stock_code:
stock_code = “sh” + stock_code
#获取最近5天的历史行情数据
stock_df = ak.stock_zh_a_daily(symbol=stock_code, adjust=“qfq”, start_date=(ak.get_today_date() - “5d”))
#提取开盘价、收盘价,最高价,最低价
data_list = stock_df[[“open”, “close”, “high”, “low”]].values.tolist()
#打印数据
for day_data in data_list:
print(day_data)
master:请修改 ak.get_today_date()接口不存在,请替换成正确的接口,并给出代码
【说明: 要求AI替换接口】
tensor([[0.1946, 0.0094, 0.3125, 0.3662, 0.1470]])
torch.return_types.max(
values=tensor([0.3662]),
indices=tensor([3]))
from AI:首先,ak.get_today_date()
并不是 akshare 库中的一个有效接口。我们可以使用 Python 自带的 datetime 模块来获取今天的日期。然后,根据 akshare 库文档,我们需要在调用 stock_zh_a_daily
接口时传入具体的日期格式而非字符串计算。以下是修改后的代码:
import akshare as ak
from datetime import datetime, timedelta
# 输入股票代码
stock_code = "300001" # 或 "600029"
# 根据股票代码添加前缀
if "300" in stock_code:
stock_code = "sz" + stock_code
elif "600" in stock_code:
stock_code = "sh" + stock_code
# 获取当前日期并推算最近5天的日期
today = datetime.today()
start_date = (today - timedelta(days=5)).strftime("%Y%m%d")
# 获取最近5天的历史行情数据
stock_df = ak.stock_zh_a_daily(symbol=stock_code, adjust="qfq", start_date=start_date)
# 提取开盘价、收盘价,最高价,最低价
data_list = stock_df[["open", "close", "high", "low"]].values.tolist()
# 打印数据
for day_data in data_list:
print(day_data)
这样就可以正确获取并使用最近5天的日期来获取历史行情数据了。
【说明: 这会至少看上去对了,试验一下】
第五轮: 试验一下
master:请执行代码
tensor([[0.4540, 0.2975, 0.6759, 0.9279, 0.3049]])
torch.return_types.max(
values=tensor([0.9279]),
indices=tensor([3]))
[19.97, 19.85, 20.14, 19.7]
[19.79, 19.52, 19.97, 19.49]
[19.51, 19.65, 20.0, 19.44]
【说明: 执行结果】
小助手:执行成功
master:请保存代码
tensor([[0.3954, 0.5478, 0.8770, 0.7324, 0.3002]])
torch.return_types.max(
values=tensor([0.8770]),
indices=tensor([2]))
小助手:保存成功
【说明: 还记得初始需求么? 获得指定股票最近一定时间的高开低收价格—— 现在他做完了,看看保存的文件,并执行一下】
第六轮: 增加一个功能,画K线图,老办法,先打开文件,再新增提示一起喂给AI
master:请打开 /pyTest_2024-03-27_10:56:40_62.py
tensor([[0.7642, 0.3032, 0.2531, 0.3085, 0.4983]])
torch.return_types.max(
values=tensor([0.7642]),
indices=tensor([0]))
小助手:
import akshare as ak
from datetime import datetime, timedelta
#输入股票代码
stock_code = “300001” # 或 “600029”
#根据股票代码添加前缀
if “300” in stock_code:
stock_code = “sz” + stock_code
elif “600” in stock_code:
stock_code = “sh” + stock_code
#获取当前日期并推算最近5天的日期
today = datetime.today()
start_date = (today - timedelta(days=5)).strftime(“%Y%m%d”)
#获取最近5天的历史行情数据
stock_df = ak.stock_zh_a_daily(symbol=stock_code, adjust=“qfq”, start_date=start_date)
#提取开盘价、收盘价,最高价,最低价
data_list = stock_df[[“open”, “close”, “high”, “low”]].values.tolist()
#打印数据
for day_data in data_list:
print(day_data)
master:请在上述程序中增加一个功能,根据data_list 绘制K线图,给出python
【说明: 给出画K线图的需求】
tensor([[0.2303, 0.1861, 0.3891, 0.4901, 0.0989]])
torch.return_types.max(
values=tensor([0.4901]),
indices=tensor([3]))
from AI:为了实现绘制K线图的功能,你需要使用matplotlib和pandas库。这里是一个示例,将上述代码修改并添加绘制K线图的部分:
import akshare as ak
import pandas as pd
from datetime import datetime, timedelta
import matplotlib.pyplot as plt
import mplfinance as mpf
# 输入股票代码
stock_code = "300001" # 或 "600029"
# 根据股票代码添加前缀
if "300" in stock_code:
stock_code = "sz" + stock_code
elif "600" in stock_code:
stock_code = "sh" + stock_code
# 获取当前日期并推算最近5天的日期
today = datetime.today()
start_date = (today - timedelta(days=5)).strftime("%Y%m%d")
# 获取最近5天的历史行情数据
stock_df = ak.stock_zh_a_daily(symbol=stock_code, adjust="qfq", start_date=start_date)
# 提取开盘价、收盘价,最高价,最低价
data_list = stock_df[["date", "open", "close", "high", "low"]].values.tolist()
# 将数据转换为DataFrame以供mplfinance使用
df = pd.DataFrame(data_list, columns=["date", "open", "close", "high", "low"])
df['date'] = pd.to_datetime(df['date'])
# 绘制K线图
mpf.plot(df.set_index('date'), type='candle', volume=False, figsize=(10, 6))
# 显示图形
plt.show()
这段代码首先导入了所需的库,并在获取数据后,将日期列与其他价格列一起处理以便于mplfinance库进行绘图。最后,我们使用mplfinance的plot函数绘制K线图并显示结果。
【说明: 一气呵成,果然不错,试一下…】
第七轮: 试一下
master:请保存文件
tensor([[0.5802, 0.8098, 0.5561, 0.2771, 0.3232]])
torch.return_types.max(
values=tensor([0.8098]),
indices=tensor([1]))
小助手:保存成功
master:请执行代码
tensor([[0.4540, 0.2975, 0.6759, 0.9279, 0.3049]])
torch.return_types.max(
values=tensor([0.9279]),
indices=tensor([3]))
小助手:执行失败: serWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown
plt.show(block=config[‘block’]).
UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown
plt.show(): .
【说明: 不给面子啊… 按保存的文件执行,也是这个错,查了一下,貌似和mpl的交互模式有关,但很遗憾没有解决… 只好另外想办法 】
第八轮: 改用Pecharts画K线,先打开,后修改,然后一起喂给AI
master:请打开/pyTest_2024-03-27_11:03:05_70.py
tensor([[0.7642, 0.3032, 0.2531, 0.3085, 0.4983]])
torch.return_types.max(
values=tensor([0.7642]),
indices=tensor([0]))
小助手:
import akshare as ak
import pandas as pd
from datetime import datetime, timedelta
import matplotlib.pyplot as plt
import mplfinance as mpf
#输入股票代码
stock_code = “300001” # 或 “600029”
#根据股票代码添加前缀
if “300” in stock_code:
stock_code = “sz” + stock_code
elif “600” in stock_code:
stock_code = “sh” + stock_code
#获取当前日期并推算最近5天的日期
today = datetime.today()
start_date = (today - timedelta(days=5)).strftime(“%Y%m%d”)
#获取最近5天的历史行情数据
stock_df = ak.stock_zh_a_daily(symbol=stock_code, adjust=“qfq”, start_date=start_date)
#提取开盘价、收盘价,最高价,最低价
data_list = stock_df[[“date”, “open”, “close”, “high”, “low”]].values.tolist()
#将数据转换为DataFrame以供mplfinance使用
df = pd.DataFrame(data_list, columns=[“date”, “open”, “close”, “high”, “low”])
df[‘date’] = pd.to_datetime(df[‘date’])
#绘制K线图
mpf.plot(df.set_index(‘date’), type=‘candle’, volume=False, figsize=(10, 6))
#显示图形
plt.show()
master:请修改,绘制K线图的部分换成 pyecharts 绘制
tensor([[0.2846, 0.2497, 0.2852, 0.2464, 0.2667]])
torch.return_types.max(
values=tensor([0.2852]),
indices=tensor([2]))
from AI:```python
import akshare as ak
import pandas as pd
from datetime import datetime, timedelta
import pyecharts.options as opts
from pyecharts.charts import Kline
#输入股票代码
stock_code = “300001” # 或 “600029”
#根据股票代码添加前缀
if “300” in stock_code:
stock_code = “sz” + stock_code
elif “600” in stock_code:
stock_code = “sh” + stock_code
#获取当前日期并推算最近5天的日期
today = datetime.today()
start_date = (today - timedelta(days=5)).strftime(“%Y%m%d”)
#获取最近5天的历史行情数据
stock_df = ak.stock_zh_a_daily(symbol=stock_code, adjust=“qfq”, start_date=start_date)
#提取开盘价、收盘价,最高价,最低价
data_list = stock_df[[“date”, “open”, “close”, “high”, “low”]].values.tolist()
#转换日期格式
stock_df[‘date’] = pd.to_datetime(stock_df[‘date’])
data_list = [
[d.strftime(“%Y-%m-%d”), o, c, h, l]
for d, o, c, h, l in data_list
]
#使用pyecharts绘制K线图
kline = (
Kline()
.add_xaxis(xaxis_data=[item[0] for item in data_list])
.add_yaxis(
series_name=“Stock Data”,
y_axis=[item[1:] for item in data_list],
itemstyle_opts=opts.ItemStyleOpts(color=“#ef232a”),
)
.set_global_opts(title_opts=opts.TitleOpts(title=f"{stock_code} K线图"))
)
#渲染图表
kline.render()
‘’’
上述代码首先导入了pyecharts
库,并用其Kline
类绘制K线图。将原始数据处理成pyecharts
所需的格式后,配置图表的标题等信息,并最后渲染显示图表。注意,pyecharts
并不会在Jupyter notebook中直接显示图表,而是生成HTML文件,你需要通过浏览器打开这个HTML文件查看图表。在非Jupyter环境或者配合jupyterlab_pyecharts
扩展时可以直接在notebook中显示图表。
master:请执行代码
tensor([[0.4540, 0.2975, 0.6759, 0.9279, 0.3049]])
torch.return_types.max(
values=tensor([0.9279]),
indices=tensor([3]))
小助手:执行成功
master:请保存代码
tensor([[0.3954, 0.5478, 0.8770, 0.7324, 0.3002]])
torch.return_types.max(
values=tensor([0.8770]),
indices=tensor([2]))
小助手:保存成功
**master:**结束对话
tensor([[0.3998, 0.2404, 0.2743, 0.3043, 1.0000]])
torch.return_types.max(
values=tensor([1.0000]),
indices=tensor([4]))
小助手:好的,再见
Process finished with exit code 0
【说明: 图呢? 别急,在这儿 render.html,代码也集成保存】
圆满成功…文章来源:https://www.toymoban.com/news/detail-861844.html
后续,还会继续改进…文章来源地址https://www.toymoban.com/news/detail-861844.html
到了这里,关于让AI给你写代码(七)- 结合语意匹配,引导AI小助手逐步完善代码,新增功能(下)案例说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!