文章目录
- 一、功能需求
- 二、演示用例
- 三、核心模块流程图
- 四、代码分析
- 1)Agent类目录创建智能体对象
- 2)开始主流程
- 3)在prompt的main目录输入主prompt和最后prompt
- 4)增加实际的工具集tools(也就是函数)
- 5)新增文件夹Utils工具来打印中间结果
一、功能需求
- 目的
设计一个 Agent,自动选择使用以下工具回答用户的问题 - 问题
1、查看目录下的文件
2、基于给定的文档回答用户问题
3、查看与分析 Excel 文件
4、撰写文档
5、调用 Email 客户端发邮件
二、演示用例
- 实验资料(实验中使用三个文档演示 Agent 的能力)
./data|__2023年8月-9月销售记录.xlsx|__供应商名录.xlsx|__供应商资格要求.pdf
-
资料展示
-
测试用例输入举例
1、9 月份的销售额是多少
2、销售总额最大的产品是什么
3、帮我找最近一个月出销售额不达标的供应商
4、给对方发一封邮通知此事
5、对比 8 月和 9 月销售情况,写一份报告
三、核心模块流程图
四、代码分析
1)Agent类目录创建智能体对象
初始化准备工作:
1、语言模型:llm
2、工具集 tools
3、工作数据地址:work_dir
4、最多能思考多少步:max_thiought_steps
5、常识记忆的向量数据库连接池:memery_retriever
6、output_parse专门解析action传出来的json格式的数据
7、robust_parser用来矫正输出json格式的错误
8、__iniy_prompt_templates用来初始化模板(需要用接口适配langchain输出中文有时候打印Unicode码,看的不舒服,函数名字是__chinese_friendly)
9、初始化chain(用主要prompt和结束的prompt串起来)
2)开始主流程
①初始化常识和短识的记忆(短识记忆初始化为空,常识是连接向量数据库)
②记录思考步数
③开始主循环推理,若输出结果为FINISH就break,否则就执行选择出来的action,并更新短识记忆
④若大于最大思考步数,则输出未能完成任务
⑤更新长识记忆
3)在prompt的main目录输入主prompt和最后prompt
- 注意点
①有时候目录
会在查找过程中丢失
,所以访问文件确保文件路径调整
②对于一些准则
(总结方法论)告诉他约束
③输出形式要按步骤输出思考过程,然后加自我反思
④观察执行记录和自我反思,进一步思考
⑤根据反思和思考,一步步推理
4)增加实际的工具集tools(也就是函数)
①实际工具类文件是Tools.py,比如如下的FileTool.py定义了返回搜索数据文件的名字的函数
②定义读取PDF的函数,类似RAG的部分,这里拿langchain原生接口代替(不推荐
,FileQATool.py)
③按照客户需求生成文档的函数
④分析Excel的函数工具(根据表名字、行列名字信息、具体格信息分析文件)ExcelTool.py和生成代码去分析数据的工具PythonTool.py,并且在prompts/tools目录下填上excel分析的prompt
⑤发邮件的工具EmailTool.py
5)新增文件夹Utils工具来打印中间结果
新文件callbackfunc.py
和带颜色的打印