接上一篇让AI给你写代码(10.1): 按接口编程的思想,统一利用内部和外部的接口,逐步扩展和提升AI编程能力
这篇我们将对照需要解决的问题,比较详细介绍一下AI小助手相关代码架构、实体,相关方法和工具。
对照10.1 新版AI小助手的需要做的流程如下:
与10.1流程图基本一致,仅增加一个本地知识库,存储输入的新接口方法的需求描述,目前没有参与流程,但为未来进一步利用打一个基础。以下我们逐步展开说明。
一、 实体资源
参与的实体主要有12个,
主体程序3个:
assistant/aiGenCodeNew.py 主程序
assistant/aiAssistant.py AI编程小助手类,包含了AI小助手所需所有方法和调度
assistant/localKnowledgeTool.py 操作本地ES索引
本地代码库(目录)1个
pythonRepository/
临时运行目录1个
testtool/
本地数据库(ES7)2个:
1) 本地接口知识库(ES索引): es_repository-interface_new
对应的初始化脚本: index_template/input_interface_new.txt
2)本地需求描述库(ES索引): es_repository-requirement_new
对应的初始化脚本:index_template/input_re_new.txt
工具类3个
dbtool/clearES.py 删除指定ES索引
dbtool/esBase2.py 利用预先训练模型建立本地知识库
dbtool/testOutput.py 导出本地知识库
代码资源列表
二、 主要运行程序及相关方法
1、 aiGenCodeNew.py 主程序
from langchain_community.llms import Tongyi
import ...
dashscope.api_key = "XXXXXX" # 千问大模型的用户key
if __name__ == '__main__':
os.environ["DASHSCOPE_API_KEY"] = dashscope.api_key
llm = Tongyi(model_name="qwen-max", streaming=True, temperature=0)
assistant = Assistant(llm) # 初始化小助手
while True:
try:
# 进入对话
user_input = input("请输入您的问题:")
similarDocs = assistant.local_interface_db.searchKnowledge(user_input) # 匹配本地库
summary_prompt = "".join([doc.page_content for doc in similarDocs]) # 找到最接近的描述doc
summary_prompt = assistant.local_interface_db.searchKnowledge(summary_prompt) # 确定需要生成的函数类型
raw_code = assistant.genCode(user_input, summary_prompt) # 提交给大模型生成代码
print('raw_code::', raw_code)
print('\n')
# 执行程序
result = assistant.py_repl_tool_list(raw_code)
print('result::', result)
print('\n')
# 遍历执行结果,保存接口函数
for i in range(len(result)):
if result[i]['exec_succ']:
# AI小助手生成接口说明,并保存接口函数
assistant.saveInterfaceDesc(result[i]['code'])
continue
# 储存需求到本地库
assistant.local_requirement_db.insertKnowledge(user_input)
print('本轮处理完毕' + '\n')
except KeyboardInterrupt:
break
except Exception as e:
print("执行异常: %s" % e)
traceback.format_exc()
2、 aiAssistant.py AI小助手类
限于篇幅,除了这次新增的方法,其他方法只列出方法名和用途,具体做法可以参考之前的博客文章
from langchain