用dify实现简单的Agent应用(AI信息检索)

news2024/11/22 17:04:55

这篇文章里,我们来聊聊如何使用字节最新的豆包大模型,在 Dify 上来快速完成一个具备理解需求、自主规划、自主选择工具使用的简单智能体(Agent)。

准备工作
完整准备过程分为:准备 Docker 环境、启动 Dify 程序、启动 Meilisearch 搜索引擎并准备搜索引擎要检索的数据,以及准备模型服务。

使用 Docker 快速启动 Dify 项目

你可以参考下面的内容来完成 Dify 项目的一键启动:

《使用 Dify 和 AWS Bedrock 玩转 Anthropic Claude 3》中的“快速完成 Dify 的配置和启动”。
《使用 Dify 和 Moonshot API 构建你的 AI 工作流(一):让不 AI 的应用 AI 化》中的 “优化后的 Dify Docker 配置”。

唯一需要注意的是,文章内容提到的 dify docker 配置中版本号,可以更新为 0.6.8 啦:

langgenius/dify-web:0.6.8
langgenius/dify-api:0.6.8

使用 Docker 一键启动 Meilisearch 搜索引擎

Meilisearch 相关的内容,包括开箱即用的配置、一键拉起的 Docker 搜索引擎服务,步骤简单,但是篇幅较多,就不展开啦,我们完整参考上一篇文章即可。

步骤一:在 Dify 中配置豆包大模型

目前豆包 MaaS 平台还不是很完善,建议跟着下面的操作走一遍,“避免迷路”。

想要使用豆包模型作为 Agent 的驱动模型,我们首先要创建豆包模型的服务实例,并在 Dify 中完成部署。

打开火山引擎的密钥管理页面,创建一个用于调用账号云资源的“密钥对”,我们稍后使用。

在这里插入图片描述
现在,我们可以打开 Dify 的界面,开始配置 Dify 中的模型后端啦。点击 Dify 界面右上角的用户头像,在下拉菜单中选择“设置”,在弹出的“设置”窗口左侧侧边栏“模型供应商”中选择“火山引擎”,点击“添加模型”按钮。

在这里插入图片描述
在弹出的模型设置对话框中,分别填入我们上文中折腾好的“密钥对”、“模型的接入点 ID”(其他选择默认值即可):
在这里插入图片描述
步骤二:创建 Dify AI Agent 应用

在首页点击创建空白应用,然后在弹出窗口中选择“Agent”类型的应用,根据你的喜好填写应用名称和描述:
在这里插入图片描述
在右侧模型列表中选择我们要使用的模型,比如刚刚新添加的豆包大模型:
在这里插入图片描述
步骤三:实现 Agent 工具 API

在上一篇文章中,我们一步一步的完成了如何和既有的系统接口打通的,能够从本地部署的搜索引擎中直接获取数据。这一部分的代码,我们就不再展开啦,只聊和这篇相关的内容。

func main() {
	router := gin.Default()

	router.GET("/new-api-for-dify", func(c *gin.Context) {
		s := strings.TrimSpace(c.Query("keyword"))
		if s == "" {
			c.JSON(http.StatusBadRequest, ExtensionPointResponse{Result: "empty keyword"})
			return
		}

		movies, err := GetSearchResult(s, 3, "movies", 0, "soulteary")
		if err != nil {
			c.JSON(http.StatusBadRequest, ExtensionPointResponse{Result: err.Error()})
			return
		}

		var result string
		for _, movie := range movies.Results {
			for _, hit := range movie.Hits {
				result += fmt.Sprintf("- 标题:%s\n", hit.Title)
				result += fmt.Sprintf("- 简介:%s\n\n", hit.Overview)
			}
		}

		c.JSON(http.StatusOK, ExtensionPointResponse{Result: result})
	})

	router.Run(":8084")
}

上面的代码中,我们定义了一个跑在 8084 端口的服务,其中主要提供功能支持的接口地址是 /new-api-for-dify,它接收来自 Dify Agent 发送的 GET 请求中的 keyword 参数,并将参数传递给上篇文章中“步骤五:完成 AI 接口,让程序 AI 起来”章节中,我们已经实现好的“电影数据检索”函数。

当我们完成上面的程序后,执行 go run main.go,就能得到一个运行在 8084 的新接口服务啦,接下来会使用。

你可以根据你的实际需求,来封装更多类似的信息检索,或者“动作 API”服务,让 Agent 来调用。

当我们完成了上面的操作后,就可以来完善上文中创建的 Dify 的 AI Agent 应用啦。从 Dify 顶部菜单选择“工具”,在工具页面点击左侧的“创建自定义工具”。

步骤四:完善 Dify AI Agent 应用

我们再次打开第二步中完成的 AI Agent 应用,开始完善它的具体实现,先设置一个合适的 Prompt。

验证效果

和上一篇文章一样,我们可以根据自己的需求,搜索具体的电影名称,或者电影类型、概况中的关键字,电影的关键词等等,我这里搜索了“狮子王”,然后要求 Agent 将原本搜索出来的英文接口结果翻译为中文,发送给我设置好的飞书群里。

当然,我是懒人,所以上面的内容,我只是写了一句话:“搜索 Lion King,将电影为什么值得看翻译为中文,结果发飞书。”

随手搜索一部电影,或者关键词

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1893813.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring框架的学习SpringMVC(1)

1.什么是MVC (1)MVC其实就是软件架构的一种设计模式,它将软件的系统分为,(视图,模型,控制器)三个部分 1.1View(视图) 视图也就是,在浏览器显示的那一个部分,是后端数据的呈现 1.…

02-部署LVS-DR群集

1.LVS-DR工作原理 LVS-DR模式,Director Server作为群集的访问入口,不作为网购使用,节点Director Server 与 Real Server 需要在同一个网络中,返回给客户端的数据不需要经过Director Server 为了响应对整个群集的访问,…

实验一 MATLAB \ Python数字图像处理初步

一、实验目的: 1.熟悉及掌握在MATLAB\Python中能够处理哪些格式图像。 2.熟练掌握在MATLAB\Python中如何读取图像。 3.掌握如何利用MATLAB\Python来获取图像的大小、颜色、高度、宽度等等相关信息。 4.掌握如何在M…

电脑录音怎么录?简单四个方法轻松搞定!

在电脑上录制音频是一项非常实用的技能,适合多种场合的需求。例如,你可能需要录制自己的声音,用于录音广播、演示或视频制作;也可能需要录制电脑中的声音,如音乐、游戏音效或在线直播;或者需要捕捉浏览器中…

2024 年 亚太赛 APMCM (A题)中文赛道国际大学生数学建模挑战赛 | 飞行器外形的优化 | 数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题! 完整内容可以在文章末尾领取! 第一个问…

ScaleCache: A Scalable Page Cache for Multiple Solid-State Drives——论文泛读

EuroSys 2024 Paper 论文阅读笔记整理 问题 高性能存储设备,如具有GB/s级I/O带宽的NVMe SSD,已被广泛应用于企业服务器中。对于处理大量数据,在RAID配置中使用多个SSD很有吸引力,这可以提高I/O性能、可靠性和容量。尽管多个SSD为…

隐私集合求交(PSI)原理深入浅出

隐私集合求交技术是多方安全计算领域的一个子问题,通常也被称为安全求交、隐私保护集合交集或者隐私交集技术等,其目的是允许持有各自数据集的双方或者多方,执行两方或者多方集合的交集计算,当PSI执行完成,一方或者两方…

SQL Server 2022的组成

《SQL Server 2022从入门到精通(视频教学超值版)》图书介绍-CSDN博客 SQL Server 2022主要由4部分组成,分别是数据库引擎、分析服务、集成服务和报表服务。本节将详细介绍这些内容。 1.2.1 SQL Server 2022的数据库引擎 SQL Server 2022的…

