fix: 修复报告摘要生成并稳定默认端口
This commit is contained in:
@@ -42,6 +42,46 @@ def build_comment_prompt(comments: list[dict[str, str]]) -> str:
|
||||
)
|
||||
|
||||
|
||||
def build_report_summary_prompt(metrics: dict, typical: dict, *, word_limit: int) -> str:
|
||||
sentiment = metrics.get("sentiment", {})
|
||||
sentiment_lines = []
|
||||
for name in ("positive", "neutral", "negative", "unknown"):
|
||||
entry = sentiment.get(name, {})
|
||||
sentiment_lines.append(f"- {name}: {entry.get('count', 0)} ({entry.get('pct', 0)}%)")
|
||||
|
||||
label_lines = [
|
||||
f"- {label.get('name', '')}: {label.get('count', 0)}"
|
||||
for label in metrics.get("top_labels", [])
|
||||
if label.get("name")
|
||||
]
|
||||
if not label_lines:
|
||||
label_lines = ["- 暂无"]
|
||||
|
||||
typical_lines = []
|
||||
for sentiment_name, comments in typical.items():
|
||||
for comment in comments:
|
||||
typical_lines.append(f"- [{sentiment_name}] {str(comment.get('content', ''))[:150]}")
|
||||
if not typical_lines:
|
||||
typical_lines = ["- 暂无"]
|
||||
|
||||
item_count_line = ""
|
||||
if "item_count" in metrics:
|
||||
item_count_line = f"内容条目数量:{metrics.get('item_count', 0)}\n"
|
||||
|
||||
return (
|
||||
f"只返回一段中文总结,不使用 Markdown,不超过 {word_limit} 字。\n"
|
||||
"总结必须基于以下统计数据和典型评论,不要编造未提供的信息。\n"
|
||||
f"{item_count_line}"
|
||||
f"样本评论数量:{metrics.get('sample_count', 0)}\n"
|
||||
"情绪分布:\n"
|
||||
f"{chr(10).join(sentiment_lines)}\n"
|
||||
"Top 标签:\n"
|
||||
f"{chr(10).join(label_lines)}\n"
|
||||
"典型评论:\n"
|
||||
f"{chr(10).join(typical_lines)}"
|
||||
)
|
||||
|
||||
|
||||
def parse_ai_comment_response(response_text: str, *, expected_comment_ids: set[str]) -> list[AIAnalysisResult]:
|
||||
try:
|
||||
raw = json.loads(response_text)
|
||||
@@ -118,7 +158,7 @@ class OpenAICompatibleAIClient:
|
||||
self.model = model
|
||||
self._http_client = http_client or httpx.Client(timeout=timeout_seconds)
|
||||
|
||||
def request(self, prompt: str) -> str:
|
||||
def request(self, prompt: str, *, system_prompt: str = "请严格遵循用户指令输出。") -> str:
|
||||
endpoint = f"{self.base_url}/chat/completions" if self.base_url.endswith("/v1") else f"{self.base_url}/v1/chat/completions"
|
||||
response = self._http_client.post(
|
||||
endpoint,
|
||||
@@ -128,7 +168,7 @@ class OpenAICompatibleAIClient:
|
||||
"messages": [
|
||||
{
|
||||
"role": "system",
|
||||
"content": "只返回 JSON Array,不输出 Markdown 或解释性自然语言。",
|
||||
"content": system_prompt,
|
||||
},
|
||||
{"role": "user", "content": prompt},
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user