问题现象

私聊收到纯文字消息后,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()

问题点:

  1. 历史记录去重逻辑可能异常
  2. JSON解析兼容性不足
  3. 时间前缀格式变化影响处理

代码重构方案

配置服务 (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))

核心改进点

  1. 新增LLM返回原始结果日志记录
  2. 增强parse_result()的兼容性处理
  3. 统一配置管理接口
  4. 分离历史记录管理逻辑

解决方案验证

  1. 测试纯文本消息场景
  2. 验证异常情况兜底逻辑
  3. 检查日志完整性
  4. 压力测试历史记录功能

经验总结

  1. 关键处理节点需要详细日志
  2. JSON解析需考虑多种返回格式
  3. 历史记录管理需要防重复机制
  4. 配置管理应集中化处理
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