90%的铲屎官必遇到家里猫毛满天飞问题,热门宠物空气净化器分享

作为一名资深猫奴,一到换毛季节家中就会忍受猫毛飞舞、异味四溢的双重困扰?花粉加上宠物的毛发和体味,过敏和不适似乎成了家常便饭。尝试过很多半方法,用过空气净化器去除毛和异味,虽然普通空气净化器可能提供一定程度…

MySQL数据库的备份-恢复-日志

一、备份 1.1数据备份的重要性 备份的主要目的是灾难恢复。 在生产环境中,数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。 1.2造成数据丢失的原因 程序错误人为操作错误运算错误磁盘故障灾难(如火灾、地震)和盗窃 1.3数…

Flutter——最详细(Drawer)使用教程

背景 应用左侧或右侧导航面板; 属性作用elevation相当于阴影的大小 import package:flutter/material.dart;class CustomDrawer extends StatelessWidget {const CustomDrawer({Key? key}) : super(key: key);overrideWidget build(BuildContext context) {return…

3个让你爽到爆炸的学习工具

We OCR WeOCR 是一个基于浏览器的文字识别工具,用户可以通过上传图片来识别其中的文本信息。它是一个渐进式网络应用程序(PWA),可以在浏览器中离线使用。WeOCR 是开源的,并且基于 Tesseract OCR 引擎开发。用户无需在本…

day04-组织架构

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.组织架构-树组件应用树形组件-用层级结构展示信息,可展开或折叠。 2.组织架构-树组件自定义结构3.组织架构-获取组织架构数据4.组织架构-递归转化树形…

【持续更新】vs 编译过程中的问题及其解决方案

独立寒秋,湘江北去,橘子洲头。 目录 问题 1 : 无法查看或者打开 PDB 文件。 问题 2 : 命令提示符中查看运行结果,控制台闪退。 问题 3 : 某功能的判断条件:int val > 1e9,逻辑…

004 线程的状态

文章目录 Java线程可能的状态: 状态名称说明NEW初始状态,线程被构建,但是还没有调用start()方法RUNNABLE运行状态,Java线程将操作系统中的就绪和运行两种状态笼统地称作"运行中"BLOCKED阻塞状态,表示线程阻…

轻松实现百度大模型ERNIE对话

该代码直接可用,实现了流式输出,只需要在你自己的开发环境配置百度申请的QIANFAN_AK和QIANFAN_SK即可使用啦。// # 在.env文件中,设置以下内容,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk 不过需要…

秋招Java后端开发冲刺——并发篇2(JMM与锁机制)

本文对Java的内存管理模型、volatile关键字和锁机制进行详细阐述,包括synchronized关键字、Lock接口及其实现类ReentrantLock、AQS等的实现原理和常见方法。 一、JMM(Java内存模型) 1. 介绍 JMM定义了共享内存中多线程程序读写操作的行为规…

JAVA案例模拟电影信息系统

一案例要求: 二具体代码(需要在同一个包下创建三个类) Ⅰ:实现类 package 重修;import java.util.Random; import java.util.Scanner;public class first {public static void main(String[] args) {javabean[]moviesnew javabean[4];movies[0] new ja…

身边有填报志愿需求别错过!张雪峰透露今年志愿填报技巧:报专业,别报行业!(文末附稳定高薪专业推荐)

高考填报志愿是每个考生和家长都要面对的重大抉择。在当前就业形势日趋严峻、部分行业发展前景不明朗的大背景下,考生在填报志愿时更需要全面了解各个专业的就业前景,理性权衡自身兴趣特长与社会需求,而不是盲目跟风报考所谓的"热门专业"。 今天跟大家分…

航空数据管控系统-①项目准备阶段:任务1:项目需求描述

任务描述 从用户的角度阐述项目的开发背景、使用范围及功能需求,从而指导学生独立完成项目的设计与开发。 任务指导 目录 标题 内容 备注 1. 项目概述 1.1 项目背景介绍 (1)说明产品是什么,什么用途 (2&#xff…