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

基于Dify的工作流实现python编码规则的检查

前期准备

dify

  • 要么使用 https://cloud.dify.ai/
  • (推荐)要么自己用docker compose搭建一个本地dify服务

dify接入大模型

  • 这里以接入deepseek为例
    在这里插入图片描述

创建工作流的过程

  • 首先创建空白应用,指定为工作流
    在这里插入图片描述
  • 添加步骤如下,包含两个LLM分支,用来对比是否按照自定义的编码规范在检查
    在这里插入图片描述
  • 其中“开始”添加自定义变量python_code
    在这里插入图片描述
  • LLM 1
    • 模型选择deepseek-coder
    • 上下文选择"开始"中创建的python_code
    • 系统提示词填入下面内容,注意下面的截图,要选择python_code
      在这里插入图片描述
你是一个专业的 Python 代码审查员。请根据以下编码规范检查用户提供的 Python 代码:# 编码规范
## 变量命名
1. 变量名必须使用驼峰命名法(CamelCase)- 正确示例: `userName`, `studentCount`- 错误示例: `user_name`, `StudentCount`## 函数命名
1. 函数名必须使用小写字母加下划线- 正确示例: `calculate_score()`- 错误示例: `CalculateScore()`## 类命名
1. 类名必须使用大驼峰命名法- 正确示例: `UserModel`- 错误示例: `user_model`## 其他规范
1. 每行不超过120字符
2. 使用4个空格缩进
3. 导入语句应按标准库、第三方库、本地库分组
4. 函数体内不能有空行
5. 禁止使用%格式化操作符
6. 禁止使用global检查以下代码是否符合编码规范
<这里输入/,然后选取python_code># 任务要求:
1. 检查以下代码是否符合上述编码规范。
2. 如果发现问题,指出具体的行号和问题描述。
3. 提供详细的修改建议。# 输出格式:
- 问题 1: [问题描述](行号: {行号})修改建议: [修改建议]
- 问题 2: [问题描述](行号: {行号})修改建议: [修改建议]如果代码完全符合规范,请返回 “代码完全符合规范。”
  • LLM 2 与LLM 1类似,只是少了明文的编码规范
你是一个专业的 Python 代码审查员。检查以下代码是否符合编码规范
<这里输入/,然后选取python_code>### 任务要求:
1. 检查以下代码是否符合上述编码规范。
2. 如果发现问题,指出具体的行号和问题描述。
3. 提供详细的修改建议。### 输出格式:
- 问题 1: [问题描述](行号: {行号})修改建议: [修改建议]
- 问题 2: [问题描述](行号: {行号})修改建议: [修改建议]
...
如果代码完全符合规范,请返回 “代码完全符合规范。”
  • 结束节点输出两个LLM的结果
    在这里插入图片描述

验证

  • 点击“运行”,输入一段要检查的代码,故意构造几处不符合规范的地方
prefixStr = 'hello'
class user_model:def GetName(self):global prefixStruser_name = "John"return "user_name:%s%s" % (prefixStr, user_name)

在这里插入图片描述

  • LLM 1的输出结果
    在这里插入图片描述

  • LLM2的输出结果
    在这里插入图片描述

结论

  • 对比LLM1和LLM2的输出可以看到
    • LLM2由于没有指定编码规范,那么就按照默认的PEP 8的规范给出
    • LLM1中找出了我特意提到的"函数体内不能有空行"和"禁止使用global",说明提示词中自定义的编码规范是生效的!
http://www.dtcms.com/a/174491.html

相关文章:

  • 【程序员AI入门:应用】7.LangChain是什么?
  • 第11次:用户注册(完整版)
  • OpenHarmony GPIO应用开发-LED
  • 63.微服务保姆教程 (六) SkyWalking--分布式链路追踪系统/分布式的应用性能管理工具
  • 原生 IP(Native IP)
  • C++23 std::generator:用于范围的同步协程生成器 (P2502R2, P2787R0)
  • FlinkCDC采集MySQL8.4报错
  • 如何监控Kafka的Lag(消费延迟)?
  • RT-Thread中的配置
  • MySQL同步ES的6种方案!
  • [三分钟]性能测试工具JMeter入门: 下载安装JMeter并设置中文;JMeter基本使用流程
  • 解锁科研文献检索密码:多工具协同攻略
  • 给frp设置开机自启
  • 应急响应靶场web1:知攻善防实验室
  • 分布式 ID 的技术解析与实现实践
  • 【Java EE初阶 --- 多线程(初阶)】多线程的基本内容
  • ZYNQ-UART串口中断
  • 【Java篇】内存中的桥梁:Java数组与引用的灵动操作
  • 前端封装框架依赖管理全攻略:构建轻量可维护的私有框架
  • livp文件使用python转换为heic或jpeg格式
  • k8s node cgroup 泄露如何优化?
  • 深入理解 Java 观察者模式:原理、实现与应用
  • 【开发工具】Window安装WSL及配置Vscode获得Linux开发环境
  • npm install下载插件无法更新package.json和package-lock.json文件的解决办法
  • Android组件化 -> Debug模式下,本地构建module模块的AAR和APK
  • 三极管偏置电路分析
  • 51单片机入门教程——AT24C02(I2C 总线)
  • 在PBiCGStab(Preconditioned Bi-Conjugate Gradient Stabilized)算法中处理多个右端项的block版本
  • Github Action部署node项目
  • 论文阅读笔记——ROBOGROUND: Robotic Manipulation with Grounded Vision-Language Priors