Home
Softono

Dify Tools

Open source MIT Go
20
Stars
3
Forks
0
Issues
2
Watchers
1 year
Last Commit

 About Dify Tools

基于DIFY的扩展系统,可供三方应用调用。增强dify提供动态知识库检索、数据库数据查询、生成PPT等能力

Platforms

Web Self-hosted

Languages

Go

Links

Need Help Installing Dify Tools?

We provide expert installation service for this software. Our team will install, configure, and secure Dify Tools on your server. plans start at just $30.

Dify Tools

View on GitHub

Dify Tools

DIFY 工具集,提供:数据查询、文档处理及应用管理的能力。

由于dify本身的局限性,在我的实际应用场景中,希望能给一些应用赋予AI能力的时候,会遇到:

  • 应用本身的数据查询整合
  • 应用的公共知识库构建
  • 应用的用户私人知识库
  • 使用AI能力时,不可能为每个应用每个人去开发一套dify流程(因为dify目前的知识库在流程中直接引用对应的知识库)

本工具通过外部工具的方式解决以上问题,可以让第三方应用通过本系统接入dify,获得AI的能力

功能特性

  • 数据源管理

    • 支持MySQL和PostgreSQL
    • 数据库连接管理
    • 表结构同步
    • SQL查询执行
  • 知识库管理

    • 应用知识库
    • 应用用户私人知识库
    • dify调用
  • 应用管理

    • 三方应用快速接入
    • 三方应用接口
  • 智能体管理(即工作台里的东东)

    • 智能体管理
    • 应用与智能体关联
  • 权限管理

    • 基于角色的访问控制
    • 表级别白名单
    • 列级别数据脱敏
    • 权限继承关系
  • 应用内AI Chat接口

    • 历史会话及消息
    • 聊天
    • 生成PPT

给应用的接口

  1. 新增文档到知识库
  2. 查询知识库文档状态(是否已经处理)
  3. 删除知识库文档
  4. 用户问答聊天及回复(流式)
  5. 查询token使用量

TODO List

  • 系统内部接口

    • 系统管理
      • 认证:登录、注册
      • 用户:当前用户信息、增删改查、更新密码、更新状态
      • 角色
      • 日志:查询
      • 字典
    • 应用管理
      • 应用基础信息
      • 应用数据源:增删改查、同步结构
      • 表及字段管理
      • 应用AI赋能:配置应用与Agent链接关系
    • 知识库管理
      • 上传文档,自动在dify中建立对应知识库并传入文档
      • 列表查询
      • 删除文档,从dify知识库删除对应文档
    • AI Agent管理
      • 管理dify中创建的Agent信息(主要是密钥)
    • 聊天
      • 聊天会话列表:从dify中获取对应的聊天会话
      • 聊天请求:SSE模式(Streaming)返回
      • PPT生成
    • 智能体管理
      • 添加dify智能体(管理)
      • 关联到应用
  • DIFY调用接口

    • 获取应用相关数据库列表
    • 获取数据库表结构信息
    • 执行SQL语句
    • 外部知识库模式:通过外部知识库动态调用dify内创建的知识库
  • 提供给三方应用接口

    • 新增文档到知识库
    • 查询知识库文档状态(处理情况)
    • 删除知识库文档
    • 流式问答聊天(SSE)
    • token使用量查询
    • 删除会话
    • 会话中上传文档
    • 创建PPT
    • 查询可用的智能体
  • 整理API接口(主要是第三方应用使用的接口)

快速开始

  1. 启动本程序(当然要配置一下,相信使用者应该对配置不陌生) 本系统需要数据库及redis

  2. 启动dify

  3. 配置一下 dify中需要配置如下信息:

  • 配置外部知识库API:进入知识库,右侧外部知识库API处,添加外部知识库API,在API endpoint处填入本系统dify的端点地址 http://192.168.x.y:z/dify_api/v1,apikey自定
  • 知识库中选择API(左侧),并在右上角的API密钥中创建密钥,将密钥填入本系统(无界面的情况下,直接写入数据库对应字典值即可)
  • 工具中,创建自定义工具,名称自定义(数据库检索查询的工具),schema填入(url根据自己的修改一下):
{
	"openapi": "3.1.0",
	"info": {
		"title": "应用数据查询",
		"description": "查询应用数据信息.",
		"version": "v1.0.0"
	},
	"servers": [{
		"url": "http://192.168.x.y:z/dify_api/v1"
	}],
	"paths": {
		"/databases": {
			"get": {
				"description": "获取应用所有数据源",
				"operationId": "GetDatabasesForApp",
				"parameters": [{
					"name": "Authorization",
					"in": "header",
					"description": "应用密钥",
					"required": true,
					"schema": {
						"type": "string"
					}
				}],
				"deprecated": false
			}
		},
		"/schema": {
			"get": {
				"description": "获取应用数据库结构信息",
				"operationId": "GetDatabaseSchema",
				"parameters": [{
					"name": "Authorization",
					"in": "header",
					"description": "应用密钥",
					"required": true,
					"schema": {
						"type": "string"
					}
				}, {
					"name": "datasourceId",
					"in": "query",
					"description": "数据源ID",
					"required": true,
					"schema": {
						"type": "string"
					}
				}],
				"deprecated": false
			}
		},
		"/executeSql": {
			"post": {
				"description": "执行SQL",
				"operationId": "executeSql",
				"parameters": [{
					"name": "Authorization",
					"in": "header",
					"description": "应用密钥",
					"required": true,
					"schema": {
						"type": "string"
					}
				}],
                "requestBody": {
                	"content": {
                    	"application/json": {
                        	"schema": {
                            	"type": "object",
                                "properties": {
                                	"sql": {
                                    	"type": "string",
                                        "description": "SQL语句"
                                    },
                                    "datasourceId": {
                                         "type": "string",
                                         "description": "数据源ID"
                                    }
                                }
                            }
                        }
                    }
                },
				"deprecated": false
			}
		}
	},
	"components": {
		"schemas": {}
	}
}

应该会自动识别可用工具,没问题直接保存即可

  • 在工作室中创建自定义的会话工作流,在需要的地方引用外部知识库及对应工具即可
  • 将对应工作流的API密钥(工作流编排下面的<访问API>,右上角有API密钥,创建后,填入系统对应的字典中。
  • 注意填入dify调用地址字典值
  1. 系统中创建应用,并根据系统接口开发应用接入,此时就可以让这个系统拥有dify的能力,并且扩展了可以查询知识库和应用对应数据了。可以把docs/common_flow.yml导入到工作室中(当然,模型调用和动态知识库需要重新选择一下)

TIPS:真的要查询应用的数据的话,还需要在系统中配置数据源,并同步数据结构,可以的话,看看表和字段的注释是否正确并修改。

PPT生成

可以在得到ppt大纲Markdown后,将大纲传入接口,生成PPT文件流保存

doc/common_flow.yml已经设定了,可以判断ppt outline:(建议更改为<!-- ppt outline: -->,这样前端可以避免显示该内容)之后的内容作为markdown内容传入(也可以作为可以生成ppt的判断)

工作室中创建自定义智能体

如果要创建自定义智能体供本系统调用的,需要在开始节点增加字段:app_secretcustom_id,每次调用会传入这2个字段,可能为空

  • app_secret主要为了识别应用,本系统直接调用会为空,第三方系统接入则应该有值
  • custom_id为了区分用户,一般以用户ID来传

相关界面

暂未放出,待完善后提供

贡献

欢迎提交Issue和Pull Request。

许可证

MIT License