在AI使用时,有时能发现AI胡乱回答的情况,将错误的信息交给AI,但AI并没有进行判断就将数据引入。为了解决这个问题,将会引入ReAct(reasoningaction)模型,这个模型能帮助AI更有条理的回答问题。
需要模型做自主判断、自行调用工具、自行决定下一步行动的时候,会用到代理。代理可以同时使用多种工具,而且可以将一个工具的输出数据作为另一个工具的输入数据。这也就用到了_take_next_step方法 ,其能让机器和我们人一样,将问题分成一步一步后,将答案一步步更靠近最后的结果,直至完全解决。基于这点特性,我们可以想象到ReAct框架将能够处理更多、更复杂的任务。
大模型:提供逻辑的引擎,负责生成预测和处理输入。
与之交互的外部工具:可能包括数据清洗工具、搜索引擎、应用程序等。
控制交互的代理:调用适当的外部工具,并管理整个交互过程的流程
agent先经历初始化,再回答问题。首先从agents库中导入工具load_tools、initilize_agent、AgentType,从llms中导入openAI,llm经过初始化再使用,代理通过initialize_agent函数使用,函数内部需要包含工具,llm流,代理的名称和verbose。
在代理的使用中,会调用SerpAPI,并且在谷歌上拿到SERPAPI_API_KEY,这是给在谷歌上搜索访问的权限。
Agent 的关键组件:
代理(决定下一步做的操作)、工具、工具包(完成一组操作用到相关的工具集合,里面有多种工具)、代理执行器(代理的执行环境)。
AgentExcutor的运行机制
首先调用llm_chain大模型,让大模型尽量根据自己现有的知识回答问题,但大模型不一定有这部分的知识,所以需要调用搜索工具(_take_next_step)。在工具调用完后,会获得一个结果,这个结果可能是最终答案,也可能只完成了一部分内容,如果没有解决提出的问题,AI会再调用一次大模型,查看这次是否能直接回答问题,如果可以,输出,如果不行,将会调用工具解决问题(还是缺少这部分知识会继续调用搜索工具),调用完后返回结果,进行第三次调用大模型,直到问题能够被解决才停止调用,此时会输出AgentFinish。