postprocess0105.py 5.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import json
  2. with open('nantong_rule', 'r') as f:
  3. content = f.read()
  4. import json
  5. obj=json.loads(content)
  6. from fallback import fallback
  7. def aifilter(A, #options
  8. B, #data
  9. aiclient,
  10. qwclient,
  11. dw):
  12. options=[]
  13. letters = "ABCDEFGHIJKLMN"
  14. for i in range(len(A)):
  15. options.append("给定选项" + letters[i]+",内容为"+A[i] )
  16. completion = aiclient.chat.completions.create(
  17. model="glm-z1-flash",
  18. #model="Qwen/Qwen3-14B",
  19. messages=[
  20. {"role": "system", "content": "You are a helpful assistant."},
  21. {"role": "user", "content": " 特殊处理要求:如果选项中同时出现现浇板式雨棚(雨蓬)选项和现浇水平板(平板)选项,则二者只能选一个,且优先选择出现更早的选项"},
  22. {"role": "user", "content": " 特殊处理要求:如果选项中同时出现多个钢丝网选项,则只能选一个,且优先选择出现更早的选项"},
  23. {"role": "user", "content": " 特殊处理要求:钢盖板,钢篦子一般指不锈钢材质。如果选项中同时出现不锈钢盖板选项和铸铁盖板选项,则只能选一种,且优先选择与工作内容描述更接近的选项"},
  24. {"role": "user", "content": " 特殊处理要求:如果选项中同时出现混凝土散水选项和混凝土(砼)整体面层选项,则二者只能选一个,且优先选择出现更早的选项"},
  25. {"role": "user", "content": " 特殊处理要求:如果选项中有模板工程选项,但是工作内容中没有明确提出包含模板工程,则去除选项中的模板工程选项"},
  26. {"role": "user", "content": " 特殊处理要求:如果选项中有锯缝选项,但是工作内容中没有明确提出需要锯缝(道路伸缩缝),则去除选项中的锯缝选项"},
  27. {"role": "user", "content": " 特殊处理要求:如果选项中有檩条选项,但是工作内容中没有涉及檩条,则去除选项中的檩条选项"},
  28. {"role": "user", "content": " 特殊处理要求:如果选项中有加浆选项,但是工作内容中没有明确提出需要加浆,则去除选项中的加浆选项"},
  29. {"role": "user", "content": " 特殊处理要求:如果选项中有混凝土垫层选项,但是工作内容中明确描述垫层做法是碎石垫层,则去除选项中的混凝土垫层选项"},
  30. {"role": "user", "content": " 特殊处理要求:如果选项中有混凝土垫层选项,但是工作内容中不涉及垫层,则去除选项中的混凝土垫层选项"},
  31. {"role": "user", "content": " 特殊处理要求:如果选项中有细石混凝土(细石砼)找平层选项,但是工作内容没有明确表述细石混凝土找平层,则去除选项中的细石混凝土找平层选项"},
  32. {"role": "user", "content": " 特殊处理要求:抱框柱是柱的一种,与门框不相同。如果选项中有门框选项,但是工作内容中没有明确提出门框,则去除选项中的门框选项"},
  33. {"role": "user", "content": " 特殊处理要求:不需考虑工作内容中的混凝土强度等级与选项中的混凝土强度等级的差异"},
  34. {"role": "user", "content": " 重要提示:选项指的是给定的A、B、C之类的选项,不是指的工作内容中的可能的1、2、3这样罗列的特征"},
  35. {"role": "user", "content": " 重要提示:除特殊处理要求提及的内容外,不需考虑选项内容与工作内容是否符合,只需要根据特殊处理要求做出处理"},
  36. {"role": "user", "content": " 重要提示:混凝土找平层与混凝土面层是不同的概念,不得混淆"},
  37. {"role": "user", "content": "问题描述: 给定一段工作内容: " + B['label'] + " " + B['mc'] + " " + B['tz'] + ",".join(options) + "。请根据处理要求做出处理,写出推理过程,并返回结果。例如,如果处理完后剩余A,B,C三个选项,请返回[A,B,C]"},
  38. ],
  39. extra_body={"thinking": {"type": "enabled"}},
  40. #extra_body={"enable_thinking": False},
  41. )
  42. json_string = completion.choices[0].message.content
  43. print(json_string)
  44. completion = aiclient.chat.completions.create(
  45. model="glm-4.5-flash",
  46. messages=[
  47. {"role": "system", "content": "You are a helpful assistant.请将最终答案以JSON格式输出"},
  48. {"role": "user", "content": " 给你一段文字如下, " + json_string + ",其中给出了一个类似于[A,B,C]的数组作为结果,请将该最终结果输出"},
  49. ],
  50. extra_body={"thinking": {"type": "disabled"}},
  51. #extra_body={"enable_thinking": False},
  52. )
  53. json_string = completion.choices[0].message.content
  54. print(json_string)
  55. answer=[]
  56. if 'A' in json_string:
  57. answer.append(A[0])
  58. if 'B' in json_string:
  59. answer.append(A[1])
  60. if 'C' in json_string:
  61. answer.append(A[2])
  62. if 'D' in json_string:
  63. answer.append(A[3])
  64. if 'E' in json_string:
  65. answer.append(A[4])
  66. if 'F' in json_string:
  67. answer.append(A[5])
  68. if 'G' in json_string:
  69. answer.append(A[6])
  70. if 'H' in json_string:
  71. answer.append(A[7])
  72. if 'I' in json_string:
  73. answer.append(A[8])
  74. if 'J' in json_string:
  75. answer.append(A[9])
  76. return answer
  77. def postprocess0105(selected, data, aiclient, qwclient, label_name, name_dw):
  78. name=[label_name[x] for x in selected]
  79. dw=[name_dw[x] for x in name]
  80. if len(selected) == 1:
  81. t1 = selected
  82. else:
  83. t1 = aifilter(selected, data, aiclient, qwclient, dw)
  84. #t2 = fallback(t1, data, aiclient, qwclient)
  85. result = []
  86. for entry in t1:
  87. if entry in obj['7.8']:##钢盖板
  88. result.append(obj['nantong7.8'][0])
  89. else:
  90. result.append(entry)
  91. return result