最近我们已经全落地了一个AI用例生成的Agent,在这个项目中,有两个难点:
其一,就是不同团队和组织的需求输入格式不一致,有使用研发平台进行需求管理,有使用飞书、word、ppt、markdown等等各种类型,长度复杂度不一致,小需求或清晰功能点还好,但是一设计到复杂功能设计文档或者长需求文档就存在上下文问题、重点信息丢失问题。
其二,如何提高个人私有经验和知识对生成质量的作用?
之前尝试过各种Rag、rerank、Graph等知识库,但是效果不尽人意,主要问题在于文本截断、块的上下文理解不足、全局性差的问题,直到看到Google这篇文章,才给了我新的启发。
ReadAgent是一种全新设计的阅读类agent,可以完成长上下文文章的理解和信息检索,且可以在一定程度长保证对文章的总体理解,就和人一样进行阅读。
人在阅读的过程中,总时习惯读一段内容后进行思考和总结,并总使希望将这段内容和原先读的内容进行关联性思考,这是人的逻辑使然。ReadAgent模仿这一点,进行了设计:
1. 逐步阅读,通过LLM对文章进行自然分段
2. 将分段进行摘要总结
3. ReadAgent在执行任务时,根据提示寻找对应的分段进行理解输出。
设计思路
文档分页
可以使用LLM最大的上下文限制作为输入,创建Prompt让LLM按照语义对文档进行分页,保证每个分页都可以涵盖一个语言逻辑块,比如对话结束,描述转折等,当然也可以人为进行分页
创建摘要建立关系
将每一个分页传给LLM,并给LLM进行提示,让它创建一个精简摘要,并将这个摘要和原始文本进行对应存储,但这里存在一个问题是,如果分页内容很长,则会出现,精简后丢失细节信息,所以这里需要自己把握分段内容和长短
检索查找
通过上面两个步骤已经建立了知识库,接下来介绍两种不同的查找逻辑,一种是并行查找P查找,一种是顺序查找S查找,原理是将摘要给LLM,让LLM进行判断,要看哪些分页,然后将分页内容作为从知识库中检索到的内容给Action agent进行任务执行。
P查找的Prompt:
S查找的Prompt
实践
开发一个文档知识库创建的Agent
以Word为例,按照Word的标题级别,对文档进行分页,这里需要对Word内容进行解析:
fromdocximportDocumentfromdocx.oxml.nsimportqndoc=Document(docx_path)forelementindoc.element.body:#处理标题、文本、图片...
最终将得到两个文件:一个是摘要文件,一个是原始分页文件:
文档中的图片可以使用多模态模型例如qwen3-vl进行文本转化。
开发一个检索Agent
这个可以使用n8n或dify来做,也可以使用代码,为了快速实现,我这里使用了dify:
总体测试下来,七八千字含图的长需求文档读取和查阅还是比较准确的,且有上下文的信息。
同理PPT也可以采用同样的思路,当前我的处理逻辑是使用pptx库,将每页文本提取出来。
frompptximportPresentationforslide_number, slideinenumerate(prs.slides,1):slide_content = {'number': slide_number,'title':'','notes':''}
然后将每一页作为一个分页,其中的图片仍然使用多模态模型进行文本转化。
不过这种方式处理PPT有一个问题,就是无法将ppt中的文本信息格式化输出,如有一些结构话的表达,比如流程图、标题级别、列表等,会丢失这部分信息。
所以接下来,我会将每一页ppt输出为图片,给多模态模型进行理解,然后输出一个markdown类型的文本,这样就保留了文本的层次信息。
总结
使用ReadAgent可以很好的处理文本类的文档和长篇文章,同样也可以结合多模态模型进行图片处理。这种思路和人类看一篇文章的思路一致,既可以进行精确的文本检索,也可以保留概括信息,也能理解不同分段之间的思路逻辑。
END
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |