| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- from config import simplemodel
- from template import xuanxiang
- import json
- with open("0103basic_rule", "r") as f:
- content = f.read()
- rule = json.loads(content)
- def aifilter(A, #options
- B, #data
- aiclient, sfclient):
- options=[]
- letters = "ABCDEFGHIJKLMN"
- for i in range(len(A)):
- options.append("给定选项" + letters[i]+",内容为"+A[i])
- completion = aiclient.chat.completions.create(
- model="glm-4.5-air",
- messages=[
- {"role": "system", "content": "You are a helpful assistant."},
- {"role": "user", "content": " 处理要求:如果清单描述的工作内容是管桩清理,则去除给定选项中的管桩填芯的选项; 如果清单描述的工作内容不是管桩清理,则不做处理"},
- {"role": "user", "content": "问题描述: 给定一段工程量清单描述: " + B['mc'] + " " + B['tz'] + "," + ",".join(options) + "。请根据处理要求,处理选项,并返回结果,删除选项必须对应到明确的特殊处理要求,不要擅自删除选项。例如,如果处理完后剩余A,B,C三个选项,请返回[A,B,C]"},
- ],
- extra_body={"thinking": {"type": "disabled"}},
- )
- json_string = completion.choices[0].message.content
- print(json_string)
- completion = sfclient.chat.completions.create(
- model=simplemodel(),
- messages=xuanxiang(json_string),
- extra_body={"thinking": {"type": "disabled"}},
- )
- json_string = completion.choices[0].message.content
- print(json_string)
- answer=[]
- if 'A' in json_string:
- answer.append(A[0])
- if 'B' in json_string:
- answer.append(A[1])
- if 'C' in json_string:
- answer.append(A[2])
- if 'D' in json_string:
- answer.append(A[3])
- if 'E' in json_string:
- answer.append(A[4])
- if 'F' in json_string:
- answer.append(A[5])
- if 'G' in json_string:
- answer.append(A[6])
- if 'H' in json_string:
- answer.append(A[7])
- return answer
- def associate_jiezhuang(answer):
- hit = False
- for entry in answer:
- if entry in ['第三章 桩基工程 3.1 打桩工程 3.1.5 电焊接桩 电焊接桩 方桩包角钢','第三章 桩基工程 3.1 打桩工程 3.1.5 电焊接桩 电焊接桩 方桩包钢板','第三章 桩基工程 3.1 打桩工程 3.1.5 电焊接桩 电焊接桩 螺栓+电焊']:
- hit = True
- return answer
- if not hit:
- return answer + ['第三章 桩基工程 3.1 打桩工程 3.1.5 电焊接桩 电焊接桩 螺栓+电焊']
- def associate(answer):
- hit = False
- for entry in answer:
- if entry in rule['3.1.1.1']:
- hit = "3.1.1.2"
- elif entry in rule['3.1.2.1']:
- hit = "3.1.2.2"
- elif entry in rule['3.1.3.1']:
- hit = "3.1.3.2"
- elif entry in rule["3.1.4.1"]:
- hit = "3.1.4.2"
- if hit:
- already = False
- for entry in answer:
- if entry in rule[hit]:
- already = True
- if not already:
- return answer + [rule[hit][0]]
- else:
- return answer
- else:
- return answer
- def jiezhuang(
- data, #data
- aiclient, sfclient):
- completion = aiclient.chat.completions.create(
- model="glm-4.5-air",
- messages=[
- {"role": "system", "content": "You are a helpful assistant."},
- {"role": "user", "content": " 背景知识:已知预应力高强混凝土管桩(PHC)型号定义为PHC-AAA(BB)CC-DDD-E1,E2,E3,E4,其中AAA代表管桩外径,BB代表管桩壁厚,CC表示型号,DDD表示混凝土强度等级,E1/E2/E3/E4表示分段桩长。例如,PHC-500(125)-AB-C80-9,7 表示外径500mm,壁厚125mm,型号AB,混凝土强度C80, 分段桩长分别为9米和7米,总桩长16米,施工时需要将两个分段接桩;再例如,PHC-500(125)-AB-C80-9 表示外径500mm,壁厚125mm,型号AB,混凝土强度C80, 为一整段桩,长9米, 施工时不需要接桩"},
- {"role": "user", "content": " 背景知识:在施工过程中,若管桩长度不足,则需在原有管桩基础上连接新的管桩,这一过程即为接桩。 通过接桩,可以将多节管桩连续打入地基,直至达到设计深度"},
- {"role": "user", "content": "问题描述: 给定一段工作内容描述,内容为" + data['mc'] +data['tz'] + "。请判断完成该工作内容是否需要接桩。请回答是或者否"},
- ],
- extra_body={"thinking": {"type": "disabled"}},
- )
- json_string = completion.choices[0].message.content
- print(json_string)
- if "是" in json_string and "否" not in json_string:
- return True
- if "是" not in json_string and "否" in json_string:
- return False
- completion = sfclient.chat.completions.create(
- model=simplemodel(),
- messages=[
- {"role": "system", "content": "You are a helpful assistant.请将最终答案以JSON格式输出"},
- {"role": "user", "content": " 给你一段文字如下, " + json_string + ",其中给出了一个是或者否的答案,请将该最终答案输出"},
- ],
- extra_body={"thinking": {"type": "disabled"}},
- )
- json_string = completion.choices[0].message.content
- print(json_string)
- if "是" in json_string and "否" not in json_string:
- return True
- if "是" not in json_string and "否" in json_string:
- return False
- def songzhuang(
- data, #data
- aiclient, sfclient):
- completion = aiclient.chat.completions.create(
- model="glm-4.5-flash",
- messages=[
- {"role": "system", "content": "You are a helpful assistant."},
- {"role": "user", "content": " 背景知识:送桩 是指当桩顶设计标高低于地面时,需要把桩顶打入到设计标高。"},
- {"role": "user", "content": "问题描述: 给定一段工作内容描述,内容为" + data['mc'] +data['tz'] + "。请判断完成该工作内容是否需要送桩。请回答是或者否"},
- ],
- extra_body={"thinking": {"type": "disabled"}},
- )
- json_string = completion.choices[0].message.content
- print(json_string)
- if "是" in json_string and "否" not in json_string:
- return True
- if "是" not in json_string and "否" in json_string:
- return False
- completion = sfclient.chat.completions.create(
- model=simplemodel(),
- messages=[
- {"role": "system", "content": "You are a helpful assistant.请将最终答案以JSON格式输出"},
- {"role": "user", "content": " 给你一段文字如下, " + json_string + ",其中给出了一个是或者否的答案,请将该最终答案输出"},
- ],
- extra_body={"thinking": {"type": "disabled"}},
- )
- json_string = completion.choices[0].message.content
- print(json_string)
- if "是" in json_string and "否" not in json_string:
- return True
- if "是" not in json_string and "否" in json_string:
- return False
- def ai(A, #options
- B, #data
- C, #entry
- aiclient, sfclient):
- options=[]
- letters = "ABCDEFGHIJKLMN"
- for i in range(len(A)):
- options.append("给定选项" + letters[i]+",内容为"+A[i])
- completion = aiclient.chat.completions.create(
- model="glm-4.5-flash",
- messages=[
- {"role": "system", "content": "You are a helpful assistant."},
- {"role": "user", "content": " 背景知识:已知预应力高强混凝土管桩(PHC)型号定义为PHC-AAA(BB)CC-DDD-E1,E2,E3,E4,其中AAA代表管桩外径,BB代表管桩壁厚,CC表示型号,DDD表示混凝土强度等级,E1/E2/E3/E4表示分段桩长。例如,PHC-500(125)-AB-C80-9,7 表示外径500mm,壁厚125mm,型号AB,混凝土强度C80, 分段桩长分别为9米和7米,总桩长16米"},
- {"role": "user", "content": "问题描述: 给定一段工作内容描述,内容为" + B['mc'] +B['tz'] + "," + ",".join(options) + "。请从上述选项中选择(总)桩长最恰当的一个选项,并返回代号,如果无法得出总桩长,则默认桩长10米。例如,如果A选项最恰当,请返回A; "},
- ],
- extra_body={"thinking": {"type": "disabled"}},
- )
- answer2 = completion.choices[0].message.content
- print(answer2)
- if len(answer2) < 4:
- if 'A' in answer2:
- return A[0]
- if 'B' in answer2:
- return A[1]
- if 'C' in answer2:
- return A[2]
- if 'D' in answer2:
- return A[3]
- if 'E' in answer2:
- return A[4]
- if 'F' in answer2:
- return A[5]
- if 'G' in answer2:
- return A[6]
- if 'H' in answer2:
- return A[7]
- if 'I' in answer2:
- return A[8]
- if 'J' in answer2:
- return A[9]
- completion = sfclient.chat.completions.create(
- model=simplemodel(),
- messages=[
- {"role": "system", "content": "You are a helpful assistant.请将最终答案以JSON格式输出"},
- {"role": "user", "content": " 给你一段文字如下, " + answer2 + ",其中给出了一个类似于A或者B或者C的表达式作为答案,请将该最终答案输出"},
- ],
- extra_body={"thinking": {"type": "disabled"}},
- )
- json_string = completion.choices[0].message.content
- print(json_string)
- answers = json_string.split("\n")
- answers = [x for x in answers if ':' in x]
- answers = [x for x in answers if 'A' in x or 'B' in x or 'C' in x or 'D' in x]
- print(answers)
- if len(answers) == 0:
- return C
- answer2 = answers[0].split(":")[1].replace(" ", "")
- if 'A' in answer2:
- return A[0]
- if 'B' in answer2:
- return A[1]
- if 'C' in answer2:
- return A[2]
- if 'D' in answer2:
- return A[3]
- if 'E' in answer2:
- return A[4]
- if 'F' in answer2:
- return A[5]
- if 'G' in answer2:
- return A[6]
- if 'H' in answer2:
- return A[7]
- if 'I' in answer2:
- return A[8]
- if 'J' in answer2:
- return A[9]
- def select(options, data, entry, aiclient, sfclient):
- if len([x for x in options if '桩长在' in x]) == len(options):
- return ai(options, data, entry, aiclient, sfclient)
- else:
- return entry
- def postprocess0103(selected, data, aiclient, sfclient):
- if jiezhuang(data, aiclient, sfclient):
- selected = associate_jiezhuang(selected)
- if songzhuang(data, aiclient, sfclient):
- selected = associate(selected)
- correct=[]
- for entry in selected:
- options = []
- for item in rule:
- l = rule[item]
- if entry in l:
- options = l
- if len(options) > 0:
- correct.append(select(options, data, entry, aiclient, sfclient))
- else:
- correct.append(entry)
- return aifilter(correct, data, aiclient, sfclient)
|