dataease / dataease/SQLBot

[BUG]大模型调用失败

Ouverte
#945 2 commentaires 0 réactions 2 personnes assignées Voir sur GitHub

@xuwei-fit2cloud y travaille déjà.

Depuis le 5/3/2026.

bug
Langage dominant
JavaScript
Étoiles
6.8k
Forks
882
Merge moyen
4 h 37 min
PR mergées (30 j)
32

Description

[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 格式),是否有相关说明?

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

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.