2023-12-15 17:33:54 +08:00
|
|
|
|
import json
|
|
|
|
|
from typing import Dict, List
|
|
|
|
|
|
|
|
|
|
from knext.operator.op import PromptOp
|
|
|
|
|
from knext.operator.spg_record import SPGRecord
|
|
|
|
|
|
|
|
|
|
|
2023-12-21 17:38:20 +08:00
|
|
|
|
class IndicatorLOGIC(PromptOp):
|
2023-12-15 17:33:54 +08:00
|
|
|
|
template = """
|
|
|
|
|
请根据给定文本和文本中的指标及其指标关系,梳理逻辑链,以json格式输出
|
|
|
|
|
#####
|
|
|
|
|
输出格式:
|
2023-12-21 17:38:20 +08:00
|
|
|
|
[{"subject": "XXX", "predicate": "顺承", "object": ["XXX", "XXX"]}, {"subject": "XXX", "predicate": "顺承", "object": ["XXX", "XXX"]}]
|
2023-12-15 17:33:54 +08:00
|
|
|
|
文本:
|
2023-12-21 17:38:20 +08:00
|
|
|
|
${input}
|
2023-12-15 17:33:54 +08:00
|
|
|
|
指标:
|
2023-12-21 17:38:20 +08:00
|
|
|
|
${ner}
|
2023-12-15 17:33:54 +08:00
|
|
|
|
指标关系:
|
2023-12-21 17:38:20 +08:00
|
|
|
|
${rel}
|
2023-12-15 17:33:54 +08:00
|
|
|
|
"""
|
|
|
|
|
|
2023-12-21 17:38:20 +08:00
|
|
|
|
def build_prompt(self, variables: Dict[str, str]):
|
2023-12-15 17:33:54 +08:00
|
|
|
|
"""
|
|
|
|
|
record: {
|
|
|
|
|
"input": "济南市财政收入质量及自给能力均较好,但土地出让收入大幅下降致综合财力明显下滑。济南市财政收入质量及自给能力均较好,但土地出让收入大幅下降致综合
|
|
|
|
|
财力明显下滑。2022年济南市一般公共预算收入1,000.21亿元,扣除留 抵退税因素后同比增长8%,规模在山东省下辖地市中排名第2位;其中税收收入690.31亿元,税收占比69.02%;一般公共 预算支出1,260.23亿元,财政自给率79.37%。政
|
|
|
|
|
府性基金收入547.29亿元,同比大幅下降48.38%,主要系土地出让收入 同比由966.74亿元降至453.74亿元;转移性收入285.78亿元(上年同期为233.11亿元);综合财力约1,833.28亿元(上年 同期为2,301.02亿元)。"
|
|
|
|
|
"ner": "[{'财政': ['财政收入质量', '财政自给能力', '土地出让收入', '一般公共预算收入', '留抵退税', '税收收入', '税收收入/一般公共预算收入', '一般公共预算支出', '财政自给率', '政府性基金收入', '转移性收入', '综合财力']}]",
|
|
|
|
|
"rel": "[{'subject': '一般公共预算收入', 'predicate': '包含', 'object': ['税收收入']}, {'subject': '税收收入', 'predicate': '包含', 'object': ['留抵退税']}, {'subject': '政府性基金收入', 'predicate': '包含', 'object': ['土地出让收入', '转移性收入']}, {'subject': '综合财力', 'predicate': '包含', 'object': ['一般公共预算收入', '政府性基金收入']}]",
|
|
|
|
|
"id": "财政",
|
|
|
|
|
"name": "财政",
|
|
|
|
|
"hasA": "财政收入质量,财政自给能力,土地出让收入....."
|
|
|
|
|
}
|
|
|
|
|
"""
|
2023-12-21 17:38:20 +08:00
|
|
|
|
return self.template\
|
|
|
|
|
.replace("${input}", variables.get("input"))\
|
|
|
|
|
.replace("${ner}", variables.get("ner"))\
|
|
|
|
|
.replace("${rel}", variables.get("rel"))
|
2023-12-15 17:33:54 +08:00
|
|
|
|
|
|
|
|
|
def parse_response(
|
|
|
|
|
self, response: str
|
|
|
|
|
) -> List[SPGRecord]:
|
|
|
|
|
"""
|
|
|
|
|
response: "[{\"subject\": \"土地出让收入大幅下降\", \"predicate\": \"顺承\", \"object\": [\"综合财力明显下滑\"]}]"
|
|
|
|
|
"""
|
2023-12-22 19:49:39 +08:00
|
|
|
|
print("##########IndicatorLOGIC###########")
|
|
|
|
|
response = "[{\"subject\": \"土地出让收入大幅下降\", \"predicate\": \"顺承\", \"object\": [\"综合财力明显下滑\"]}]"
|
2023-12-15 17:33:54 +08:00
|
|
|
|
output_list = json.loads(response)
|
|
|
|
|
|
|
|
|
|
logic_result = []
|
|
|
|
|
for output in output_list:
|
|
|
|
|
properties = {}
|
|
|
|
|
for k, v in output.items():
|
|
|
|
|
if k == "subject":
|
|
|
|
|
properties["id"] = k
|
|
|
|
|
properties["name"] = k
|
|
|
|
|
elif k == "object":
|
|
|
|
|
properties["causeOf"] = ','.join(v)
|
2023-12-22 19:49:39 +08:00
|
|
|
|
logic_result.append(SPGRecord("Financial.State", properties=properties))
|
2023-12-15 17:33:54 +08:00
|
|
|
|
|
|
|
|
|
return logic_result
|