1,本仓库总目标是构建一个类似langchain,crewai,phidata这样的agent framework。 2,本仓库的目标是一步步从最基本的类智能体跑通,到建立智能体的基本概念,到组成成一个基本的智能体,到构建更加健壮,更加灵活,更加可扩展的智能体框架。初始版本就是v1.py,每一个版本都基于上一个版本进行迭代,力图让观众能更加简单,易懂的看懂思路。 注:我曾经尝试过去读懂类似crewai这样的仓库,但是其实概念甚多,之间交互关系错综复杂,因此放弃了。于是决定试着写一个智能体框架,公开思考的过程
智能体就是一个能够调用工具的系统,工具可以理解为函数,要把llm和函数联系起来,就是说,llm具备调用函数的能力,这里我们用到了openai python库的function call功能。
function call功能简介: function call实际上就是给大模型传一个参数对象,这个对象包含函数名,函数功能表述,函数参数表述。大模型能根据prompt信息,结合function call的参数对象,在prompt中抽取函数参数,给函数去执行。
举个例子,比如,prompt是“从伦敦到巴黎的航班最近一班是几点的”,这个时候,函数是查询航班信息的,查询航班信息需要知道起点,终点。因此,大模型可以从prompt中抽取起点和终点,“伦敦”,“巴黎”,然后以一个参数对象的形式给到你,你就可以去调用接口执行查询航班的API请求了。
这样就是构建了一个智能体
v2版本在v1版本之上,增加了agent的概念,让所有的变量,函数都集中在agent这个类里面,传入参数,实现agent的初始化。后面,调用agent的run方法,就可以实现agent的运行。
v2版本的agent类有四个参数:
1,model:大模型的模型名
2,prompt:总的提示词
3,llm:openai发起请求的客户端
4,tool:智能体需要调用的工具
v3版本在v2版本之上,整合了tool相关的概念,增加了一个tool类,将函数参数模板生成,注册工具执行函数,获取工具执行函数,都整合到一个类里面,使得管理更加精细。
将agent,tool都抽离成单独的文件,方便后续管理
该版本调整agent的调用逻辑,使得agent可以灵活顺序调用多个tool,例子中实现了调用两个tool。新增tool类,可以管理多个tool实例。
1,增加自定义工具的功能,新增BaseTool类
2,通用化工具的创建过程,参数传递,function call模板创建这些东西,使之更加通用。
3,新增网页搜索,摘要总结的两个tool,跑通agent
1,先在test1.py中试验,跑通llm中用rag的整个流程
2,然后,在v7文件夹下,新增chroma_db_rag.py这个文件,在里面对rag进行封装,调试agent,使之跑通。
3,优化这部分代码,使之和之前的tool功能更加和谐(doing)