123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- package prompt
- import (
- "data_ai/ai"
- "data_ai/ul"
- "fmt"
- )
- var pmt_deepseek = `
- # 角色
- 你是一位招投标领域的专家,你需要运用自己的知识从给出的内容中准确抽取出关键信息,避免任何非必要的文本,并以JSON格式输出。若信息缺失,填写"无"。
- # 任务1(信息抽取)
- 部分字段解释(可以根据上下推理):
- 0、结果分隔符统一使用','
- 1、金额不要转换量级,输出可以带单位如xx万元/xx元,中标金额和预算金额如果有说明含税后金额统一使用含税金额
- 2、预算金额说明:预算金额、整体预留项目金额、最高限价、招标预算价格、面向中小企业采购金额、采购计划金额、服务金额。
- - 如果有项目明确对应的预算估算价格、服务金额则优先使用,其次考虑使用项目总投资
- - 区间范围预算,使用最高价格
- 3、中标金额说明:注意招标类型的公告中不会存在中标金额,同样在结果类型,合同类型公告中会以 “中标金额”“成交金额”,“合同金额” ,'第一名候选人总报价'等表述呈现,不可以提取业绩相关的内容。
- - 不存在的结果不能通过其他方式累加计算,不存在则输出“无”
- - 如果只存在一个标的物的单价和数量,那么总价= 单价*数量
- 4、中标单位说明:常见表述为 “中标单位”“中标人”“成交供应商” ,注意:选取的中介服务机构或者直购企业(单位)、入围中标人信息等都是是候选人,需要执行候选人判断逻辑,
- -中标单位其他特例:
- -如果没有明确说明最终中标单位,成交单位、供应商或者联合体中标单位等明确信息,一律按候选人判断
- - 如果只有候选人但是没排名之类的评判标准,默认输出第一个单位名称如:aaa公司,bbb公司,ccc公司-->输出:aaa公司
- - 如果内容中提到了候选人,中标人优先提取顺序为"明确指定中标人">'候选第一名'>“综合评分最高的”>"报价最低的",
- 7、注意:项目备案审批时,主管部门不能作为采购单位,
- 8、注意:采购单位不可以使用人名,所谓的委托人都是公司、企业、事业单位等。审批单位(部门)、招标代理公司不是采购单位
- 10、项目编号(项目代码),招标标号、询价标号、招标编号等,不可以省略特殊符号如:‘<,>’,不要局限于项目编号这四个字
- - 不要使用证书编号、合同编号、订单编号当做项目编号的值
- JSON字段:
- {"任务1":{
- "项目编号":"项目编号",
- "采购单位": "采购单位(项目发布方、项目采购方、甲方、委托人、采购人(公司名称))",
- "中标单位": "中标单位",
- "预算金额": "预算金额",
- "中标金额": "中标金额(如果有多个中标金额,则只取第一个作为输出)",
- "中标金额单位": "中标金额单位",
- "预算金额单位": "预算金额单位",
- }}
- 任务2 (分包提取)
- # 分包任务介绍
- 对于招投标信息,部分项目会被拆分成多个包或标段,现在你需要根据抽取字段要求,从输入的内容提取相应的数据信息并严格输出JSON格式。若字段信息缺失,填写"无"。
- 任务要求:
- - 如果输入内容只有一个项目,那么则输出单个项目对应信息,如果一个项目被拆分成多个,那么输出多个被拆分的包或者标段
- - 注意一个项目中存在多个标的物不能算作多包
- - 注意面向企业采购金额不是中标金额,而是预算金额,不可以使用预算金额填充
- JSON字段:
- {"任务2":{
- "分包信息":[
- {
- "标段名称":(标包名称,通常包含地理区域、专业类别、标包内容描述等内容,不可以填写"标的名称",如果只有一个项目没有被拆分则只输出项目名称,注意同一个项目的多个标的物不算分包),
- "标段/包号":(标包编号,可以来自标段名称,如果不存在写"无",比如:一标段、二标段、包一、I包、I标段、标包一、标包编号等,不可以填写"项目编号"或"标的编号"),
- "中标单位":中标单位,
- "预算金额":预算金额,
- "中标金额":中标金额,
- "中标金额单位":"对应金额的单位,如果不存在输出“无”",
- "预算金额单位":"对应金额的单位,如果不存在输出“无”",
- "项目编号":"项目编号"
- "标段编号":标段编号,
- "合同编号":合同编号,
- },
- ....
- ],
- }}
- # 输入内容:` + "\n" + `%s` + `
- # 合并上面两个任务,输出最终JSON结果(所有特殊符号使用英文符号):
- {
- "任务1":{...},
- "任务2":{...}
- }
- `
- // 获取抽取字段
- func AcquireExtractFieldDeepSeekInfo(detail string) map[string]interface{} {
- content := PromptDeepSeekFieldText(detail, pmt_deepseek)
- res := map[string]interface{}{}
- res = ai.PostDouBaoDSInfo(content)
- return res
- }
- // 提示语构建
- func PromptDeepSeekFieldText(detail string, prompt string) string {
- content := fmt.Sprintf(prompt, detail)
- l := len(content)
- if l > ul.MaxByte {
- detail = truncatedText(detail, len(detail)-(l-ul.MaxByte))
- content = fmt.Sprintf(prompt, detail)
- }
- return content
- }
- // 判断短文本
- func AcquireJudgeDeepSeekShortInfo(detail string) map[string]interface{} {
- content := PromptFieldText(detail, pmt_field_prefix)
- res := map[string]interface{}{}
- res = ai.PostDouBaoDSInfo(content)
- return res
- }
|