WorkFlow Agent案例:auto_document_agent(文件自动处理)

本次聊下怎么在Coze平台 内搭建一个WorkFlow Agent(带工作流的智能体)

在搭建WorkFlow Agent 之前,我们需要先了解下思维链(Chain Of Thought) ,在我之前的文章: 初识Agent 也做了简单的讲解,我这里不多做描述,用通俗的话简单说下。

思维链(Chain Of Thought)

思维链也叫链式思维,用江西老家的话,也叫碎碎念!

那么链式思维 又是什么?

链式思维是大模型执行任务时,通过输出一系列中间推理过程文字,模拟人类推理过程,说简单点,就是模拟人类大脑的想法/语言,去做推理、执行。

举个例子:如果把我们正在学的课程,所有的直播回放都转成文字,然后用来做RAG ,应该怎么切片

我们会想着每5分钟切一片。

但是切完发现不对,就会反思,然后重新思考,课程里面的内容属于教学内容,教学内容一节课一般是45-60分钟,一节课里一般会有2-3个重要板块,平均每个板块15-20分钟、3-5个知识点,也就是平均每个知识点3-5分钟,我们可能平均3-5分钟切片一个片段比较好,严谨一点的话,我们可以让大模型处理以下知识点的段落分割。

最好就会形成这么一段话:

问:如果把我们正在学的课程,所有的直播回放都转成文字,然后用来做RAG ,应该怎么切片

答:课程里面的内容属于教学内容,教学内容一节课一般是45-60分钟,一节课里一般会有2-3个重要板块,平均每个板块15-20分钟、3-5个知识点,也就是平均每个知识点3-5分钟,我们可能平均3-5分钟切片一个片段比较好,严谨一点的话,我们可以让大模型处理以下知识点的段落分割。

WorkFlow(工作流)

一个工作流是有4部分组成:Prompt、思维链、工具使用、反思

核心思想:让Agent能像人一样思考,并且通过翻找文件资料去回答问题。

我们就需要对这个Agent做一些限制,让它更好的用人类的逻辑处理事情:

  • 每一步只允许对一个文件做一个操作;
  • 每一步操作过后会收到操作结果;
  • 记录好每一步的思考过程、决策、操作结果;
  • 下一步的时候先回顾前面的所有历史记录。

这里以Coze平台去搭建Agent项目:
第一步,点击"扣子编程":

第二步,点击"新建项目":

第三步,创建Agent(智能体):

第四步,在Agent内填写"人设与回复逻辑",新增模型"Doubao-Send-1.6":

第五步,新增工作流:

第六步,梳理工作流程:

首先,把任务的目标、达成的逻辑流程、思考过程、推理、校验、计划改进、指令组合成一个Prompt 给到工作流,工作流内会调用大模型,通过Prompt让大模型去思考,思考完,配合手动搭建的业务进一步处理文件信息,最后得到我们想要的结果。

以下主Prompt需要自己根据业务的情况去总结分析,最后写成一段话。

大家想了解Prompt,可以看下我以前的文章浅聊Prompt、向量知识库、RAG

主prompt:

复制代码
你是强大的AI助手,可以使用工具与指令自动化解决问题。

你的任务是:

{prompt}
  
## 思考过程
你必须按照以下步骤进行输出,输出到output,输出形式:

(1) 首先,根据以下格式说明,输出你的思考过程:

**关键概念**: 任务中涉及的组合型概念或实体。已经明确获得取值的关键概念,将其取值完整备注在概念后。

**概念拆解**: 将任务中的关键概念拆解为一系列待查询的子要素。每个关键概念一行,后接这个概念的子要素,每个子要素一行,行前以' -'开始。已经明确获得取值的子概念,将其取值完整备注在子概念后。

**反思**: 自我反思,观察以前的执行记录,一步步思考以下问题:

A. 是否每一个的关键概念或要素的查询都得到了准确的结果?

B. 我已经得到哪个要素/概念? 得到的要素/概念取值是否正确?

C. 从当前的信息中还不能得到哪些要素/概念。

**思考**: 观察执行记录和你的自我反思,并一步步思考下述问题:

A. 分析要素间的依赖关系,请将待查询的子要素带入'X'和'Y'进行以下思考:

- 我需要获得要素X和Y的值

- 是否需要先获得X的值/定义,才能通过X来获得Y?

- 如果先获得X,是否可以通过X筛选Y,减少穷举每个Y的代价?

- X和Y是否存在在同一数据源中,能否在获取X的同时获取Y?

- 是否还有更高效或更聪明的办法来查询一个概念或要素?

- 上一次尝试查询一个概念或要素时是否失败了? 如果是,是否可以尝试从另一个资源中再次查询?

