介绍
Oracle作为全球领先的关系型数据库管理系统(RDBMS),提供高效、安全的企业级数据存储与管理能力,支持复杂查询、事务处理和大规模数据分析,尤其适用于结构化数据的处理。
DeepSeek高性能大语言模型(如 DeepSeek-R1 版本),擅长自然语言处理、代码生成、逻辑推理等任务,支持多轮对话和复杂分析场景,可通过 API 或本地化部署灵活调用。
Dify开源低代码 AI 应用开发平台,支持快速构建基于大模型(如 DeepSeek)的智能化工作流,提供数据接入、模型集成、可视化编排等功能,降低 AI 应用开发门槛。
通过整合 Oracle 的数据管理能力、DeepSeek 的智能分析能力以及 Dify 的工作流自动化能力,可实现以下典型应用:
-
(1)自动化数据处理与分析流程
-
(2)自然语言驱动的数据查询与交互
-
(3)私有化部署与安全增强
下面简单实践下自动化数据处理与分析的功能使用。
实践过程
Oracle准备测试数据
在ubicewow 用户创建测试订单表orders,并写入200条数据
SQL> conn ubicewow/ubicewow Connected. SQL> desc orders Name Null? Type ----------------------------------------------------------------------------------------------------------------- -------- ---------------------------------------------------------------------------- ORDER_ID NOT NULL NUMBER(10) CUSTOMER_ID NOT NULL NUMBER(10) ORDER_DATE DATE TOTAL_AMOUNT NUMBER(12,2) STATUS VARCHAR2(20) CREATE_TIME TIMESTAMP(6) SQL> set linesize 200 SQL> / ORDER_ID CUSTOMER_ID ORDER_DATE TOTAL_AMOUNT STATUS CREATE_TIME ---------- ----------- ------------------- ------------ -------------------- --------------------------------------------------------------------------- 1164 213 2025-02-04 01:42:12 5392.55 UNPAID 27-FEB-25 02.51.37.496726 PM 1165 288 2025-01-01 14:45:25 4979.62 PAID 27-FEB-25 02.51.37.496844 PM 1166 243 2025-01-17 20:47:56 1478.69 SHIPPED 27-FEB-25 02.51.37.497028 PM 1167 254 2025-02-13 21:34:43 6788.27 COMPLETED 27-FEB-25 02.51.37.497118 PM
复制
python实现数据抽取接口
通过dify的工作流,可以实现http的post请求,通过python脚本,实现暴露8000端口,并通过访问API实现数据返回。
代码如下:
[root@pcllm ~]# cat Getdata.py from flask import Flask, request, jsonify import cx_Oracle as orcl import os # 从Dify环境变量读取配置(密码脱敏) app = Flask(__name__) #tnsnamy = orcl.makedsn('192.168.20.242', '1521', 'three') #db = orcl.connect('ubicewow', 'ubicewow', tnsname) @app.route('/query', methods=['POST']) def query_orders(days=7): """查询最近N天订单并格式化输出""" tnsname = orcl.makedsn('192.168.20.242', '1521', 'three') db = orcl.connect('ubicewow', 'ubicewow', tnsname) sql = """ SELECT order_id, -- 订单ID customer_id, -- 客户ID TO_CHAR(order_date, 'YYYY-MM-DD HH24:MI') ordertime, -- 下单日期 total_amount, -- 订单金额 status -- 状态 FROM orders WHERE order_date >= TRUNC(SYSDATE) - :days ORDER BY order_date DESC """ try: cursor = db.cursor() cursor.execute(sql, [days]) #result = cursor.fetchall() # 输出表头 print("【订单】ID | 客户ID | 下单时间 | 金额 | 状态") print("-" * 65) dis_str = '-' # 格式化每行数据 for row in cursor: order_id, cust_id, order_time, amount, status = row print( f"【订单】ID {order_id:<6} | " f"客户 {cust_id:<6} | " f"时间 {order_time} | " f"金额 ¥{amount:>8.2f} | " f"{status}" ) dis_str = f"【订单】ID {order_id:<6} |" + f"客户 {cust_id:<6} |" + f"时间 {order_time} |"+ f"金额 ¥{amount:>8.2f} | "+ f"{status}" +"\n" + dis_str return dis_str, 200 except orcl.Error as e: print(f"数据库操作失败: {str(e)}") def generate_markdown_table(results): """ 生成 Markdown 表格 """ if not results: return"" # 获取列名 columns = results[0].keys() # 表头 table_md = "| " + " | ".join([col for col in columns]) + " |\n" # 分隔线 table_md += "| " + " --- |" * len(columns) + "\n" # 表格内容 for row in results: table_md += "| " + " | ".join([str(cell) for cell in row.values()]) + " |\n" return table_md if __name__ == "__main__": app.run(host='192.168.20.254', port=8000)
复制
脚本测试:
1、运行python脚本
[root@pcllm ~]# python3 Getdata.py * Serving Flask app 'Getdata' * Debug mode: off WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://192.168.20.254:8000 Press CTRL+C to quit
复制
2、在其他窗口访问API,这里使用curl模拟,可以看到已经获取到数据
[root@pcllm ~]# curl -X POST http://192.168.20.254:8000/query 【订单】ID 1181 |客户 226 |时间 2025-02-24 00:38 |金额 ¥ 2603.51 | PAID 【订单】ID 1111 |客户 284 |时间 2025-02-24 01:01 |金额 ¥ 7128.36 | COMPLETED 【订单】ID 1090 |客户 267 |时间 2025-02-24 02:10 |金额 ¥ 6632.32 | SHIPPED 【订单】ID 1063 |客户 225 |时间 2025-02-24 12:25 |金额 ¥ 479.50 | COMPLETED 【订单】ID 1010 |客户 222 |时间 2025-02-24 13:23 |金额 ¥ 8685.75 | SHIPPED 【订单】ID 1193 |客户 270 |时间 2025-02-24 14:25 |金额 ¥ 2357.28 | PAID 【订单】ID 1045 |客户 294 |时间 2025-02-24 17:20 |金额 ¥ 5753.74 | PAID 【订单】ID 1175 |客户 260 |时间 2025-02-24 19:27 |金额 ¥ 8925.54 | COMPLETED 【订单】ID 1119 |客户 262 |时间 2025-02-24 22:59 |金额 ¥ 8623.45 | COMPLETED 【订单】ID 1052 |客户 279 |时间 2025-02-25 08:57 |金额 ¥ 2579.40 | UNPAID 【订单】ID 1159 |客户 208 |时间 2025-02-25 12:17 |金额 ¥ 274.55 | COMPLETED 【订单】ID 1155 |客户 239 |时间 2025-02-25 13:00 |金额 ¥ 503.82 | COMPLETED 【订单】ID 1168 |客户 264 |时间 2025-02-25 15:08 |金额 ¥ 9269.99 | UNPAID 【订单】ID 1200 |客户 226 |时间 2025-02-25 17:50 |金额 ¥ 8271.18 | UNPAID 【订单】ID 1120 |客户 208 |时间 2025-02-25 18:11 |金额 ¥ 7379.52 | UNPAID 【订单】ID 1011 |客户 248 |时间 2025-02-25 20:04 |金额 ¥ 828.47 | COMPLETED 【订单】ID 1080 |客户 211 |时间 2025-02-26 09:13 |金额 ¥ 4598.25 | UNPAID 【订单】ID 1075 |客户 264 |时间 2025-02-26 10:12 |金额 ¥ 4271.33 | COMPLETED 【订单】ID 1043 |客户 249 |时间 2025-02-26 12:00 |金额 ¥ 8298.23 | COMPLETED
复制
3、python脚本接受访问输出
[root@pcllm ~]# python3 Getdata.py * Serving Flask app 'Getdata' * Debug mode: off WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://192.168.20.254:8000 Press CTRL+C to quit 【订单】ID | 客户ID | 下单时间 | 金额 | 状态 ----------------------------------------------------------------- 【订单】ID 1043 | 客户 249 | 时间 2025-02-26 12:00 | 金额 ¥ 8298.23 | COMPLETED 【订单】ID 1075 | 客户 264 | 时间 2025-02-26 10:12 | 金额 ¥ 4271.33 | COMPLETED 【订单】ID 1080 | 客户 211 | 时间 2025-02-26 09:13 | 金额 ¥ 4598.25 | UNPAID 【订单】ID 1011 | 客户 248 | 时间 2025-02-25 20:04 | 金额 ¥ 828.47 | COMPLETED 【订单】ID 1120 | 客户 208 | 时间 2025-02-25 18:11 | 金额 ¥ 7379.52 | UNPAID 【订单】ID 1200 | 客户 226 | 时间 2025-02-25 17:50 | 金额 ¥ 8271.18 | UNPAID 【订单】ID 1168 | 客户 264 | 时间 2025-02-25 15:08 | 金额 ¥ 9269.99 | UNPAID 【订单】ID 1155 | 客户 239 | 时间 2025-02-25 13:00 | 金额 ¥ 503.82 | COMPLETED 【订单】ID 1159 | 客户 208 | 时间 2025-02-25 12:17 | 金额 ¥ 274.55 | COMPLETED 【订单】ID 1052 | 客户 279 | 时间 2025-02-25 08:57 | 金额 ¥ 2579.40 | UNPAID 【订单】ID 1119 | 客户 262 | 时间 2025-02-24 22:59 | 金额 ¥ 8623.45 | COMPLETED 【订单】ID 1175 | 客户 260 | 时间 2025-02-24 19:27 | 金额 ¥ 8925.54 | COMPLETED 【订单】ID 1045 | 客户 294 | 时间 2025-02-24 17:20 | 金额 ¥ 5753.74 | PAID 【订单】ID 1193 | 客户 270 | 时间 2025-02-24 14:25 | 金额 ¥ 2357.28 | PAID 【订单】ID 1010 | 客户 222 | 时间 2025-02-24 13:23 | 金额 ¥ 8685.75 | SHIPPED 【订单】ID 1063 | 客户 225 | 时间 2025-02-24 12:25 | 金额 ¥ 479.50 | COMPLETED 【订单】ID 1090 | 客户 267 | 时间 2025-02-24 02:10 | 金额 ¥ 6632.32 | SHIPPED 【订单】ID 1111 | 客户 284 | 时间 2025-02-24 01:01 | 金额 ¥ 7128.36 | COMPLETED 【订单】ID 1181 | 客户 226 | 时间 2025-02-24 00:38 | 金额 ¥ 2603.51 | PAID 192.168.20.254 - - [03/Mar/2025 09:49:12] "POST /query HTTP/1.1" 200 -
复制
dify创建chatflow
chatflow 是dify中内置的对话流模板,可以实现流程编排的能力,以下为流程编排。
有4个任务节点,主要节点是
-
HTTP请求,访问python暴露的API接口
-
LLM ,接入Deepseek分析模型
对话实验
在聊天窗口进行询问:
计算并输出每个客户的消费总金额,格式化输出,并自动分为三档客户群,判断每个客户的消费时间习惯
回复如下,基本实现了初步的数据分析工作。
总结
通过Oracle+Deepseek+Dify 三者结合,可以实现的场景应该比较多,毕竟Oracle 有数据,deepseek有参数分析,Dify实现流程自动化,以上只是一个比较简单的示例,期待Deepseek在数据库方面有更多实用的场景。