dataease / dataease/SQLBot

[BUG]大模型调用失败

Open
#945 2 comments 0 reactions 2 assignees View on GitHub

@xuwei-fit2cloud is already working on this.

Since Mar 5, 2026.

bug
Dominant language
JavaScript
Stars
6.8k
Forks
882
Avg merge
4h 37m
Merged PRs (30d)
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 格式),是否有相关说明?

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

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.