我们常见的智能体往往都是类搜索场景,不管是知识库查询,还是客服,或者营销场景,本质都是用户给一个需求描述,然后Agent会自动查询知识库里面匹配的片段,然后结合上下文,给用户一个返回。最近有个朋友想让我做个出题官的智能体,也就是我在定义Agent的时候,要维护一个题库,然后用户开始考试的时候,Agent会随机出题,然后用户回答,Agent来做评价,包括最后评分。如果关联上数据库或者外部接口,也可以实现评分的管理。这个场景想想其实很简单,用Coze应该分分钟用就搭建出来。但实现起来发现还真的有一些坑,我分享出来,供大家参考。这种方式还是对于不想大面积重写一个智能体代码的人,借助Coze之类的无代码工具来快速实现。1、首先知识库还是要自己先做数据的清洗的,不能把大面积的文档直接丢进去,比如有的题库答案直接和题目在一起的;有的题库答案是独立的。这些确实需要自己来处理。借助大模型,处理这些也确实会节省不少时间,这里我就不赘述了。2、我们先给智能体一个简单的定义,让用户说准备好了的时候,可以随机从这个知识库中抽取一道题目。

我尝试了很多次,发现并没有召回任何知识,结果大模型就开始胡编一些题目给到我了。


我即便通过recallKnowledge这个函数,来强制调用,发现也是无法召回。原因也很简单,在非工作流模式下,搜索知识库其实是带着用户的指令,结合上下文来去搜索的。你必须有相关的搜索意图,我说个准备好了,其实它就是用“准备好了”,四个字去搜索,肯定是无法召回的。所以幻想简单的提示词,就能实现从知识库主动随机抽取内容这个方式是不行的。3、所以还是转向了工作流模式。

我大概说下设计思路,当用户发起考试需求的时候,就调用工作流,工作流会到知识库中去随机搜索一套题目,这里面也是搜索逻辑,你不能给一个空需求来搜索;另外当然要保证在一个考试内,抽取的题目不能重复,尤其是我希望题目是一道一道出,也就是调用一次工作流,返回一个题目,回答完成,再调用,再出下一题,所以就要工作流可以记录之前出过什么内容。你觉得应该怎样来实现?可能我的方法不是最优的,但确实在有限的时间里,我就想了一个取巧的方法。4、首先对题库的处理,我现给每一题做了唯一的编号,作为知识库QA对的索引,比如“题目序号1”,“题目序号2”。

5、然后添加一个代码模块,写一个随机生成id,并且拼成搜索词的代码:

当然这里面,还要把已经出过的题目的id保存在一个数组里,要确保随机生成的id,不在数组中。当重新考试的时候,就清空这个数组。这样在一个考试的问答周期内,就只会出新的题目。篇幅原因,工作流细节就不一一贴进来了,如果你感兴趣,可以添加我微信 mrp1874,我可以详细分享下,也给你加入到社群中。6、然后就是写提示词了,我把我的提示词分享出来:

因为了避免用户不参加考试,就直接让AI给他一个满分成绩,之前我做的那个红包智能体的一些安全防护经验就用上了。之前的文章:10分钟,我做了一个帮我保管红包的AI智能体,但你想领红包?得先骗过他7、我现在设计的是给返回一个安全码,其实这里可以调用接口,来把成绩写到管理系统里,或者和门禁系统打通,自动下发门禁。作为Demo,做了一个简化。


总结一下,这个智能体主要是为了实现这样一个随机抽取Agent知识库里知识片段的功能,我们不得不调用工作流,来随机一个题目编号来请求知识库。其实这个工能在非AI时代,还是挺好实现的,所以另外一个思路就是要构建一个随机找题目的程序,工作流每次都是调用这个程序的API,返回题目,然后理解题目,把题目做个改编,比如题型,或者选项都可以由AI自由发挥。好了,这算分享一个小的实践,如果你有更好的方法,也欢迎给我留言,也请先关注,点赞,转发~  我还维护了一些社群 ~ 感兴趣可以加入,及时了解AI的动态,和知识。

可能你错过了我之前的文章:厂长周记(第十一期):1957年就出现了有自我意识的电子大脑?【粉丝福利】3天AI绘画实训,免费+送书Sora终于来了!最强整理,一文看懂Sora正式版有人成功说服AI”批准转账”,从而获得了5万美元

By adampan

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注