#-*- 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提供判断解释。 对于没有事实证据的声明,候选标签是: