diff --git a/flask_app/general/post_processing.py b/flask_app/general/post_processing.py index 8f3f620..4470e78 100644 --- a/flask_app/general/post_processing.py +++ b/flask_app/general/post_processing.py @@ -130,13 +130,13 @@ def inner_post_processing(base_info): # 定义所需字段的映射关系,暂时不包含'联系人'和'联系电话'以及'招标项目地点' mapping = { "代理机构名称": [["招标人/代理信息", "招标代理机构"]], - "招标项目名称": [["项目信息", "项目名称"], ["项目信息", "工程名称"]], - "招标项目编号": [["项目信息", "项目编号"], ["项目信息", "招标编号"]], + "招标项目名称": [["项目信息", "项目名称"]], + "招标项目编号": [["项目信息", "项目编号"]], "开标时间": [["关键时间/内容", "开标时间"]], "报名截止日期": [["关键时间/内容", "投标文件递交截止日期"]], "招标项目预算": [["项目信息", "招标控制价"]], "招标单位名称": [["招标人/代理信息", "招标人"]], - "招标公告地址": [["关键时间/内容", "信息公示媒介"], ["关键时间/内容", "评标结果公示媒介"]], + "招标公告地址": [["关键时间/内容", "信息公示媒介"]], } # 定义需要格式化的日期字段 date_fields = ["开标时间", "报名截止日期"] diff --git a/flask_app/general/商务技术评分提取.py b/flask_app/general/商务技术评分提取.py index e9bf1b6..dd91331 100644 --- a/flask_app/general/商务技术评分提取.py +++ b/flask_app/general/商务技术评分提取.py @@ -24,48 +24,51 @@ def remove_unknown_scores(data): else: return data def combine_technical_and_business(data, target_values): - data=remove_unknown_scores(data) - extracted_data = {} # 根级别存储所有数据 - technical_found = False - business_found = False + # target_values = ['技术', '设计', '实施'] + data = remove_unknown_scores(data) + extracted_data = {} # 根级别存储所有数据 + technical_found = False + business_found = False - def extract_nested(data, parent_key='', is_technical=False, is_business=False): - nonlocal technical_found, business_found - if isinstance(data, dict): - for key, value in data.items(): - current_key = f"{parent_key}.{key}" if parent_key else key + def extract_nested(data, parent_key='', is_technical=False, is_business=False): + nonlocal technical_found, business_found + if isinstance(data, dict): + for key, value in data.items(): + current_key = f"{parent_key}.{key}" if parent_key else key - # 检查是否为技术标的内容 - if any(target in key for target in target_values): - if not is_technical: - extracted_data[key] = value - technical_found = True - continue + # 检查是否为技术标的内容 + if any(target in key for target in target_values): + if not is_technical: + if '技术评分' not in extracted_data: + extracted_data['技术评分'] = {} # 初始化 '技术评分' 字典 + extracted_data['技术评分'][key] = value + technical_found = True + continue - # 默认其他所有内容都归为商务标 - else: - if not is_business: - if '商务评分' not in extracted_data: - extracted_data['商务评分'] = {} # 确保它是字典 - extracted_data['商务评分'][key] = value - business_found = True - continue + # 默认其他所有内容都归为商务标 + else: + if not is_business: + if '商务评分' not in extracted_data: + extracted_data['商务评分'] = {} # 确保它是字典 + extracted_data['商务评分'][key] = value + business_found = True + continue - if isinstance(value, dict) or isinstance(value, list): - extract_nested(value, current_key, is_technical, is_business) + if isinstance(value, dict) or isinstance(value, list): + extract_nested(value, current_key, is_technical, is_business) - elif isinstance(data, list): - for index, item in enumerate(data): - extract_nested(item, f"{parent_key}[{index}]", is_technical, is_business) + elif isinstance(data, list): + for index, item in enumerate(data): + extract_nested(item, f"{parent_key}[{index}]", is_technical, is_business) - extract_nested(data) + extract_nested(data) - if not technical_found: - extracted_data['技术评分'] = '' - if not business_found: - extracted_data['商务评分'] = '' + if not technical_found: + extracted_data['技术评分'] = '' + if not business_found: + extracted_data['商务评分'] = '' - return extracted_data + return extracted_data # 防止外键只有一个'一包'的情况 def process_data_based_on_key(data): @@ -167,8 +170,9 @@ def combine_evaluation_standards(evaluation_method_path,invalid_path,zb_type): -每个大项(如技术评分、商务评分)下包含具体的评分项,评分项按以下规则表示。 2.评分项表示规则: -层级嵌套规则: - 若评分因素存在嵌套关系:主评分因素需附加括号,括号中注明该主评分项的总分。例如:产品技术响应(8分);子评分因素作为嵌套键,列在主评分因素之下,无需再附加括号表示评分。 - 若评分因素不存在嵌套关系:键名直接为评分因素,无需附加括号表示总分。 + 若评分因素(内容)存在嵌套关系(通过表格结构判断):主评分因素需附加括号,括号中注明该主评分项的总分。例如:产品技术响应(8分);子评分因素作为嵌套键名,列在主评分因素之下,无需再附加括号表示评分。 + -注意:禁止通过归纳、推测或自行总结来生成子评分因素,尤其不可根据'评分标准'中的打分要求来反向总结'子评分因素'。 + 若评分因素(内容)不存在嵌套关系:键名直接为评分因素,无需附加括号表示总分。 -评分项内容: -每个评分项最内层值都是列表,列表中包含描述评分标准或要求的字典。 -字典个数: @@ -259,7 +263,8 @@ def combine_evaluation_standards(evaluation_method_path,invalid_path,zb_type): -每个大项(如技术评分、商务评分)下包含具体的评分项,评分项按以下规则表示。 2.评分项表示规则: -层级嵌套规则: - 若评分因素(内容)存在嵌套关系:主评分因素需附加括号,括号中注明该主评分项的总分。例如:产品技术响应(8分);子评分因素作为嵌套键名,列在主评分因素之下,无需再附加括号表示评分。注:子评分因素不可从'评分标准'中总结。 + 若评分因素(内容)存在嵌套关系(通过表格结构判断):主评分因素需附加括号,括号中注明该主评分项的总分。例如:产品技术响应(8分);子评分因素作为嵌套键名,列在主评分因素之下,无需再附加括号表示评分。 + -注意:禁止通过归纳、推测或自行总结来生成子评分因素,尤其不可根据'评分标准'中的打分要求来反向总结'子评分因素'。 若评分因素(内容)不存在嵌套关系:键名直接为评分因素,无需附加括号表示总分。 -评分项内容: -每个评分项最内层值都是列表,列表中包含描述评分标准或要求的字典。 @@ -359,7 +364,7 @@ def combine_evaluation_standards(evaluation_method_path,invalid_path,zb_type): total_tokens = evaluation_res[1] # print(evaluation_res) # 清理和处理响应 - cleaned_evaluation_res = extract_content_from_json(message,True) # 处理重复键名的情况 + cleaned_evaluation_res = extract_content_from_json(message,True) # 带上True处理重复键名的情况-》生成列表 # print(json.dumps(cleaned_evaluation_res,ensure_ascii=False,indent=4)) max_tokens = 7900 if model_type == 4 else 5900 if not cleaned_evaluation_res and total_tokens > max_tokens: diff --git a/flask_app/general/通用功能函数.py b/flask_app/general/通用功能函数.py index e2aab87..a4414c0 100644 --- a/flask_app/general/通用功能函数.py +++ b/flask_app/general/通用功能函数.py @@ -23,6 +23,123 @@ def process_judge_questions(judge_file_path, chosen_numbers, file_id, baseinfo_l for question, response in res2: baseinfo_list1.append(clean_json_string(response)) +def aggregate_basic_info(baseinfo_list,mode="engineering"): + """ + 将基础信息列表中的数据进行合并和分类。 + + 参数: + - baseinfo_list (list): 包含多个基础信息的列表。 + + 返回: + - dict: 合并和分类后的基础信息字典。 + """ + key_groups = { + "招标人/代理信息": ["招标人", "招标人联系方式", "招标代理机构", "招标代理机构联系方式","项目联系方式"], + "项目信息": ["项目名称", "项目编号", "项目概况", "项目基本情况", "招标控制价", "投标竞争下浮率"], + "关键时间/内容": [ + "投标文件递交截止日期", + "开标时间", + "开标地点", + "澄清招标文件的截止时间", + "投标有效期", + "信息公示媒介" + ], + "保证金相关": ["质量保证金"], + "其他信息": [ + "重新招标、不再招标和终止招标", + "投标费用承担", + "招标代理服务费", + "是否退还投标文件", + ] + } + # 如果模式是 'goods',则添加 "采购要求" 组 + if mode == 'goods': + key_groups["采购要求"] = [ + "采购需求", + "技术要求", + "服务要求", + "商务要求", + "其他要求" + ] + combined_data = {} + relevant_keys_detected = set() + + # 合并所有基础信息并收集相关键 + for baseinfo in baseinfo_list: + combined_data.update(baseinfo) + relevant_keys_detected.update(baseinfo.keys()) + + # 动态调整键组 + dynamic_key_handling(key_groups, relevant_keys_detected) + + # 创建一个副本以存储未分类的项目 + unclassified_items = {k: v for k, v in combined_data.items() if + k not in [item for sublist in key_groups.values() for item in sublist]} + + # 按键组分类并嵌套 + for group_name, keys in key_groups.items(): + group_data = {key: combined_data.get(key, "未提供") for key in keys} + combined_data[group_name] = group_data + # 从 unclassified_items 中移除已分类的键 + for key in keys: + unclassified_items.pop(key, None) + + # 将剩余未分类的键值对添加到 "其他信息" 组 + combined_data["其他信息"].update(unclassified_items) + + # 移除顶层的未分类键值对 + for key in list(combined_data.keys()): + if key not in key_groups: + del combined_data[key] + + return combined_data + + +def dynamic_key_handling(key_groups, detected_keys): + # 检查和调整键组配置 + for key in detected_keys: + if "技术、服务要求" in detected_keys: + # 如果检测到“技术、服务要求”,则移除“技术要求”和“服务要求” + if "技术要求" in key_groups["采购要求"]: + key_groups["采购要求"].remove("技术要求") + if "服务要求" in key_groups["采购要求"]: + key_groups["采购要求"].remove("服务要求") + # 确保"技术、服务要求"存在于"采购要求"组中 + if "技术、服务要求" not in key_groups["采购要求"]: + key_groups["采购要求"].insert(1, "技术、服务要求") + # 处理“保证金相关”组,插到"质量保证金"前 + elif "保证金" in key: + group = key_groups["保证金相关"] + insert_before = "质量保证金" + if insert_before in group: + index = group.index(insert_before) + if key not in group: # 避免重复插入 + group.insert(index, key) + else: + group.append(key) # 如果没有找到特定键,则追加到末尾 + elif "联合体" in key: + key_groups["项目信息"].append(key) + elif "分包" in key: + key_groups["项目信息"].append(key) + elif "踏勘现场" in key: + key_groups["其他信息"].append(key) + elif "投标预备会" in key: + key_groups["其他信息"].append(key) + elif "偏离" in key: + key_groups["其他信息"].append(key) + elif "递交方式" in key or "递交地点" in key: + group = key_groups["关键时间/内容"] + insert_after = "投标文件递交截止日期" + if insert_after in group: + index = group.index(insert_after) + # 确保新键不重复 + if key not in group: + group.insert(index + 1, key) + else: + # 如果“投标文件递交截止日期”不存在,则追加到末尾 + if key not in group: + group.append(key) + def judge_consortium_bidding(baseinfo_list): updated_list = [] accept_bidding = False diff --git a/flask_app/routes/小解析main.py b/flask_app/routes/小解析main.py index 1e5cc27..93cca41 100644 --- a/flask_app/routes/小解析main.py +++ b/flask_app/routes/小解析main.py @@ -8,13 +8,9 @@ from flask_app.general.format_change import docx2pdf from flask_app.general.json_utils import clean_json_string from flask_app.general.多线程提问 import read_questions_from_file, multi_threading from flask_app.general.通义千问long import upload_file -from flask_app.general.通用功能函数 import get_global_logger -from flask_app.货物标.基础信息解析货物标版 import aggregate_basic_info_goods +from flask_app.general.通用功能函数 import get_global_logger,aggregate_basic_info from flask_app.general.截取pdf_main import truncate_pdf_multiple -from flask_app.货物标.截取pdf货物标版 import truncate_pdf_main_goods -from flask_app.工程标.截取pdf工程标版 import truncate_pdf_main_engineering from flask_app.general.post_processing import inner_post_processing -from flask_app.工程标.基础信息整合工程标 import aggregate_basic_info_engineering #货物标 def little_parse_goods(output_folder, pdf_path,logger): """ @@ -48,7 +44,7 @@ def little_parse_goods(output_folder, pdf_path,logger): # 清理 JSON 字符串 baseinfo_list = [clean_json_string(res) for _, res in baseinfo_results] if baseinfo_results else [] # 聚合基础信息 - aggregated_baseinfo = aggregate_basic_info_goods(baseinfo_list) + aggregated_baseinfo = aggregate_basic_info(baseinfo_list) return {"基础信息": aggregated_baseinfo} @@ -84,7 +80,7 @@ def little_parse_engineering(output_folder, pdf_path,logger): # 清理 JSON 字符串 baseinfo_list = [clean_json_string(res) for _, res in baseinfo_results] if baseinfo_results else [] # 聚合基础信息 - aggregated_baseinfo = aggregate_basic_info_engineering(baseinfo_list) + aggregated_baseinfo = aggregate_basic_info(baseinfo_list) return {"基础信息": aggregated_baseinfo} def little_parse_main(output_folder, file_path, file_type,zb_type,unique_id): diff --git a/flask_app/static/提示词/初版基础提示词.txt b/flask_app/static/提示词/初版基础提示词.txt deleted file mode 100644 index 6e4dda3..0000000 --- a/flask_app/static/提示词/初版基础提示词.txt +++ /dev/null @@ -1,33 +0,0 @@ -1.该招标文件的项目名称(或工程名称)是?招标编号(或项目编号)是?招标人是?招标代理机构是?请按json格式给我提供信息,键名分别是'项目名称','招标编号','招标人','招标代理机构',若存在未知信息,在对应的键值中填'未知'。 - -#该招标文件的项目概况(或工程概况)是?招标范围是?招标控制价(可指代投标限价、投资概算金额、工程概算金额、合同估算价,但非监理费用)是?该项目的计划工期(监理服务期)是?该项目是否接受联合体投标?请按json格式给我提供信息,键名分别为'工程概况','招标范围','招标控制价','计划工期','是否接受联合体投标',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,若存在未知信息,在对应的键值中填'未知','是否接受联合体投标'的键值仅限于'是'、'否'、'未知'。 -2.该招标文件的工程概况(或项目概况)是?招标范围是?请按json格式给我提供信息,键名分别为'项目概况','招标范围',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,若存在未知信息,在对应的键值中填'未知'。 - -3.该招标文件的招标控制价(可指代投标限价、投资概算金额、工程概算金额、合同估算价,但非监理费用)是?请按json格式给我提供信息,键名为'招标控制价',若存在未知信息,在对应的键值中填'未知'。 - -4.投标文件递交截止日期是?递交方式是?请按json格式给我提供信息,键名分别是'投标文件递交截止日期','投标文件递交方式',若存在未知信息,在对应的键值中填'未知'。 - -5.招标人和招标代理机构的联系方式是?请按json格式给我提供信息,键名分别是'招标人联系方式','招标代理机构联系方式',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,若存在未知信息,在对应的键值中填'未知'。 - -##(三个问题分开问)根据第二章投标人须知的内容,该招标文件是否允许分包? 是否需要递交投标保证金?是否有履约保证金(履约担保)?是否有招标代理服务费?你需要留意☑后的内容。请按json格式给我提供信息,键名分别为'是否允许分包','是否递交投标保证金','是否有履约保证金','是否有招标代理服务费',键值仅限于'是','否','未知'。可以一起问,设置摘取分段为8,仍存在问题:pdf转word文件打勾符号可能会无法正常显示,解决思路1:根据原pdf进行提取 - -6.该招标文件的评标结果(定标候选人)公示媒介在哪?请按json格式给我提供信息,键名是'评标结果公示媒介',若存在未知信息,在对应的键值中填'未知'。 - -7.该招标文件的投标竞争下浮率是多少?请按json格式给我提供信息,键名是'投标竞争下浮率',若存在未知信息,在对应的键值中填'未知'。 - -#11.该招标文件的投标竞争下浮率是多少?若请按json格式给我提供信息,键名是'投标竞争下浮率',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,若存在未知信息,在对应的键值中填'未知'。 - -8.该项目的投标有效期是什么?请按json格式给我提供信息,键名是'投标有效期',若存在未知信息,在对应的键值中填'未知'。 -#该招标中对于实质性要求(废标项)的内容有哪些?规定投标人不得存在的情形有哪些?文件中提及的否决和无效投标情形有哪些?请以json格式返回结果,键名分别'实质性要求','不得存在的情形','否决和无效投标情形',若存在未知信息,请在对应键值中填'未知',你的回答一切以原文内容为准,不可改动。 - -#8.该招标文件的电子招标文件获取方式是?请按原文段落全部完整内容回答,以json的格式给我提供信息,键名是'电子招标文件获取方式',若存在未知信息,在对应的键值中填'未知'。 - -9.该招标文件中对投标人准备和参加投标活动发生的费用是如何规定的?请以json的格式给我提供信息,键名是'投标费用承担',若存在未知信息,在对应的键值中填'未知'。 - -10.求澄清的招标文件截止时间是?请以json的格式给我提供信息,键名是'投标人要求澄清招标文件的截止时间',若存在未知信息,在对应的键值中填'未知'。 - -11.该文档要求扣留的质量保证金百分比是多少,请以json格式给我提供信息,键名为'质量保证金',如果没有则以'未知'填充。 - -12.该项目是否接受联合体投标?请按json格式给我提供信息,键名为'是否接受联合体投标','是否接受联合体投标'的键值仅限于'是'、'否'、'未知'。 - -13.该项目的开标时间(开启时间)和开标地点是?请按json格式给我提供信息,键名为'开标时间'和'开标地点',若存在未知信息,在对应的键值中填'未知'。 diff --git a/flask_app/static/提示词/基本信息工程标.txt b/flask_app/static/提示词/基本信息工程标.txt index 20dc648..3b8696d 100644 --- a/flask_app/static/提示词/基本信息工程标.txt +++ b/flask_app/static/提示词/基本信息工程标.txt @@ -1,25 +1,52 @@ -1.该招标文件的项目名称(或工程名称)是?招标编号(或项目编号)是?招标人是?招标代理机构是?请按json格式给我提供信息,键名分别是'项目名称','招标编号','招标人','招标代理机构',若存在未知信息,在对应的键值中填'未知'。 +1.该招标文件的项目名称是?项目编号(或招标编号)是?招标人(或采购人,采购单位)是?招标代理机构(或采购代理机构)是?请按json格式给我提供信息,键名分别是'项目名称','项目编号','招标人','招标代理机构',若存在未知信息,在对应的键值中填'未知'。 -2.该招标文件的工程概况(或项目概况)是?招标范围是?请按json格式给我提供信息,键名分别为'项目概况','招标范围',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,若存在未知信息,在对应的键值中填'未知'。 +2.该招标文件的项目概况(或工程概况)是?项目基本情况是?请按json格式给我提供信息,键名分别为'项目概况','项目基本情况',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,若存在未知信息,在对应的键值中填'未知'。 -3.该招标文件的招标控制价(或投标限价或预算金额或合同估算价,但非监理费用)是?请按json格式给我提供信息,键名为'招标控制价',若存在未知信息,在对应的键值中填'未知'。 +3.该招标文件的招标控制价(或投标限价或项目预算金额)是?请按json格式给我提供信息,键名为'招标控制价',若存在未知信息,在对应的键值中填'未知'。 -4.投标文件递交截止日期是?递交方式是?请按json格式给我提供信息,键名分别是'投标文件递交截止日期','投标文件递交方式',若存在未知信息,在对应的键值中填'未知'。 +4.投标文件(或响应文件)递交截止时间是?递交地点(或方式)是?请按json格式给我提供信息,键名分别是'投标文件递交截止日期','投标文件递交地点'(或'投标文件递交方式'),键值为原文中相关内容的表述,若存在未知信息,在对应的键值中填'未知',示例输出如下,仅供格式参考: +{ + "投标文件递交截止日期":"详见湖北省政府采购网公告", + "投标文件递交方式":"通过电子交易系统进行递交" +} -5.招标人和招标代理机构的联系方式是?请按json格式给我提供信息,键名分别是'招标人联系方式','招标代理机构联系方式',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,若存在未知信息,在对应的键值中填'未知'。 +5.招标人(或采购人)和招标代理机构(或采购代理机构)和项目的联系方式是?请按json格式给我提供信息,外层键名分别是'招标人联系方式','招标代理机构联系方式',"项目联系方式",嵌套键名至少包含"名称"和"联系电话",若还有其他字段则添加在后面,若存在未知信息,在对应的键值中填'未知'。示例输出如下: +{ + "招标人联系方式":{ + "名称":"广水市中医医院", + "联系电话":"13972990000", + "地址":"洪山街道" + }, + "招标代理机构联系方式":{ + "名称":"湖北众恒永业工程项目管理有限公司广水分公司", + "联系电话":"13972991234" + }, + "项目联系方式":{ + "名称":"张三", + "联系电话":"未知" + } +} -6.该招标文件的评标结果(定标候选人)公示媒介在哪?请按json格式给我提供信息,键名是'评标结果公示媒介',若存在未知信息,在对应的键值中填'未知'。 +6.该招标文件的信息(如补充说明、评标结果)公示媒介在哪?请按json格式给我提供信息,键名是'信息公示媒介',若存在未知信息,在对应的键值中填'未知'。 7.该招标文件的投标竞争下浮率是多少?请按json格式给我提供信息,键名是'投标竞争下浮率',若存在未知信息,在对应的键值中填'未知'。 -8.该项目的投标有效期是什么?请按json格式给我提供信息,键名是'投标有效期',若存在未知信息,在对应的键值中填'未知'。 +8.该项目的投标有效期(或响应文件有效期)是什么?请按json格式给我提供信息,键名是'投标有效期',若存在未知信息,在对应的键值中填'未知'。 -9.该招标文件中对投标人准备和参加投标活动发生的费用是如何规定的?请以json的格式给我提供信息,键名是'投标费用承担',若存在未知信息,在对应的键值中填'未知'。 +9.该招标文件中对投标人(或供应商)准备和参加投标活动中发生的费用是如何规定的?请以json的格式给我提供信息,键名是'投标费用承担',若存在未知信息,在对应的键值中填'未知'。 -10.求澄清的招标文件截止时间是?请以json的格式给我提供信息,键名是'投标人要求澄清招标文件的截止时间',若存在未知信息,在对应的键值中填'未知'。 +10.招标人(或招标代理机构)对招标文件的澄清(或答疑)的截止时间是?请以json的格式给我提供信息,键名是'澄清招标文件的截止时间',若存在未知信息,在对应的键值中填'未知'。 11.该文档要求扣留的质量保证金百分比是多少,请以json格式给我提供信息,键名为'质量保证金',如果没有则以'未知'填充。 12.该项目是否接受联合体投标?请按json格式给我提供信息,键名为'是否接受联合体投标','是否接受联合体投标'的键值仅限于'是'、'否'、'未知'。 -13.该项目的开标时间(或开启时间)和开标地点是?请按json格式给我提供信息,键名为'开标时间'和'开标地点',对于"开标时间",若文中没有明确时间却有诸如'同投标截止时间'的类比表述,将其键值设为文中相关表述,若存在未知信息,在对应的键值中填'未知'。 +13.该招标文件中对投标文件中偏离项的要求或内容是怎样的?请以json格式给我提供信息,外层键名为'偏离',请不要回答具体的技术参数,若存在未知信息,在对应的键值中填'未知'。 + +14.该项目的开标时间(或开启时间)和开标地点(或开启地点、开启方式)是?请按json格式给我提供信息,键名为'开标时间'和'开标地点',键值为原文中相关内容的表述。 +对于'开标时间',若文中没有明确时间却有诸如'同投标截止时间'的表述,则将相关表述返回;若存在未知信息,在对应的键值中填'未知', +示例输出如下,仅供格式参考: +{ + "开标时间":"详见湖北省政府采购网公告", + "开标地点":"线上开标" +} \ No newline at end of file diff --git a/flask_app/static/提示词/基本信息工程标qianwen-long.txt b/flask_app/static/提示词/基本信息工程标qianwen-long.txt deleted file mode 100644 index 2ef26a6..0000000 --- a/flask_app/static/提示词/基本信息工程标qianwen-long.txt +++ /dev/null @@ -1,23 +0,0 @@ -1.该招标文件的项目名称(或工程名称)是?招标编号(或项目编号)是?招标人是?招标代理机构是?请按json格式给我提供信息,键名分别是'项目名称','招标编号','招标人','招标代理机构',若存在未知信息,在对应的键值中填'未知'。 - -2.该招标文件的项目概况(或工程概况)是?招标范围是?请按json格式给我提供信息,键名分别为'项目概况','招标范围',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,而嵌套键值必须与原文保持一致,若存在未知信息,在对应的键值中填'未知'。 - -3.该招标文件的招标控制价(或投标限价或预算金额或合同估算价,但非监理费用)是?该项目是否接受联合体投标?请按json格式给我提供信息,键名分别为'招标控制价'和'是否接受联合体投标',其中'是否接受联合体投标'的键值仅限于'是'、'否'、'未知',若存在未知信息,在对应的键值中填'未知'。 - -4.投标文件递交截止日期是?递交方式是?请按json格式给我提供信息,键名分别是'投标文件递交截止日期','投标文件递交方式',若存在未知信息,在对应的键值中填'未知'。 - -5.招标人和招标代理机构的联系方式是?请按json格式给我提供信息,键名分别是'招标人联系方式','招标代理机构联系方式',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,若存在未知信息,在对应的键值中填'未知'。 - -6.该招标文件的评标结果(或相关信息)公示媒介在哪?请按json格式给我提供信息,键名是'评标结果公示媒介',若存在未知信息,在对应的键值中填'未知'。 - -7.该招标文件的投标竞争下浮率是多少?请按json格式给我提供信息,键名是'投标竞争下浮率',若存在未知信息,在对应的键值中填'未知'。 - -8.该项目的投标有效期是多久(或自投标截止之日起多久之内有效)?请按json格式给我提供信息,键名是'投标有效期',键值为文中相关表述,不得擅自总结、删减,若存在未知信息,在对应的键值中填'未知'。 - -9.该招标文件中对投标人准备和参加投标活动发生的费用是如何规定的?请以json的格式给我提供信息,键名是'投标费用承担',若存在未知信息,在对应的键值中填'未知'。 - -10.投标人要求澄清招标文件的截止时间是?请以json的格式给我提供信息,键名是'投标人要求澄清招标文件的截止时间',若存在未知信息,在对应的键值中填'未知'。 - -11.该文档要求扣留的质量保证金百分比是多少,请以json格式给我提供信息,键名为'质量保证金',如果没有则以'未知'填充。 - -12.该项目的开标时间(或开启时间)和开标地点是?请按json格式给我提供信息,键名为'开标时间'和'开标地点',对于"开标时间",若文中没有明确时间,将其键值设为文中相关表述,若存在未知信息,在对应的键值中填'未知'。 diff --git a/flask_app/static/提示词/基本信息货物标.txt b/flask_app/static/提示词/基本信息货物标.txt index 5fc2eda..41abe3d 100644 --- a/flask_app/static/提示词/基本信息货物标.txt +++ b/flask_app/static/提示词/基本信息货物标.txt @@ -1,8 +1,8 @@ -1.该招标文件的项目名称是?项目编号(或招标编号)是?采购人(或招标人)是?采购代理机构(或招标代理机构)是?请按json格式给我提供信息,键名分别是'项目名称','项目编号','招标人','招标代理机构',若存在未知信息,在对应的键值中填'未知'。 +1.该招标文件的项目名称是?项目编号(或招标编号)是?招标人(或采购人,采购单位)是?招标代理机构(或采购代理机构)是?请按json格式给我提供信息,键名分别是'项目名称','项目编号','招标人','招标代理机构',若存在未知信息,在对应的键值中填'未知'。 2.该招标文件的项目概况是?项目基本情况是?请按json格式给我提供信息,键名分别为'项目概况','项目基本情况',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,而嵌套键值必须与原文保持一致,若存在未知信息,在对应的键值中填'未知'。 -3.该招标文件的最高限价(或招标控制价)是?请按json格式给我提供信息,键名为'招标控制价',若存在未知信息,在对应的键值中填'未知'。 +3.该招标文件的招标控制价(或投标限价或项目预算金额)是?请按json格式给我提供信息,键名为'招标控制价',若存在未知信息,在对应的键值中填'未知'。 4.投标文件(或响应文件)递交截止时间是?递交地点(或方式)是?请按json格式给我提供信息,键名分别是'投标文件递交截止日期','投标文件递交地点'(或'投标文件递交方式'),键值为原文中相关内容的表述,若存在未知信息,在对应的键值中填'未知',示例输出如下,仅供格式参考: { @@ -27,7 +27,7 @@ } } -6.该招标文件的信息公示媒介在哪?请按json格式给我提供信息,键名是'信息公示媒介',若存在未知信息,在对应的键值中填'未知'。 +6.该招标文件的信息(如补充说明、评标结果)公示媒介在哪?请按json格式给我提供信息,键名是'信息公示媒介',若存在未知信息,在对应的键值中填'未知'。 7.该招标文件的投标竞争下浮率是多少?请按json格式给我提供信息,键名是'投标竞争下浮率',若存在未知信息,在对应的键值中填'未知'。 @@ -43,7 +43,9 @@ 13.该招标文件中对投标文件中偏离项的要求或内容是怎样的?请以json格式给我提供信息,外层键名为'偏离',请不要回答具体的技术参数,若存在未知信息,在对应的键值中填'未知'。 -14.该项目的开标时间(或开启时间)和开标地点(或开启地点、开启方式)是?请按json格式给我提供信息,键名为'开标时间'和'开标地点',键值为原文中相关内容的表述,若存在未知信息,在对应的键值中填'未知',示例输出如下,仅供格式参考: +14.该项目的开标时间(或开启时间)和开标地点(或开启地点、开启方式)是?请按json格式给我提供信息,键名为'开标时间'和'开标地点',键值为原文中相关内容的表述。 +对于'开标时间',若文中没有明确时间却有诸如'同投标截止时间'的表述,则将相关表述返回;若存在未知信息,在对应的键值中填'未知'。 +示例输出如下,仅供格式参考: { "开标时间":"详见湖北省政府采购网公告", "开标地点":"线上开标" diff --git a/flask_app/static/提示词/填充ques.txt b/flask_app/static/提示词/填充ques.txt deleted file mode 100644 index e9a0884..0000000 --- a/flask_app/static/提示词/填充ques.txt +++ /dev/null @@ -1,33 +0,0 @@ -1.该文件为投标文件格式要求,请你根据该招标文件回答:法定代表人身份证应该附在哪个地方?你可能需要查找以下章节出现的地方:'法人代表身份证(正、反面复印件)', '法定代表人(负责人)证明';或者可能匹配的关键字:'法定代表', '法人代表',并确定所在章节。 -我需要将法定代表人身份证贴在该章节的最后面,目前我需要定位到插入的位置,请你返回给我插入位置的上下文,下文应该是下一章的章节名或开头内容,字数限制在30字以内,以json格式返回,键名分别是'上文','下文',上下文格式内容应完全与原文保持一致,不得擅自删减总结,示例输出如下: -{ -"上文":"投标人: (盖单位章) -年 月 日", -"下文":"四、投标保证金 -(招标人名称):" -} -2.该文件为投标文件格式要求,请你根据该招标文件回答:法定代表人授权人身份证应该附在哪个地方?你可能需要查找以下章节出现的地方:'法人代表授权人身份证复印件', '法定代表人授权证明';或者可能匹配的关键字:'法定代表人授权', '授权人身份证',并确定所在章节。 -我需要将法定代表人授权人身份证贴在该章节的最后面,目前我需要定位到插入的位置,请你返回给我插入位置的上下文,下文应该是下一章的章节名或开头内容,字数限制在30字以内,以json格式返回,键名分别是'上文','下文',上下文格式内容应完全与原文保持一致,不得擅自删减总结,示例输出如下: -{ -"上文":"投标人: (盖单位章) -年 月 日", -"下文":"四、投标保证金 -(招标人名称):" -} -5.采购人(招标人)和采购代理机构(或招标代理机构)和项目的联系方式是?请按json格式给我提供信息,外层键名分别是'招标人联系方式','招标代理机构联系方式',"项目联系方式",嵌套键名至少包含"名称"和"联系电话",若还有其他字段则添加在后面,若存在未知信息,在对应的键值中填'未知'。示例输出如下: -{ - "招标人联系方式":{ - "名称":"广水市中医医院", - "联系电话":"13972990000", - "地址":"洪山街道" - }, - "招标代理机构联系方式":{ - "名称":"湖北众恒永业工程项目管理有限公司广水分公司", - "联系电话":"13972991234" - }, - "项目联系方式":{ - "名称":"张三", - "联系电话":"未知" - } -} -6.投标文件(或响应文件)递交截止时间是?请按json格式给我提供信息,键名是'投标文件递交截止日期',若存在未知信息,在对应的键值中填'未知'。 \ No newline at end of file diff --git a/flask_app/static/提示词/小解析基本信息工程标.txt b/flask_app/static/提示词/小解析基本信息工程标.txt index 37de833..c477948 100644 --- a/flask_app/static/提示词/小解析基本信息工程标.txt +++ b/flask_app/static/提示词/小解析基本信息工程标.txt @@ -1,15 +1,39 @@ -1.该招标文件的项目名称(或工程名称)是?招标编号(或项目编号)是?招标人是?招标代理机构是?请按json格式给我提供信息,键名分别是'项目名称','招标编号','招标人','招标代理机构',若存在未知信息,在对应的键值中填'未知'。 +1.该招标文件的项目名称是?项目编号(或招标编号)是?招标人(或采购人,采购单位)是?招标代理机构(或采购代理机构)是?请按json格式给我提供信息,键名分别是'项目名称','项目编号','招标人','招标代理机构',若存在未知信息,在对应的键值中填'未知'。 -2.该招标文件的工程概况(或项目概况)是?招标范围是?请按json格式给我提供信息,键名分别为'项目概况','招标范围',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,若存在未知信息,在对应的键值中填'未知'。 +2.该招标文件的项目概况(或工程概况)是?项目基本情况是?请按json格式给我提供信息,键名分别为'项目概况','项目基本情况',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,若存在未知信息,在对应的键值中填'未知'。 -3.该招标文件的招标控制价(或投标限价或预算金额或合同估算价,但非监理费用)是?请按json格式给我提供信息,键名为'招标控制价',若存在未知信息,在对应的键值中填'未知'。 +3.该招标文件的招标控制价(或投标限价或项目预算金额)是?请按json格式给我提供信息,键名为'招标控制价',若存在未知信息,在对应的键值中填'未知'。 -4.投标文件递交截止日期是?请按json格式给我提供信息,键名是'投标文件递交截止日期',若存在未知信息,在对应的键值中填'未知'。 +4.投标文件递交截止日期是?请按json格式给我提供信息,键名是'投标文件递交截止日期',若原文未提及明确日期时间,请返回原文对应的内容,若存在未知信息,在对应的键值中填'未知'。示例输出格式如下: +{ + "投标文件递交截止日期":"以本项目在湖北省政府采购网招标公告为准(北京时间)。" +} -5.招标人和招标代理机构的联系方式是?请按json格式给我提供信息,键名分别是'招标人联系方式','招标代理机构联系方式',若存在嵌套信息,嵌套内容键名以文件中对应字段命名,若存在未知信息,在对应的键值中填'未知'。 +5.招标人(或采购人)和招标代理机构(或采购代理机构)和项目的联系方式是?请按json格式给我提供信息,外层键名分别是'招标人联系方式','招标代理机构联系方式',"项目联系方式",嵌套键名至少包含"名称"和"联系电话",若还有其他字段则添加在后面,若存在未知信息,在对应的键值中填'未知'。示例输出如下: +{ + "招标人联系方式":{ + "名称":"广水市中医医院", + "联系电话":"13972990000", + "地址":"洪山街道" + }, + "招标代理机构联系方式":{ + "名称":"湖北众恒永业工程项目管理有限公司广水分公司", + "联系电话":"13972991234" + }, + "项目联系方式":{ + "名称":"张三", + "联系电话":"未知" + } +} -6.该招标文件的评标结果(或相关信息)公示媒介在哪?请按json格式给我提供信息,键名是'评标结果公示媒介',若存在未知信息,在对应的键值中填'未知'。 +6.该招标文件的信息(如补充说明、评标结果)公示媒介在哪?请按json格式给我提供信息,键名是'信息公示媒介',若存在未知信息,在对应的键值中填'未知'。 -7.该项目的开标时间(或开启时间)和开标地点是?请按json格式给我提供信息,键名为'开标时间'和'开标地点',若原文中没有明确的开标时间,请回答投标文件递交的截止时间,若存在未知信息,在对应的键值中填'未知'。 +7.该项目的开标时间(或开启时间)和开标地点(或开启地点、开启方式)是?请按json格式给我提供信息,键名为'开标时间'和'开标地点',键值为原文中相关内容的表述。 +对于'开标时间',若文中没有明确日期时间却有诸如'同投标截止时间'的表述,则将相关表述返回;若存在未知信息,在对应的键值中填'未知'。 +示例输出如下,仅供格式参考: +{ + "开标时间":"详见湖北省政府采购网公告", + "开标地点":"线上开标" +} 8.请你根据招标文件信息,投标人需要递交的投标保证金(或磋商保证金)是多少?请按json格式给我提供信息,键名为'投标保证金额',键值为原文中的具体金额,如果不需要递交保证金或者金额未知,键值为"其他"。 \ No newline at end of file diff --git a/flask_app/static/提示词/小解析基本信息货物标.txt b/flask_app/static/提示词/小解析基本信息货物标.txt index 3714e0b..8898519 100644 --- a/flask_app/static/提示词/小解析基本信息货物标.txt +++ b/flask_app/static/提示词/小解析基本信息货物标.txt @@ -4,7 +4,7 @@ 3.该招标文件的最高限价(或招标控制价或预算金额)是?请按json格式给我提供信息,键名为'招标控制价',若存在未知信息,在对应的键值中填'未知'。 -4.投标文件(或响应文件)递交截止时间是?请按json格式给我提供信息,键名是'投标文件递交截止日期',键值为原文对应的内容,若存在未知信息,在对应的键值中填'未知'。示例输出格式如下: +4.投标文件(或响应文件)递交截止时间是?请按json格式给我提供信息,键名是'投标文件递交截止日期',若原文未提及明确日期时间,请返回原文对应的内容,若存在未知信息,在对应的键值中填'未知'。示例输出格式如下: { "投标文件递交截止日期":"以本项目在湖北省政府采购网招标公告为准(北京时间)。" } @@ -28,7 +28,9 @@ 6.该招标文件的信息公示媒介在哪?请按json格式给我提供信息,键名是'信息公示媒介',若存在未知信息,在对应的键值中填'未知'。 -7.该项目的开标时间(或开启时间)和开标地点(或开标方式)是?请按json格式给我提供信息,键名为'开标时间'和'开标地点',键值为原文对应的内容,若存在未知信息,在对应的键值中填'未知'。示例输出格式如下: +7.该项目的开标时间(或开启时间)和开标地点(或开标方式)是?请按json格式给我提供信息,键名为'开标时间'和'开标地点',键值为原文中相关内容的表述。 +对于'开标时间',若文中没有明确日期时间却有诸如'同投标截止时间'的表述,则将相关表述返回若存在未知信息,在对应的键值中填'未知'。 +示例输出如下,仅供格式参考: { "开标时间":"以本项目在湖北省政府采购网招标公告为准(北京时间)。", "开标地点":"供应商通过供应商客户端进入江夏区政府采购电子交易系统开标大厅中进行远程开启" diff --git a/flask_app/static/提示词/是否相关问题.txt b/flask_app/static/提示词/是否相关问题.txt index a97c7b7..9e5acfc 100644 --- a/flask_app/static/提示词/是否相关问题.txt +++ b/flask_app/static/提示词/是否相关问题.txt @@ -1,15 +1,16 @@ -1.该招标文件对于分包的要求是怎样的?请按json格式给我提供信息,键名为'分包'。 +1.该招标文件对于分包的要求是怎样的?请按json格式给我提供信息,键名为'分包',若需要以嵌套键值对返回结果,那么嵌套键名为原文中的子标题或是你对相应要求的总结,而对应键值需要完全与原文保持一致。 -2.根据招标文件第二章投标人须知,该项目投标保证金需要缴纳金额是多少?到账截止时间是?缴纳形式是?请按json格式给我提供信息,外层键名为'投标保证金',嵌套键名分别为'缴纳金额','到账截止时间','缴纳形式',若存在多种缴纳形式,则在'缴纳形式'下以各种缴纳形式作为嵌套键名,再在对应的缴纳形式下嵌套写出缴纳步骤或要求或账户信息,请详细回答,不要遗漏原文信息。 +2.该项目的投标保证金(或磋商保证金)的内容或要求是什么?请按json格式给我提供信息,外层键名为"投标保证金"(或"磋商保证金"),若需要以嵌套键值对返回结果,那么嵌套键名为原文中的子标题或是你对相应要求的总结,而对应键值需要完全与原文保持一致。 -3.该招标文件对于投标保证金的退还相关的规章办法是怎样的?请按json格式给我提供信息,键名为'退还投标保证金',若存在嵌套信息,嵌套内容键名以文档中对应字段命名。 +3.该招标文件对于投标保证金的退还相关的规章办法是怎样的?请按json格式给我提供信息,键名为'退还投标保证金',示例输出格式如下: +{ + "退还投标保证金":"投标保证金的退还按《xxx》相关条款执行。" +} -4.根据投标人须知前附表,该项目对于履约保证金(担保)的要求中,它的履约担保形式是怎样的?它的履约担保金额是多少?请按json格式给我提供信息,外层键名为'履约保证金',嵌套键名分别是'履约担保形式','担保金额',若存在多种履约担保形式,则在'履约担保形式'下以各种履约担保形式作为嵌套键名,若存在未知信息,在对应的键值中填'未知'。 +4.该项目对于履约保证金(履约担保)的内容或要求是怎样的,请按json格式给我提供信息,外层键名为"履约保证金",若需要以嵌套键值对返回结果,那么嵌套键名为原文中的子标题或是你对相应要求的总结,而对应键值需要完全与原文保持一致。 -5.本项目的招标代理服务费由谁支付?支付标准是什么?支付方式是什么?支付时间是什么?请按json格式给我提供信息,外层键名为'招标代理服务费',嵌套键名分别是'支付人','支付标准','支付方式','支付时间',若存在未知信息,在对应的键值中填'未知'。 +5.本项目的招标代理服务费(或中标服务费、成交服务费、采购代理服务费)的相关内容是怎样的,请按json格式给我提供信息,外层键名为'招标代理服务费',若需要以嵌套键值对返回结果,那么嵌套键名为原文中的子标题或是你对相应要求的总结,而对应键值需要完全与原文保持一致。 -6.该招标文件对于踏勘现场是怎样的,踏勘时间和踏勘集中地点是?请以json格式给我提供信息,外层键名为'踏勘现场',嵌套键名分别是'踏勘时间','踏勘地点',若存在其他信息,新增嵌套键名'备注',填入其中,若存在未知信息,在对应的键值中填'未知'。 +6.该招标文件对于踏勘现场的内容或要求是怎样的,请按json格式给我提供信息,外层键名为"踏勘现场",若需要以嵌套键值对返回结果,那么嵌套键名为原文中的子标题或是你对相应要求的总结,而对应键值需要完全与原文保持一致。 -7.该招标文件对于投标预备会内容是怎样的,召开时间和召开地点是?请以json格式给我提供信息,外层键名为'投标预备会',嵌套键名分别是'召开时间','召开地方',若存在其他信息,新增嵌套键名'备注',填入其中,若存在未知信息,在对应的键值中填'未知'。 - -8.本项目可偏离的项目和范围是怎样的?请以json格式给我提供信息,外层键名为'偏离'。 \ No newline at end of file +7.该招标文件对于投标预备会(或投标答疑会)内容是怎样的,请按json格式给我提供信息,外层键名为"投标预备会"(或"投标答疑会"),若需要以嵌套键值对返回结果,那么嵌套键名为原文中的子标题或是你对相应要求的总结,而对应键值需要完全与原文保持一致。 diff --git a/flask_app/static/提示词/是否相关问题qianwen-long.txt b/flask_app/static/提示词/是否相关问题qianwen-long.txt deleted file mode 100644 index 578b788..0000000 --- a/flask_app/static/提示词/是否相关问题qianwen-long.txt +++ /dev/null @@ -1,18 +0,0 @@ -1.该招标文件对于分包的要求是怎样的?请按json格式给我提供信息,键名为'分包'。 - -2.根据招标文件第二章投标人须知,该项目投标保证金的内容或要求是什么?请按json格式给我提供信息,外层键名为"投标保证金",若需要以嵌套键值对返回结果,那么嵌套键名为你对相应要求的总结,而对应键值需要完全与原文保持一致。 - -3.该招标文件对于投标保证金的退还相关的规章办法是怎样的?请按json格式给我提供信息,键名为'退还投标保证金',若存在嵌套信息,嵌套内容键名以文档中对应字段命名。示例格式如下: -{ - "退还投标保证金":"投标保证金的退还按《xxx》相关条款执行。" -} - -4.根据投标人须知前附表,该项目对于履约保证金(履约担保)的内容或要求是怎样的,请按json格式给我提供信息,外层键名为"履约保证金",若需要以嵌套键值对返回结果,那么嵌套键名为你对相应要求的总结,而对应键值需要完全与原文保持一致。 - -5.本项目的招标代理服务费(或中标服务费、成交服务费)的相关内容是怎样的,请按json格式给我提供信息,外层键名为'招标代理服务费',若需要以嵌套键值对返回结果,那么嵌套键名为你对相应要求的总结,而对应键值需要完全与原文保持一致。 - -6.该招标文件对于踏勘现场的内容或要求是怎样的,请按json格式给我提供信息,外层键名为"踏勘现场",若需要以嵌套键值对返回结果,那么嵌套键名为你对相应要求的总结,而对应键值需要完全与原文保持一致。 - -7.该招标文件对于投标预备会(或投标答疑会)内容是怎样的,请按json格式给我提供信息,外层键名为"投标预备会"(或"投标答疑会"),若需要以嵌套键值对返回结果,那么嵌套键名为你对相应要求的总结,而对应键值需要完全与原文保持一致。 - -8.本项目可偏离的项目和范围是怎样的?请以json格式给我提供信息,外层键名为'偏离',若需要以嵌套键值对返回结果,那么嵌套键名为你对相应要求的总结,而对应键值需要完全与原文保持一致。 \ No newline at end of file diff --git a/flask_app/static/提示词/是否相关问题货物标.txt b/flask_app/static/提示词/是否相关问题货物标.txt deleted file mode 100644 index 41c9171..0000000 --- a/flask_app/static/提示词/是否相关问题货物标.txt +++ /dev/null @@ -1,13 +0,0 @@ -1.该招标文件对于分包的要求是怎样的?请按json格式给我提供信息,键名为'分包',若需要以嵌套键值对返回结果,那么嵌套键名为你对相应要求的总结,而对应键值需要完全与原文保持一致。。 - -2.根据招标文件第二章投标人须知,该项目投标保证金(或磋商保证金)的内容或要求是什么?请按json格式给我提供信息,外层键名为"投标保证金"(或"磋商保证金"),若需要以嵌套键值对返回结果,那么嵌套键名为你对相应要求的总结,而对应键值需要完全与原文保持一致。 - -3.该招标文件对于投标保证金的退还相关的规章办法是怎样的?请按json格式给我提供信息,键名为'退还投标保证金',若存在嵌套信息,嵌套内容键名以文档中对应字段命名。 - -4.根据投标人须知前附表,该项目对于履约保证金(担保)的内容或要求是怎样的,请按json格式给我提供信息,外层键名为"履约保证金",若需要以嵌套键值对返回结果,那么嵌套键名为你对相应要求的总结,而对应键值需要完全与原文保持一致。 - -5.本项目的招标代理服务费(或中标服务费、成交服务费、采购代理服务费)的相关内容是怎样的,请按json格式给我提供信息,外层键名为'招标代理服务费',若需要以嵌套键值对返回结果,那么嵌套键名为你对相应要求的总结,而对应键值需要完全与原文保持一致。 - -6.该招标文件对于踏勘现场的内容或要求是怎样的,请按json格式给我提供信息,外层键名为"踏勘现场",若需要以嵌套键值对返回结果,那么嵌套键名为你对相应要求的总结,而对应键值需要完全与原文保持一致。 - -7.该招标文件对于投标预备会(或投标答疑会)内容是怎样的,请按json格式给我提供信息,外层键名为"投标预备会"(或"投标答疑会"),若需要以嵌套键值对返回结果,那么嵌套键名为你对相应要求的总结,而对应键值需要完全与原文保持一致。 diff --git a/flask_app/static/提示词/第三章提示词.txt b/flask_app/static/提示词/第三章提示词.txt deleted file mode 100644 index eded0d8..0000000 --- a/flask_app/static/提示词/第三章提示词.txt +++ /dev/null @@ -1,149 +0,0 @@ -资格评审-》商务文件: -资质要求、财务要求、业绩要求、主要人员要求、信誉要求 - - - -3. 投标人资格要求 -3.1 资格要求: -(1)本次招标要求投标申请人必须是在中华人民共和国境内注册,并具有独立法人资格的有 -效营业执照、组织机构代码证、税务登记证(或多证合一)。 -(2)投标人必须具备国家行政主管部门核发的工程监理综合资质或房屋建筑工程监理资质甲 -级资质。 -(3)投标人拟派总监理工程师须具备房屋建筑专业注册监理工程师执业资格、工程类相关专 -业的高级及以上职称,并在本单位注册,须提供无在监项目承诺函。 -3.2 业绩要求 -(1) 投标人 2017 年 12 月 1 日至今至少承接过 1 项施工合同投资金额达 1 亿元及以上的房 -屋建筑工程监理业绩 ,并在人员、设备、资金等方面具有相应的监理能力。 -(2)拟派项目总监理工程师 2017 年 12 月 1 日至今至少承接 1 项施工合同投资金额达 1 亿元 -及以上的房屋建筑工程监理业绩。 -3.3 财务能力要求 -(1)提供近三年(2019、2020、2021 年)财务审计报告(新成立的公司需提供自成立之日起 -相应年度的财务审计报告),且近 3 年均无亏损(新成立的公司自成立之日起年度起)。 -3.5 本次招标(接受或不接受)联合体投标:不接受。 - -资质条件:见本章附件 -主要人员要求:见本章附件 -信誉要求:见本章附件 -其他要求:见本章附件 - - -1.4 投标人资格要求(适用于未进行资格预审的) -1.4.1 投标人应具备承担本标段监理的资质条件、能力和信誉。 -(1)资质条件:见投标人须知前附表; -(2)主要人员要求:见投标人须知前附表; -(3)信誉要求:见投标人须知前附表; -(4)其他要求:见投标人须知前附表。 - - - -基本信息: -工程名称(项目名称)是?招标编号是?招标人是?招标代理机构是?投标文件(递交)截止日期是?招标范围是?招标限价(工程、投资概算)是多少?投标保证金是多少? -请以键值对的形式给出回答,要求简洁准确,不多余 - - -##资格评审:(在第二章附件:投标人资质条件、能力和信誉(资格审查标准)表中) - -营业执照:具备有效的营业执照 - -安全生产许可证:具备有效的安全生产许可证 - -资质要求: -该招标文件对于投标人的资质条件(等级)是怎样的,要求给出完整资质要求内容、需要提交的证明材料,并按json格式给我提供信息,外层键名为'资质条件',对于各个'资质条件',嵌套键名为'内容'和'证明材料',若存在未知信息,在对应的键值中填'未知',不要回答有关业绩要求、财务要求、主要人员要求、信誉要求的内容。 - -业绩要求: -该招标文件对于投标人的业绩要求是怎样的,至少需要包含业绩时间范围、业绩内容(如有)、金额要求(如有)、需要提交的证明材料、备注(其他关于业绩要求的内容,如有),请按json格式给我提供信息,最外层键名为'业绩要求',若相关要求不存在,则在对应的键值中填'未知'。 - -财务要求: -该招标文件对于投标人的财务要求是怎样的,要求给出财务报告的时间范围、营收(若利润)要求、需要提交的证明材料、备注(其他关于财务要求的内容,如有),请按json格式给我提供信息,最外层键名为'财务要求',若相关要求不存在,则在对应的键值中填'未知'。 - -信誉要求: -该招标文件对于投标人的信誉要求是怎样的。请按json格式给我提供信息,键名为'信誉要求',对于各个'信誉要求',嵌套键名为'内容'和'证明材料',若存在未知信息,在对应的键值中填'未知',不要回答无关信誉要求的内容。 - -(存在问题)主要人员要求: -该招标文件对于投标人的项目经理(监理)和技术负责人的要求是怎样的,请依次给出需要的数量、资格要求、需要提交的证明材料(如具体的社保证明、技能证书等,若有时间要求请注明时间范围)、在岗要求、备注(除上述要求外文档中提及的其他关于项目经理(监理)和技术负责人要求的信息),以json的形式给出,若相关要求不存在,则以“未知”填充。 - -该招标文件对于项目管理机构中除项目经理和技术负责人外的其他人员要求是怎样的,请依次给出所需的岗位、对应的数量、资格要求、需要提交的证明材料(如具体的社保证明、技能证书等,若有时间要求请注明时间范围)、在岗要求、备注(除上述要求外文档中提及的其他关于人员要求的信息),以json的形式给出,若相关要求不存在,则以“未知”填充。 - -是否有'施工机械设备'和'企业信息登记' -该招标文件对于'施工机械设备'和'企业信息登记'的要求是怎样的,请按json格式给我提供信息,若存在未知信息,在对应的键值中填'未知'。 - - -(需要与第一章对应)联合体投标: -该招标文件是否接受联合体投标? -该招标文件对于联合体投标的要求是怎样的,请按json格式给我提供信息,外层键名为'联合体投标要求'。 - -(需跳转)禁止投标的情形: -在资格审查中,该招标文件规定的投标人不得存在的情形有哪些,请按json格式给我提供信息,键名为'禁止投标的情形'。 - -根据该招标文件的第三章评标办法前附表,对投标文件的评分分值构成是?请以json的格式返回。如果没有评分分值构成,请回答我该文件对投标文件评分标准是?这里的标准不需要具体展开。 - - -##形式评审: -该招标文件的形式评审标准是怎样的?以n行3列表格形式给出,表头为序号、评审因素和评审标准,不要回答有关资格评审标准、响应性评审标准相关的内容,尽量用原文内容进行表述。 - - -## 响应性评审 -该招标文件的响应性评审标准是怎样的?以n行3列表格形式给出,表头为序号、评审因素和评审标准,不要回答有关资格评审标准、形式评审标准相关的内容,尽量用原文内容进行表述。 - -prompt=""" -# 角色 -你是一个文档处理专家,专门负责理解和操作基于特定内容的文档任务,这包括解析、总结、搜索或生成与给定文档相关的各类信息。 - -## 技能 -### 技能 1:文档解析与摘要 -- 深入理解并分析${documents}的内容,提取关键信息。 -- 根据需求生成简洁明了的摘要,保持原文核心意义不变。 - -### 技能 2:信息检索与关联 -- 在${documents}中高效检索特定信息或关键词。 -- 能够识别并链接到文档内部或外部的相关内容,增强信息的连贯性和深度。 - -## 限制 -- 所有操作均需基于${documents}的内容,不可超出此范围创造信息。 -- 在处理敏感或机密信息时,需遵守严格的隐私和安全规定。 -- 确保所有生成或改编的内容逻辑连贯,无误导性信息。 - -请注意,上述技能执行时将直接利用并参考${documents}的具体内容,以确保所有产出紧密相关且高质量。 -""" - - -投标内容==招标范围、监理服务期、监理工作范围、投标有效期、投标保证金、算术错误修正、投标价格(报价)、其他、工期、工程质量==(质量,质量标准)、权利义务、已标价工程量清单、技术标准和要求、招标人不能接受的条件、分包计划、重大偏差 - -user_query = ( - """ - 根据该文档中的评标办法前附表,请你列出该文件的技术评分,商务评分,投标报价评审以及它们对应的具体评分要求,请以json格式返回结果,请在这三大块评分中分别用若干键值对表示具体要求,请精确到具体的评审项,内层的键名为'评分'及'要求',若这三大块评分中存在其他信息,则在相应评分大块内部新增键名'备注'存放该信息,键值为具体的要求,否则不需要。如果评分内容(因素)不是这3个,则返回文档中给定的评分内容(因素)以及它们的具体评分要求,如果该采购活动有多个包,则最外层键名为对应的包名,否则不需要。不要回答有关资格审查的内容,若存在未知信息,填充'未知'。以下为示例输出,仅供格式参考: - { - "一包": { - "技术评分": { - "主要监理岗位的职责": { - "评分": "4分", - "要求": "1、总监理工程师的职责全面、清晰、合理得 1.2-2分;一般的1.2分。2、其他主要监理人员及岗位的职责全面、清晰、合理得 1.2-2分;一般的 1.2分。" - }, - "备注": "注:若不满足“与公安部、省公安厅、随州市公安局高清视频会议系统无缝对接互联互通”的要求,则本项技术部分(50分)不得分。" - }, - "商务评分": { - "控制系统内主板": { - "评分": "10分", - "要求": "所投电梯控制系统内主板为制造商原厂原品牌制造生产且为进口部件得 10分。(提供进口部件报关单及原产地证明扫描件加盖公章,否则不得分)" - }, - "制造商技术实力": [ - { - "评分": "3分", - "要求": "一级证书得3分,二级证书得1分,其他不得分" - }, - { - "评分": "2分", - "要求": "行业销量排名连续前 2 名,得 2 分,第 4-6 名得 0.5 分,其他不得分" - } - ] - }, - "投标报价评审": { - "投标报价是否出现违反计价规范": { - "评分": "合格/不合格", - "要求": "A:投标报价未违反计价规范的,评审意见为“合格”;B:投标报价违反计价规范的,评审意见为“不合格”" - } - } - } - } - """ - ) \ No newline at end of file diff --git a/flask_app/工程标/判断是否分包等.py b/flask_app/工程标/判断是否分包等.py index 5410b31..b38bd5b 100644 --- a/flask_app/工程标/判断是否分包等.py +++ b/flask_app/工程标/判断是否分包等.py @@ -129,14 +129,6 @@ def merge_json_to_list(merged,tobidders_notice=""): meeting_processed = True merged.pop(preparation_key, None) - # 处理是否允许偏离 - if merged.get('是否允许偏离') == '是': - chosen_numbers.append(8) - merged.pop('是否允许偏离', None) - elif merged.get('是否允许偏离') == '否': - merged['偏离'] = '不允许' - merged.pop('是否允许偏离', None) - #11.12这里有问题,正文部分的信息重要性不高,而且这里的key不好设置,先注释了 # # 初始化 questions_list # questions_list = [] diff --git a/flask_app/工程标/基础信息整合工程标.py b/flask_app/工程标/基础信息整合工程标.py index d58f377..ee27534 100644 --- a/flask_app/工程标/基础信息整合工程标.py +++ b/flask_app/工程标/基础信息整合工程标.py @@ -3,103 +3,12 @@ import json import time import concurrent.futures from flask_app.general.json_utils import clean_json_string, add_outer_key -from flask_app.general.通用功能函数 import judge_consortium_bidding, process_judge_questions +from flask_app.general.通用功能函数 import judge_consortium_bidding, process_judge_questions, aggregate_basic_info from flask_app.工程标.投标人须知正文提取指定内容工程标 import extract_from_notice from flask_app.工程标.判断是否分包等 import read_questions_from_judge, merge_json_to_list from flask_app.general.多线程提问 import read_questions_from_file, multi_threading from flask_app.general.通义千问long import upload_file,qianwen_long - -def aggregate_basic_info_engineering(baseinfo_list): - """ - 将基础信息列表中的数据进行合并和分类。 - - 参数: - - baseinfo_list (list): 包含多个基础信息的列表。 - - 返回: - - dict: 合并和分类后的基础信息字典。 - """ - key_groups = { - "招标人/代理信息": ["招标人", "招标人联系方式", "招标代理机构", "招标代理机构联系方式"], - "项目信息": ["项目名称", "招标编号", "项目概况", "招标范围", "招标控制价", "投标竞争下浮率"], - "关键时间/内容": [ - "投标文件递交截止日期", - "投标文件递交方式", - "开标时间", - "开标地点", - "投标人要求澄清招标文件的截止时间", - "投标有效期", - "评标结果公示媒介" - ], - "保证金相关": ["退还投标保证金","质量保证金"], - "其他信息": [ - "重新招标、不再招标和终止招标", - "投标费用承担", - "招标代理服务费", - "是否退还投标文件", - ] - } - - combined_data = {} - relevant_keys_detected = set() - - # 合并所有基础信息并收集相关键 - for baseinfo in baseinfo_list: - combined_data.update(baseinfo) - relevant_keys_detected.update(baseinfo.keys()) - - # 动态调整键组 - dynamic_key_handling(key_groups, relevant_keys_detected) - - # 创建一个副本以存储未分类的项目 - unclassified_items = {k: v for k, v in combined_data.items() if - k not in [item for sublist in key_groups.values() for item in sublist]} - - # 按键组分类并嵌套 - for group_name, keys in key_groups.items(): - group_data = {key: combined_data.get(key, "未提供") for key in keys} - combined_data[group_name] = group_data - # 从 unclassified_items 中移除已分类的键 - for key in keys: - unclassified_items.pop(key, None) - - # 将剩余未分类的键值对添加到 "其他信息" 组 - combined_data["其他信息"].update(unclassified_items) - - # 移除顶层的未分类键值对 - for key in list(combined_data.keys()): - if key not in key_groups: - del combined_data[key] - - return combined_data - - -def dynamic_key_handling(key_groups, detected_keys): - # 检查和调整键组配置 - for key in detected_keys: - # 处理“保证金相关”组,插到"质量保证金"前 - if "保证金" in key: - group = key_groups["保证金相关"] - insert_before = "退还投标保证金" - if insert_before in group: - index = group.index(insert_before) - if key not in group: # 避免重复插入 - group.insert(index, key) - else: - group.append(key) # 如果没有找到特定键,则追加到末尾 - elif "联合体" in key: - key_groups["项目信息"].append(key) - elif "分包" in key: - key_groups["项目信息"].append(key) - elif "踏勘现场" in key: - key_groups["其他信息"].append(key) - elif "投标预备会" in key: - key_groups["其他信息"].append(key) - elif "偏离" in key: - key_groups["其他信息"].append(key) - - def update_baseinfo_lists(baseinfo_list1, baseinfo_list2): # 创建一个字典,用于存储 baseinfo_list1 中的所有键值对 combined_dict = {} @@ -154,19 +63,19 @@ def combine_basic_info(merged_baseinfo_path,merged_baseinfo_path_more, tobidders 返回: - dict: 综合后的基础信息。 """ - # baseinfo_prompt_file_path=r'D:\flask_project\flask_app\static\提示词\基本信息工程标qianwen-long.txt' - baseinfo_prompt_file_path = 'flask_app/static/提示词/基本信息工程标qianwen-long.txt' + # baseinfo_prompt_file_path=r'D:\flask_project\flask_app\static\提示词\基本信息工程标.txt' + baseinfo_prompt_file_path = 'flask_app/static/提示词/基本信息工程标.txt' file_id = upload_file(merged_baseinfo_path) questions = read_questions_from_file(baseinfo_prompt_file_path) - more_query = "请你根据招标文件信息,回答以下问题:是否组织踏勘现场?是否召开投标预备会?是否允许偏离?是否退还投标文件?是否允许分包? 是否需要递交投标保证金?是否需要提交履约保证金(履约担保)?是否有招标代理服务费?请按json格式给我提供信息,键名分别为'是否组织踏勘现场','是否召开投标预备会','是否允许偏离','是否退还投标文件',是否允许分包','是否递交投标保证金','是否提交履约保证金','是否有招标代理服务费',键值仅限于'是','否','未知',若存在矛盾信息,请回答'未知'。" + more_query = "请你根据招标文件信息,回答以下问题:是否组织踏勘现场?是否召开投标预备会(或投标答疑会)?是否退还投标文件?是否允许分包? 是否需要递交投标保证金?是否需要提交履约保证金(履约担保)?是否有招标代理服务费?请按json格式给我提供信息,键名分别为'是否组织踏勘现场','是否召开投标预备会','是否退还投标文件',是否允许分包','是否递交投标保证金','是否提交履约保证金','是否有招标代理服务费',键值仅限于'是','否','未知',若存在矛盾信息,请回答'未知'。" questions.append(more_query) baseinfo_results = multi_threading(questions, "", file_id, 2) baseinfo_list1 = [clean_json_string(res) for _, res in baseinfo_results] if baseinfo_results else [] - chosen_numbers, merged = merge_json_to_list(baseinfo_list1.pop(),tobidders_notice) + chosen_numbers, merged = merge_json_to_list(baseinfo_list1.pop()) baseinfo_list1_copy = copy.deepcopy(baseinfo_list1) baseinfo_list1.append(merged) - # judge_file_path=r'D:\flask_project\flask_app\static\提示词\是否相关问题qianwen-long.txt' - judge_file_path = 'flask_app/static/提示词/是否相关问题qianwen-long.txt' + # judge_file_path=r'D:\flask_project\flask_app\static\提示词\是否相关问题.txt' + judge_file_path = 'flask_app/static/提示词/是否相关问题.txt' with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor: # 提交两个任务 @@ -182,7 +91,7 @@ def combine_basic_info(merged_baseinfo_path,merged_baseinfo_path_more, tobidders updated_list = update_baseinfo_lists(baseinfo_list1, baseinfo_list2) update_json = add_outer_key(rebidding_situation, "重新招标、不再招标和终止招标") updated_list.append(update_json) - aggregated_baseinfo = aggregate_basic_info_engineering(updated_list) + aggregated_baseinfo = aggregate_basic_info(updated_list) return {"基础信息": aggregated_baseinfo} diff --git a/flask_app/货物标/基础信息解析货物标版.py b/flask_app/货物标/基础信息解析货物标版.py index c037a5f..9a32e15 100644 --- a/flask_app/货物标/基础信息解析货物标版.py +++ b/flask_app/货物标/基础信息解析货物标版.py @@ -4,7 +4,7 @@ import threading import time import concurrent.futures from flask_app.general.json_utils import clean_json_string, add_outer_key -from flask_app.general.通用功能函数 import judge_consortium_bidding, process_judge_questions +from flask_app.general.通用功能函数 import judge_consortium_bidding, process_judge_questions, aggregate_basic_info from flask_app.general.多线程提问 import read_questions_from_file, multi_threading from flask_app.general.通义千问long import upload_file from flask_app.工程标.判断是否分包等 import merge_json_to_list, read_questions_from_judge @@ -12,126 +12,6 @@ from flask_app.货物标.投标人须知正文提取指定内容货物标版 imp from flask_app.货物标.提取采购需求main import fetch_procurement_reqs -def aggregate_basic_info_goods(baseinfo_list): - # for i in baseinfo_list: - # print(json.dumps(i,ensure_ascii=False,indent=4)) - """ - 将基础信息列表中的数据进行合并和分类。 - - 参数: - - baseinfo_list (list): 包含多个基础信息的列表。 - - 返回: - - dict: 合并和分类后的基础信息字典。 - """ - key_groups = { - "招标人/代理信息": ["招标人", "招标人联系方式", "招标代理机构", "招标代理机构联系方式","项目联系方式"], - "项目信息": ["项目名称", "项目编号", "项目概况", "项目基本情况", "招标控制价", "投标竞争下浮率"], - "采购要求": ["采购需求","技术要求","服务要求","商务要求","其他要求"], - "关键时间/内容": [ - "投标文件递交截止日期", - "开标时间", - "开标地点", - "澄清招标文件的截止时间", - "投标有效期", - "信息公示媒介" - ], - "保证金相关": ["质量保证金"], - "其他信息": [ - "重新招标、不再招标和终止招标", - "投标费用承担", - "招标代理服务费", - "是否退还投标文件" - ] - } - - combined_data = {} - relevant_keys_detected = set() - - # 合并所有基础信息并收集相关键 - for baseinfo in baseinfo_list: - combined_data.update(baseinfo) - relevant_keys_detected.update(baseinfo.keys()) - - # 动态调整键组 - dynamic_key_handling(key_groups, relevant_keys_detected) - - # 创建一个副本以存储未分类的项目 - unclassified_items = {k: v for k, v in combined_data.items() if - k not in [item for sublist in key_groups.values() for item in sublist]} - - # 按键组分类并嵌套 - for group_name, keys in key_groups.items(): - group_data = {key: combined_data.get(key, "未提供") for key in keys} - combined_data[group_name] = group_data - # 从 unclassified_items 中移除已分类的键 - for key in keys: - unclassified_items.pop(key, None) - - # 将剩余未分类的键值对添加到 "其他信息" 组中 - combined_data["其他信息"].update(unclassified_items) - - # 移除顶层的未分类键值对 - for key in list(combined_data.keys()): - if key not in key_groups: - del combined_data[key] - - return combined_data - -def dynamic_key_handling(key_groups, detected_keys): - # 检查和调整键组配置 - for key in detected_keys: - if "技术、服务要求" in detected_keys: - # 如果检测到“技术、服务要求”,则移除“技术要求”和“服务要求” - if "技术要求" in key_groups["采购要求"]: - key_groups["采购要求"].remove("技术要求") - if "服务要求" in key_groups["采购要求"]: - key_groups["采购要求"].remove("服务要求") - # 确保"技术、服务要求"存在于"采购要求"组中 - if "技术、服务要求" not in key_groups["采购要求"]: - key_groups["采购要求"].insert(1, "技术、服务要求") - else: - # 如果不存在“技术、服务要求”,确保“技术要求”和“服务要求”都在"采购要求"组中 - if "技术要求" not in key_groups["采购要求"]: - key_groups["采购要求"].insert(1, "技术要求") - if "服务要求" not in key_groups["采购要求"]: - key_groups["采购要求"].insert(2, "服务要求") - # 移除"技术、服务要求"以保持互斥 - if "技术、服务要求" in key_groups["采购要求"]: - key_groups["采购要求"].remove("技术、服务要求") - # 处理“保证金相关”组 - if "保证金" in key: - group = key_groups["保证金相关"] - insert_before = "质量保证金" - if insert_before in group: - index = group.index(insert_before) - if key not in group: # 避免重复插入 - group.insert(index, key) - else: - group.append(key) # 如果没有找到特定键,则追加到末尾 - elif "联合体" in key: - key_groups["项目信息"].append(key) - elif "分包" in key: - key_groups["项目信息"].append(key) - elif "踏勘现场" in key: - key_groups["其他信息"].append(key) - elif "投标预备会" in key or "投标答疑会" in key: - key_groups["其他信息"].append(key) - elif "偏离" in key: - key_groups["其他信息"].append(key) - elif "递交方式" in key or "递交地点" in key: - group = key_groups["关键时间/内容"] - insert_after = "投标文件递交截止日期" - if insert_after in group: - index = group.index(insert_after) - # 确保新键不重复 - if key not in group: - group.insert(index + 1, key) - else: - # 如果“投标文件递交截止日期”不存在,则追加到末尾 - if key not in group: - group.append(key) - def get_base_info(merged_baseinfo_path,clause_path): file_id = upload_file(merged_baseinfo_path) baseinfo_file_path='flask_app/static/提示词/基本信息货物标.txt' @@ -143,8 +23,8 @@ def get_base_info(merged_baseinfo_path,clause_path): baseinfo_list = [clean_json_string(res) for _, res in baseinfo_results] if baseinfo_results else [] chosen_numbers, merged = merge_json_to_list(baseinfo_list.pop()) baseinfo_list.append(merged) - judge_file_path = 'flask_app/static/提示词/是否相关问题货物标.txt' - # judge_file_path =r'D:\flask_project\flask_app\static\提示词\是否相关问题货物标.txt' + judge_file_path = 'flask_app/static/提示词/是否相关问题.txt' + # judge_file_path =r'D:\flask_project\flask_app\static\提示词\是否相关问题.txt' with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor: # 提交两个任务 future1 = executor.submit(process_judge_questions, judge_file_path, chosen_numbers, file_id, @@ -183,7 +63,7 @@ def combine_basic_info(merged_baseinfo_path, procurement_path,clause_path,invali # 合并结果 baseinfo_list += temp_list # temp_list 是一个列表 baseinfo_list.append(procurement_reqs) # procurement_reqs 是一个字典 - aggregated_baseinfo = aggregate_basic_info_goods(baseinfo_list) + aggregated_baseinfo = aggregate_basic_info(baseinfo_list) return {"基础信息": aggregated_baseinfo}