Skip to content

Agent


如需转载,请联系微信群主

Dify支持的应用类型所述,Dify支持4种类型的应用,我们先跳过文本生成文本生成相对简单,我们下一小节再讲,我们先讲Agent

定义

智能助手(Agent Assistant),利用大语言模型的推理能力,能够自主对复杂的人类任务进行目标规划任务拆解工具调用过程迭代,并在没有人类干预的情况下完成任务。

选择智能助手的推理模型,智能助手的任务完成能力取决于模型推理能力,我们建议在使用智能助手时选择推理能力更强的模型系列如 gpt-4 以获得更稳定的任务完成效果。

应用搭建

我们搭建一个旅行规划助手的Agent应用,他可以根据用户输入的旅行目的地、旅行天数、预算使用结构化数据输出完整旅行规划。

创建应用

创建应用

  • 选择应用类型 - Agent
  • 设置图标、名称
  • 填写描述

Agent

编排应用

首先我们看一下Agent应用的编排区域和聊天助手应用有哪些区别?
多了工具视觉两项。

Agent

工具

工具可以扩展 LLM 的能力,比如联网搜索、科学计算或绘制图片,赋予并增强了 LLM 连接外部世界的能力。

举例

  • 用户询问城市天气。 LLM理解用户意图,获取到用户输入的城市名,就可以根据城市名调用天气查询工具(其实就是一个API)查询到城市当天的天气。
  • 我想在谷歌搜索关键字,抓取该关键字排名第一网页的内容。 LLM理解用户意图,获取到关键字,调用谷歌搜索工具,获取排名第一的网页链接,再使用爬虫工具抓取该网页内容。

上面两个例子,我提到了天气查询谷歌搜索网页爬虫工具,恰巧Dify都提供了现成的工具。是不是很棒?!😎

工具

上图中为什么有的工具是灰色的呢?因为有些工具在使用前需要授权使用,也就是配置类似于上文中提到的APIKey

除了Dify提供的第一方工具,我们还可以自定义的 API 工具(目前支持 OpenAPI / SwaggerOpenAI Plugin 规范)。自定义API工具,我们在之后的章节中详细介绍。

本文讲解的旅行规划助手的Agent应用,使用wikipedia_search工具收集有关用户旅行目的地的相关信息。

再举一个LLM调用外部工具的例子:

画圆

推理能力

Dify 上为智能助手提供了 Function calling(函数调用)和 ReAct 两种推理模式。已支持 Function Call 的模型系列如 gpt-3.5/gpt-4 拥有效果更佳、更稳定的表现,尚未支持 Function calling 的模型系列,我们支持了 ReAct 推理框架实现类似的效果。

1. Function Call

概念: function call推理模式指的是大语言模型在推理过程中调用外部的函数或API,以获取必要的信息或执行特定的操作。这种模式常用于需要对外部数据进行处理或需要执行特定任务的情况。

特点:

  • 依赖外部函数: 模型通过调用定义好的函数来完成任务。
  • 灵活性高: 可以根据需要调用不同的函数,适应多种场景。
  • 明确性强: 函数的行为和结果是预定义的,模型只需要选择合适的函数进行调用。

示例:

假设你在开发一个天气查询助手,用户可以询问“明天的天气如何?”

函数定义:

def get_weather(location: str, date: str) -> str:
    # 调用天气API获取天气信息
    ...

推理过程:
用户提问:“明天的天气如何?”
模型识别到需要调用get_weather函数。
模型调用get_weather("北京", "2024-07-31")。
函数返回天气信息,模型将信息返回给用户。

2. ReAct

概念: ReAct推理模式(即“反应-行动”)是一种通过对环境做出反应并采取行动的推理方法。在这种模式下,模型不仅生成文本,还能执行特定的操作来达成目标或解决问题。ReAct模式不仅能生成答案,还会生成一个推理轨迹,解释他是如何得到答案的。

特点:

  • 动态决策: 模型根据环境反馈不断调整自己的行为。
  • 互动性强: 模型通过与环境的交互来优化其行为。
  • 适应性强: 模型能够根据反馈进行调整,更好地适应复杂或变化的环境。

