| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- import json
- with open('zhaoping_rule', 'r') as f:
- content = f.read()
- import json
- obj=json.loads(content)
- with open('name_label', 'r') as f:
- content = f.read()
- import json
- name_label=json.loads(content)
- baohuceng = ['10-74', '10-75', '10-77', '10-78', '10-80', '10-81', '10-83', '10-84', '10-86', '10-87', '10-90']
- from fallback import fallback
- def aifilter3(A, #options
- B, #data
- aiclient,
- qwclient,
- dw):
- options=[]
- letters = "ABCDEFGHIJK"
- for i in range(len(baohuceng)):
- options.append("给定选项" + letters[i]+",内容为"+name_label[baohuceng[i]] )
- completion = aiclient.chat.completions.create(
- model="glm-4.5-flash",
- #model="Qwen/Qwen3-14B",
- messages=[
- {"role": "system", "content": "You are a helpful assistant."},
- {"role": "user", "content": " 重要提示:匹配保护层做法时,优先考虑材料的匹配性,比如,特征中描述是水泥砂浆,则优先选择水泥砂浆选项而不是防水砂浆选项"},
- {"role": "user", "content": "问题描述: 给定一段工作内容: " + B['label'] + " " + B['mc'] + " " + B['tz'] + ",其中包含了屋面保护层的做法。".join(options) + "。请根据工作内容中保护层的描述,选择最匹配的选项并返回结果。例如,如果C选项最匹配,请返回C"},
- ],
- extra_body={"thinking": {"type": "disabled"}},
- #extra_body={"enable_thinking": False},
- )
- json_string = completion.choices[0].message.content
- print(json_string)
- completion = aiclient.chat.completions.create(
- model="glm-4.5-flash",
- messages=[
- {"role": "system", "content": "You are a helpful assistant.请将最终答案以JSON格式输出"},
- {"role": "user", "content": " 给你一段文字如下, " + json_string + ",其中给出了一个类似于A或者B的选项作为结果,请将该最终结果输出"},
- ],
- extra_body={"thinking": {"type": "disabled"}},
- #extra_body={"enable_thinking": False},
- )
- json_string = completion.choices[0].message.content
- print(json_string)
- answer=[]
- if 'A' in json_string:
- answer.append(name_label[baohuceng[0]])
- if 'B' in json_string:
- answer.append(name_label[baohuceng[1]])
- if 'C' in json_string:
- answer.append(name_label[baohuceng[2]])
- if 'D' in json_string:
- answer.append(name_label[baohuceng[3]])
- if 'E' in json_string:
- answer.append(name_label[baohuceng[4]])
- if 'F' in json_string:
- answer.append(name_label[baohuceng[5]])
- if 'G' in json_string:
- answer.append(name_label[baohuceng[6]])
- if 'H' in json_string:
- answer.append(name_label[baohuceng[7]])
- if 'I' in json_string:
- answer.append(name_label[baohuceng[8]])
- if 'J' in json_string:
- answer.append(name_label[baohuceng[9]])
- if 'K' in json_string:
- answer.append(name_label[baohuceng[10]])
- return answer
- def aifilter4(A, #options
- B, #data
- aiclient,
- qwclient,
- dw):
- options=[]
- letters = "ABCDEFGHIJKLMN"
- for i in range(len(A)):
- options.append("给定选项" + letters[i]+",内容为"+A[i] )
- completion = aiclient.chat.completions.create(
- model="glm-z1-air",
- #model="Qwen/Qwen3-14B",
- messages=[
- {"role": "system", "content": "You are a helpful assistant."},
- {"role": "user", "content": " 背景知识:石油沥青,沥青马蹄脂,渗透结晶防水材料等都是防水涂料。"},
- {"role": "user", "content": " 特殊处理要求:如果选项中有多个防水涂料的选项,则只能选择一个防水涂料选项,且优先选择渗透结晶防水材料;与防水涂料无关的选项全部保留"},
- {"role": "user", "content": " 重要提示:选项指的是给定的A、B、C之类的选项,不是指的工作内容中的可能的1、2、3这样罗列的特征"},
- {"role": "user", "content": " 重要提示:除特殊处理要求提及的内容外,不需考虑选项内容与工作内容是否符合,只需要根据特殊处理要求做出处理"},
- {"role": "user", "content": "问题描述: 给定一段工作内容: " + B['label'] + " " + B['mc'] + " " + B['tz'] + ",".join(options) + "。请根据处理要求做出处理,并返回结果。例如,如果处理完后剩余A,B,C三个选项,请返回[A,B,C]"},
- ],
- extra_body={"thinking": {"type": "enabled"}},
- #extra_body={"enable_thinking": False},
- )
- json_string = completion.choices[0].message.content
- print(json_string)
- completion = aiclient.chat.completions.create(
- model="glm-4.5-flash",
- messages=[
- {"role": "system", "content": "You are a helpful assistant.请将最终答案以JSON格式输出"},
- {"role": "user", "content": " 给你一段文字如下, " + json_string + ",其中给出了一个类似于[A,B,C]的数组作为结果,请将该最终结果输出"},
- ],
- extra_body={"thinking": {"type": "disabled"}},
- #extra_body={"enable_thinking": False},
- )
- 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])
- if 'I' in json_string:
- answer.append(A[8])
- if 'J' in json_string:
- answer.append(A[9])
- return answer
- def aifilter1(A, #options
- B, #data
- aiclient,
- qwclient,
- dw):
- options=[]
- letters = "ABCDEFGHIJKLMN"
- for i in range(len(A)):
- options.append("给定选项" + letters[i]+",内容为"+A[i] )
- completion = qwclient.chat.completions.create(
- #model="glm-z1-flash",
- model="Qwen/Qwen3-8B",
- #model="ernie-speed-128k",
- messages=[
- {"role": "system", "content": "You are a helpful assistant."},
- {"role": "user", "content": " 特殊处理要求:去掉所有含有“干铺卷材”字样的选项"},
- {"role": "user", "content": " 特殊处理要求:如果工作内容描述中没有明确提到玻纤网格布,则去掉所有含有“玻纤网格布”字样的选项"},
- {"role": "user", "content": " 特殊处理要求:如果工作内容描述的是屋面刚性层,则去掉所有含有卷材字样的选项"},
- {"role": "user", "content": " 特殊处理要求:如果工作内容描述没有明确的“加浆抹光”字样,则去掉所有含有“加浆抹光”字样的选项"},
- {"role": "user", "content": " 特殊处理要求:如果工作内容描述没有单独的一道“素水泥浆”工序,则去掉所有含有“素水泥浆”字样的选项"},
- {"role": "user", "content": " 重要提示:选项指的是给定的A、B、C之类的选项,不是指的工作内容中的可能的1、2、3这样罗列的特征"},
- {"role": "user", "content": " 重要提示:除特殊处理要求提及的内容外,不需考虑选项内容与工作内容是否符合,只需要根据特殊处理要求做出处理"},
- {"role": "user", "content": "问题描述: 给定一段工作内容: " + B['label'] + " " + B['mc'] + " " + B['tz'] + ",".join(options) + "。请根据处理要求做出处理,并返回结果。例如,如果处理完后剩余A,B,C三个选项,请返回[A,B,C]"},
- ],
- #extra_body={"thinking": {"type": "enabled"}},
- extra_body={"enable_thinking": True},
- stream=True
- )
- done_thinking = False
- json_string=""
- thinking_json_string=""
- for chunk in completion:
- thinking_chunk = chunk.choices[0].delta.reasoning_content
- answer_chunk = chunk.choices[0].delta.content
- if thinking_chunk != '':
- thinking_json_string = thinking_json_string + thinking_chunk
- elif answer_chunk != '':
- if not done_thinking:
- done_thinking = True
- json_string = json_string + answer_chunk
- #json_string = completion.choices[0].message.content
- print(thinking_json_string)
- print(json_string)
- if len([x for x in json_string if x != ',' and x != '[' and x != ']' and x != ' ' and (x < 'A' or x > 'M')]) < 5:
- answer=[]
- if 'A' in json_string and len(A) > 0:
- answer.append(A[0])
- if 'B' in json_string and len(A) > 1:
- answer.append(A[1])
- if 'C' in json_string and len(A) > 2:
- answer.append(A[2])
- if 'D' in json_string and len(A) > 3:
- answer.append(A[3])
- if 'E' in json_string and len(A) > 4:
- answer.append(A[4])
- if 'F' in json_string and len(A) > 5:
- answer.append(A[5])
- if 'G' in json_string and len(A) > 6:
- answer.append(A[6])
- if 'H' in json_string and len(A) > 7:
- answer.append(A[7])
- if 'I' in json_string and len(A) > 8:
- answer.append(A[8])
- if 'J' in json_string and len(A) > 9:
- answer.append(A[9])
- return answer
- completion = aiclient.chat.completions.create(
- model="glm-4.5-flash",
- messages=[
- {"role": "system", "content": "You are a helpful assistant.请将最终答案以JSON格式输出"},
- {"role": "user", "content": " 给你一段文字如下, " + json_string + ",其中给出了一个类似于[A,B,C]的数组作为结果,请将该最终结果输出"},
- ],
- extra_body={"thinking": {"type": "disabled"}},
- #extra_body={"enable_thinking": False},
- )
- 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])
- if 'I' in json_string:
- answer.append(A[8])
- if 'J' in json_string:
- answer.append(A[9])
- return answer
- def aifilter2(A, #options
- B, #data
- aiclient,
- qwclient,
- dw):
- hit_wumian = False
- for entry in A:
- if entry in obj['wumian']:
- hit_wumian=True
- hit_loumian = False
- loumian_entry = ''
- for entry in A:
- if entry in obj['loumian']:
- hit_loumian=True
- loumian_entry = entry
- if hit_wumian and hit_loumian:
- return [x for x in A if x != loumian_entry]
- return A
- def postprocess0109(selected, data, aiclient, qwclient, label_name, name_dw):
- prime = aifilter1(selected, data, aiclient, qwclient, name_dw)
- if data['bianma'].startswith("010902") and '高聚物' in data['tz'] and '改性沥青防水涂料' in data['tz']:##屋面防水
- if '第十章 屋面及防水工程 10.2 平面立面及其它防水 10.2.1 涂刷油类 水泥基渗透结晶 防水材料 二~三遍(厚2mm)' not in prime:
- prime.append('第十章 屋面及防水工程 10.2 平面立面及其它防水 10.2.1 涂刷油类 水泥基渗透结晶 防水材料 二~三遍(厚2mm)') ##需要换
- if data['bianma'].startswith("010902") and '非固化' in data['tz'] and '沥青防水涂料' in data['tz']:##屋面防水
- if '第十章 屋面及防水工程 10.2 平面立面及其它防水 10.2.1 涂刷油类 水泥基渗透结晶 防水材料 二~三遍(厚2mm)' not in prime:
- prime.append('第十章 屋面及防水工程 10.2 平面立面及其它防水 10.2.1 涂刷油类 水泥基渗透结晶 防水材料 二~三遍(厚2mm)') ##需要换
- prime = aifilter2(prime, data, aiclient, qwclient, name_dw)##找平层去重
- prime = aifilter4(prime, data, aiclient, qwclient, name_dw)##沥青去重
- if data['bianma'].startswith("010902") and '保护层' in data['tz']:##屋面防水保护层
- l = len([x for x in prime if '刚性防水屋面' in x])
- if l==0:
- answer = aifilter3(prime, data, aiclient, qwclient, name_dw)
- prime.append(answer[0])
- if '南通补充定额 南通补充定额2016 第十章 屋面及防水工程 干铺法施工水泥彩瓦屋面(砼屋面板上钉钢挂瓦条、顺水条)' in prime:
- prime.append('南通补充定额 南通补充定额2016 第十章 屋面及防水工程 干铺法施工水泥彩瓦屋面(铺瓦)')
- return prime
|