当前位置: 首页 > news >正文

使用Python写一个适用于Dify和FastGPT的JsonPath插件

编写适用于 Dify 和 FastGPT 的 JsonPath 插件

在本文中,我将分享如何编写一个适用于 AI应用平台的 JsonPath 插件,该插件能够处理 JSON 数据的路径查询、正则表达式提取,以及 JavaScript 沙盒执行功能。这个插件的主要目的是让用户能够通过简单的 HTTP 请求,对 JSON 数据进行高效、灵活的查询和处理。接下来,我们将详细介绍如何实现这个插件的功能。

项目结构与依赖

首先,我们需要创建一个 Flask 应用程序来承载这个插件。项目的主要依赖项包括 Flaskjsonpath_ngrejsonjs2pythreading。这些库分别用于处理 HTTP 请求、JSONPath 查询、正则表达式匹配、JavaScript 代码执行和处理并发任务。

from flask import Flask, request, jsonify
from jsonpath_ng import parse
import re
import json
import js2py
import threading
import logging

为了便于调试和跟踪,我们配置了日志记录功能:

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
JSONPath 查询

首先,我们实现了一个 JSONPath 查询功能,通过 POST 请求获取用户提交的 JSONPath 表达式和 JSON 数据,并返回匹配的结果。

@app.route('/jsonpath', methods=['POST'])
def get_value_by_jsonpath():json_path = request.json.get('json_path')json_string = request.json.get('json_string')data = json.loads(json_string)jsonpath_expr = parse(json_path)matches = [match.value for match in jsonpath_expr.find(data)]if '*' in json_path or ('[' in json_path and ':' in json_path):return jsonify({"data": matches})  # 预期返回列表else:if len(matches) == 0:return jsonify({"data": None})else:return jsonify({"data": matches[0]}) if matches else None  # 预期返回单个元素
正则表达式提取

接下来,我们实现了一个正则表达式提取功能,用户可以通过提交正则表达式和目标字符串来提取匹配的内容。

@app.route('/regex_extract', methods=['POST'])
def regex_extract():regex = request.json.get('regex')string = request.json.get('string')if not regex or not string:return jsonify({"error": "regex或string参数不正确"}), 400result = extract_target(regex, string)logging.info('regex: %s, string: %s, result: %s', regex, string, result)return jsonify({"data": result, "match": True if result else False})
JavaScript 沙盒执行

最后,我们实现了一个 JavaScript 沙盒执行功能,允许用户提交 JavaScript 代码,并在一个安全的环境中执行该代码。我们使用 js2py 库来执行 JavaScript,并设置了超时机制以防止脚本长时间运行。

@app.route('/js_sandbox', methods=['POST'])
def js_sandbox():code = request.json.get('code')if not code:return jsonify({"error": "code参数不正确"}), 400code = fix_string_conflicts(code)timer = threading.Timer(3.0, timeout)timer.start()result = Nonetry:result = js2py.eval_js(code)print(result)except Exception as e:logging.error("Error while executing JavaScript: %s", e)finally:timer.cancel()logging.info('code: %s, result: %s', code, result)return jsonify({"data": result})

总结

通过上述步骤,我们实现了一个简单但功能强大的 JsonPath 插件,适用于 Dify 和 FastGPT。它可以处理 JSONPath 查询、正则表达式提取以及 JavaScript 沙盒执行等任务。希望这篇文章能帮助你更好地理解如何构建类似的插件,并将其应用到你的项目中。如果你有任何问题或建议,欢迎在评论区留言讨论。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MySql 忘记 Root 密码
  • P0.9/P1.25全倒装共阴节能COB超微小间距LED显示屏已抢占C位
  • OpenHarmony开发:应用分层架构设计
  • Docker基本使用:根据mysql镜像创建mysql容器
  • 大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
  • openshift node NotReady kubelet http: TLS handshake error
  • (苍穹外卖)day03菜品管理
  • mysql中的mysql 库不存在,进行恢复
  • 第十六章 rust命令行工具开发实践
  • 【系统架构设计师】论文:论SOA面向服务架构技术的应用
  • java基于java.io.Serializable接口的序列化方式学习
  • c++ websocket简单讲解
  • 峟思大坝安全监测系统:科技筑牢工程稳定的基石
  • C++:模拟实现list
  • 国赛论文写作教学指南——模型的建立与求解
  • 2017届校招提前批面试回顾
  • Android开源项目规范总结
  • codis proxy处理流程
  • PermissionScope Swift4 兼容问题
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • v-if和v-for连用出现的问题
  • webgl (原生)基础入门指南【一】
  • 初识MongoDB分片
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 关于 Cirru Editor 存储格式
  • 两列自适应布局方案整理
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 在weex里面使用chart图表
  • 数据可视化之下发图实践
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #if等命令的学习
  • #QT(TCP网络编程-服务端)
  • (rabbitmq的高级特性)消息可靠性
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (六)c52学习之旅-独立按键
  • (四)事件系统
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)Oracle 9i 数据库设计指引全集(1)
  • ******之网络***——物理***
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .Net Core 微服务之Consul(三)-KV存储分布式锁
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .NET和.COM和.CN域名区别
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • [ C++ ] STL---string类的使用指南
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504