让AI给你写代码(9.3):一点改进,支持扩展本地知识库

改进目标,当输入提示问题后,能匹配到本地知识库的需求,然后AI按匹配到的需求给出代码并进行自动测试; 如果无法匹配到本地需求,可以直接输入生成逻辑,再由AI生成,然后支持用户把新需求插入本地库。

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

改进后的架构如下:
在这里插入图片描述
对于代码改进主要是集中在两个地方
1 驱动LLM的上下文模板需要更改:
原来:
CONTEXT_QA_TMPL = “”"
下面的信息({summary_prompt})是否有这个问题({message})有关,
如果你觉得无关请告诉我无法根据提供的上下文回答’{message}'这个问题,简要回答即可,
否则请根据{summary_prompt}对{message}的问题进行回答
“”"

更改为
CONTEXT_QA_TMPL = “”"
下面的信息({summary_prompt})是否有这个问题({message})有关,
如果你觉得无关请告诉我无法根据提供的上下文回答’{message}'这个问题,先回答与上下文无关,再按{message}回答这个问题
否则请根据{summary_prompt}对{message}的问题进行回答
“”“”
希望达成目标,如果匹配本地库失败,LLM不仅仅简单的回复“无关”,而是可以根据输入的内容直接让AI生成代码

2 增加一个插入本地知识库的函数工具

#自定义切分
class Document:def __init__(self, text):self.page_content = textself.metadata = {'source': 'Own'}def insertKnowledge(self, text: str):# 询问用户是否需要将代码插入知识库while True:insert_knowledge = input("是否需要将代码插入知识库?(y/n): ")if insert_knowledge == "y" or insert_knowledge == "Y":msg = text.split("```python...```")[0] + "```python...```"split_docs=[Document(msg)]# 插入知识库db = ElasticVectorSearch.from_documents(split_docs,self.embeddings,elasticsearch_url="http://localhost:9200",index_name=my_index)print(db.client.info())print("需求插入知识库成功")breakelse:print("不插入知识库")break...#主程序修改while True:try:user_input = input("请输入您的问题:")similarDocs = local_db.searchKnowledge(user_input)summary_prompt = "".join([doc.page_content for doc in similarDocs])  # 找到最接近的描述docraw_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')#储存需求到本地库(新增)local_db.insertKnowledge(user_input)print('本轮处理完毕'+'\n')except KeyboardInterrupt:break

测试: 我们新增一个计算均线的功能,还是用aksahre库,计算A股股票过去M个交易日N天均线
直接看过程
执行前的本地知识库,一共五个需求docs:
在这里插入图片描述
执行过程
请输入您的问题:计算A股股票过去M个交易日N天均线,可以使用akshare库,按按股票代码(stock_code),前复权(qfq),使用stock_zh_a_hist(symbol=stock_code,adjust=“qfq”)接口,获得该股票历史行情,然后根据收盘价(属性为"收盘")计算N天均线,计算结果在历史行情的dataframe新增一列,然后获取最近M个交易日的数据作为返回结果,并用print打印,代码格式为python..., 请以600029为例计算过去200个交易日内60天均线

(预期,与本地知识库匹配无关)

raw_code:: 与上下文无关。

接下来,我将直接回答关于计算A股股票过去M个交易日N天均线的问题。以600029为例,计算过去200个交易日内60天均线的Python代码如下:

import akshare as ak
import pandas as pd
from datetime import datetime, timedelta# 设置股票代码
stock_code = "600029"
# 设置回溯的交易日数量
M = 200
# 设置均线周期
N = 60# 获取股票历史行情数据,前复权
hist_data = ak.stock_zh_a_hist(symbol=stock_code, adjust="qfq")
# 确保数据按日期升序排列
hist_data = hist_data.sort_values(by='日期')# 计算N天均线
hist_data['MA{}'.format(N)] = hist_data['收盘'].rolling(window=N).mean()# 获取最近M个交易日的数据
end_date = hist_data.iloc[-1]['日期']
start_date = end_date - timedelta(days=M)
recent_data = hist_data[(hist_data['日期'] >= start_date) & (hist_data['日期'] <= end_date)]# 打印结果
print(recent_data[['日期', '收盘', 'MA{}'.format(N)]])

这段代码首先导入了必要的库,并设置了股票代码、需要回溯的交易日数M以及均线周期N。接着,它调用了akshare库的stock_zh_a_hist接口来获取股票的历史行情数据,并对其进行前复权处理。之后,计算了N天的移动平均线并在DataFrame中新增了一列。最后,筛选出了最近M个交易日的数据并打印出来,其中包括日期、收盘价以及计算出的N天均线值。
执行成功:

raw_file_name:: “China_Stock_Analysis.py”

