其实TaskWeaver和AutoGen差不多同时间出的,但是一时瑜亮,AutoGen现在火的不要不要的,Git上都快3万星了
它呢?
才5000星。。。
其实公司里人估计玩它的也不多,正好客户想了解一下,我就顺道写一篇
先说它是干啥的,它也是agent framework,也是根正苗红的multi-agent(不过这个好像真是后改的架构,现在属于2.0了,1.0我也找不到了)
它面对的场景和用途就和AutoGen这种通用场景不太一样,day-1就是奔着跟code相关,其实准确说是跟DI相关
DI data intelligence,一个不新不旧的概念,我第一次玩是在MetaGPT上玩的
当时其实很惊艳,但是无奈太早了,LLM当时不太具备这个能力(一年以前吧),所以demo看着好玩,实际使用起来挺垃圾,Taskweaker也是大概9个月左右之前出的,所以它出来没什么声音也是正常的,毕竟Agent这个东西,你设计再好,理念再好,还是更依仗LLM的能力。
现在不一样了,LLM对数据和表单的处理早就进入到指玄境界了,所以Task Weaver又觉得它行了,最近密集更新一波。。。
先看一下它的架构逻辑
TaskWeaver 是一个以代码为核心的代理框架,旨在无缝地规划和执行数据分析任务。让我们分析一下图中各个组件的作用和它们之间的交互方式:
用户查询:流程从用户提交查询开始,这个查询可能是一个问题或任务。查询会被传递给规划器(Planner)。
规划器(Planner):
LLM(大型语言模型):规划器使用 LLM 来理解用户查询,并制定执行该任务的计划。
示例(Examples):根据已有的示例,规划器生成一个任务计划(Plan),即如何将用户的查询分解为可执行的子任务。
计划(Plan):
计划会将任务拆解成多个子任务(Sub-tasks),并生成任务查询(Task Query),然后将这些子任务传递给代码解释器(Code Interpreter)进行进一步处理。
代码解释器(Code Interpreter):
代码生成器(Code Generator):代码生成器使用 LLM 和插件(Plugins)来生成代码,并结合现有的示例进行自我反思(Self-reflection),从而优化代码生成的过程。
有状态代码执行器(Stateful Code Executor):生成的代码通过有状态的 Python 执行器执行,得到执行结果。
内存(Memory):系统中的内存模块负责存储中间结果或上下文信息,确保整个任务执行过程中数据和状态的延续性。
结果反馈:代码执行器将结果返回给规划器,规划器再将最终的执行结果或回复反馈给用户。
它有哪些特色呢?(它自己写了很多,我就挑几条实际的)
丰富的数据结构:TaskWeaver 支持在 Python 中使用丰富的数据结构,比如列表(Lists)、字典(Dictionaries)或 Pandas 数据帧(DataFrames),而不仅仅局限于文本字符串。这使得用户能够处理更加复杂和多样化的数据形式。
自定义算法:TaskWeaver 允许用户将自己的算法或函数封装成插件(Python 函数形式),并将其编排以实现复杂任务。这使得 TaskWeaver 在任务处理上具有高度的灵活性和可扩展性。说白了想学AutoGen,玩生态,也能理解
有状态对话:TaskWeaver 支持有状态的对话功能,用户可以在多轮对话中与内存中的数据进行交互。这确保了任务执行过程中上下文的持续性。
代码验证:TaskWeaver 在执行代码之前会进行代码验证。它可以检测生成代码中的潜在问题并自动修复,从而提高代码执行的安全性和可靠性。
其实主要是有状态对话,和代码验证这块,这都是因为它深度引入了Self-Reflection的机制,也就是反思,对这块不懂的,可以看我以前的文章,描述了Agent系统的长短期记忆和反思的机制。
也正因为有状态性的对话机制(够长)和代码验证机制,加上现在LLM变强,才能让它想做的DI的活儿重新浮出水面。
技术侧没什么太多可讲的,Agent的核心也就是tools,反思,记忆和prompt engineeriing(懂得自然懂)
我们直接开整,看看它实力
git clone https://github.com/microsoft/TaskWeaver.git
进入project的这个目录,vim相关的配置
askweaver_config.json 这个文件
我 用的Azure 的Openai服务,国内也不用梯,另外可以docker部署,我没用,默认是docker因为各种ban,所以我也选择不用docker了,直接选择local模式,也是不用梯的原因
在文件的主目录下,执行下面命令,直接可以在shell下就cli运行了
python -m taskweaver -p ./project/
这也是够有个性的,我问它how are you,还特么挺横,直接不给我好脸色
当然这一切都源于planer的prompt,感兴趣的大家自己可以去看一下
通过CLI界面看的不太清楚,也可以开一个web界面
它的web是通过chainlit来实现的(当然也可以自己随便拿什么实现都行)
进了web界面,先整个小活儿,我让它写100个随机数,就random array就完了呗
如上图,planer开始它的计划,就2个,一个是生成100个随机数,第二是做完check给user,然后这个需求就发给CodeInterpreter了
这快值得讲一下,不同于AutoGen的设定
AutoGen的multi-agent设计里面,用户其实的对话接口是user proxy,如果你把用户干预关了,其实就一开头给个指令,然后user proxy即是命令接受和传递者(传给assistant),然后它也是code interpreter
Task weaver不是这样的,用户的对话是planer,它同时也是assistant的角色(但是只负责计划,不管代码,autogen是assistant给代码让user proxy执行),而执行者就是code interpreter,它也不跟人交互,就负责设计(没错初始的代码设计也是它)和执行代码就完事了,你要说这两种设计谁好,我觉得都差不多,但是Autogen,由于可以设计人工干预,所以执行的时候理论上自由度大一点。
我们继续,codeInterpreter就生成了100个随机数,并把这个消息给到了Planer
最后planer会调用TaskWeaver的主接口来回复给用户,我让它给我plot出来这些数字的分布
还是能用的
稍微上点强度整个老演员波士顿房价dataset
web界面支持upload 文件,我把这个csv传上去了,让它给我做个EDA分析
这次因为稍微复杂点所以出错了
和AutoGen一样,它也自我纠错,其实大家使用multi-agent的最方便的事也就是这个,互相监督,自修改
最后就执行出结果
相关矩阵和散点矩阵也都给我画出来了,肯定是能用
然后我找了一个北京市4-10到4-19的天气情况
结果给我出来一条直线,我勒个去,我去查了一下,lineregression太简单了,换个模型
换啥也白扯,换随机森林也没用,数据太少了,这点我还挺欣慰的,TaskWeaver会把它缺失的可能需要补齐的东西和猜测的原因告诉user
总之能用,Task weaver还是挺好玩的,但是其实此刻运行MetaGPT的DI也是一样,用AutoGen,自己写擅长DI的Role也是一样的道理,他们的核心能力还是取决于LLM的智能,另外有兄弟会提出疑问,LLM可以做这些分析吗?尤其是带有时序的数据(比如天气)
其实你如果仔细看就会明白LLM在DI这种业务里做了什么,其实它就是代码生成者,那你的结果对与错,取决于代码的质量,和真正代码写的模型,和数据,所以并不是LLM在分析数据,而是LLM生成的代码和模型(比如线性回归和随机森林)在分析,你要是详细python做数据分析,就应该详细DI,所以从这个道理上来讲,目前只要是代码能力可以的LLM,来做DI,准确度什么的,你是不需要担心的。