重构系统界面与页面命名,全面清除emoji元素并规范专业展示

This commit is contained in:
Chen Xiao
2026-10-12 16:56:53 +08:00
parent 33ed60acc0
commit 29b26452be
73 changed files with 3211 additions and 932 deletions
+21 -20
View File
@@ -15,7 +15,7 @@ logger = logging.getLogger(__name__)
class BaseAgent:
"""智能体基类,支持 Token 级流式 LLM 推理与降级逻辑"""
def __init__(self, name: str, system_prompt: str, role_icon: str = "🤖"):
def __init__(self, name: str, system_prompt: str, role_icon: str = ""):
self.name = name
self.system_prompt = system_prompt
self.role_icon = role_icon
@@ -96,20 +96,20 @@ class BaseAgent:
逐 Token 实时推送到 on_token_callback 渲染打字机效果
"""
self.reasoning_trace = []
self._trace("📝 构建 Context", f"准备【{self.name}】数据与 Prompt")
self._trace("构建 Context", f"准备【{self.name}】数据与 Prompt")
client = self._get_client()
if client is None:
self._trace("📌 智能体研判", "执行科创风控知识图谱深度分析")
self._trace("智能体研判", "执行科创风控知识图谱深度分析")
fallback = self.fallback_inference(prompt)
self._trace("📄 智能分析输出", fallback)
self._trace("智能分析输出", fallback)
return fallback
self._trace("🔗 大模型连接", f"已连接大模型推理服务 ({self._model})")
self._trace("大模型连接", f"已连接大模型推理服务 ({self._model})")
for attempt in range(max_retries + 1):
try:
self._trace("🚀 发起流式推理", "正在建立 SSE 流式传输通道...")
self._trace("发起流式推理", "正在建立 SSE 流式传输通道...")
t0 = time.time()
stream_resp = client.chat.completions.create(
@@ -157,11 +157,11 @@ class BaseAgent:
full_reasoning = "".join(reasoning_chunks)
if full_reasoning:
self._trace("🧠 完整思维链", full_reasoning)
self._trace("完整思维链", full_reasoning)
if final_text.strip():
self._trace("✅ 流式生成完毕", f"耗时 {elapsed:.1f}s | 产出 {len(final_text)} 字符")
self._trace("📄 原始推理输出", final_text)
self._trace("流式生成完毕", f"耗时 {elapsed:.1f}s | 产出 {len(final_text)} 字符")
self._trace("原始推理输出", final_text)
return final_text
except Exception as e:
@@ -169,7 +169,7 @@ class BaseAgent:
logger.warning(f"[{self.name}] 流式调用尝试 {attempt+1} 失败: {e}")
# 尝试非流式请求重试
try:
self._trace("🔄 智能重试", "正在发起备用推理通道...")
self._trace("智能重试", "正在发起备用推理通道...")
resp = client.chat.completions.create(
model=self._model,
messages=[
@@ -187,15 +187,15 @@ class BaseAgent:
self.on_token_callback("content", final_text)
except Exception:
pass
self._trace("✅ 推理生成完毕", f"产出 {len(final_text)} 字符")
self._trace("📄 原始推理输出", final_text)
self._trace("推理生成完毕", f"产出 {len(final_text)} 字符")
self._trace("原始推理输出", final_text)
return final_text
except Exception as e2:
self._trace("⚡ 传输异常", f"连接中断: {str(e2)}")
self._trace("传输异常", f"连接中断: {str(e2)}")
self._trace("📌 智能体专业研判", "完成科创企业特征穿透审查分析")
self._trace("智能体专业研判", "完成科创企业特征穿透审查分析")
fallback = self.fallback_inference(prompt)
self._trace("📄 智能分析输出", fallback)
self._trace("智能分析输出", fallback)
return fallback
def infer_json(self, prompt: str, temperature: float = 0.1) -> dict:
@@ -207,19 +207,19 @@ class BaseAgent:
if "```json" in result:
json_str = result.split("```json")[1].split("```")[0].strip()
parsed = json.loads(json_str)
self._trace("✅ 结构解析", "从 Markdown 成功提取 JSON 数据")
self._trace("结构解析", "从 Markdown 成功提取 JSON 数据")
return parsed
elif "```" in result:
json_str = result.split("```")[1].split("```")[0].strip()
parsed = json.loads(json_str)
self._trace("✅ 结构解析", "从代码块成功提取 JSON 数据")
self._trace("结构解析", "从代码块成功提取 JSON 数据")
return parsed
else:
parsed = json.loads(result)
self._trace("✅ 结构解析", "直接解析 JSON 成功")
self._trace("结构解析", "直接解析 JSON 成功")
return parsed
except (json.JSONDecodeError, IndexError):
self._trace("⚠️ 格式适配", "启用自动结构修正")
self._trace("格式适配", "启用自动结构修正")
logger.warning(f"[{self.name}] JSON 解析失败,返回原始文本")
return {"raw_response": result, "parse_error": True}
@@ -228,4 +228,5 @@ class BaseAgent:
return json.dumps({"error": "大模型服务处理中,未返回有效结构"}, ensure_ascii=False)
def __repr__(self):
return f"{self.role_icon} {self.name}"
return f"{self.name}"
+15 -15
View File
@@ -38,39 +38,39 @@ class DebateEngine:
company_name = company_data.get("short_name", company_data.get("company_name", "未知"))
start_time = time.time()
self._log(f"🏁 启动对 [{company_name}] 的多智能体交叉验证辩论")
self._log(f"启动对 [{company_name}] 的多智能体交叉验证辩论")
# ==============================
# Phase 1: 独立研判
# ==============================
self._log("=" * 50)
self._log("📋 Phase 1: 各节点独立研判")
self._log("Phase 1: 各节点独立研判")
self._log("=" * 50)
# 法务节点
self._log("👩‍⚖️ 法务风控节点开始评估...")
self._log("法务风控节点开始评估...")
if callback:
callback("law_start", "法务风控节点开始评估...", None)
law_result = self.law_agent.evaluate(company_data)
self._log(f"👩‍⚖️ 法务节点完成: 综合法务风险 {law_result.get('overall_law_risk', {}).get('score', '?')} 分")
self._log(f"法务节点完成: 综合法务风险 {law_result.get('overall_law_risk', {}).get('score', '?')} 分")
if callback:
callback("law_done", "法务风控节点评估完成", law_result)
# 技术节点
self._log("👨‍🔬 技术风控节点开始评估...")
self._log("技术风控节点开始评估...")
if callback:
callback("tech_start", "技术风控节点开始评估...", None)
tech_result = self.tech_agent.evaluate(company_data)
self._log(f"👨‍🔬 技术节点完成: 综合技术风险 {tech_result.get('overall_tech_risk', {}).get('score', '?')} 分")
self._log(f"技术节点完成: 综合技术风险 {tech_result.get('overall_tech_risk', {}).get('score', '?')} 分")
if callback:
callback("tech_done", "技术风控节点评估完成", tech_result)
# 财务节点
self._log("👔 财务风控节点开始评估...")
self._log("财务风控节点开始评估...")
if callback:
callback("fin_start", "财务风控节点开始评估...", None)
finance_result = self.finance_agent.evaluate(company_data)
self._log(f"👔 财务节点完成: 综合财务风险 {finance_result.get('overall_fin_risk', {}).get('score', '?')} 分")
self._log(f"财务节点完成: 综合财务风险 {finance_result.get('overall_fin_risk', {}).get('score', '?')} 分")
if callback:
callback("fin_done", "财务风控节点评估完成", finance_result)
@@ -78,14 +78,14 @@ class DebateEngine:
# Phase 2: 交叉质证(记录冲突点)
# ==============================
self._log("=" * 50)
self._log("🔄 Phase 2: 交叉质证")
self._log("Phase 2: 交叉质证")
self._log("=" * 50)
conflicts = self._identify_conflicts(law_result, tech_result, finance_result)
for conflict in conflicts:
self._log(f"⚠️ 冲突: {conflict}")
self._log(f"冲突: {conflict}")
if not conflicts:
self._log("✅ 各节点意见一致,无冲突")
self._log("各节点意见一致,无冲突")
if callback:
callback("cross_validation", "交叉质证完成", {"conflicts": conflicts})
@@ -94,7 +94,7 @@ class DebateEngine:
# Phase 3: 综合裁决
# ==============================
self._log("=" * 50)
self._log("⚖️ Phase 3: 综合裁决")
self._log("Phase 3: 综合裁决")
self._log("=" * 50)
if callback:
@@ -102,13 +102,13 @@ class DebateEngine:
judge_result = self.judge_agent.evaluate(
company_data, law_result, tech_result, finance_result
)
self._log(f"⚖️ 综合评分: {judge_result.get('comprehensive_score', '?')} 分")
self._log(f"⚖️ 核保建议: 【{judge_result.get('underwriting_decision', '?')}】")
self._log(f"综合评分: {judge_result.get('comprehensive_score', '?')} 分")
self._log(f"核保建议: 【{judge_result.get('underwriting_decision', '?')}】")
if callback:
callback("judge_done", "综合裁决完成", judge_result)
elapsed = time.time() - start_time
self._log(f"🏁 辩论完成,耗时 {elapsed:.1f} 秒")
self._log(f"辩论完成,耗时 {elapsed:.1f} 秒")
return {
"company": company_name,
+1 -1
View File
@@ -41,7 +41,7 @@ class FinanceAgent(BaseAgent):
super().__init__(
name="财务风控节点",
system_prompt=FIN_SYSTEM_PROMPT,
role_icon="👔",
role_icon="",
)
def evaluate(self, company_data: dict) -> dict:
+4 -4
View File
@@ -49,7 +49,7 @@ class JudgeAgent(BaseAgent):
super().__init__(
name="综合裁决节点",
system_prompt=JUDGE_SYSTEM_PROMPT,
role_icon="⚖️",
role_icon="",
)
def evaluate(self, company_data: dict, law_result: dict,
@@ -72,13 +72,13 @@ class JudgeAgent(BaseAgent):
企业名称:{company_data.get('short_name', '未知')}
行业:{company_data.get('industry', '未知')}
=== 👩‍⚖️ 法务风控节点评估 ===
=== 法务风控节点评估 ===
{json.dumps(law_result, ensure_ascii=False, indent=2)}
=== 👨‍🔬 技术风控节点评估 ===
=== 技术风控节点评估 ===
{json.dumps(tech_result, ensure_ascii=False, indent=2)}
=== 👔 财务风控节点评估 ===
=== 财务风控节点评估 ===
{json.dumps(finance_result, ensure_ascii=False, indent=2)}
请消解可能存在的判定冲突,输出综合裁决JSON。"""
+1 -1
View File
@@ -40,7 +40,7 @@ class LawAgent(BaseAgent):
super().__init__(
name="法务风控节点",
system_prompt=LAW_SYSTEM_PROMPT,
role_icon="👩‍⚖️",
role_icon="",
)
def evaluate(self, company_data: dict) -> dict:
+1 -1
View File
@@ -36,7 +36,7 @@ class TechAgent(BaseAgent):
super().__init__(
name="技术风控节点",
system_prompt=TECH_SYSTEM_PROMPT,
role_icon="👨‍🔬",
role_icon="",
)
def evaluate(self, company_data: dict) -> dict: