import json import os from langchain_openai import ChatOpenAI from prompts import DISCLOSURE_EVAL_PROMPT class DisclosureEvaluator: def __init__(self): self.llm = ChatOpenAI( model="qwen-turbo", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", api_key=os.getenv("DASHSCOPE_API_KEY"), temperature=0.0, max_tokens=256, ) def evaluate_disclosure(self, user_message, max_retries=2): prompt = DISCLOSURE_EVAL_PROMPT.replace("{user_message}", user_message) for attempt in range(max_retries + 1): try: llm_message = self.llm.invoke(prompt) content = llm_message.content.strip() start = content.find("{") end = content.rfind("}") + 1 result = json.loads(content[start:end]) return { "score": max(1, min(10, int(result.get("score", 1)))), "dimensions": result.get("dimensions", {}), "reasoning": result.get("reasoning", ""), } except (json.JSONDecodeError, ValueError): if attempt < max_retries: continue # 再试一次 return {"score": 1, "dimensions": {}, "reasoning": "评估解析失败"}