让AI给你写代码(9.1):引导AI根据输入的问题,并结合本地知识库的预存需求组成提示模板,生成代码并测试,保存

我们以上一篇为基础《备忘: 使用langchain结合千问大模型,用本地知识库辅助AI生成代码》 ,建立一个完整的AI应用,具备按用户输入的问题,匹配本地数据库预设需求,然后转发给AI(千问)生成代码,然后提取代码进行自动测试,如果测试成功,则根据代码再使用AI(千问)生成文件名,保存代码到预设仓库,其流程如下(典型的Rag流程):
在这里插入图片描述
主要工具:
本地库用的向量持久化工具: ES 7.9
本地库匹配使用的embedding: 抱脸虫HuggingFaceEmbeddings的paraphrase-multilingual-MiniLM-L12-v2
LLM 还是选qwen-max

本地库内容还是4个akshare接口

  1. 获得上海证券交易所股票数据总貌,包括项目、股票、科创版、主板,可以使用akshare库的stock_sse_summary接口,无入参,返回最近交易日的股票数据总貌,包括流通股本、总市值、平均市盈率、上市公司、上市股票、流通市值、报告时间、总股本,返回字段使用中文,最后用print方法打印行情,代码格式为python…
  2. 获得股票个股信息,包括总市值、流通市值、行业、上市时间、股票代码、股票简称、总股本、流通股,可以使用akshare库的stock_individual_info_em接口按股票代码查询,获得相关股票个股信息,返回字段使用中文,最后用print方法打印行情,代码格式为python…
  3. 获取股票最新价格、最新成交量、最新涨跌幅、最新换手率,可以使用akshare库的stock_zh_a_spot_em接口获取全市场行情,无入参,再按股票名称或者股票代码过滤获得信息,返回字段使用中文,最后用print方法打印行情,代码格式为python…
  4. 获得股票历史行情,包括指定交易日的最高价、最低价、开盘价、收盘价、成交量、涨跌幅、换手率,可以使用akshare库,按stock_zh_a_hist接口按股票代码,获取指定日线数据,startdate和enddate,以及指定前复权,获得日线数据,返回字段使用中文,最后用print方法打印行情,代码格式为python… (行分隔符)

建本地库和依赖本地匹配需求,参考上一篇 《备忘: 使用langchain结合千问大模型,用本地知识库辅助AI生成代码》

我们把依赖于LM生成代码,根据代码自动获取文件名,以及自动测试,保存文件统一到一个工具类Assistant类

import ...
dashscope.api_key 

CONTEXT_QA_TMPL = """
下面的信息({summary_prompt})是否有这个问题({message})有关,
如果你觉得无关请告诉我无法根据提供的上下文回答'{message}'这个问题,简要回答即可,
否则请根据{summary_prompt}对{message}的问题进行回答
"""

CONTEXT_QA_PROMPT = PromptTemplate(
    input_variables=["summary_prompt", "message"],
    template=CONTEXT_QA_TMPL,
)


# 新增LLM助手
class Assistant:
    def __init__(self, llm: BaseLLM):
        self.llm = llm  # LLM

        self.used_code = ""

        self.python_path = "/home/cfets/gitea/pyWebTest1/pythonRepository/"

        CONTEXT_QA_TMPL = """
        下面的信息({summary_prompt})是否有这个问题({message})有关,
        如果你觉得无关请告诉我无法根据提供的上下文回答'{message}'这个问题,简要回答即可,
        否则请根据{summary_prompt}对{message}的问题进行回答
        """

        self.CONTEXT_QA_PROMPT = PromptTemplate(
            input_variables=["summary_prompt", "message"],
            template=CONTEXT_QA_TMPL,
        )

    # 生成代码
    def genCode(self, message: str, summary_prompt: str):
        prompt = CONTEXT_QA_PROMPT.format(summary_prompt=summary_prompt, message=message)
        print('prompt::', prompt)
        print('\n')

        raw_code = llm(prompt)

        print('raw_code::', raw_code)
        print('\n')

        return raw_code

    # 提取并执行代码列表
    def py_repl_tool_list(self, code: str):
        py_repl = PythonREPL()
        result = {}

        realcode_list = re.findall(r'```python(.*?)```', code, re.DOTALL)
        for i in range(len(realcode_list)):
            # 执行
            res = py_repl.run(realcode_list[i])

            # 判断执行结果,如果成功,则保存代码,如果不成功,不保存
            result[i] = py_repl.run(realcode_list[i])

            if "Error" not in result[i]:
                print('执行成功')
                self.saveCode(realcode_list[i])
            else:
                print('执行失败 错误信息:', result[i])

        return result

    # 自动保存
    def saveCode(self, code: str):
        file_name = self.python_path + self.getFileName(code)

        try:
            if not os.path.exists(file_name):
                with open(file_name, 'w') as f:
                    f.write(code)
                    print('文件保存成功')
            else:
                print('文件已存在')
                version = random.randint(1, 100)
                file_name = file_name.split(".py")[0] + str(version) + ".py"
                with open(file_name, 'w') as f:
                    f.write(code)
                    print('文件保存成功')

        except Exception as e:
            print('Error: %s' % e)
            # res_content = '保存失败: %s' % e



    # 自动生成文件名
    def getFileName(self, code: str):
        CONTEXT_FILENAME_TMPL = """
        请根据{file_code}所示代码起一个合适英语文件名
        """

        CONTEXT_FILENAME_PROMPT = PromptTemplate(
            input_variables=["file_code"],
            template=CONTEXT_FILENAME_TMPL,
        )

        prompt = CONTEXT_FILENAME_PROMPT.format(file_code=code)
        print('prompt::', prompt)
        print('\n')

        raw_file_name = llm(prompt)

        print('raw_file_name::', raw_file_name)
        print('\n')

        file_name = raw_file_name.split("\"")[1]

        print('file_name::', file_name)
        print('\n')

        return file_name


