freud-zero-mvp / evaluator.py
Feng Chike
Freud Zero MVP: 心理咨询AI系统(清洁部署)
408f650
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": "评估解析失败"}