用了一圈,我觉得目前知识库比较接近我的预想的是腾讯的ima,但是管理大规模知识的检索,以及索引的索引,索引的索引的索引…都还是问题,说白了就是思维链通路。
最新的deepseek v4 flash还不错,但deepseek整体还是很令人失望的,尤其是最近的deepseek harness,产品经理就是想往ecosystem去的,真正的harness微乎其微,记忆组件、元学习、知识管理以及幻觉控制都没有。虽然目前是v0.1,百废待兴,可能是想万物都能接成node,但是从我个人角度觉得后期也不会太行或者说太符合我的期望。
qwen3.8确实还是比较惊艳的,到3.8基本上模型已经非常聪明了,虽然知识上index是-10分,deepseek目前是1分,claude大概50分,在模型本事的幻觉控制上qwen3.8还是可以的。其实我现在的出发点是qwen3.6 35B A3B,因为速度快,在mac上单agent能跑到120 token/s,然后定义流程,或者说是模式,比如学习模式,比如推理模式。在不同的模式下,会有不同的sub agent生成,然后通过fork承接上下文,再通过message互相发信息添加上下文丰度。但是merge现在还比较粗暴,直接summarize以后append到主agent上,还做不到按需定点投喂context…
这几天又把agent重新写了几遍。首先是context manager已经比较清晰了。对于比较小的模型,就是一步一步引导[system prompt, user prompt, ... | step guide, response / tool call + output]->[system prompt, user prompt, ... step summary],这样前置可以最大化kv cache hit,后面的话可以用一个状态机控制诸如要不要tool call,一步一步注入tool call的参数wizrd防止小的模型json乱来,比如[..., TOOL CALL guide or NO, WEBPAGE]->[..., WEBPAGE: please provide url, <url>, <content> ]->[..., <url> <content> summary]。这个就是每轮的大概流程,其中还需要在必要的时候进行context compact,防止token超。这个就需要context array可以stage,可以discard,可以commit,比如[1, 2, 3 | (stage) 4, 5], 如果discard又变成[1, 2, 3],再加一个commit总结变成[1, 2, 3, 6]相当于fork-merge。
接着就是memory,我们有几种模式,比如nvida voyager模式下,我们可以先让LLM分析下user intent和target state;然后开启一轮current state的调查,之后再从current state到target state在user intent下如何一步一步用状态机tool call。voyager模式就是先使用一个叫learn的模式,把网页和文件内容一件一件读取并生成各种问题当初始化课程。voyager模式在此基础上,从current state到target state提出我们需要解决哪些问题,哪些是简单问题需要嵌套提问,哪些可以直接解决。之后我们就要判断是问题属于哪一层,比如简单的两层,一层是永久知识,一层是临时知识——永久知识存在vector db里,临时知识放内存里。我们在解决问题的时候会提出很多问题,然后查询,如果有问题已经解决,就查出来总结,最后综合所有问题,看看最终问题有没有解决。最后我们提前回检测用户的主要语言和目标语言(如果是翻译的话,否则等于主要语言),然后用目标语言进行最终输出解决方案。
有不少问题还要解决,比如learn的时候,如何连接各种问题,形成更好的思维链路,比如随机抽取问题,然后看看它们能不能连起来。但是终极问题是,如果LLM不熟悉这个领域,它怎么提出正确的问题?这个时候只能靠webpage tool让它在不确定的时候先使用搜索引擎。
其实写各种模式就已经是各种落地插件了。如果想要通用,得一点一点调整状态机的策略。后面得做点实验,是状态机好还是LoRA动态训练好了。