当前位置: 首页 > news >正文

让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.lryc.cn/news/362431.html

相关文章:

  • 探索煤化工厂巡检机器人的功能、应用及前景
  • 【活动】GPT-4O:AI语言生成技术的新里程碑
  • 实验笔记之——DPVO(Deep Patch Visual Odometry)
  • 力扣----轮转数组
  • 哥斯拉、冰蝎、中国蚁剑在护网中流量特征分析,收藏起来当资料吧,24年护网用得上
  • 隐藏饼图的legend,重写legend列表。
  • 解决在Mac下使用npm报错:Error: EACCES: permission denied
  • pvt对net delay的影响
  • 力扣5 最长回文子串
  • 【Uniapp小程序】自定义导航栏uni-nav-bar滚动渐变色
  • HarmonyOS鸿蒙学习笔记(25)相对布局 RelativeContainer详细说明
  • 自然语言处理学习中英文翻译语料库
  • 可视化数据科学平台在信贷领域应用系列二:数据清洗
  • JS面试题:hash和history的区别
  • GEE案例——归一化差异水体指数丰水期、枯水期的水域面积和水深分析(青海湖为例)
  • 机器视觉检测--相机
  • 【人工智能】第四部分:ChatGPT的技术实现
  • 小程序配置自定义tabBar及异形tabBar配置操作
  • 解析《动物园规则怪谈》【逻辑】
  • 上传RKP 证书签名请求息上传到 Google 的后端服务器
  • Debian和ubuntu 嵌入式的系统的 区别
  • HTML旋转照片盒子
  • 【UE5 刺客信条动态地面复刻】实现无界地面01:动态生成
  • AI产品经理系列-如何使用kimi快速撰写用户故事(含提示词)
  • MySQL索引与事务
  • 『大模型笔记』从基础原理出发提升深度学习性能
  • 【二叉树】Leetcode 222. 完全二叉树的节点个数【简单】
  • golang界面设计器,全网少见
  • 如何在GlobalMapper中加载高清卫星影像?
  • 【机器学习】解锁AI密码:神经网络算法详解与前沿探索