Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Failing after 6m36s
主要变更: - 迁移到极简 LangGraph 标准架构(START → init_state → 记忆 → Agent ⇄ Tools → finalize → END) - 添加 Baosi API 支持,配置 ops4.7 模型 - 保留本地模型作为默认首选,Baosi 作为备选 - 新架构使用 LangGraph 原生 ToolNode 和 bind_tools - 移除旧的混合路由、JSON 解析等复杂逻辑 - 把旧代码移到 deprecated/ 目录 - 添加新的 Agent 节点和 Tools 模块 - 添加测试脚本验证新架构 - 所有测试通过 ✓
58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
"""
|
||
LangGraph 节点日志工具模块
|
||
提供状态流转追踪和 LLM 输入输出打印功能
|
||
"""
|
||
|
||
from typing import Any
|
||
from backend.app.config import ENABLE_GRAPH_TRACE
|
||
from backend.app.logger import debug, info
|
||
|
||
|
||
def log_state_change(node_name: str, state: Any, prefix: str = "进入"):
|
||
"""
|
||
记录状态变化日志
|
||
|
||
Args:
|
||
node_name: 节点名称
|
||
state: 当前状态
|
||
prefix: 日志前缀("进入" 或 "离开")
|
||
"""
|
||
from backend.app.logger import info
|
||
|
||
messages = state.messages
|
||
msg_count = len(messages)
|
||
last_msg = messages[-1] if messages else None
|
||
last_info = ""
|
||
if last_msg:
|
||
content_preview = str(last_msg.content)[:10].replace("\n", " ")
|
||
msg_type = getattr(last_msg, 'type', 'unknown')
|
||
last_info = f"{msg_type.upper()}: {content_preview}"
|
||
info(f"🔄 [{node_name}] {prefix} | 消息数:{msg_count} | 最后一条:{last_info}")
|
||
|
||
|
||
def print_llm_input(prompt_value):
|
||
"""
|
||
RunnableLambda 回调函数:打印格式化后发送给 LLM 的完整消息
|
||
|
||
Args:
|
||
prompt_value: ChatPromptValue 对象,包含格式化后的消息列表
|
||
|
||
Returns:
|
||
原样返回 prompt_value,不影响链式调用
|
||
"""
|
||
if not ENABLE_GRAPH_TRACE:
|
||
return prompt_value
|
||
|
||
messages = prompt_value.messages # ChatPromptValue 提供 .messages 属性
|
||
|
||
debug("\n" + "="*80)
|
||
debug("📥 [LLM输入] 格式化后发送给大模型的完整消息:")
|
||
debug(f" 总消息数: {len(messages)}")
|
||
debug("-"*80)
|
||
for i, msg in enumerate(messages):
|
||
content_preview = str(msg.content) # 完整输出
|
||
debug(f" [{i}] {msg.type.upper():10s}: {content_preview}")
|
||
debug("\n" + "="*80 + "\n")
|
||
|
||
return prompt_value
|