重构系统界面与页面命名,全面清除emoji元素并规范专业展示
This commit is contained in:
+21
-20
@@ -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
@@ -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,
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user