chore/ 精简展示AI活动的日志
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
"""聊天 Agent 共享工具:历史获取、格式化、存储"""
|
||||
|
||||
import hashlib
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime
|
||||
from typing import Any, List
|
||||
@@ -68,12 +69,28 @@ async def get_history_messages(conversation_id: str) -> List[Any]:
|
||||
return _lc_messages_from_rows(_human_ai_rows(history))
|
||||
|
||||
|
||||
def format_history_string(messages: List[Any]) -> str:
|
||||
def _sha12_utf8(text: str) -> str:
|
||||
return hashlib.sha256((text or "").encode("utf-8")).hexdigest()[:12]
|
||||
|
||||
|
||||
def format_history_string(
|
||||
messages: List[Any], *, omit_system_body: bool = False
|
||||
) -> str:
|
||||
"""将 LangChain 消息列表格式化为调试日志用多段文本(含 System,不静默跳过)。"""
|
||||
history_parts: list[str] = []
|
||||
for msg in messages:
|
||||
if isinstance(msg, SystemMessage):
|
||||
history_parts.append(f"System: {msg.content}")
|
||||
if omit_system_body:
|
||||
c = (
|
||||
(msg.content or "")
|
||||
if isinstance(msg.content, str)
|
||||
else str(msg.content)
|
||||
)
|
||||
history_parts.append(
|
||||
f"System: <omitted total_len={len(c)} sha12={_sha12_utf8(c)}>"
|
||||
)
|
||||
else:
|
||||
history_parts.append(f"System: {msg.content}")
|
||||
elif isinstance(msg, HumanMessage):
|
||||
history_parts.append(f"Human: {msg.content}")
|
||||
elif isinstance(msg, AIMessage):
|
||||
|
||||
@@ -176,7 +176,10 @@ class InterviewAgent:
|
||||
log_agent_payload(
|
||||
logger,
|
||||
"InterviewAgent.generate_response.prompt",
|
||||
format_history_string(messages),
|
||||
format_history_string(
|
||||
messages,
|
||||
omit_system_body=settings.agent_log_omit_system_message_body,
|
||||
),
|
||||
)
|
||||
chat_llm = self.llm.bind(max_tokens=reply_plan.max_tokens)
|
||||
prompt_chars = _message_contents_char_count(messages)
|
||||
@@ -276,7 +279,10 @@ class InterviewAgent:
|
||||
log_agent_payload(
|
||||
logger,
|
||||
"InterviewAgent.opening.prompt",
|
||||
format_history_string(messages),
|
||||
format_history_string(
|
||||
messages,
|
||||
omit_system_body=settings.agent_log_omit_system_message_body,
|
||||
),
|
||||
)
|
||||
opening_llm = self.llm.bind(max_tokens=settings.chat_opening_max_tokens)
|
||||
prompt_chars = _message_contents_char_count(messages)
|
||||
|
||||
@@ -58,38 +58,46 @@ async def _fetch_interview_memory_evidence(
|
||||
from app.features.memory.service import MemoryService
|
||||
|
||||
if not settings.chat_memory_retrieval_enabled:
|
||||
logger.debug(
|
||||
"event=chat_memory_retrieval_skip reason=disabled user_id={}", user_id
|
||||
)
|
||||
return ""
|
||||
msg = (user_message or "").strip()
|
||||
if not msg:
|
||||
logger.debug(
|
||||
"event=chat_memory_retrieval_skip reason=empty user_id={}", user_id
|
||||
)
|
||||
return ""
|
||||
if (
|
||||
settings.chat_memory_retrieval_require_substantive
|
||||
and not should_run_chat_stage_memory_heavy_work(msg)
|
||||
):
|
||||
logger.debug(
|
||||
"event=chat_memory_retrieval_skip reason=not_substantive user_id={}",
|
||||
user_id,
|
||||
)
|
||||
return ""
|
||||
try:
|
||||
emb = get_embedding_provider()
|
||||
ms = MemoryService(db, embedding_provider=emb)
|
||||
bundle = await ms.retrieve(user_id, msg, top_k=settings.chat_memory_top_k)
|
||||
bd = bundle.model_dump()
|
||||
vector_ok = emb.is_available()
|
||||
logger.info(
|
||||
"memory_evidence_retrieved user_id={} chunks={} facts={} summaries={} timeline={} stories={} vector_ok={}",
|
||||
user_id,
|
||||
len(bd.get("relevant_chunks") or []),
|
||||
len(bd.get("relevant_facts") or []),
|
||||
len(bd.get("relevant_summaries") or []),
|
||||
len(bd.get("timeline_hints") or []),
|
||||
len(bd.get("relevant_stories") or []),
|
||||
vector_ok,
|
||||
)
|
||||
text = format_evidence_chunks_for_prompt(bd)
|
||||
t = (text or "").strip()
|
||||
if not t:
|
||||
logger.debug(
|
||||
"event=memory_evidence_for_prompt user_id={} formatted_chars=0",
|
||||
user_id,
|
||||
)
|
||||
return ""
|
||||
max_c = settings.chat_memory_evidence_max_chars
|
||||
if len(t) > max_c:
|
||||
return t[: max_c - 3] + "..."
|
||||
t = t[: max_c - 3] + "..."
|
||||
logger.info(
|
||||
"event=memory_evidence_for_prompt user_id={} formatted_chars={}",
|
||||
user_id,
|
||||
len(t),
|
||||
)
|
||||
return t
|
||||
except Exception as e:
|
||||
try:
|
||||
|
||||
@@ -188,7 +188,10 @@ class ProfileAgent:
|
||||
log_agent_payload(
|
||||
logger,
|
||||
"ProfileAgent.followup.prompt",
|
||||
format_history_string(messages),
|
||||
format_history_string(
|
||||
messages,
|
||||
omit_system_body=settings.agent_log_omit_system_message_body,
|
||||
),
|
||||
)
|
||||
prompt_chars = _message_contents_char_count(messages)
|
||||
logger.info(
|
||||
@@ -246,7 +249,12 @@ class ProfileAgent:
|
||||
else:
|
||||
messages.append(HumanMessage(content="(请说出资料收集开场白。)"))
|
||||
log_agent_payload(
|
||||
logger, "ProfileAgent.greeting.prompt", format_history_string(messages)
|
||||
logger,
|
||||
"ProfileAgent.greeting.prompt",
|
||||
format_history_string(
|
||||
messages,
|
||||
omit_system_body=settings.agent_log_omit_system_message_body,
|
||||
),
|
||||
)
|
||||
prompt_chars = _message_contents_char_count(messages)
|
||||
logger.info(
|
||||
|
||||
Reference in New Issue
Block a user