# 代码执行
def py_repl_tool(code: str):
    """Returns the result of execution."""
    _, after = code.split("```python")
    realcode = after.split("```")[0]

    py_repl = PythonREPL()
    return py_repl.run(realcode)


if __name__ == '__main__':
    os.environ["DASHSCOPE_API_KEY"] = dashscope.api_key
    llm = Tongyi(model_name="qwen-max", streaming=True, temperature=0)

    # 引入模型
    model_name = r"/home/cfets/AI/model/paraphrase-multilingual-MiniLM-L12-v2"
    model_kwargs = {'device': 'cpu'}
    encode_kwargs = {'normalize_embeddings': False}

    embeddings = HuggingFaceEmbeddings(
        model_name=model_name,
        model_kwargs=model_kwargs,
        encode_kwargs=encode_kwargs
    )

    # 使用elastic search
    my_index = "es_akshare-api-new"

    # 本地库
    db = ElasticVectorSearch(
        embedding=embeddings,
        elasticsearch_url="http://localhost:9200",
        index_name=my_index,
    )

    assistant = Assistant(llm)

    while True:
        try:
            user_input = input("请输入您的问题:")
            similarDocs = db.similarity_search(user_input, k=2)
            summary_prompt = "".join([doc.page_content for doc in similarDocs])  # 找到最接近的描述doc
            
            raw_code = assistant.genCode(user_input, summary_prompt)

            # print('answer::', llm(prompt))
            print('raw_code::', raw_code)
            print('\n')

            result = assistant.py_repl_tool_list(raw_code)
            print('result::', result)

            print('\n')
        except KeyboardInterrupt:
            break

