coze教程:手把手教你搭建一个智能待办事项管理智能体
前言
目的
能够记录并查询待办事项,例如,记录行程记录,并可以查询细节,如时间,地点等信息。
目标
编辑记录待办事项工作流,可以提取用户提交的信息,并将其保存到数据库中。
编辑查询待办事项工作流,可以查询各种事项以及他的细节。例如查询某个会议的时间和地址。
概述
- 目的是记录并查询待办事项,如行程记录,并且能够查询细节,如时间和地点。
- 目标是编辑记录待办事项的工作流,提取用户提交的信息并将其保存到数据库中。同时,编辑查询待办事项的工作流,可以查询各种事项及其细节。
- 架构包含数据库表创建、字段设置和工作流的详细编辑步骤。
- 实施步骤涉及创建数据表、设置字段、添加数据库节点、使用代码节点转换数据为字符串、判断事项是否重复等。
- 测试验证了系统在不同条件下的功能性,如成功保存、查询特定事项、处理重复事项和错误信息。
- Agent角色是一个助手,协助完成记录待办事项和查询代办事项的任务
实施
架构
前期准备
创建数据表
- 添加一个新的表
todo_list
设为单用户模式
- 字段设置
设置三个字段,分别是do_des
对应事项概括描述,do_content
对应事项详情,事项信息的原文,create_at
对应创建时间。
记录待办事项工作流
流程图
详细步骤
点击添加工作流并点击创建工作流,进入工作流编辑面板。
part.1 判断内容是否重复
第一个节点
首先添加一个数据库节点,用来查询最近7天内的全部记录
查询语句如下:
SELECT do_des, do_content FROM todo_list WHERE create_at>= DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)
提示:
查询时不支持 select *
输出参数:
outputList,系统默认
rowNum,系统默认
第二个节点
使用代码节点,用来将查询数据库得到的数据转换为一个字符串,以便作为上下文提供给大模型
输入参数:
list,引用各个数据库查询的输出
outputList
。
代码如下:
1 | import dayjs from 'dayjs'; |
输出参数:
status,判断查询结果是否为空,如果为空则直接到第三步。
data,将数据库查询结果转为字符串的结果。
time,当前的时间
第三个节点
使用选择器节点,用来判断数据库查询结果是否为空,如果为空则直接生成摘要以及后续动作,否则需要判断已经保存过类似的事项。
判断事项是否重复
通过大模型来判断事项是否重复
添加一个大模型节点,因为doto_list参数的值可能会比较长,因此我们尽量使用上下文较长的模型。
输入参数:
todo_list,引用代码节点的输出参数
data
。
data,引用开始节点的输入参数input
。
提示词:
角色
作为一个事项管理的专业人士,帮我总结事项,和判断事项是否有重复。
上下文
当前已经存在的事项如下:
行动
判断新的事项是否已经存在于已经存在的事项列表中,如果存在就返回true,否则就返回false
结果示例
true
新的事项
输出参数:
result,类型选择布尔类型
随后再添加一个判断节点
判断大模型节点的输出是否为false,如果不存在重复项则直接生成摘要并保存到数据库,否则直接返回已存在
生成摘要并保存到数据库
添加一个大模型用来生成摘要。
输入参数:
input,引用开始节点的输入input。
提示词:
角色
作为一个事项管理的专业人士,帮我总结事项。
上下文
事项的详细内容如下:
行动
总结事项内容
输出参数:
output,为生成的摘要结果。
添加一个数据库节点,用来执行保存信息。
输入参数:
do_des,引用大模型生成摘要
do_content,引用开始节点的input
time,引用当前时间
SQL语句:
INSERT INTO todo_list (do_des, do_content,create_at) VALUES (‘‘, ‘‘, ‘‘)
输出:
outputList,系统默认
rowNum,系统默认
统一输出内容
将不同的情况返回的结果进行统一处理,嘴鸥返回给结束节点。
添加一个代码节点,这个节点处理也比较简单,就是判断一下是否重复。
输入参数:
status,引用判断重复的大模型的输出结果
代码:
1 | async function main({ params }: Args): Promise<Output> { |
输出参数:
output,传给结束节点的内容。
结束节点选择,使用设定内容直接回答即可
查询待办事项工作流
流程图
详细步骤
数据库查询节点
查询7天内添加的待办事项
代码节点,处理数据库查询结果,将其转为字符串
代码:
1 | async function main({ params }: Args): Promise<Output> { |
选择器节点
判断7天内是否有待办事项
大模型节点
处理用户的请求
输入参数:
list,引用代码节点处理的数据库查询结果
input,引用开始节点的输入参数
提示词:
角色
作为一个事项管理专家来帮助我判断,是否存在与查询事项相关的事项,如果有就返回该事项的详情
上下文
待处理事项列表如下:
动作
判断输入的查询的事项内容属于哪条事项,并返回该事项,如果没有则返回’无有关事项’,如果有就根据输入的内容返回相应的信息。
如果没有与输入相关的信息则返回‘无与您查询相关的信息’输入
输出参数:
output,大模型的处理结果。
代码节点
将不同分支的结果统一处理为返回内容
输入参数:
result,引用大模型的处理结果
status,引用代码节点的判断7天内是否存在待办事项的结果。
代码:
1 | async function main({ params }: Args): Promise<Output> { |
输出参数:
output,输出处理结果
Agent的Prompt
角色
你是一个人工智能助手,我能够协助你完成一些工作。
技能
技能 4: 记录代办事项
- 当用户提交一个明确的记录代办事项的要求时,立即调用
todo_list_save
工作流技能 5: 查询代办事项
- 当用户有查询代办事项的需求时,立即调用
todo_list_search
工作流
测试
测试保存待办事项
第一次输入
输入内容:
记录一个待办事项,明天上午10点,去鸟巢拜访领导,联系电话是123456789
返回内容:
能够正常的按照预想执行。
第二次输入相同的内容
也是能够正常执行。
输入一个不一样的事项
能够正常执行
尝试输入一个类似的事项
只是修改了时间
也是可以正常识别出来是两次不同的事件
尝试查询内容
失败
查看原因,是因为大模型请求的input参数不对
后期看该如何调整
换一个问题尝试
可以正常获取结果。
可以看到input值是一个符合需求的参数值。
总结
整体实现了目标,其中在执行查询工作流的时候出现了在调用工作流时传入的参数不符合预期的问题,下面需要思考如何解决。