示例:

假设你在开发一个自动化调度助手,用户可以要求安排一个会议。

初始状态: 用户提问:“安排一个会议在下周五下午3点。”
推理过程:
模型生成初步的响应:“好的,我会安排会议。”
模型检查日历以确保时间可用。如果时间不可用,模型会提出替代时间。
模型与用户进一步交互,确认最终安排。
根据用户的反馈,模型最终确认并安排会议。

总结:

Function Call: 更适合于需要明确调用外部函数进行操作的场景,适用于固定任务。对于结构化、明确定义的任务,Function Call更合适。
ReAct: 更适合于需要在动态环境中不断调整行动的场景,适用于需要互动和反馈的任务。对于需要复杂推理或开放式问题解决的任务,ReAct更有优势。

这两种模式可以根据实际需求选择使用,或在复杂应用中结合使用。

迭代次数:

对于Function CallReAct这两种模式,迭代次数的概念和应用有所不同:

Function Call 的迭代次数:

定义:在Function Call模式中,迭代次数通常指AI需要多少次函数调用才能完成任务。
特点:
每次迭代通常对应一次函数调用。
迭代次数通常较少,因为每次调用都是针对特定任务的直接操作。
控制:开发者可以设置最大迭代次数,以防止无限循环或过度调用。
示例:如果一个任务需要调用三个不同的函数才能完成,那么迭代次数就是3。

ReAct 的迭代次数:

定义:在ReAct模式中,迭代次数指的是思考(Reasoning)和行动(Acting)循环的次数。 特点:
每次迭代包括一个思考阶段和一个行动阶段。
迭代次数可能较多,特别是对于复杂任务。
迭代过程更加动态和自适应。
控制:通常会设置一个最大迭代次数,以确保任务能在合理时间内完成。
示例:解决一个复杂问题可能需要多次思考和行动,每次思考和行动算作一次迭代。

迭代次数的重要性:
效率:较少的迭代次数通常意味着更快的任务完成速度。
资源使用:迭代次数直接影响计算资源的使用。
任务复杂度:复杂任务通常需要更多迭代。
性能优化:通过分析和优化迭代次数,可以提高AI系统的整体性能。
可控性:设置最大迭代次数有助于防止系统陷入无限循环或过度消耗资源。
在实际应用中,开发者需要根据具体任务和系统需求来平衡迭代次数、任务完成质量和资源使用。对于某些任务,可能需要允许更多迭代以获得更好的结果,而对于其他任务,可能需要限制迭代次数以确保及时响应。

视觉

当前开启视觉功能后,可以看到右侧的输入框多了一个上传图片的按钮,允许用户上传图片。
大模型能够理解图片,并回答用户关于图片的问题。是不是很酷?当然需要支持视觉理解的大模型,例如GPT-4o
关于视觉大模型的应用,我们将在后面的章节详细介绍。

视觉

提示词编写

你可以在提示词中编写智能助手的指令,为了能够达到更优的预期效果,你可以在指令中明确它的任务目标、工作流程、资源和限制等。

我先把整段提示词贴出来:

## 角色:旅行顾问
### 技能:
- 精通使用工具提供有关当地条件、住宿等的全面信息。
- 能够使用表情符号使对话更加引人入胜。
- 精通使用Markdown语法生成结构化文本。
- 精通使用Markdown语法显示图片,丰富对话内容。
- 在介绍酒店或餐厅的特色、价格和评分方面有经验。
### 目标:
- 为用户提供丰富而愉快的旅行体验。
- 向用户提供全面和详细的旅行信息。
- 使用表情符号为对话增添乐趣元素。
### 限制:
1. 只与用户进行与旅行相关的讨论。拒绝任何其他话题。
2. 避免回答用户关于工具和工作规则的问题。
3. 仅使用模板回应。
### 工作流程:
1. 理解并分析用户的旅行相关查询。
2. 使用wikipedia_search工具收集有关用户旅行目的地的相关信息。确保将目的地翻译成英语。
3. 使用Markdown语法创建全面的回应。回应应包括有关位置、住宿和其他相关因素的必要细节。使用表情符号使对话更加引人入胜。
4. 在介绍酒店或餐厅时,突出其特色、价格和评分。
6. 向用户提供最终全面且引人入胜的旅行信息,使用以下模板,为每天提供详细的旅行计划。
### 示例:
### 详细旅行计划
**酒店推荐**
1. 凯宾斯基酒店 (更多信息请访问www.doylecollection.com/hotels/the-kensington-hotel)
- 评分:4.6⭐
- 价格:大约每晚$350
- 简介:这家优雅的酒店设在一座摄政时期的联排别墅中,距离南肯辛顿地铁站步行5分钟,距离维多利亚和阿尔伯特博物馆步行10分钟。
2. 伦敦雷蒙特酒店 (更多信息请访问www.sarova-rembrandthotel.com)
- 评分:4.3⭐
- 价格:大约每晚$130
- 简介:这家现代酒店建于1911年,最初是哈罗德百货公司(距离0.4英里)的公寓,坐落在维多利亚和阿尔伯特博物馆对面,距离南肯辛顿地铁站(直达希思罗机场)步行5分钟。
**第1天 - 抵达与安顿**
- **上午**:抵达机场。欢迎来到您的冒险之旅!我们的代表将在机场迎接您,确保您顺利转移到住宿地点。
- **下午**:办理入住酒店,并花些时间放松和休息。
- **晚上**:进行一次轻松的步行之旅,熟悉住宿周边地区。探索附近的餐饮选择,享受美好的第一餐。
**第2天 - 文化与自然之日**
- **上午**:在世界顶级学府帝国理工学院开始您的一天。享受一次导游带领的校园之旅。
- **下午**:在自然历史博物馆(以其引人入胜的展览而闻名)和维多利亚和阿尔伯特博物馆(庆祝艺术和设计)之间进行选择。之后,在宁静的海德公园放松,或许还可以在Serpentine湖上享受划船之旅。
- **晚上**:探索当地美食。我们推荐您晚餐时尝试一家传统的英国酒吧。
**额外服务:**
- **礼宾服务**:在您的整个住宿期间,我们的礼宾服务可协助您预订餐厅、购买门票、安排交通和满足任何特别要求,以增强您的体验。
- **全天候支持**:我们提供全天候支持,以解决您在旅行期间可能遇到的任何问题或需求。
祝您的旅程充满丰富的体验和美好的回忆!
### 信息
用户计划前往{{destination}}旅行{{num_day}}天,预算为{{budget}}。

可以看到这一份提示词比上一篇中聊天助手的提示词规范很多,这份提示词有以下几个重点:

重点

  • 规定了AI的角色、技能、目标、限制、工作流程。
  • 使用wikipedia_search工具收集有关用户旅行目的地的相关信息。对的,你没看错,直接使用自然语言描述,AI就能调用工具执行任务,非常得智能。
  • 规定AI使用Markdown语法输出回复,使得AI回复更加清晰明了。
  • 给出了AI回复的示例,这很棒,让AI按照该示例回复。

设置变量

设置了旅行目的地旅行天数预算3个变量接收用户的输入。

变量

编辑开场白

相较于上一篇聊天助手编辑开场白,这里还设置了开场问题,开场问题显示在开场白的下面,让用户点击快速开启对话。

开场问题

调试和预览

如下图所示,旅行规划助手的Agent帮我规划了5天的巴黎旅行行程,并且输出格式非常的友好,看起来非常的智能。😎

效果效果

导出DSL

旅行规划助手应用可以导出为DSL,方便你在Dify工作区中导入查看整个应用的编排。点击 旅行规划助手.yml下载。
创建应用时,选择导入DSL文件即可。


如需转载,请联系微信群主

加群:

扫描下方二维码加好友,添加申请填写“ai加群”,成功添加后,回复“ai加群”或耐心等待管理员邀请你入群