postprocess0117.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. import json
  2. from config import simplemodel
  3. from template import xuanxiang
  4. with open("cuoshi_corpus.txt", "r") as f:
  5. content = f.read()
  6. pairs = content.split("\n")
  7. with open("name_label", "r") as f:
  8. content = f.read()
  9. label = json.loads(content)
  10. pair_tuple = []
  11. i = 0
  12. while i < len(pairs):
  13. pair_tuple.append([pairs[i], pairs[i+1]])
  14. i = i + 2
  15. chaogao = [label['19-' + str(i+1)][30:] for i in range(18)]
  16. jiangshui = [
  17. [label['22-11'], label['22-12'], label['22-13']],
  18. [label['22-14'], label['22-15'], label['22-16']],
  19. [label['22-17'], label['22-19'], label['22-20']]
  20. ]
  21. def handle_jichu(
  22. A,
  23. B, #data
  24. aiclient, sfclient):
  25. completion = aiclient.chat.completions.create(
  26. model="glm-4.5-air",
  27. messages=[
  28. {"role": "system", "content": "You are a helpful assistant."},
  29. {"role": "user", "content": "问题描述: 设备基础一般可分成块体设备基础(记作A)和框架设备基础(记作B)。给定一段工作内容: " + B['label'] + " " + B['mc'] + " " + B['tz'] + "," + "请判断描述的设备基础属于A还是B,并返回结果。如果无法确定,则返回A。"},
  30. ],
  31. extra_body={"thinking": {"type": "disabled"}},
  32. )
  33. json_string = completion.choices[0].message.content
  34. print(json_string)
  35. answer = 'A'
  36. if len(json_string) < 5:
  37. if 'B' in json_string :
  38. answer = 'B'
  39. else:
  40. completion = sfclient.chat.completions.create(
  41. model=simplemodel(),
  42. messages=[
  43. {"role": "system", "content": "You are a helpful assistant.请将结果以json格式输出"},
  44. {"role": "user", "content": "问题描述: 给定一段文字: " + json_string + "。文字给出了一个类似于A或者B的英文字母作为答案,请返回这个英文字母结果,不要输出分析过程"},
  45. ],
  46. extra_body={"thinking": {"type": "disabled"}},
  47. )
  48. json_string = completion.choices[0].message.content
  49. print(json_string)
  50. answer='A'
  51. if 'B' in json_string :
  52. answer = 'B'
  53. if answer == 'A':
  54. return [label['21-14']]
  55. else:
  56. return [label['21-18']]
  57. def handle_water(
  58. A,
  59. B, #data
  60. aiclient, sfclient):
  61. hit = False
  62. hit_group = []
  63. for entry in A:
  64. if hit:
  65. break
  66. for group in jiangshui:
  67. if entry in group:
  68. hit = True
  69. hit_group = group
  70. break
  71. return hit_group
  72. def handle_chaogao(
  73. B, #data
  74. aiclient, sfclient):
  75. options=[]
  76. letters = "ABCDEFGHIJKLMNOPQRST"
  77. for i in range(18):
  78. options.append("给定选项" + letters[i]+",内容为"+chaogao[i])
  79. completion = aiclient.chat.completions.create(
  80. model="glm-4.5-air",
  81. messages=[
  82. {"role": "system", "content": "You are a helpful assistant."},
  83. {"role": "user", "content": "问题描述: 给定一段工作内容: " + B['label'] + " " + B['mc'] + " " + B['tz'] + "," + ",".join(options) + "。请选出最匹配的选项,并返回结果。如果无法确定,则选择A。请输出英文字母选项作为答案,不要输出选项对应的文字描述"},
  84. ],
  85. extra_body={"thinking": {"type": "disabled"}},
  86. )
  87. json_string = completion.choices[0].message.content
  88. print(json_string)
  89. answer = 'A'
  90. if len(json_string) < 8:
  91. if 'B' in json_string :
  92. answer = 'B'
  93. if 'C' in json_string :
  94. answer = 'C'
  95. if 'D' in json_string :
  96. answer = 'D'
  97. if 'E' in json_string :
  98. answer = 'E'
  99. if 'F' in json_string :
  100. answer = 'F'
  101. if 'G' in json_string :
  102. answer = 'G'
  103. if 'H' in json_string :
  104. answer = 'H'
  105. if 'I' in json_string :
  106. answer = 'I'
  107. if 'J' in json_string :
  108. answer = 'J'
  109. if 'K' in json_string :
  110. answer = 'K'
  111. if 'L' in json_string :
  112. answer = 'L'
  113. if 'M' in json_string :
  114. answer = 'M'
  115. if 'N' in json_string :
  116. answer = 'N'
  117. if 'O' in json_string :
  118. answer = 'O'
  119. if 'P' in json_string :
  120. answer = 'P'
  121. if 'Q' in json_string :
  122. answer = 'Q'
  123. if 'R' in json_string :
  124. answer = 'R'
  125. else:
  126. completion = sfclient.chat.completions.create(
  127. model=simplemodel(),
  128. messages=[
  129. {"role": "system", "content": "You are a helpful assistant.请将结果以json格式输出"},
  130. {"role": "user", "content": "问题描述: 给定一段文字: " + json_string + "。文字给出了一个类似于A或者B的英文字母作为答案,请返回这个英文字母结果,不要输出分析过程"},
  131. ],
  132. extra_body={"thinking": {"type": "disabled"}},
  133. )
  134. json_string = completion.choices[0].message.content
  135. print(json_string)
  136. answer='A'
  137. if 'B' in json_string :
  138. answer = 'B'
  139. if 'C' in json_string :
  140. answer = 'C'
  141. if 'D' in json_string :
  142. answer = 'D'
  143. if 'E' in json_string :
  144. answer = 'E'
  145. if 'F' in json_string :
  146. answer = 'F'
  147. if 'G' in json_string :
  148. answer = 'G'
  149. if 'H' in json_string :
  150. answer = 'H'
  151. if 'I' in json_string :
  152. answer = 'I'
  153. if 'J' in json_string :
  154. answer = 'J'
  155. if 'K' in json_string :
  156. answer = 'K'
  157. if 'L' in json_string :
  158. answer = 'L'
  159. if 'M' in json_string :
  160. answer = 'M'
  161. if 'N' in json_string :
  162. answer = 'N'
  163. if 'O' in json_string :
  164. answer = 'O'
  165. if 'P' in json_string :
  166. answer = 'P'
  167. if 'Q' in json_string :
  168. answer = 'Q'
  169. if 'R' in json_string :
  170. answer = 'R'
  171. if answer == 'A':
  172. return [label['19-1']]
  173. if answer == 'B':
  174. return [label['19-2']]
  175. if answer == 'C':
  176. return [label['19-3']]
  177. if answer == 'D':
  178. return [label['19-4']]
  179. if answer == 'E':
  180. return [label['19-5']]
  181. if answer == 'F':
  182. return [label['19-6']]
  183. if answer == 'G':
  184. return [label['19-7']]
  185. if answer == 'H':
  186. return [label['19-8']]
  187. if answer == 'I':
  188. return [label['19-9']]
  189. if answer == 'J':
  190. return [label['19-10']]
  191. if answer == 'K':
  192. return [label['19-11']]
  193. if answer == 'L':
  194. return [label['19-12']]
  195. if answer == 'M':
  196. return [label['19-13']]
  197. if answer == 'N':
  198. return [label['19-14']]
  199. if answer == 'O':
  200. return [label['19-15']]
  201. if answer == 'P':
  202. return [label['19-16']]
  203. if answer == 'Q':
  204. return [label['19-17']]
  205. if answer == 'R':
  206. return [label['19-18']]
  207. return [label['19-1']]
  208. def aifilter(A, #options
  209. B, #data
  210. aiclient, sfclient):
  211. options=[]
  212. letters = "ABCDEFGHIJKLMN"
  213. for i in range(len(A)):
  214. options.append("给定选项" + letters[i]+",内容为"+A[i])
  215. completion = aiclient.chat.completions.create(
  216. model="glm-4.5-flash",
  217. messages=[
  218. {"role": "system", "content": "You are a helpful assistant."},
  219. {"role": "user", "content": " 背景知识:如果工作内容是土石方工程、土方工程等,那么不能选用塔式起重机;如果工作内容是土建工程,那么可以使用塔式起重机、施工电梯"},
  220. {"role": "user", "content": "问题描述: 给定一段工作内容: " + B['label'] + " " + B['mc'] + " " + B['tz'] + "," + ",".join(options) + "。请做出筛选,并返回结果。例如,如果处理完后剩余A,B,C三个选项,请返回[A,B,C]"},
  221. ],
  222. extra_body={"thinking": {"type": "disabled"}},
  223. )
  224. json_string = completion.choices[0].message.content
  225. print(json_string)
  226. if len(json_string) < 8:
  227. if 'A' in json_string and len(A) > 0:
  228. answer.append(A[0])
  229. if 'B' in json_string and len(A) > 1:
  230. answer.append(A[1])
  231. if 'C' in json_string and len(A) > 2:
  232. answer.append(A[2])
  233. if 'D' in json_string and len(A) > 3:
  234. answer.append(A[3])
  235. if 'E' in json_string and len(A) > 4:
  236. answer.append(A[4])
  237. if 'F' in json_string and len(A) > 5:
  238. answer.append(A[5])
  239. if 'G' in json_string and len(A) > 6:
  240. answer.append(A[6])
  241. return answer
  242. completion = sfclient.chat.completions.create(
  243. model=simplemodel(),
  244. messages=xuanxiang(json_string),
  245. extra_body={"thinking": {"type": "disabled"}},
  246. )
  247. json_string = completion.choices[0].message.content
  248. print(json_string)
  249. answer=[]
  250. if 'A' in json_string and len(A) > 0:
  251. answer.append(A[0])
  252. if 'B' in json_string and len(A) > 1:
  253. answer.append(A[1])
  254. if 'C' in json_string and len(A) > 2:
  255. answer.append(A[2])
  256. if 'D' in json_string and len(A) > 3:
  257. answer.append(A[3])
  258. if 'E' in json_string and len(A) > 4:
  259. answer.append(A[4])
  260. if 'F' in json_string and len(A) > 5:
  261. answer.append(A[5])
  262. if 'G' in json_string and len(A) > 6:
  263. answer.append(A[6])
  264. if 'H' in json_string and len(A) > 7:
  265. answer.append(A[7])
  266. return answer
  267. def postprocess0117(selected, data, aiclient, sfclient):
  268. water = 0
  269. non_water = 0
  270. for entry in selected:
  271. if '施工排水' in entry:
  272. water = water + 1
  273. else:
  274. non_water = non_water + 1
  275. if water > non_water:
  276. return handle_water(selected, data, aiclient, sfclient)
  277. jichu = 0
  278. non_jichu = 0
  279. for entry in selected:
  280. if '设备基础' in entry:
  281. jichu = jichu + 1
  282. else:
  283. non_jichu = non_jichu + 1
  284. if jichu > non_jichu:
  285. return handle_jichu(selected, data, aiclient, sfclient)
  286. if '超高增加' in data['mc'] or '超高增加' in data['tz'] or '超高施工增加' in data['mc'] or '超高施工增加' in data['tz']:
  287. return handle_chaogao(data, aiclient, sfclient)
  288. correct=[]
  289. for entry in selected:
  290. correct.append(entry)
  291. for item in pair_tuple:
  292. if entry in item:
  293. correct = correct + item
  294. correct = list(set(correct))
  295. return aifilter(correct, data, aiclient, sfclient)