] pawzochat.services.chat: LLM cal1failed for persona-e620fd67 Traceback (most r...

2026年05月02日 19:05 状态: processing

🚨 错误信息

httpx:HTTP Request: POST https://paw.vlchat.cc/v1/chat/completions “HTTP/1.1 200OK" 2026-05-02 19:00:31 .[ERROR] pawzochat.services.chat: LLM cal1failed for persona-e620fd67 Traceback (most recent calilast): File "pawzochat(services\chat. py", line 137, in process_round File “pawzochat\1l1m'providers(openai_compat.py"1ine76, in chat AttributeError: str' object has no attribute ’choices' 2026-05-0219:00:31 [ERROR] pawzochat.services.message_queue:LLM调用失败persona-e620fd67 Traceback (most recent call last): File “pawzochat(services(message_queue.py" line 4l6, in _process File pawzochat(services)chat.py" line 137, in process_round File “pawzochat(11m'providers\openai_compat. py" line 76, in chat AttributeError: str' object has no attribute choices'

🤖 AI解决方案

报错分析报告

1.错误翻译



原文:AttributeError: 'str' object has no attribute 'choices'
译文:属性错误:字符串对象没有"choices"属性

2. 原因分析


  • 根本原因:代码中预期包含choices属性的响应对象被错误赋值为字符串(如HTTP响应原始文本)

  • 发生位置pawzochat\llm\providers\openai_compat.py第76行chat函数

  • 上下文:试图访问字符串的choices属性导致崩溃,说明HTTP响应未正确解析为JSON对象
  • 3. 解决方案


    python

    pawzochat\llm\providers\openai_compat.py 修复代码


    import httpx

    def chat(self, messages: list, kwargs):
    payload = {"model": self.model, "messages": messages, kwargs}

    with httpx.Client() as client:
    response = client.post(self.base_url, json=payload)
    response.raise_for_status() # 检查HTTP错误状态

    # 关键修复:解析JSON而非使用文本字符串
    resp_data = response.json() # 转换为字典对象
    return resp_data # 返回含choices键的字典

    python

    调用处修复(原line76附近)


    原错误代码:result = response.choices


    修复后:


    result = resp_data["choices"] # 访问字典键而非对象属性

    4.️ 预防措施


  • 最佳实践1:处理HTTP响应时始终用response.json()解析为结构化数据,禁止直接使用response.text

  • 最佳实践2:使用类型提示+静态检查(如mypy)或运行时断言(isinstance(resp_data, dict))验证数据类型
  • 推荐工具

  • - httpx内置JSON解析器
    - pydantic模型验证响应结构
    - mypy类型检查工具

    ---
    请提供您的报错信息: