AI实战指南:使用Dify创建图片生成应用

2,487 阅读6分钟

AIGC 生成图片应用

伴随着AI技术的兴起,国内外涌现了许多优秀的图像生成产品,比如 Dall-e、Flux、Stable Diffusion 等。

本文将使用LLM,图像生成模型和第三方AI框架Dify,帮你快速开发一个 AI 图片生成应用。

在本文中你将会接触到以下知识点

  1. 使用 Dify 构建 Agent 的方法
  2. Agent 的基本概念
  3. 提示词工程的基础知识
  4. Dify 工具的使用
  5. 大模型的幻觉的概念

1. 首先,我们需要获取和填入 Stablility API 密钥

stablility 是一个在线的图片生成应用的网站,生成图片的时候,我们希望可以使用它的在线服务,当然你也可以本地搭建一个图片生成的大模型,只不过这里需要你有强大的GPU,呵呵。 点击这里 即可跳转至 Stability 的 API 密钥管理页。 如果你尚未注册,会被要求先注册再进入管理页。进入管理页后,点击复制密钥即可。

image.png

接下来,你需要通过以下步骤把密钥填入 Dify - 工具 - Stability 中:

  • 登录 Dify
  • 进入工具
  • 选择 Stability
  • 点击授权

image.png

  • 填入密钥并保存

2. 配置模型供应商

为了优化交互,我们需要LLM来将用户的指令具体化,也就是让LLM来撰写生成图片的提示词(Prompt)。接下来,我们按照如下的步骤在 Dify 配置模型供应商。

Free 版本的 Dify 提供了免费 200 条 OpenAI 的消息额度

如果消息额度不够用,你可以参考下图步骤, 自定义其它模型供应商:

点击右上角头像 - 设置 - 模型供应商

image.png

可以使用Xinference或者ollama 这样的本地推理大模型,也可以使用像OpenAI、豆包、科大讯飞等等的在线大模型,这里我采用的是科大训飞的星火大模型,它有很多LLM 的免费调用额度。

登录 讯飞开发平台,登陆注册并实名验证后,选择对应的大模型,然后将其APPID,APISecret,APIKey等等信息拷贝下来。

image.png

回到Dify - 模型供应商,选择讯飞星火,点击 设置

image.png

粘贴对应的秘钥信息 并保存。

image.png

3. 构建 Agent

回到Dify - 工作室,选择创建空白应用

image.png

接下来,我们介绍一下 Agent 的基础用法

什么是 Agent

Agent 是一种模拟人类行为和能力的 AI 系统,它通过自然语言处理与环境交互,能够理解输入信息并生成相应的输出。Agent 还具有 "感知" 能力,可以处理和分析各种形式的数据。此外,Agent 能够调用和使用各种外部工具和 API 来完成任务,扩展其功能范围。这种设计使 Agent 能够更灵活地应对复杂情况,在一定程度上模拟人类的思考和行为模式。

因此,很多人都会将 Agent 称为“智能体”。

选择 Agent,填写名称即可。

接下来你会进入到如下图的 Agent 编排界面

image.png

我们选择 LLM,本篇教程中我们使用 科大讯飞 提供的 spark lite 为例:

image.png

工具中添加 AI 绘图工具 Stability:

image.png

image.png

撰写提示词

提示词(Prompt)是 Agent 的灵魂,直接影响到输出的效果。通常来说越具体的提示词输出的效果越好,但是过冗长的提示词也会导致一些负面效果。

调整提示词的工程,我们称之为提示词工程(Prompt Engineering),在这里,你不必担心没有掌握提示词工程,我们会在后面循序渐进地学习它。 让我们从最简单的提示词开始:

根据用户的提示,使用工具 stability_text2image 绘画指定内容

用户每次输入命令的时候,Agent 都会知晓这样的系统级的指令,从而了解要执行用户绘画的任务的时候需要调用一个叫 stability 的工具。

例如:画一个女孩,手中拿着一本打开的书

image.png

不想撰写提示词?当然可以!

点击提示词的右上角生成

指令中输入你的需求,点击生成,右侧生成的提示词中会出现由AI生成的提示词。

image.png

不过,为了养成对提示词良好的理解,我们在初期最好不要依赖这一项功能。

发布

点击右上角的发布按钮,发布后选择运行就可以获得一个在线运行的 Agent 的网页。

image.png

复制这个网页的 URL,可以分享给其他好友使用。

思考题 1:如何指定生成图片的画风?

我们可以在用户输入的命令中加上画风的指令,例如:二次元风格,画一个女孩,手中拿着一本打开的书

但是如果我们希望风格默认都是二次元风格呢,那么我们加在系统提示词里就行了,因为我们之前了解到系统提示词是每次执行用户命令都会知晓的,优先级更高。

根据用户的提示,使用工具 stability_text2image 绘画指定内容,画面是二次元风格

思考题 2: 如何拒绝部分用户的某些请求?

在许多业务场景中,我们需要避免输出一些不合理的内容,但是 LLM 很多时候比较 “傻”,用户下指令时会照做不误,即使输出的内容是错的,这种模型为了努力回答用户而编造虚假内容的现象称为模型幻觉(Hallucinations),那么我们需要让模型必要的时候拒绝用户的请求。

此外,用户也可能提一些和业务无关的内容,我们也需要让 Agent 这个时候拒绝请求。

我们可以使用 markdown 格式给不同的提示词进行划分,将上述教 Agent 拒绝不合理内容的提示词写到 “约束” 标题下。当然,这样的格式仅仅是为了规范化,你可以有自己的格式。

## 任务
根据用户的提示,使用工具 stability_text2image 绘画指定内容,画面是二次元风格。

## 约束
如果用户在请求和绘画无关的内容,回复:“对不起,我不明白你在说什么”

例如,我们尝试提问:今晚吃什么

image.png

在一些更正式的业务场景中,我们可以调用敏感词库来拒绝用户的请求。

添加功能 - 内容审查中添加关键词 “晚饭”,当用户输入关键词时,则 Agent 应用输出 “对不起,我不明白你在说什么”。