package prompt import ( "data_ai/ai" "data_ai/ul" "fmt" qu "jygit.jydev.jianyu360.cn/data_processing/common_utils" ) var pmt_class = ` 你是一个文本处理模型,根据下述信息做"招投标信息分类": 一、信息分类选项:[合同公告;验收公告;违规公告;结果公告;预告公告;招标公告;采购意向公告] 二、信息分类权重(权重由高到低排序):[合同公告;验收公告;违规公告;结果公告;预告公告;招标公告;采购意向公告] 三、信息分类参考资料: 1、合同公告:合同公告是指在招投标结束后,招标人与中标人正式签订合同后发布的公告。它通常包含合同的主要内容、双方的基本信息、合同金额、签订日期等关键信息,旨在公示合同的签订情况,确保招投标活动的透明度和合法性。正文内容中提到了合同编号或者合同的具体内容,表明这是一篇合同公告。请结合列举的“关键词”进行推导,关键词:[合同公示,合同公告,合同备案,合同签订]; 2、验收公告:宣布招标人对项目或服务完成情况进行评估和确认。请结合列举的“关键词”进行推导,关键词:[验收公告,验收报告,验收公示,电子验收单公示,验收结果]; 3、违规公告:宣布参与招投标的任何一方违反相关法律法规或原则。请结合列举的“关键词”进行推导,关键词:[不良记录,行政处罚,不良行为,虚假合同,虚假材料]; 4、结果公告:发布的是招投标公告评选过程或评标结果的信息,还涉及开标记录、结果变更的情况。通常会列出候选人、供应商、中标人、中标金额等信息,包括"候选公告","结果变更公告","成交公告","流标公告","废标公告"这几种类型。请结合列举的"关键词"进行推导,关键词:[评标,得分,工期,项目负责人,开标记录,中标候选,候选人,成交候选,候选入围,成交,成交金额,成交公告,供应商名称,采购结果,中选公告,中选结果,中选金额,流标,取消公告,取消采购,二次流标,比选失败,招标结束,采购程序终止,废标,作废,终止,废止公告,项目终止,招标公告作废,未成交公告,未成交公示,取消成交候选供应商,取消中标候选供应商,结果变更,中标结果变更,废标结果变更,变更中标人,重新公示,重新确认中标结果,重新确定中标人,重新确认中标公告,结果顺延]; 5、预告公告:在招标公告正式开始前,发布资格预审信息、预审评审结果、招投标文件过程中问题的分析和评估意见、招投标项目的具体需求、技术要求等信息。请结合列举的"关键词"进行推导,关键词:[预告,预公告,预公示,资审,资审及业绩公示,参加资格预审,预审邀请,需求调研,调研公告,采购计划,审前公示,预审公告,资格预审,预审公告,招标预审,预审,预审结果,资格预审公示,资审结果,审查结果,论证意见,方案征集公告,审核前公示,专家组论证意见,需求论证公示,征求意见,采购需求,项目需求公示,论证公示,需求评审公告,需求公示,论证意见公示,征求意见,征集意见]; 6、招标公告:招标单位或招标人公布项目的基本信息、标准、招标条件、价格和要求等,邀请符合资格的投标人参与项目投标。根据不同的招标方式和流程,可包括"单一来源公告"、"询价公告"、"竞价公告","邀标公告","竞争谈判公告","招标变更公告"。请结合列举的"关键词"进行推导,关键词:[招标公告,二次招标,招标报名,招标采购,单一来源,单一采购,询价,询价公告,议价采购,询价邀请,竞价,网上竞价,竞价公告,竞价开始(结束),邀请,邀请招标,投标邀请,邀标公告,邀请书,公开邀请,报价邀请,磋商,竞争性谈判,竞争性磋商,磋商公告,招标变更]; 7、采购意向公告:请结合列举的"关键词"进行推导,关键词:[采购意向,意向公告,招标计划,采办计划,预计采购]; 我希望你根据正文内容,仅从"信息分类选项"中选取一个合适的分类。在识别过程中出现多个结果时,按照"信息分类权重"优先选举一个权重大的,并将分类识别结果严格按照下述JSON格式输出。 JSON格式: { "信息分类":"招投标信息分类", "理由":"请给出信息分类结果的理由", } 按照以上要求输出,不要联想,不要无中生有,不要生成解释,对于尚未确定或未明确的信息请在JSON对应的值填写:无 正文内容:` + `%s` + "\n" + `%s` + ` 结果JSON:` // 获取分类信息... func AcquireClassInfo(detail string, title string) (string, string) { top_content := PromptToptypeFieldText(detail, title) top_zp, ok := ai.PostZhiPuClassInfo(top_content) if !ok { return "", "" } //根据一级分类识别,获取toptype和subtype var toptype, subtype string //标准化的一级、二级分类 toptype_ai, _ := top_zp["信息分类"].(string) tpInfo := ul.ToptypeDict[toptype_ai] if tpInfo != nil { toptype = tpInfo.Topetype subtype = tpInfo.Subtype } else { //匹配结果为非正规toptype,如:询价公告(66993a9d66cf0db42a5597af) for top, reg := range ul.ToptypeRegs { if reg.MatchString(toptype_ai) { if tpInfo = ul.ToptypeDict[top]; tpInfo != nil { //ToptypeRegs中预告公告、验收公告、合同公告直接获取subtype toptype = tpInfo.Topetype subtype = tpInfo.Subtype break } } } } if toptype == "" || tpInfo == nil { return "", "" } //获取二级分类 sub_zp := map[string]interface{}{} if subtype == "" { sub_content := PromptSubtypeFieldText(detail, title, toptype, tpInfo) sub_zp, ok = ai.PostZhiPuClassInfo(sub_content) if !ok { return "", "" } subtype_ai, _ := sub_zp["信息分类"].(string) subtype = tpInfo.SubtypeDict[subtype_ai] if subtype == "" && tpInfo.SubtypeRegs != nil { //二级分类校正 for sub, reg := range tpInfo.SubtypeRegs { if reg.MatchString(subtype_ai) { subtype = sub break } } } } //subtype到此还可能为空,给默认值 if subtype == "" { subtype = "其它" } return toptype, subtype } // 根据抽取字段校正分类结果 func CheckClassByOtherFileds(toptype_ai, subtype_ai string, data map[string]interface{}) (string, string) { toptype_rule := qu.ObjToString(data["toptype"]) subtype_rule := qu.ObjToString(data["subtype"]) //1、结果类 中标和成交错误校正 s_winner := qu.ObjToString(data["s_winner"]) winnerorder, _ := data["winnerorder"].([]interface{}) if toptype_ai == "结果" && toptype_rule == "结果" { if ((subtype_ai == "中标" || subtype_ai == "其它") && subtype_rule == "成交") || ((subtype_ai == "成交" || subtype_ai == "其它") && subtype_rule == "中标") { if len(winnerorder) > 0 { //有中标候选人->中标 return toptype_ai, "中标" } if s_winner != "" || data["bidamount"] != nil { return toptype_ai, "成交" } } } //2、招标、结果错误校正 if toptype_ai != "结果" && toptype_rule == "结果" { //return toptype_rule,subtype_rule//默认规则为准 if len(winnerorder) > 0 || s_winner != "" || data["bidamount"] != nil { return toptype_rule, subtype_rule } else { return toptype_ai, subtype_ai } } else if toptype_ai == "结果" && toptype_rule != "结果" && (subtype_ai == "中标" || subtype_ai == "成交") { //结果-变更 //return toptype_rule,subtype_rule//默认规则为准 if len(winnerorder) > 0 { //有中标候选人->中标 return toptype_ai, "中标" //这里subtype返回"中标",避免ai识别错误 } else if s_winner != "" || data["bidamount"] != nil { return toptype_ai, "成交" //这里subtype返回"成交",避免ai识别错误 } else { return toptype_ai, subtype_ai } } return toptype_ai, subtype_ai } func PromptToptypeFieldText(detail, title string) string { //1、合同验收违规公告:包含招标人与中标人签订的合同公告,或者宣布招标人对项目、服务完成情况的评估、确认的公告,亦或者宣布参与招投标的任何一方违反法律法规、原则的公告。包括。请结合列举的"关键词"进行推导,关键词:[验收公告,验收报告,验收公示,电子验收单公示,验收结果,合同公示,合同公告,合同备案,合同签订,不良记录,行政处罚,不良行为,虚假合同,虚假材料], content := fmt.Sprintf(pmt_class, title, detail) l := len(content) if l > ul.MaxByte { detail = truncatedText(detail, len(detail)-(l-ul.MaxByte)) content = fmt.Sprintf(pmt_class, title, detail) } return content } func PromptSubtypeFieldText(detail, title, toptype string, tpInfo *ul.TypeInfo) string { content := fmt.Sprintf(tpInfo.SubtypeAiText, title, detail) l := len(content) if l > ul.MaxByte { detail = truncatedText(detail, len(detail)-(l-ul.MaxByte)) content = fmt.Sprintf(tpInfo.SubtypeAiText, title, detail) } return content }