Spaces:
Sleeping
Sleeping
| #-*- 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() | |
| 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) |