feat(api): 统一 LLM JSON 调用层 llm_json_call,按域 Schema 迁移 chat/memoir agents
This commit is contained in:
@@ -5,15 +5,15 @@ ExtractionAgent:从用户消息中提取 5-stage 状态与 slots。
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from dataclasses import dataclass
|
||||
from typing import Any, Dict
|
||||
|
||||
from app.agents.memoir.prompts import get_state_extraction_prompt
|
||||
from app.agents.memoir.schemas import StateExtractionOutput
|
||||
from app.agents.stage_constants import normalize_chat_stage
|
||||
from app.core.langchain_llm import invoke_json_object
|
||||
from app.core.config import settings
|
||||
from app.core.llm_call import LLMCallError, llm_json_call
|
||||
from app.core.logging import get_logger
|
||||
from app.core.json_utils import extract_json_payload
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
@@ -57,14 +57,14 @@ class ExtractionAgent:
|
||||
for k, v in (stage_slots or {}).items()
|
||||
},
|
||||
)
|
||||
raw = invoke_json_object(
|
||||
parsed = llm_json_call(
|
||||
llm,
|
||||
prompt,
|
||||
max_tokens=1024,
|
||||
StateExtractionOutput,
|
||||
max_tokens=settings.memoir_extraction_max_tokens,
|
||||
agent="ExtractionAgent.extract",
|
||||
)
|
||||
parsed = json.loads(extract_json_payload(raw))
|
||||
raw_slots = parsed.get("slots", {}) or {}
|
||||
raw_slots = parsed.slots or {}
|
||||
extracted_slots = {
|
||||
k: v if isinstance(v, str) else str(v) for k, v in raw_slots.items()
|
||||
}
|
||||
@@ -74,12 +74,12 @@ class ExtractionAgent:
|
||||
current_stage, fallback=current_stage
|
||||
)
|
||||
else:
|
||||
raw_detected = parsed.get("detected_stage", current_stage)
|
||||
raw_detected = parsed.detected_stage or current_stage
|
||||
detected_stage = normalize_chat_stage(
|
||||
str(raw_detected) if raw_detected is not None else None,
|
||||
fallback=current_stage,
|
||||
)
|
||||
except (json.JSONDecodeError, Exception) as e:
|
||||
except LLMCallError as e:
|
||||
logger.warning("ExtractionAgent LLM 解析失败: {}", e)
|
||||
|
||||
return ExtractionResult(detected_stage=detected_stage, slots=extracted_slots)
|
||||
|
||||
Reference in New Issue
Block a user