Skip to content

[BUG]大模型调用失败 #945

@LawineX

Description

@LawineX

[BUG] 自定义 OpenAI 兼容接口在 SQLBot 中校验成功,但实际调用返回 401(JWT格式的api-key,形如eyJxxxxx.xxxxxx.xxxx)

Image Image

SQLBot Version

v1.6.0
Docker 镜像:registry.cn-qingdao.aliyuncs.com/dataease/sqlbot:v1.6.0

Run Mode

Docker 运行


问题描述

在 SQLBot 中配置 自定义 OpenAI 兼容接口 时:

  • 保存模型配置时的“测试连接 / 校验”阶段调用成功
  • 但在 实际聊天 / SQL 生成阶段调用失败

返回错误:

openai.AuthenticationError: Error code: 401
{'code': 401, 'msg': '流程->API Key解析失败'}

但是使用 相同 API 地址 + 相同 API Key,通过 curl 或其他客户端调用接口是完全正常的。

因此怀疑 SQLBot 在 运行阶段构造请求或读取配置时存在问题


API 接口示例

接口地址(已脱敏):

http://xxx.xxx.xxx.xxx:xxxxx/prod-api/api_ability/xxx/inference-xxx/inferenceurl/xxxrewrite/v1

实际请求接口:

POST /v1/chat/completions

示例 curl 调用(可正常返回):

curl -X POST http://xxx.xxx.xxx.xxx/.../v1/chat/completions \
  -H "Authorization: Bearer xxx" \
  -H "Content-Type: application/json" \
  -d '{
        "model":"xxx",
        "messages":[{"role":"user","content":"hi"}]
      }'

返回 200 正常。


SQLBot 模型配置

Protocol:

OpenAI

API Domain:

http://xxx.xxx.xxx.xxx/.../v1

Model Name:

xxx

API Key:

xxx

错误日志

SQLBot 后端日志:

HTTP Request: POST http://xxx.xxx.xxx.xxx/.../v1/chat/completions "HTTP/1.1 401 Unauthorized"

openai.AuthenticationError: Error code: 401
{'code': 401, 'msg': '流程->API Key解析失败'}

调用栈:

File "/opt/sqlbot/app/apps/chat/task/llm.py", line xxxx
for chunk in sql_res

File ".../langchain_openai/chat_models/base.py", line xxxx
response = self.client.create(**payload)

行为差异

保存模型时调用:

/system/aimodel/status

接口调用 成功

实际聊天调用:

/api/v1/chat/question

接口返回 401


可能相关代码

SQLBot 中相关代码位置:

apps/ai_model/model_factory.py
apps/chat/task/llm.py

可能原因猜测:

1. LLMFactory.create_llm 使用了缓存

代码中:

@lru_cache(maxsize=32)
def create_llm(...)

可能导致:

  • API Key 或配置更新后
  • 运行阶段仍然使用旧实例

2. API Key 读取或格式问题

可能存在:

  • key 前后存在空格
  • key 被保存为 Bearer xxx
  • key 中存在换行符

3. get_default_config 解密逻辑

代码中:

if not db_model.api_domain.startswith("http"):
    db_model.api_domain = await sqlbot_decrypt(...)

解密逻辑依赖 startswith("http") 判断,可能导致:

  • 部分情况下 key / domain 未正确解密

期望行为

如果 模型配置校验成功,则实际聊天调用也应成功。


补充说明

该接口为 OpenAI ChatCompletion API 兼容实现,在以下客户端均测试正常:

  • curl
  • Python openai SDK
  • PowerShell Invoke-RestMethod

因此问题可能在 SQLBot 内部请求构造或配置缓存逻辑


问题

SQLBot 是否支持 完全自定义的 OpenAI 兼容 API endpoint

如果需要额外配置(例如 header 或 key 格式),是否有相关说明?

希望能得到一些建议或解决方案。

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions