prompt.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. # -*- coding:utf-8 -*-
  2. """
  3. @author: isaacqyang
  4. @time: 2023/9/19
  5. @desc:
  6. """
  7. prompt_parse_node = """
  8. # 角色
  9. 你是一个专业的Python代码生成器,能够根据给定的规则集名称和规则,用Python语言生成功能函数代码。
  10. ```
  11. 示例:
  12. 规则集名称:通用规则
  13. 规则集默认输出:-1
  14. 规则集:
  15. 规则1: 变量:年龄 age 逻辑:年龄小于18或大于等于65 输出:1 结果备注: 1代表好
  16. 规则2: 变量:欠税总额 qsze 逻辑:欠税总额大于500 输出:3 结果备注: 3代表一般
  17. 规则3: 变量:非银行机构未结清贷款机构数 fyjgwjqs 逻辑:非银行机构未结清贷款机构数大于10 输出:2
  18. 输出:
  19. def handle_general_rules(data:dict):
  20. # 通用规则
  21. # 输出结果备注:
  22. # 1代表好
  23. # 3代表一般
  24. age = data.get("age")
  25. qsze = data.get("qsze")
  26. fyjgwjqs = data.get("fyjgwjqs")
  27. if age is not None:
  28. if age < 18 or age >= 65:
  29. return 1
  30. if qsze is not None:
  31. if qsze > 500:
  32. return 3
  33. if fyjgwjqs is not None:
  34. if fyjgwjqs > 10:
  35. return 2
  36. return -1
  37. ```
  38. 待处理规则:
  39. 规则集名称:{rules_name}
  40. 规则集默认输出:{default_output}
  41. 规则集:
  42. {rules}
  43. 请根据```内的示例以及待处理规则中的变量、计算逻辑及输出,用Python语言生成功能函数代码。
  44. 返回结果要求:
  45. 1、只返回功能函数代码,不要多余的输出。
  46. 2、代码逻辑应严格按照待处理要求中的条件,不要自行添加多余的逻辑。
  47. 3、代码的语法要符合python的语法规范,返回的代码应该是可执行的。
  48. 4、规则里有 结果备注 的请在函数中的 输出结果备注 处进行备注,没有的则无输出结果备注
  49. """
  50. # 流程图
  51. prompt_parse_flow_image = """
  52. # 角色
  53. 你是一个专业的Python代码生成器,能够根据给定的流程图和函数内容,用Python语言生成完整的流程执行代码。
  54. 给定的函数内容:
  55. {func}
  56. 函数与节点对应关系:
  57. {node_func_map}
  58. 请把图中的流程转换为python代码,流程中的各个节点参考给定的函数内容,并构造测试数据data,代码样式如下。
  59. {func_import}
  60. def main(data: dict):
  61. 流程逻辑
  62. if __name__ == "__main__":
  63. data = 测试数据
  64. print(main(data))
  65. 返回结果要求:
  66. 1、针对流程分支情况请参考给定的函数内容及函数的输出结果备注。
  67. 2、分支的最终节点,无实际意义,分支最终节点直接返回其上一个节点输入的结果。
  68. 3、只返回函数代码,不要多余的输出。
  69. 4、代码逻辑应严格按照图中的逻辑,不要自行添加多余的逻辑。
  70. 5、代码的语法要符合python的语法规范,返回的代码应该是可执行的。
  71. """
  72. # 流程描述
  73. prompt_parse_flow = """
  74. # 角色
  75. 你是一个专业的Python代码生成器,能够根据给定的流程图和函数内容,用Python语言生成完整的流程执行代码。
  76. 给定的函数内容:
  77. {func}
  78. 函数与节点对应关系:
  79. {node_func_map}
  80. 流程描述:
  81. ```
  82. {flow}
  83. ```
  84. 流程描述说明:
  85. 1、[满足条件: *] 为判断上一个节点的输出是否符合条件
  86. 请把```括号内的流程描述的内容转换为python代码,流程中的各个节点参考给定的函数内容与函数与节点对应关系,并构造测试数据data,代码样式如下。
  87. {func_import}
  88. def main(data: dict):
  89. 流程逻辑
  90. if __name__ == "__main__":
  91. data = 测试数据
  92. print(main(data))
  93. 返回结果要求:
  94. 1、针对流程分支情况请参考给定的函数内容及函数的输出结果备注。
  95. 2、开始节点与结束节点,无实际意义,结束节点直接返回其上一个节点输出的结果。
  96. 3、只返回函数代码,不要多余的输出。
  97. 4、代码逻辑应严格按照图中的逻辑,不要自行添加多余的逻辑。
  98. 5、代码的语法要符合python的语法规范,返回的代码应该是可执行的。
  99. """
  100. def f_get_prompt_parse_node(rules_name: str, rules: str, default_output: str):
  101. return prompt_parse_node \
  102. .replace("{rules_name}", rules_name) \
  103. .replace("{rules}", rules) \
  104. .replace("{default_output}", default_output)
  105. def f_get_prompt_parse_flow_image(node_list: list):
  106. func = ""
  107. node_func_map = ""
  108. func_import = ""
  109. for node_name, func_name, code in node_list:
  110. func = f"{func}{code}\n\n"
  111. node_func_map = f"{node_func_map}{node_name}: {func_name}\n"
  112. func_import = f"{func_import}from {func_name} import {func_name}\n"
  113. return prompt_parse_flow_image.replace("{func}", func) \
  114. .replace("{node_func_map}", node_func_map) \
  115. .replace("{func_import}", func_import)
  116. def f_get_prompt_parse_flow(func: str, node_func_map: str, func_import: str, flow: str):
  117. return prompt_parse_flow.replace("{func}", func) \
  118. .replace("{node_func_map}", node_func_map) \
  119. .replace("{flow}", flow) \
  120. .replace("{func_import}", func_import)