返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

智能体开发实战|基于Dify自定义工作流工具构建游戏智能体

[复制链接]
链载Ai 显示全部楼层 发表于 1 小时前 |阅读模式 打印 上一主题 下一主题

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;display: table;padding: 0.3em 1.2em;color: rgb(255, 255, 255);background: rgb(15, 76, 129);border-radius: 8px 24px;box-shadow: rgba(0, 0, 0, 0.06) 0px 2px 6px;">前言

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">dify是一款开源的大语言模型应用开发平台,旨在降低AI应用的开发门槛,帮助开发者和企业快速构建、部署及管理生成式AI应用。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">Dify允许用户在画布上构建和测试功能强大的AI工作流。工作流通过将复杂任务分解为更小的步骤(节点),有效降低了系统的复杂度。这种方法减少了对提示词技术和模型推理能力的依赖,从而提升了 LLM 在处理复杂任务时的性能,同时增强了系统的可解释性、稳定性和容错性。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">本文以实现24点游戏为例。24点的游戏规则:给出一组4个随机整数(1至13之间,且不重复),用加、减、乘、除(可加括号)把给出的4个数字算成24,每个数必须用一次且只能用一次。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">这个智能体需要具备如下能力:

    ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;color: rgb(63, 63, 63);" class="list-paddingleft-1">
  • ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);">
    • 出题:生成一组4个随机整数(1至13之间,且不重复),并确保生成的随机数能计算出24。
  • ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);">
    • 校验用户输入的表达式计算结果是否为24。
  • ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);">
    • 解题:根据用户给出的随机数,生成答案。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">效果如下:


通过设置合适的提示词,为智能体设定角色和处理逻辑。智能体会根据大语言模型对人物设定和回复逻辑的理解,来响应用户问题。因此提示词编写的越清晰明确,智能体的回复也会越符合预期。可以在提示词中指定用工作流作逻辑处理,实现通过prompt无法实现的功能。

创建工作流工具

在http://localhost/apps页面点击“创建空白应用”,选择“工作流”。填写应用名,点击创建。依次创建三个工作流:

  • • generate_random_numbers:为24点游戏生成一组随机数
  • • check_answer:校验表达式计算结果是否为24
  • • generate_answer:根据一组随机数生成24点游戏的答案

工作流1:generate_random_numbers

整体流程如下图:
  • • 名称:generate_random_numbers
  • • 描述:为24点游戏生成一组随机数
  • • 开始节点: 用默认配置,无需添加输入字段
  • • 代码执行节点
    • • 输入变量:无
    • • 输出变量:
      • • numbers,类型为Array[Number]
    • • 代码:
importrandom
fromitertoolsimportpermutations, product

defmain() ->dict:
whileTrue:
numbers = []
whilelen(numbers) <4:
num = random.randint(1,13)
ifnumnotinnumbers:
numbers.append(num)
res = generate_answer(numbers)
# 确保生成的随机数能计算出24
ifres['code'] =='ok':
return{'numbers': numbers}

defgenerate_answer(numbers):
iflen(numbers) !=4:
return{'code':'error','msg':"随机数个数不正确"}

operations = ['+','-','*','/']
fornum_perminpermutations(numbers):
foropsinproduct(operations, repeat=3):
# 尝试所有不同的括号组合
expressions = [
f'(({num_perm[0]}{ops[0]}{num_perm[1]}){ops[1]}{num_perm[2]}){ops[2]}{num_perm[3]}',
f'({num_perm[0]}{ops[0]}({num_perm[1]}{ops[1]}{num_perm[2]})){ops[2]}{num_perm[3]}',
f'({num_perm[0]}{ops[0]}{num_perm[1]}){ops[1]}({num_perm[2]}{ops[2]}{num_perm[3]})',
f'{num_perm[0]}{ops[0]}(({num_perm[1]}{ops[1]}{num_perm[2]}){ops[2]}{num_perm[3]})',
f'{num_perm[0]}{ops[0]}({num_perm[1]}{ops[1]}({num_perm[2]}{ops[2]}{num_perm[3]}))',
]
forexprinexpressions:
try:
ifeval(expr) ==24:
return{'code':'ok','answer': expr}
exceptZeroDivisionError:
continue
return{'code':'error'}
  • • 结束节点
    输出变量numbers的参数值为引用“代码执行”节点的输出变量numbers。
  • • 运行
    点击右上角的“运行”,验证是否可以正确输出一组随机数
  • • 发布工作流
    测试通过后,点击右上角的“发布”按钮。
  • • 发布为工具
    发布成功后,点击“发布为工具”
填入工具调用名称和工具描述,并保存。

工作流2:check_answer

整体流程如下图:
  • • 名称:check_answer
  • • 描述:校验表达式计算结果是否为24
  • • 开始节点
    • • 输入参数
      • • expression:类型为String,显示名称为“表达式”
  • • 代码执行节点
    • • 输入变量:
      • • expression,引用开始节点的expression变量
    • • 输出变量:
      • • code,类型为String
      • • msg, 类型为String
    • • 代码:
defmain(expression:str) ->dict:
try:
val =eval(expression)
ifval ==24:
return{'code':'ok','msg':'ok'}
else:
return{'code':'error','msg':f"表达式{expression}计算结果为{val}, 不是24"}
exceptExceptionase:
return{'code':'error','msg':f"计算出错。{e}"}
  • • 结束节点
    • • 输出变量
      • • code,引用代码执行节点的code输出变量
      • • msg, 引用代码执行节点的msg输出变量
  • • 测试并发布工作流
  • • 发布为工具
    发布成功后,点击”发布为工具“。填入工具调用名称和工具描述,并保存。

工作流3:generate_answer

整体流程如下图:
  • • 名称:generate_answer
  • • 描述:根据一组随机数生成24点游戏的答案
  • • 开始节点
    • • 输入参数
      • • numbers:类型为String,显示名称为“一组随机整数,JSON格式”
  • • 代码执行节点
    • • 输入变量
      • • numbers,引用开始节点的numbers变量
    • • 输出变量
      • • code,类型为String
      • • msg, 类型为String
      • • answer, 类型为String
  • • 代码
fromitertoolsimportpermutations, product
importjson

defmain(numbers:str) ->dict:
numbersArray = json.loads(numbers)
iflen(numbersArray) !=4:
return{'code':'error','msg':"随机数个数不正确",'answer':''}

operations = ['+','-','*','/']
fornum_perminpermutations(numbersArray):
foropsinproduct(operations, repeat=3):
# 尝试所有不同的括号组合
expressions = [
f'(({num_perm[0]}{ops[0]}{num_perm[1]}){ops[1]}{num_perm[2]}){ops[2]}{num_perm[3]}',
f'({num_perm[0]}{ops[0]}({num_perm[1]}{ops[1]}{num_perm[2]})){ops[2]}{num_perm[3]}',
f'({num_perm[0]}{ops[0]}{num_perm[1]}){ops[1]}({num_perm[2]}{ops[2]}{num_perm[3]})',
f'{num_perm[0]}{ops[0]}(({num_perm[1]}{ops[1]}{num_perm[2]}){ops[2]}{num_perm[3]})',
f'{num_perm[0]}{ops[0]}({num_perm[1]}{ops[1]}({num_perm[2]}{ops[2]}{num_perm[3]}))',
]
forexprinexpressions:
try:
ifeval(expr) ==24:
return{'code':'ok','msg':'ok','answer': expr}
exceptZeroDivisionError:
continue
return{'code':'error','msg':'error','answer':''}
  • • 结束节点
    • • 输出变量
      • • code,引用代码执行节点的code输出变量
      • • msg, 引用代码执行节点的msg输出变量
      • • answer, 引用代码执行节点的answer输出变量
  • • 测试并发布工作流
  • • 发布为工具
    发布成功后,点击”发布为工具“。填入工具调用名称和工具描述,并保存。

创建Agent应用

在http://localhost/apps页面点击“创建空白应用”,选择“Agent”。填写应用名,点击创建,进入编排界面。编排界面如下:
  • • 设置提示词
    内容为:
你是一个24点游戏助手。
- 开始游戏时,你需要生成一组随机数,提示用户回答,然后使用工作流check_answer校验用户的回答。
- 如果用户表示回答不了问题,请使用工作流generate_answer生成答案。
- 用户可以向你提供一组数字提问如何计算,你需要使用工作流generate_answer生成答案。
  • • 添加工具
    把3个工作流添加为工具。
  • • 选择模型
    使用qwen-plus
  • • 调试和预览
    在下方输入内容和Agent进行游戏互动
  • • 测试通过后,点击右上角的“发布”按钮。
  • • 发布后,点击“运行”即可打开应用的访问链接。

总结

本文以24点游戏智能体为案例,展示了Dify基于工作流的Agent应用开发。通过把工作流发布为工具,Agent通过推理可以智能调用相应工作流解决问题。

#智能体开发#Dify工作流开发 #AI应用开发

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