MisDetectorV1 / post.py
You-shen's picture
Create post.py
00274bf verified
Raw
History Blame Contribute Delete
7.56 kB
#-*- coding:utf-8 -*-
import json
from dataclasses import dataclass, field
from typing import List, Dict
from langchain_openai import ChatOpenAI
import os
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
os.environ["OPENAI_API_KEY"] = "sb-6a683cb3bd63a9b72040aa2dd08feff8b68f08a0e1d959f5"
os.environ['OPENAI_BASE_URL'] = "https://api.openai-sb.com/v1/"
llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0.6)
detect_temtemplate="""
对于给定的新闻news,它由若干新闻子句组成。information是与该新闻相关的资料以及有关新闻。\
你的任务是逐个评估这些子句的正确性。\
指导:
评估标准:根据你的知识和提供的information,判断每个子句的正确性。主要依据是information中的信息。\
标记方式:
正确:如果子句在information中有明确支持的证据,标记为'正确'。\
错误:如果子句与information中的信息明显不符,标记为'错误'。\
不确定:如果information中的信息不足以对子句做出明确判断。\
请你一步步思考,谨慎回答。\
简化审查:对于无关紧要的词汇或修饰,不必过于拘泥,重点关注子句的主要内容是否符合information中的信息。\
用以下json格式返回结果:
{{
"正确的子句": [
"子句1",
"子句2"
],
"错误的子句": [
"子句3",
"子句4"
],
"不确定的子句": [
"子句5",
"子句6"
]
}}
news: {news} \n information:{text}\n
"""
detect_prompt = ChatPromptTemplate.from_template(detect_temtemplate)
detect_chain = detect_prompt | llm | StrOutputParser()
@dataclass
class ClauseEvaluation:
correct_sub: List[str] = field(default_factory=list)
incorrect_sub: List[str] = field(default_factory=list)
uncertain_sub: List[str] = field(default_factory=list)
count: Dict[str, int] = field(default_factory=dict)
def extract_clauses_with_counts(json_string):
try:
# 解析JSON字符串
data = json.loads(json_string)
# 提取各类子句及其数量
correct_clauses = data.get("正确的子句", [])
incorrect_clauses = data.get("错误的子句", [])
uncertain_clauses = data.get("不确定的子句", [])
# 统计每种子句的数量
counts = {
"正确的子句个数": len(correct_clauses),
"错误的子句个数": len(incorrect_clauses),
"不确定的子句个数": len(uncertain_clauses)
}
# 返回提取的子句及其数量
result = ClauseEvaluation(
correct_sub=correct_clauses,
incorrect_sub=incorrect_clauses,
uncertain_sub=uncertain_clauses,
count=counts
)
return result
except json.JSONDecodeError:
print("无效的JSON格式")
return None
rag_template = """
您是一名助理,专门负责核实news的真实性(例如新闻、帖子、谣言)\
您的任务是检测news(分配标签),并根据您的知识和提供的information提供判断解释。
对于没有事实证据的声明,候选标签是:<label>很可能正确、很可能错误、可能错误,可能正确、中立<标签>\
对于有事实证据的声明,候选标签是:<label>完全错误、大部分错误、部分错误、部分正确、大部分正确、混合正确、完全正确<标签>\
对于无保留的声明(例如,模棱两可、不完整、基于意见),将其标记为“其他”。
说明:
1.你的答案应该是中文\
2.information中可能存在不真实、过时的报告或相互矛盾的证据,你需要小心\
3.评估给定的news,并像老式的私家侦探一步一步地追查案件一样给出解释\
4.不要在回答中提及自己\
news:{news}\ninformation:{information}\n
示例:
案例1:
输入:<news>:
9月1日上午7时许,唐尚珺去往位于广州的华南师范大学。
唐尚珺将作为一名大一新生报到
唐尚珺曾16次参加高考
唐尚珺曾经被北京大学录取。,
<information>:
唐尚珺,1989年出生于广西壮族自治区防城港市上思县公安村,是一位广西高考复读学生。自2009年开始参加高考,经历多年复读,曾考入多所高校但选择放弃,一直坚持复读的道路。在2016年因朋友何汉立拍摄的纪录片《高十》而为人所知。
最新情况是,2024年7月,唐尚珺以601分被华南师范大学信息工程专业录取。而在2024年8月26日,他发视频称已完成新生信息录入。在之前的2023年,他的高考成绩为594分,四个高考志愿均未录取,选择不服从调剂而被退档。在2022年7月,他曾以597分被上海交通大学医学院护理学院录取,但因专业不合适没有就读。
唐尚珺的学习经历起初并不顺利,但通过多年的努力复读,取得了不俗的成绩。他曾被多所高校录取,包括中国政法大学、西南政法大学、吉林大学等。他的高考成绩也经历了多次提升,最终以601分考入华南师范大学。
输出:<标签>:大部分正确,<解释>:information中提到唐尚珺被华南师范大学录取,并且曾经16次参加高考,但是并不是被北京大学录取。故大部分正确。
案例2:
输入:<news>:
今年第11号超强台风“摩羯”6日16时20分,在海南省文昌市翁田镇沿海登陆
“摩羯”登陆时风力在17级以上(约234公里/小时)。
<information>:
超强台风摩羯是2024年太平洋台风季第11个被命名的风暴。“摩羯”名称由日本提供,意为摩羯星座。
2024年9月1日晚,台风“摩羯”在菲律宾以东洋面上生成 。于9月2日下午在菲律宾东北部奥罗拉省卡西古兰市登陆 。9月3日下午由热带风暴级加强为强热带风暴级。 9月4日8时由强热带风暴级加强为台风级 ;14时由台风级加强为强台风级 ;23时由强台风级加强为超强台风级 。9月5日23时加强至17级以上。于9月6日16时20分以近巅峰强度登陆中国海南省文昌市翁田镇沿海。
台风“摩羯”作为2024年首个秋台风来势凶猛 ,令中央气象台于2024年9月4日18时发布台风红色预警。当地时间2024年9月6日,菲律宾国家减灾委发布报告称,台风“摩羯”已致菲律宾16人死亡。2024年9月6日12时40分,香港天文台改发3号风球。9月6日15时,摩羯中心附近风力降至65米/秒,台风眼已有部分上岸。
输出:<标签>:完全正确,<解释>:从提供的资料来看,“摩羯”确实在6日登陆海南,并且风力在17级以上。
案例3:
输入:<news>:
国际足联2026世界杯亚洲区预选赛第三阶段第一轮日本国家男子足球队 VS 中国国家男子足球队全场比赛结束,中国队以0-7失利。9月10日,中国队将回到主场,对阵沙特队
<information>:
国际足联世界杯(FIFA World Cup),简称“世界杯”,每四年举办一次,由国际足球联合会旗下会员协会球队参加。世界杯全球电视转播观众超过35亿,是具有最大知名度和影响力的足球赛事,象征着足球界最高荣誉。
输出:<标签>:中立,<解释>:根据提供的信息,并不能判断新闻的真假,没有事实性证据,故保持中立态度。
用以下json格式返回结果:
{{
"label":"<标签>",
"explanation":"<解释>"
}}
"""
rag_prompt=ChatPromptTemplate.from_template(rag_template)