注意LLM给出代码不一定是一个,所谓我们用了列表 realcode_list = re.findall(r’python(.*?)', code, re.DOTALL) 执行和保存也按列表处理

根据代码自动获得文件名 getfileName函数 ,也采用了预先配置模板,然后让LLM生成的方法,注意强调使用英语文件名(也可以使用中文)

针对预先设计的需求模板和4个接口,我们准备了四个问题来测试:
1 获得上海证交所最新股票数据总貌的代码
2 给出获取A股股票最新市场价的代码,例如 600150
3 获取个股信息,例如恒瑞医药
4 获取A股股票过去10天的历史行情,例如:002389

每个问题针对一个接口,问题从简单匹配,到较为复杂,需要一些推理转换

我们看看运行结果
问题1: 获得上海证交所最新股票数据总貌的代码

请输入您的问题:获得上海证交所最新股票数据总貌的代码
prompt:: 下面的信息(获得上海证券交易所股票数据总貌,包括项目、股票、科创版、主板,可以使用akshare库的stock_sse_summary接口,无入参,返回最近交易日的股票数据总貌,包括流通股本、总市值、平均市盈率、上市公司、上市股票、流通市值、报告时间、总股本,返回字段使用中文,最后用print方法打印行情,代码格式为python...获得股票个股信息,包括总市值、流通市值、行业、上市时间、股票代码、股票简称、总股本、流通股,可以使用akshare库的stock_individual_info_em接口按股票代码(入参为“symbol”)查询,获得相关股票个股信息,返回字段使用中文,最后用print方法打印行情,代码格式为python...)是否有这个问题(获得上海证交所最新股票数据总貌的代码)有关,
如果你觉得无关请告诉我无法根据提供的上下文回答’获得上海证交所最新股票数据总貌的代码’这个问题,简要回答即可,
否则请根据获得上海证券交易所股票数据总貌,包括项目、股票、科创版、主板,可以使用akshare库的stock_sse_summary接口,无入参,返回最近交易日的股票数据总貌,包括流通股本、总市值、平均市盈率、上市公司、上市股票、流通市值、报告时间、总股本,返回字段使用中文,最后用print方法打印行情,代码格式为python...获得股票个股信息,包括总市值、流通市值、行业、上市时间、股票代码、股票简称、总股本、流通股,可以使用akshare库的stock_individual_info_em接口按股票代码(入参为“symbol”)查询,获得相关股票个股信息,返回字段使用中文,最后用print方法打印行情,代码格式为python...对获得上海证交所最新股票数据总貌的代码的问题进行回答


raw_code:: 有关。根据提供的上下文,可以获得上海证交所最新股票数据总貌的代码如下:

import akshare as ak

# 获得上海证券交易所股票数据总貌
stock_sse_data = ak.stock_sse_summary()
print("上海证券交易所股票数据总貌:")
print(stock_sse_data)

以及获取股票个股信息的代码示例:

# 获得股票个股信息,以某股票代码为例(请替换符号“symbol”为实际股票代码)
symbol = "600000"
individual_stock_info = ak.stock_individual_info_em(symbol=symbol)
print(f"{symbol} 的个股信息:")
print(individual_stock_info)

请注意,在实际应用中,需要先安装akshare库,可以通过pip安装:pip install akshare。同时,第二个代码段中的symbol变量需要被替换为你想查询的具体股票代码


执行成功


prompt::
请根据
import akshare as ak

#获得上海证券交易所股票数据总貌
stock_sse_data = ak.stock_sse_summary()
print(“上海证券交易所股票数据总貌:”)
print(stock_sse_data)
所示代码起一个合适英语文件

raw_file_name:: “Shanghai_Security_Exchange_Stock_Overview.py”

file_name:: Shanghai_Security_Exchange_Stock_Overview.py

文件保存成功


执行成功


prompt::
请根据
#获得股票个股信息,以某股票代码为例(请替换符号“symbol”为实际股票代码)
symbol = “600000”
individual_stock_info = ak.stock_individual_info_em(symbol=symbol)
print(f"{symbol} 的个股信息:")
print(individual_stock_info)
所示代码起一个合适英语文件名

raw_file_name:: “fetch_individual_stock_information.py”

file_name:: fetch_individual_stock_information.py

文件保存成功


result:: {0: ‘上海证券交易所股票数据总貌:\n 项目 股票 主板 科创板\n0 流通股本 45660.71 44302.75 1357.96\n1 总市值 493013.04 440224.69 52788.35\n2 平均市盈率 13.52 12.74 35.76\n3 上市公司 2273 1701 572\n4 上市股票 2312 1740 572\n5 流通市值 455850.52 418940.59 36909.93\n6 报告时间 20240520 20240520 20240520\n8 总股本 49204.8 47059.27 2145.53\n’, 1: ‘600000 的个股信息:\n item value\n0 总市值 247145332226.079987\n1 流通市值 247145332226.079987\n2 行业 银行\n3 上市时间 19991110\n4 股票代码 600000\n5 股票简称 浦发银行\n6 总股本 29352177224.0\n7 流通股 29352177224.0\n’}

-----------------------------------分割----------------------------

实际上根据 获得上海证交所最新股票数据总貌的代码 匹配到了两个接口ak.stock_sse_summary()和ak.stock_individual_info_em(symbol=symbol) 分别按两个接口对应的预设需要文档生成两段代码,并执行成功,保存为两个文件Shanghai_Security_Exchange_Stock_Overview.py和fetch_individual_stock_information.py,我们看一下保存文件的执行结果
Shanghai_Security_Exchange_Stock_Overview.py
在这里插入图片描述
fetch_individual_stock_information.py在这里插入图片描述

问题2:给出获取A股股票最新市场价的代码,例如 600150

prompt::
下面的信息(获取股票最新价格、最新成交量、最新涨跌幅、最新换手率,可以使用akshare库的stock_zh_a_spot_em接口获取全市场行情,无入参,再按股票名称(属性名为“名称”)或者股票代码(属性名为“代码”)过滤获得信息,返回字段使用中文,最后用print方法打印行情,代码格式为python...获得股票历史行情,包括指定交易日的最高价、最低价、开盘价、收盘价、成交量、涨跌幅、换手率,可以使用akshare库,按stock_zh_a_hist接口按股票代码,获取指定日线数据,startdate和enddate,以及指定前复权,获得日线数据,返回字段使用中文,最后用print方法打印行情,代码格式为python...)是否有这个问题(给出获取A股股票最新市场价的代码,例如 600150)有关,
如果你觉得无关请告诉我无法根据提供的上下文回答’给出获取A股股票最新市场价的代码,例如 600150’这个问题,简要回答即可,
否则请根据获取股票最新价格、最新成交量、最新涨跌幅、最新换手率,可以使用akshare库的stock_zh_a_spot_em接口获取全市场行情,无入参,再按股票名称(属性名为“名称”)或者股票代码(属性名为“代码”)过滤获得信息,返回字段使用中文,最后用print方法打印行情,代码格式为python...获得股票历史行情,包括指定交易日的最高价、最低价、开盘价、收盘价、成交量、涨跌幅、换手率,可以使用akshare库,按stock_zh_a_hist接口按股票代码,获取指定日线数据,startdate和enddate,以及指定前复权,获得日线数据,返回字段使用中文,最后用print方法打印行情,代码格式为python...对给出获取A股股票最新市场价的代码,例如 600150的问题进行回答


raw_code:: 有关。根据提供的上下文,可以给出获取A股股票最新市场价的代码示例,例如针对股票代码600150。以下是使用akshare库获取该股票最新价格的Python代码:

import akshare as ak

# 获取全市场A股实时行情
stock_spot_df = ak.stock_zh_a_spot_em()

# 按股票代码过滤,获取600150的最新市场价
stock_info = stock_spot_df[stock_spot_df["代码"] == "600150"]

# 打印股票名称和最新价格
if not stock_info.empty:
    print(f"{stock_info['名称'].values[0]}的最新市场价为:{stock_info['最新价'].values[0]}元")
else:
    print("未找到该股票信息")

这段代码首先通过ak.stock_zh_a_spot_em()函数获取全市场的A股实时行情数据,然后通过筛选股票代码为"600150"的数据行来获取特定股票的最新市场价,并打印出该股票的名称及其最新价格。


执行成功
prompt::
请根据
import akshare as ak

#获取全市场A股实时行情
stock_spot_df = ak.stock_zh_a_spot_em()

#按股票代码过滤,获取600150的最新市场价
stock_info = stock_spot_df[stock_spot_df[“代码”] == “600150”]

#打印股票名称和最新价格
if not stock_info.empty:
print(f"{stock_info[‘名称’].values[0]}的最新市场价为:{stock_info[‘最新价’].values[0]}元")
else:
print(“未找到该股票信息”)
所示代码起一个合适英语文件名

raw_file_name:: “fetch_stock_realtime_quote.py”

file_name:: fetch_stock_realtime_quote.py


文件保存成功
result:: {0: ‘中国船舶的最新市场价为:36.21元\n’}
——————————__——_——————————————————————

保存文件为fetch_stock_realtime_quote.py
在这里插入图片描述

问题3 获取个股信息,例如恒瑞医药
请输入您的问题:获取个股信息,例如恒瑞医药
prompt::
下面的信息(获得股票个股信息,包括总市值、流通市值、行业、上市时间、股票代码、股票简称、总股本、流通股,可以使用akshare库的stock_individual_info_em接口按股票代码(入参为“symbol”)查询,获得相关股票个股信息,返回字段使用中文,最后用print方法打印行情,代码格式为python...获得上海证券交易所股票数据总貌,包括项目、股票、科创版、主板,可以使用akshare库的stock_sse_summary接口,无入参,返回最近交易日的股票数据总貌,包括流通股本、总市值、平均市盈率、上市公司、上市股票、流通市值、报告时间、总股本,返回字段使用中文,最后用print方法打印行情,代码格式为python...)是否有这个问题(获取个股信息,例如恒瑞医药)有关,
如果你觉得无关请告诉我无法根据提供的上下文回答’获取个股信息,例如恒瑞医药’这个问题,简要回答即可,
否则请根据获得股票个股信息,包括总市值、流通市值、行业、上市时间、股票代码、股票简称、总股本、流通股,可以使用akshare库的stock_individual_info_em接口按股票代码(入参为“symbol”)查询,获得相关股票个股信息,返回字段使用中文,最后用print方法打印行情,代码格式为python...获得上海证券交易所股票数据总貌,包括项目、股票、科创版、主板,可以使用akshare库的stock_sse_summary接口,无入参,返回最近交易日的股票数据总貌,包括流通股本、总市值、平均市盈率、上市公司、上市股票、流通市值、报告时间、总股本,返回字段使用中文,最后用print方法打印行情,代码格式为python...对获取个股信息,例如恒瑞医药的问题进行回答

raw_code:: 有关。根据提供的上下文,可以通过使用akshare库的stock_individual_info_em接口来获取单个股票的详细信息,如恒瑞医药。以下是一个示例代码片段来实现这个需求:

import akshare as ak

# 设置股票代码,例如恒瑞医药的股票代码为"600276"
symbol = "600276"

# 使用akshare库查询个股信息
individual_stock_info = ak.stock_individual_info_em(symbol=symbol)

# 打印获取到的恒瑞医药个股信息
print(individual_stock_info)

这段代码将会输出恒瑞医药的总市值、流通市值、行业、上市时间、股票代码、股票简称、总股本、流通股等信息。

raw_code:: 有关。根据提供的上下文,可以通过使用akshare库的stock_individual_info_em接口来获取单个股票的详细信息,如恒瑞医药。以下是一个示例代码片段来实现这个需求:

import akshare as ak

# 设置股票代码,例如恒瑞医药的股票代码为"600276"
symbol = "600276"

# 使用akshare库查询个股信息
individual_stock_info = ak.stock_individual_info_em(symbol=symbol)

# 打印获取到的恒瑞医药个股信息
print(individual_stock_info)

这段代码将会输出恒瑞医药的总市值、流通市值、行业、上市时间、股票代码、股票简称、总股本、流通股等信息。

执行成功
prompt::
请根据
import akshare as ak

#设置股票代码,例如恒瑞医药的股票代码为"600276"
symbol = “600276”

#使用akshare库查询个股信息
individual_stock_info = ak.stock_individual_info_em(symbol=symbol)

#打印获取到的恒瑞医药个股信息
print(individual_stock_info)
所示代码起一个合适英语文件名

raw_file_name:: “query_individual_stock_info_arkshare.py”

file_name:: query_individual_stock_info_arkshare.py

文件保存成功
result:: {0: ’ item value\n0 总市值 279400299601.200012\n1 流通市值 279400299601.200012\n2 行业 化学制药\n3 上市时间 20001018\n4 股票代码 600276\n5 股票简称 恒瑞医药\n6 总股本 6379002274.0\n7 流通股 6379002274.0\n’}
——————————————————————

注意这里有个有意思的,就是接口指定参数是六位代码,但问题的提示是股票名字,恒瑞医药,AI还是自己完成了转换,省了不少事

保存的文件是 query_individual_stock_info_arkshare.py

在这里插入图片描述

问题4: 获取A股股票过去10天的历史行情,例如:002389

请输入您的问题:获取A股股票过去10天的历史行情,例如:002389
prompt::
下面的信息(获得股票历史行情,包括指定交易日的最高价、最低价、开盘价、收盘价、成交量、涨跌幅、换手率,可以使用akshare库,按stock_zh_a_hist接口按股票代码,获取指定日线数据,startdate和enddate,以及指定前复权,获得日线数据,返回字段使用中文,最后用print方法打印行情,代码格式为python...获取股票最新价格、最新成交量、最新涨跌幅、最新换手率,可以使用akshare库的stock_zh_a_spot_em接口获取全市场行情,无入参,再按股票名称(属性名为“名称”)或者股票代码(属性名为“代码”)过滤获得信息,返回字段使用中文,最后用print方法打印行情,代码格式为python...)是否有这个问题(获取A股股票过去10天的历史行情,例如:002389)有关,
如果你觉得无关请告诉我无法根据提供的上下文回答’获取A股股票过去10天的历史行情,例如:002389’这个问题,简要回答即可,
否则请根据获得股票历史行情,包括指定交易日的最高价、最低价、开盘价、收盘价、成交量、涨跌幅、换手率,可以使用akshare库,按stock_zh_a_hist接口按股票代码,获取指定日线数据,startdate和enddate,以及指定前复权,获得日线数据,返回字段使用中文,最后用print方法打印行情,代码格式为python...获取股票最新价格、最新成交量、最新涨跌幅、最新换手率,可以使用akshare库的stock_zh_a_spot_em接口获取全市场行情,无入参,再按股票名称(属性名为“名称”)或者股票代码(属性名为“代码”)过滤获得信息,返回字段使用中文,最后用print方法打印行情,代码格式为python...对获取A股股票过去10天的历史行情,例如:002389的问题进行回答

raw_code:: 无关。根据提供的上下文,无法直接回答关于获取A股股票过去10天的历史行情的问题,因为所述内容分别涉及获取指定日期范围的历史行情数据和获取全市场的最新行情数据,但没有直接提供如何针对特定股票获取过去10天历史行情的具体实现方法。

raw_code:: 无关。根据提供的上下文,无法直接回答关于获取A股股票过去10天的历史行情的问题,因为所述内容分别涉及获取指定日期范围的历史行情数据和获取全市场的最新行情数据,但没有直接提供如何针对特定股票获取过去10天历史行情的具体实现方法。

result:: {}


遇到麻烦了,AI匹配的需求(确实没有取错)和问题无关,在暂时不微调模型的情况下,我们采取的办法是换一个更贴近预设需求问法:

获取A股股票的历史行情,例如:002389过去10天的行情

prompt::
下面的信息(获得股票历史行情,包括指定交易日的最高价、最低价、开盘价、收盘价、成交量、涨跌幅、换手率,可以使用akshare库,按stock_zh_a_hist接口按股票代码,获取指定日线数据,startdate和enddate,以及指定前复权,获得日线数据,返回字段使用中文,最后用print方法打印行情,代码格式为python...获取股票最新价格、最新成交量、最新涨跌幅、最新换手率,可以使用akshare库的stock_zh_a_spot_em接口获取全市场行情,无入参,再按股票名称(属性名为“名称”)或者股票代码(属性名为“代码”)过滤获得信息,返回字段使用中文,最后用print方法打印行情,代码格式为python...)是否有这个问题(获取A股股票的历史行情,例如:002389过去10天的行情)有关,
如果你觉得无关请告诉我无法根据提供的上下文回答’获取A股股票的历史行情,例如:002389过去10天的行情’这个问题,简要回答即可,
否则请根据获得股票历史行情,包括指定交易日的最高价、最低价、开盘价、收盘价、成交量、涨跌幅、换手率,可以使用akshare库,按stock_zh_a_hist接口按股票代码,获取指定日线数据,startdate和enddate,以及指定前复权,获得日线数据,返回字段使用中文,最后用print方法打印行情,代码格式为python...获取股票最新价格、最新成交量、最新涨跌幅、最新换手率,可以使用akshare库的stock_zh_a_spot_em接口获取全市场行情,无入参,再按股票名称(属性名为“名称”)或者股票代码(属性名为“代码”)过滤获得信息,返回字段使用中文,最后用print方法打印行情,代码格式为python...对获取A股股票的历史行情,例如:002389过去10天的行情的问题进行回答

raw_code:: 有关。根据提供的上下文,可以使用akshare库的stock_zh_a_hist接口来获取A股股票的历史行情数据,包括002389过去10天的行情。以下是一个示例代码:

import akshare as ak
import pandas as pd

# 设置股票代码和日期范围
stock_code = "002389"
startdate = pd.Timestamp.now() - pd.DateOffset(days=10)
enddate = pd.Timestamp.now()

# 获取历史行情数据
hist_data = ak.stock_zh_a_hist(symbol=stock_code, start_date=startdate.strftime('%Y%m%d'), end_date=enddate.strftime('%Y%m%d'), adjust="qfq")

# 打印所需的历史行情数据
print("股票代码:", stock_code)
print("过去10天的历史行情:")
print(hist_data[["日期", "开盘价", "最高价", "最低价", "收盘价", "成交量", "涨跌幅", "换手率"]])

这段代码首先导入了必要的库,设置了股票代码和日期范围,然后调用了stock_zh_a_hist接口获取了指定股票在特定时间段内的历史行情数据,并按照要求筛选并打印了相关数据字段。

raw_code:: 有关。根据提供的上下文,可以使用akshare库的stock_zh_a_hist接口来获取A股股票的历史行情数据,包括002389过去10天的行情。以下是一个示例代码:

import akshare as ak
import pandas as pd

# 设置股票代码和日期范围
stock_code = "002389"
startdate = pd.Timestamp.now() - pd.DateOffset(days=10)
enddate = pd.Timestamp.now()

# 获取历史行情数据
hist_data = ak.stock_zh_a_hist(symbol=stock_code, start_date=startdate.strftime('%Y%m%d'), end_date=enddate.strftime('%Y%m%d'), adjust="qfq")

# 打印所需的历史行情数据
print("股票代码:", stock_code)
print("过去10天的历史行情:")
print(hist_data[["日期", "开盘价", "最高价", "最低价", "收盘价", "成交量", "涨跌幅", "换手率"]])

这段代码首先导入了必要的库,设置了股票代码和日期范围,然后调用了stock_zh_a_hist接口获取了指定股票在特定时间段内的历史行情数据,并按照要求筛选并打印了相关数据字段。

执行失败 错误信息: KeyError(“[‘开盘价’, ‘最高价’, ‘最低价’, ‘收盘价’] not in index”)
result:: {0: ‘KeyError(“[‘开盘价’, ‘最高价’, ‘最低价’, ‘收盘价’] not in index”)’}

请输入您的问题:获取A股股票的历史行情,例如:002389过去10天的行情
prompt::
下面的信息(获得股票历史行情,包括指定交易日的最高价、最低价、开盘价、收盘价、成交量、涨跌幅、换手率,可以使用akshare库,按stock_zh_a_hist接口按股票代码,获取指定日线数据,startdate和enddate,以及指定前复权,获得日线数据,返回字段使用中文,最后用print方法打印行情,代码格式为python...获取股票最新价格、最新成交量、最新涨跌幅、最新换手率,可以使用akshare库的stock_zh_a_spot_em接口获取全市场行情,无入参,再按股票名称(属性名为“名称”)或者股票代码(属性名为“代码”)过滤获得信息,返回字段使用中文,最后用print方法打印行情,代码格式为python...)是否有这个问题(获取A股股票的历史行情,例如:002389过去10天的行情)有关,
如果你觉得无关请告诉我无法根据提供的上下文回答’获取A股股票的历史行情,例如:002389过去10天的行情’这个问题,简要回答即可,
否则请根据获得股票历史行情,包括指定交易日的最高价、最低价、开盘价、收盘价、成交量、涨跌幅、换手率,可以使用akshare库,按stock_zh_a_hist接口按股票代码,获取指定日线数据,startdate和enddate,以及指定前复权,获得日线数据,返回字段使用中文,最后用print方法打印行情,代码格式为python...获取股票最新价格、最新成交量、最新涨跌幅、最新换手率,可以使用akshare库的stock_zh_a_spot_em接口获取全市场行情,无入参,再按股票名称(属性名为“名称”)或者股票代码(属性名为“代码”)过滤获得信息,返回字段使用中文,最后用print方法打印行情,代码格式为python...对获取A股股票的历史行情,例如:002389过去10天的行情的问题进行回答

raw_code:: 有关。根据提供的上下文,可以使用akshare库的stock_zh_a_hist接口来获取A股股票的历史行情数据,包括002389过去10天的行情。以下是一个示例代码:

import akshare as ak
import pandas as pd

# 设置股票代码和日期范围
stock_code = "002389"
end_date = pd.Timestamp.now().strftime("%Y%m%d")  # 获取当前日期
start_date = (pd.Timestamp.now() - pd.DateOffset(days=10)).strftime("%Y%m%d")  # 10天前的日期

# 调用接口获取历史数据
stock_hist_data = ak.stock_zh_a_hist(symbol=stock_code, start_date=start_date, end_date=end_date, adjust="qfq")

# 打印所需的历史行情数据
print(stock_hist_data[["日期", "开盘价", "最高价", "最低价", "收盘价", "成交量", "涨跌幅", "换手率"]])

这段代码会输出002389股票过去10天的历史行情,包括日期、开盘价、最高价、最低价、收盘价、成交量、涨跌幅、换手率等信息。请注意,实际使用时需要确保已安装akshare库且版本兼容。

raw_code:: 有关。根据提供的上下文,可以使用akshare库的stock_zh_a_hist接口来获取A股股票的历史行情数据,包括002389过去10天的行情。以下是一个示例代码:

import akshare as ak
import pandas as pd

# 设置股票代码和日期范围
stock_code = "002389"
end_date = pd.Timestamp.now().strftime("%Y%m%d")  # 获取当前日期
start_date = (pd.Timestamp.now() - pd.DateOffset(days=10)).strftime("%Y%m%d")  # 10天前的日期

# 调用接口获取历史数据
stock_hist_data = ak.stock_zh_a_hist(symbol=stock_code, start_date=start_date, end_date=end_date, adjust="qfq")

# 打印所需的历史行情数据
print(stock_hist_data[["日期", "开盘价", "最高价", "最低价", "收盘价", "成交量", "涨跌幅", "换手率"]])

这段代码会输出002389股票过去10天的历史行情,包括日期、开盘价、最高价、最低价、收盘价、成交量、涨跌幅、换手率等信息。请注意,实际使用时需要确保已安装akshare库且版本兼容。

执行失败 错误信息: KeyError(“[‘开盘价’, ‘最高价’, ‘最低价’, ‘收盘价’] not in index”)
result:: {0: ‘KeyError(“[‘开盘价’, ‘最高价’, ‘最低价’, ‘收盘价’] not in index”)’}

请输入您的问题:获取A股股票的历史行情,例如:002389过去10天的行情,打印全部属性
prompt::
下面的信息(获得股票历史行情,包括指定交易日的最高价、最低价、开盘价、收盘价、成交量、涨跌幅、换手率,可以使用akshare库,按stock_zh_a_hist接口按股票代码,获取指定日线数据,startdate和enddate,以及指定前复权,获得日线数据,返回字段使用中文,最后用print方法打印行情,代码格式为python...获取股票最新价格、最新成交量、最新涨跌幅、最新换手率,可以使用akshare库的stock_zh_a_spot_em接口获取全市场行情,无入参,再按股票名称(属性名为“名称”)或者股票代码(属性名为“代码”)过滤获得信息,返回字段使用中文,最后用print方法打印行情,代码格式为python...)是否有这个问题(获取A股股票的历史行情,例如:002389过去10天的行情,打印全部属性)有关,
如果你觉得无关请告诉我无法根据提供的上下文回答’获取A股股票的历史行情,例如:002389过去10天的行情,打印全部属性’这个问题,简要回答即可,
否则请根据获得股票历史行情,包括指定交易日的最高价、最低价、开盘价、收盘价、成交量、涨跌幅、换手率,可以使用akshare库,按stock_zh_a_hist接口按股票代码,获取指定日线数据,startdate和enddate,以及指定前复权,获得日线数据,返回字段使用中文,最后用print方法打印行情,代码格式为python...获取股票最新价格、最新成交量、最新涨跌幅、最新换手率,可以使用akshare库的stock_zh_a_spot_em接口获取全市场行情,无入参,再按股票名称(属性名为“名称”)或者股票代码(属性名为“代码”)过滤获得信息,返回字段使用中文,最后用print方法打印行情,代码格式为python...对获取A股股票的历史行情,例如:002389过去10天的行情,打印全部属性的问题进行回答

raw_code:: 有关。根据提供的上下文,可以使用akshare库的stock_zh_a_hist接口来获取A股股票的历史行情数据,包括最高价、最低价、开盘价、收盘价、成交量、涨跌幅、换手率等信息。以下是一个示例代码片段,展示了如何获取股票代码为002389过去10天的行情数据并打印全部属性:

import akshare as ak
import pandas as pd

# 设置股票代码和日期范围
stock_code = "002389"
end_date = pd.Timestamp.now().strftime("%Y%m%d")  # 获取当前日期
start_date = (pd.Timestamp.now() - pd.DateOffset(days=10)).strftime("%Y%m%d")  # 计算10天前的日期

# 调用接口获取历史行情数据
stock_hist_data = ak.stock_zh_a_hist(stock_code, start_date=start_date, end_date=end_date, adjust="qfq")

# 打印数据
print(stock_hist_data)

这段代码首先设置了股票代码为"002389",并计算了从今天往回数10天的日期作为查询范围。然后,它调用了ak.stock_zh_a_hist接口,指定了股票代码、开始日期、结束日期以及前复权调整。最后,打印出获取到的历史行情数据,包含了所需的所有属性。

raw_code:: 有关。根据提供的上下文,可以使用akshare库的stock_zh_a_hist接口来获取A股股票的历史行情数据,包括最高价、最低价、开盘价、收盘价、成交量、涨跌幅、换手率等信息。以下是一个示例代码片段,展示了如何获取股票代码为002389过去10天的行情数据并打印全部属性:

import akshare as ak
import pandas as pd

# 设置股票代码和日期范围
stock_code = "002389"
end_date = pd.Timestamp.now().strftime("%Y%m%d")  # 获取当前日期
start_date = (pd.Timestamp.now() - pd.DateOffset(days=10)).strftime("%Y%m%d")  # 计算10天前的日期

# 调用接口获取历史行情数据
stock_hist_data = ak.stock_zh_a_hist(stock_code, start_date=start_date, end_date=end_date, adjust="qfq")

# 打印数据
print(stock_hist_data)

这段代码首先设置了股票代码为"002389",并计算了从今天往回数10天的日期作为查询范围。然后,它调用了ak.stock_zh_a_hist接口,指定了股票代码、开始日期、结束日期以及前复权调整。最后,打印出获取到的历史行情数据,包含了所需的所有属性。

执行成功
prompt::
请根据
import akshare as ak
import pandas as pd

#设置股票代码和日期范围
stock_code = “002389”
end_date = pd.Timestamp.now().strftime(“%Y%m%d”) # 获取当前日期
start_date = (pd.Timestamp.now() - pd.DateOffset(days=10)).strftime(“%Y%m%d”) # 计算10天前的日期

#调用接口获取历史行情数据
stock_hist_data = ak.stock_zh_a_hist(stock_code, start_date=start_date, end_date=end_date, adjust=“qfq”)

#打印数据
print(stock_hist_data)
所示代码起一个合适英语文件名

raw_file_name:: “China_Stock_Historical_Data_Retrieval_AKShare.py”

file_name:: China_Stock_Historical_Data_Retrieval_AKShare.py

文件保存成功
result:: {0: ’ 日期 开盘 收盘 最高 最低 … 成交额 振幅 涨跌幅 涨跌额 换手率\n0 2024-05-13 15.96 15.63 15.96 15.50 … 1.943804e+08 2.87 -2.62 -0.42 1.25\n1 2024-05-14 15.62 15.66 15.74 15.45 … 1.346371e+08 1.86 0.19 0.03 0.87\n2 2024-05-15 15.64 15.38 15.68 15.35 … 1.613617e+08 2.11 -1.79 -0.28 1.05\n3 2024-05-16 15.50 15.46 15.54 15.32 … 1.315631e+08 1.43 0.52 0.08 0.86\n4 2024-05-17 15.55 15.78 15.78 15.46 … 2.142669e+08 2.07 2.07 0.32 1.38\n5 2024-05-20 15.75 16.11 16.16 15.67 … 3.202451e+08 3.11 2.09 0.33 2.02\n6 2024-05-21 16.13 15.94 16.21 15.85 … 2.330374e+08 2.23 -1.06 -0.17 1.47\n\n[7 rows x 11 columns]\n’}

成功了,保存的文件是China_Stock_Historical_Data_Retrieval_AKShare.py

在这里插入图片描述

简单小结,通过输入问题驱动,匹配本地库预设需求,按指定接口生成编码是可行的—— 整个应用基本上是以一个简单的RAG架构,实现“ 写人话通过AI转换成可用代码” 这个终极目标
需要做的步骤
1 在本地库按指定接口编写预设需求,包括以适当的方式指定明确可用接口,入参和输出参数,打印结果和标识语言(例如python)方便提取代码
2 输入问题,可以以A,B方式,A分句尽量贴近于预设需求,B分局明确的给出需要测试的参数例子

后续,我们会继续尝试,编写需要应用多个接口的较为复杂的应用,比如利用长短均线形成简单的双均线量化策略,例如PB,PE完成PEG计算等等一些更加贴近实际的应用,技术上,会尝试融合百度千帆,清华质谱等其他大模型API,并且改进呈现方式,设计成前后台应用等等,希望各位有缘人,继续支持,鼓励,如果觉得合适,适当大赏,毕竟需要一点成本的。

  • 22
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhyuli

您的鼓励是对我付出努力一种赞赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值