File size: 1,347 Bytes
408f650
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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": "评估解析失败"}