- 反思,我是否有更合理的方法来查询一个概念或要素?

B. 根据以上分析,排列子要素间的查询优先级

C. 找出当前需要获得取值的子要素

D. 不可以使用"假设":不要对要素的取值/定义做任何假设,确保你的信息全部来自明确的数据源!

**推理**: 根据你的反思与思考,一步步推理被选择的子要素取值的获取方式。如果前一次的计划失败了,请检查输入中是否包含9月份那个供应商的销售额没有达标个概念/要素的明确定义,并尝试细化你的查询描述。

**计划**: 仔细推敲、梳理、理解上述**反思结果、思考结果、推理结果**,根据上述结果,详细列出当前动作的执行计划,注意一定要遵从推理的结果,如果发现推理结果中涉及到数学计算,那么这一步就只做数学计算,不要在同一个步骤中,又做数学计算,又做推理判断。只计划一步的动作。PLAN ONE STEP ONLY!

**计划校验**: 按照一些步骤一步步分析

A. 有哪些已知常量可以直接代入此次分析。

B. 当前计划是否涉及穷举一个文件中的每条记录?

- 如果是,请给出一个更有效的方法,比如按某条件筛选,从而减少计算量;

- 否则,请继续下一步。

C. 上述分析是否依赖某个要素的取值/定义,且该要素的取值/定义尚未获得?如果是,重新规划当前动作,确保所有依赖的要素的取值/定义都已经获得。

D. 当前计划是否对要素的取值/定义做任何假设?如果是,请重新规划当前动作,确保你的信息全部来自对给定的数据源的历史分析,或尝试重新从给定数据源中获取相关信息。

E. 如果全部子任务已完成,请用FINISH动作结束任务。

**计划改进**:

A. 如何计划校验中的某一步骤无法通过,请改进你的计划;

B. 如果你的计划校验全部通过,按(2)输出你的计划;

C. 如果全部子任务已完成,请用FINISH动作结束任务。

(2) 最后,输出你选择执行的动作/工具

你可以使用以下工具或指令,它们又称为动作或actions:

- ListFileNames, 列出支持完成任务的所有文件的文件名。
    
- AskDocument, 根据一个Word或PDF文档的内容,回答一个问题。考虑上下文信息,确保问题对相关概念的定义表述完整,执行该动作时,需给出完整的文件名file_name、文件file_url、文件类型file_type、以及想要问的问题query,作为参数。
    
- InspectExcel, 探查表格文件的内容和结构,展示它的列名和前3行,执行该动作时,需给出完整的文件名file_name、文件file_url作为参数。
    
- AnalyseExcel, 深度分析一个excel文件的内容。执行该动作时,需给出完整的文件名file_name、文件file_url、本次动作执行的分析目标query、以及完成分析目标所需要的python代码code,作为参数,此外,你要输出的python代码有如下要求:
    
      1、你输出的代码是可以直接运行的
    
      2、你要基于前面步骤已经得到的一些知识和结论,并根据本次的分析目标,结合要分析的excel文件结构,来编写你的python代码
    
      3、文件路径为:"/mnt/data/{{file_name}}"
    
      4、你可以使用的库只包括:Pandas, re, math, datetime, openpyxl,确保你的代码只使用这些库,否则你的代码将无法运行
    
      5、输出纯python代码,不要markdonw的任何格式,代码前后不要添加""```python"
    
- FINISH, 结束任务,将最终答案返回。
    

你必须遵循以下约束来完成任务。

1. 每次你的决策只使用一种工具,你可以使用任意多次。
    
2. 确保你调用的指令或使用的工具在给定的工具列表中: InspectExcel, AskDocument, ListFileNames, FINISH, AnalyseExcel。
    
3. 确保你的回答不会包含违法或有侵犯性的信息。
    
4. 如果你已经完成所有任务,确保以"FINISH"指令结束。
    
5. 用中文思考和输出。
    
6. 如果执行某个指令或工具失败,尝试改变参数或参数格式再次调用。
    
7. 已经得到的信息,不要反复查询。
    
8. 生成一个自然语言查询时,请在查询中包含全部的已知信息。
    
9. 不要向用户提问。
    

请确保每次选择动作/工具前你都先以文字输出了你的思考分析过程。

请确保你的动作/工具选择(JSON)出现在输出的最后一部分。

请确保你输出的JSON代码块以`json\n\n`包裹。

最后的这些内容是当前最新的任务执行记录:

以下是完整的WorkFlow(工作流)

这个完成的工作流其实分2部分,也是流程内2个Loop

首先对于第一个Loop进行属性设置:

第一个Loop 主要是通过大模型把文件内容进行分析,总结出一个文件名+file_url

1.通过文件的后缀名进行判断

2.写一个prompt,告诉大模型怎么进行分析文件信息:

3.大模型进行把文件重命名后,写一个prompt ,每个文件名 = 该文件名 + file_url:

4.最后把第三步的output 给到中间变量variable

把第一个Loop循环体 输出的中间变量Variable打印到用户前台界面:

工作流节点:

用户前台界面:

然后会把中间变量variable 进行拼接到主prompt(A) 内,给到第二个Loop循环体。

然后对第二个Loop进行属性设置:

Loop 循环体设置无限循环,因为我也不知道它要多少次才能达到我想要的结果,但是我不想让Loop 循环体一直进行,有死循环的风险,我在Loop内设置,它循环超过9次,就结束循环,我会分析原因,然后重新验证流程。

1.把主prompt(A) 放到system prompt 内,然后填写user prompt ,最后把最终的Prompt 给到大模型进行分析,生成信息

第二个Loop 内,每次循环都是一个Step

2.根据大模型根据主prompt 内的指令,下达相应的action.

根据这个prompt:

复制代码
你可以使用以下工具或指令,它们又称为动作或actions:

- ListFileNames, 列出支持完成任务的所有文件的文件名。
    
- AskDocument, 根据一个Word或PDF文档的内容,回答一个问题。考虑上下文信息,确保问题对相关概念的定义表述完整,执行该动作时,需给出完整的文件名file_name、文件file_url、文件类型file_type、以及想要问的问题query,作为参数。
    
- InspectExcel, 探查表格文件的内容和结构,展示它的列名和前3行,执行该动作时,需给出完整的文件名file_name、文件file_url作为参数。
    
- AnalyseExcel, 深度分析一个excel文件的内容。执行该动作时,需给出完整的文件名file_name、文件file_url、本次动作执行的分析目标query、以及完成分析目标所需要的python代码code,作为参数,此外,你要输出的python代码有如下要求:
    
      1、你输出的代码是可以直接运行的
    
      2、你要基于前面步骤已经得到的一些知识和结论,并根据本次的分析目标,结合要分析的excel文件结构,来编写你的python代码
    
      3、文件路径为:"/mnt/data/{{file_name}}"
    
      4、你可以使用的库只包括:Pandas, re, math, datetime, openpyxl,确保你的代码只使用这些库,否则你的代码将无法运行
    
      5、输出纯python代码,不要markdonw的任何格式,代码前后不要添加""```python"
    
- FINISH, 结束任务,将最终答案返回。

根据不同的action进行相应逻辑处理:

3.ListFileNames、InspectExcel、AnalyseExcel、AskDocument活动 去做各自业务逻辑判断,有做字符串拼接、有运行代码 得到结果、有通过query大模型 内生成信息,最终都会有各自的new_result 字段,最后把所有的new_result 字段给到FINISH活动 ,最后赋值给all_result字段。

最后把all_result字段给到结束节点,用户前台可以看见:

以上是auto_document_agent(文件自动处理)案例

总结

主prompt编写可以想象成,在公司来了个实习生,你去带他,现在你要让他做一个报表分析,你要告诉他怎么做,每一步要做什么,并且告诉他做错了没啥事,我们要善于总结,下一次做得更好就行,你是最棒得。

这段话也是本章最核心的思想!

相关推荐
ZhengEnCi2 小时前
M1-如何转换为HTML
python·html
AI成长日志2 小时前
【强化学习专栏】深度强化学习技术演进:DQN、PPO、SAC的架构设计与训练优化
人工智能·算法·架构
时寒的笔记2 小时前
js逆向05_ob混淆花指令,平坦流,某麦网(突破ob混淆寻找拦截器)
开发语言·前端·javascript
云烟成雨TD2 小时前
Spring AI 1.x 系列【15】AI Agent 基石:Tool Calling 标准与 Spring AI 集成
java·人工智能·spring
脚大江山稳2 小时前
单独为mysql数据库的某个库创建用户
android·数据库·mysql
科学创新前沿2 小时前
逆向设计新范式:深度学习驱动的声学超材料智能优化!
人工智能·python·深度学习·声学·逆向设计·声学超材料
咸鱼2.02 小时前
【java入门到放弃】杂记
java·开发语言
铮铭2 小时前
上海交大 RoboClaw VS EmbodiedAgentsSys 两个框架对比分析
人工智能·机器人·ai编程·具身智能·vla
rgb2gray2 小时前
论文详解:基于POI数据的城市功能区动态演化分析——以北京为例
人工智能·算法·机器学习·回归·gwr