【问题解决】机器人私聊无响应问题深度排查与代码重构实战
·
问题现象
私聊收到纯文字消息后,LLM请求返回200状态码,但最终发送阶段出现text_len=0,导致机器人无回复。日志显示LLM返回内容正常,但发送时text字段为空。
问题复现步骤
向机器人发送纯文字消息(如"你好") 观察容器日志中的chat_json返回内容和parse_result输出 发送阶段日志显示text字段为空
初步假设与分析
假设A:chat_json()返回结构不稳定(高优先级)
假设B:LLM返回空text且缺少兜底逻辑(高优先级)
假设C:事实闸门或毒性过滤清空文本但未记录(中优先级)
代码审查与问题定位
关键函数链:
free_chat() → _ai_reply() → _send_reply()
问题点:
- 历史记录去重逻辑可能异常
- JSON解析兼容性不足
- 时间前缀格式变化影响处理
代码重构方案
配置服务 (config_service.py)
class ConfigService:
@staticmethod
def load_bot_config() -> dict:
return load_json_config("config/bot.json")
消息解析服务 (parse_service.py)
def parse_result(result: dict|list) -> tuple:
text = str(result.get("text", "")) if isinstance(result, dict) else ""
return (text, ...)
历史记录管理 (history_manager.py)
class HistoryManager:
def get_recent_history(self, session_id: str, max_turns: int):
return filter_duplicates(super().get_history(session_id))
核心改进点
- 新增LLM返回原始结果日志记录
- 增强parse_result()的兼容性处理
- 统一配置管理接口
- 分离历史记录管理逻辑
解决方案验证
- 测试纯文本消息场景
- 验证异常情况兜底逻辑
- 检查日志完整性
- 压力测试历史记录功能
经验总结
- 关键处理节点需要详细日志
- JSON解析需考虑多种返回格式
- 历史记录管理需要防重复机制
- 配置管理应集中化处理
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)