file_name:: China_Stock_Analysis.py

文件保存成功

result:: {0: ’ 日期 收盘 MA60\n4830 2023-11-13 5.97 6.202000\n4831 2023-11-14 5.97 6.186333\n4832 2023-11-15 6.02 6.172833\n4833 2023-11-16 6.06 6.161500\n4834 2023-11-17 6.13 6.150833\n… … … …\n4958 2024-05-27 5.98 5.695833\n4959 2024-05-28 5.92 5.695000\n4960 2024-05-29 5.92 5.695500\n4961 2024-05-30 5.90 5.695167\n4962 2024-05-31 5.88 5.698000\n\n[133 rows x 3 columns]\n’}

是否需要将代码插入知识库?(y/n): y
{‘name’: ‘node-1’, ‘cluster_name’: ‘elasticsearch’, ‘cluster_uuid’: ‘F6X7HlMMS-eYJlzY8Tg3Mw’, ‘version’: {‘number’: ‘7.9.2’, ‘build_flavor’: ‘default’, ‘build_type’: ‘tar’, ‘build_hash’: ‘d34da0ea4a966c4e49417f2da2f244e3e97b4e6e’, ‘build_date’: ‘2020-09-23T00:45:33.626720Z’, ‘build_snapshot’: False, ‘lucene_version’: ‘8.6.2’, ‘minimum_wire_compatibility_version’: ‘6.8.0’, ‘minimum_index_compatibility_version’: ‘6.0.0-beta1’}, ‘tagline’: ‘You Know, for Search’}
需求插入知识库成功
本轮处理完毕

执行完成后的本地知识库

在这里插入图片描述
增加成功

总结: 经过改进之后,既可以通过匹配本地知识库生成代码,也可以新增需求后丰富本地知识库

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

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

相关文章

XML概述、格式、解析-WEB

XML概述 XML&#xff08;Extensible Markup Language&#xff09; 可扩展的标识语言 数据传输的一种格式 树形结构&#xff08;节点&#xff09; 优点 解析的更快 : 使用标签语言&#xff0c;能够很快定位 占用空间小 : 纯文本格式 可读性强 : 带有名字的标签我们都很喜欢 跨平…

MathType7.9最新免费注册机注册码激活码分享

MathType作为一个强大的数学公式编辑器&#xff0c;广泛用于教育、科研和出版领域。它支持多种文档格式和数学符号&#xff0c;是撰写科技文档不可或缺的工具。对于一些个人用户和小型机构来说&#xff0c;正版软件的高昂价格可能是一个负担。因此&#xff0c;寻找合法途径下的…

Windows 10 以上版本用久了应该重新安装还是重置呢?

今天明月工作电脑的 Windows 10 因为安装过太多软件和使用太久了的缘故造成网络总是很不稳定&#xff0c;总是出现一些莫名其妙的问题&#xff0c;实在是懒得去查找和排错了&#xff0c;就想着干脆推到重来吧&#xff0c;这样性能表现还会提升不少&#xff0c;并且可以一次性的…

向量化:机器学习中的效率加速器与数据桥梁

在机器学习领域的广袤天地中&#xff0c;向量化技术以其独特的魅力&#xff0c;为数据处理和模型训练注入了强大的动力。本文将深入探讨向量化在机器学习领域中的体现&#xff0c;剖析其如何助力模型实现高效的数据处理和精确的结果预测&#xff0c;并通过丰富的案例和详尽的数…

容器中运行ping提示bash: ping: command not found【笔记】

容器中运行ping提示bash: ping: command not found 原因是容器中没有安装ping命令 在容器中安装ping命令&#xff0c;可以使用以下命令&#xff1a; 对于基于Debian/Ubuntu的容器&#xff0c;使用以下命令&#xff1a; apt-get update apt-get install -y iputils-ping对于基…

Nginx在线部署和离线部署方式

Nginx 有两种安装方式: 1)在线安装的方式 1.添加Nginx 到yum源 sudo rpm -Uvh <http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm> 2.安装Nginx,直接使用yum方式 yum install -y nginx 3.启动nginx,刚安装的nginx不…

一图读懂:Flink CDC如何流式写入Paimon?

一图读懂&#xff1a;Flink CDC如何流式写入Paimon&#xff1f; 以Mysql CDC至Paimon为例 整体架构 MySQL CDC SourceSnapshotReader读取快照全量数据&#xff0c;BinlogReader读取增量数据。 paimon sink 实现桶级别的写入&#xff0c;compactManager实现异步compaction co…

第六讲:AD、DA的工作原理及实现、运放电路

DA 数模转换器 (DAC) 数模转换器&#xff08;Digital-to-Analog Converter&#xff0c;简称DAC&#xff09;是一种将数字信号转换为模拟信号的电子装置。DAC在各种电子设备中广泛应用&#xff0c;如音频设备、通信系统、测量设备和控制系统中。以下是DAC的主要概念和应用。…

Windows下从源码编译ONNX Runtime

前言&#xff1a;作者在做深度学习模型部署过程中&#xff0c;遇到一些算子问题&#xff0c;需要在ONNX Runtime平台上实现一些自定义算子&#xff0c;在此过程中&#xff0c;onnxruntime官方给的现成的库缺少一些必要文件&#xff0c;遂需要下载onnxruntime源码并进行编译。 …

调用万维易源API生成AI艺术二维码

目录 1. 作者介绍2. 艺术二维码2.1 艺术二维码的作用2.2 艺术二维码的应用场景2.3调用万维易源API生成AI艺术二维码 3. 实验过程3.1算法流程3.2完整代码3.3测试结果 1. 作者介绍 韩阳&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;2023级研究生 研究方向&am…

两种参与茶树O-甲基化儿茶素生物合成的O-甲基转移酶的特征分析-文献精读20

Characterization of two O-methyltransferases involved in the biosynthesis of O-methylated catechins in tea plant 两种参与茶树O-甲基化儿茶素生物合成的O-甲基转移酶的特征分析 茶树三维基因组-文献精读19 比较转录组分析揭示了116种山茶属(Camellia)植物的深层系统…

设计模式23——状态模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 状态模式&#xff08;State&am…

《幸福》期刊杂志投稿发表

《幸福》杂志是由国家新闻出版总署批准&#xff0c;武汉出版社主管&#xff0c;武汉市妇联和武汉出版社联合主办&#xff0c;面向全国发行的人文社科综合期刊。办刊宗旨&#xff1a;宣传普及科学知识及科学方法的研究&#xff1b;倡导新型的人际关系&#xff0c;推介健康的家庭…

go语言进阶 init() 函数

go 语言包 在一个项目中通常我们需要引入第三方包&#xff0c;我们来看下 当我们导入一个包的时候 发生了什么&#xff1a; 首先我们先详细介绍下两个函数&#xff1a; init(), main() 是 go 语言中的保留函数。我们可以在源码中 定义 init()函数&#xff0c; 此函数会在包导入…

iPhone录音的m4a格式音频文件怎么转成MP3格式?

在日常工作生活中&#xff0c;我们有时会用电脑或手机录音&#xff0c;比如iPhone录音的M4A格式音频&#xff0c;要上传至某些软件或者平台使用&#xff0c;但是有时这些平台或者软件对音频格式有要求&#xff0c;比如有的就只能上传mp3格式的文件。 这个时候我们就需要先将音频…

基础IO(上)

前言 文件 内容 属性 所有对文件的操作就是对内容操作和对属性操作。内容是数据&#xff0c;属性也是数据。存储文件&#xff0c;必须既存储内容又存储数据。创建文件默认就是在磁盘中的。我们要访问一个文件的时候&#xff0c;都是要先把这个文件打开的。访问文件的本质就是…

无人机EasyDSS推拉流视频直播技术在农业植保中的精准应用与展望

随着科技的飞速发展&#xff0c;无人机在农业领域的应用越来越广泛&#xff0c;特别是在农业植保方面&#xff0c;无人机以其独特的优势&#xff0c;为农业生产带来了革命性的改变。 无人机在农业植保中的应用主要体现在两个方面&#xff1a;提高工作效率和精准喷洒药物。在以…

每天认识一家仪器仪表厂商 | 横河测试测量官网 - Yokogawa

横河Yokogawa工商信息&#xff1a; 横河测量技术(上海)有限公司于2000年08月09日成立。法定代表人山崎正晴(YAMAZAKI MASAHARU)&#xff0c;公司经营范围包括&#xff1a;从事测量科技、机电科技领域内技术开发、技术转让、技术咨询、技术服务&#xff0c;仪器仪表、通讯设备、…

专业130+总分400+四川大学951信号与系统考研经验川大电子信息与通信工程,真题,大纲,参考书。教材。

今年四川大学951信号与系统专业课130&#xff08;据我所知没有140以上的今年&#xff09;&#xff0c;总分400&#xff0c;顺利上岸川大&#xff0c;回顾一下自己这一年的复习&#xff0c;希望自己的经历可以对大家复习有所借鉴&#xff0c;也是对自己的考研画上句话。专业课&a…

使用from…import语句导入模块

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在使用import语句导入模块时&#xff0c;每执行一条import语句都会创建一个新的命名空间&#xff08;namespace&#xff09;&#xff0c;并且在该命名…