DB-GPT 接入 AI/ML API 大模型服务:proxy/aimlapi 提供者配置与 Docker 部署实战
【免费下载链接】DB-GPTopen-source agentic AI data assistant for the next generation of AI + Data products.项目地址: https://gitcode.com/GitHub_Trending/db/DB-GPT
本文以 DB-GPT 仓库中的 AI/ML API 集成文档为主体,讲解如何将该聚合式模型服务平台接入 DB-GPT:从申请 API Key、设置环境变量,到完整解读随仓库提供的configs/dbgpt-proxy-aimlapi.toml配置文件,再到结合dbgpt-core与dbgpt-ext源码剖析proxy/aimlapi提供者的注册机制、默认模型与上下文长度策略、RAG 向量化实现,以及通过docker/base/Dockerfile一键构建镜像的部署方式。读完本文,你可以独立完成 DB-GPT 对 AI/ML API 上 300+ 模型(DeepSeek、Gemini、ChatGPT 等)的接入与切换。
AI/ML API 是什么:300+ 模型的统一入口
AI/ML API 是一个聚合了 300 多个 AI 模型的平台,覆盖 DeepSeek、Gemini、ChatGPT 等主流模型,以企业级的速率限制和可用性提供推理服务。对于 DB-GPT 这样的 AI 数据助手而言,这意味着无需为每个模型厂商单独编写适配器或申请多个 Key——只要配置proxy/aimlapi这一个提供者,就能通过同一套 OpenAI 兼容端点访问平台上绝大多数模型。
DB-GPT 在两个层面实现了这一集成:
- LLM 层:
dbgpt-core中的AimlapiLLMClient(聊天/补全),实现位于 packages/dbgpt-core/src/dbgpt/model/proxy/llms/aimlapi.py; - Embedding 层:
dbgpt-ext中的AimlapiEmbeddings(知识库/数据库 Schema 的向量化检索),实现位于 packages/dbgpt-ext/src/dbgpt_ext/rag/embeddings/aimlapi.py。
两者共享同一个环境变量AIMLAPI_API_KEY,这也正是随仓库配置文件configs/dbgpt-proxy-aimlapi.toml同时声明了 LLM 与 Embedding 两块的原因。
三步接入法(官方流程完整继承)
官方集成文档(英文源文档见 docs/docs/installation/integrations/aimlapi_llm_install.md)给出的接入流程只有三步:
- 在 AI/ML API 平台注册并生成 API Key;
- 将 Key 写入环境变量
AIMLAPI_API_KEY; - 启动 DB-GPT 时指定
configs/dbgpt-proxy-aimlapi.toml作为配置文件:
dbgpt start webserver --config configs/dbgpt-proxy-aimlapi.toml具体的模型目录可以在 AI/ML API 的模型列表中查询,选择模型名填入配置中的name字段即可(配置支持通过环境变量LLM_MODEL_NAME覆盖,见下文)。
深度解析 dbgpt-proxy-aimlapi.toml 配置文件
下面逐段解读仓库中 configs/dbgpt-proxy-aimlapi.toml 的完整内容(以下即该文件原文):
[system] language = "${env:DBGPT_LANG:-en}" api_keys = [] encrypt_key = "your_secret_key" [service.web] host = "0.0.0.0" port = 5670 [service.web.database] type = "sqlite" path = "pilot/meta_data/dbgpt.db" [rag.storage] [rag.storage.vector] type = "chroma" persist_path = "pilot/data" [models] [[models.llms]] name = "${env:LLM_MODEL_NAME:-gpt-4o}" provider = "proxy/aimlapi" api_key = "${env:AIMLAPI_API_KEY}" [[models.embeddings]] name = "${env:EMBEDDING_MODEL_NAME:-text-embedding-3-small}" provider = "proxy/aimlapi" api_url = "https://api.aimlapi.com/v1/embeddings" api_key = "${env:AIMLAPI_API_KEY}"各配置段要点如下:
| 配置段 / 键 | 取值 | 说明 |
|---|---|---|
[system]language | ${env:DBGPT_LANG:-en} | 界面语言,默认en,可用DBGPT_LANG=zh切换中文 |
[system]api_keys/encrypt_key | []/your_secret_key | 本配置未启用平台访问 Key 校验;encrypt_key用于敏感信息加密,生产环境建议替换 |
[service.web]host/port | 0.0.0.0/5670 | Web 服务监听地址,5670 与 Dockerfile 中EXPOSE 5670对应 |
[service.web.database] | sqlite/pilot/meta_data/dbgpt.db | 元数据默认走 SQLite 单文件库,零依赖起步 |
[rag.storage.vector] | chroma/pilot/data | 知识库向量存储使用 Chroma,持久化目录为pilot/data |
[[models.llms]]name | ${env:LLM_MODEL_NAME:-gpt-4o} | 聊天模型,默认gpt-4o,可通过环境变量按需换成平台上任意模型名 |
[[models.llms]]provider | proxy/aimlapi | 关键路由键:决定由哪个代理客户端承接请求 |
[[models.embeddings]]name | ${env:EMBEDDING_MODEL_NAME:-text-embedding-3-small} | 向量化模型,默认 OpenAI 的text-embedding-3-small |
[[models.embeddings]]api_url | https://api.aimlapi.com/v1/embeddings | 嵌入请求的完整端点 |
这里体现了 DB-GPT 配置系统的两个实用特性:
${env:VAR:-default}语法——${env:LLM_MODEL_NAME:-gpt-4o}表示“优先取环境变量LLM_MODEL_NAME,未设置时回退到gpt-4o”。因此切换模型无需改 TOML,只要LLM_MODEL_NAME=deepseek-chat dbgpt start webserver ...即可;- API Key 不落盘——
api_key = "${env:AIMLAPI_API_KEY}"让密钥只存在于环境变量中,配置文件可安全提交到版本库。
源码剖析:AimlapiLLMClient 如何工作
proxy/aimlapi这个字符串并不是魔法,它对应源码中AimlapiDeployModelParameters的provider字段默认值(aimlapi.py#L48)。当 DB-GPT 启动时解析到provider = "proxy/aimlapi",模型适配框架会通过register_proxy_model_adapter动态生成一个以该 provider 为路由标识的适配器(注册逻辑见 packages/dbgpt-core/src/dbgpt/model/proxy/base.py#L465-L520),其match方法仅做_provider == provider的精确匹配,从而把 LLM 请求路由到AimlapiLLMClient。该客户端的懒加载导入登记在 packages/dbgpt-core/src/dbgpt/model/proxy/init.py#L34。
AimlapiLLMClient继承自OpenAILLMClient,即完全复用 OpenAI 兼容协议,几个源码级细节值得注意(packages/dbgpt-core/src/dbgpt/model/proxy/llms/aimlapi.py):
- API Base 三级回退(L88-L90):优先使用构造参数
api_base,其次环境变量AIMLAPI_API_BASE,最后回退到https://api.aimlapi.com/v1。这意味着在参数类AimlapiDeployModelParameters中可以通过api_base字段覆盖端点(L50-L53); - 密钥缺失即快速失败(L99-L103):未配置
AIMLAPI_API_KEY时直接抛出ValueError,提示在环境变量或参数中提供密钥,避免运行时才暴露配置错误; - 上下文长度启发式(L93-L97):模型名中含
200k时按 204800 tokens 计算上下文,否则默认 4096。从源码结构看,这是一个保守的缺省策略,若所选模型实际窗口更大,可在参数中显式传入context_length; - 默认模型
_AIMLAPI_DEFAULT_MODEL = "gpt-4o"(L33),与 TOML 配置中的缺省值保持一致; - 来源标识头(L21-L24):客户端会在请求头中附加
HTTP-Referer与X-Title: DB GPT,用于平台侧的来源统计。
流式生成入口为模块级函数aimlapi_generate_stream(L61-L67):它通过parse_model_request构造带stream=True的请求,然后逐块yield客户端generate_stream的输出,与 DB-GPT 整体的异步流式对话链路对接。
请求参数遵循 OpenAI Chat Completion 的标准 Schema(model、messages、max_completion_tokens、tools/tool_choice、temperature、top_p、response_format等),完整字段说明可参考配置参考文档 docs/docs/config-reference/llm/aimlapi_aimlapideploymodelparameters_a1b2c3.mdx。
源码中登记的常用模型元数据
register_proxy_model_adapter调用处(aimlapi.py#L142-L257)内置了一组ModelMetadata,记录了各模型在平台上的上下文窗口、最大输出长度与是否支持函数调用,可用作选型参考:
| 模型 | 上下文长度 | 最大输出 | 函数调用 |
|---|---|---|---|
openai/gpt-4 | 8,000 | 4,096 | 支持 |
openai/gpt-4o、gpt-4o-mini、openai/gpt-4-turbo | 128,000 | 16,384 | 支持 |
gpt-3.5-turbo | 16,000 | 4,096 | 支持 |
deepseek-chat | 128,000 | 16,000 | 不支持 |
google/gemini-2-0-flash | 1,000,000 | 32,768 | 支持 |
claude-3-5-sonnet-20240620 | 8,192 | 2,048 | 支持 |
cohere/command-r-plus | 128,000 | 16,000 | 不支持 |
mistralai/codestral-2501 | 256,000 | 32,000 | 不支持 |
mistralai/Mistral-7B-Instruct-v0.3、meta-llama/Llama-3.1-405B、Qwen/Qwen2-235B | 32,000 | 8,192 | 不支持 |
meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo | 131,000 | 16,000 | 不支持 |
需要说明的是:这张表只是源码中登记的常用模型元数据,并不代表平台可用模型的全集——AI/ML API 上还有 300 多个模型,选择支持函数调用的模型(如gpt-4o、gemini-2-0-flash)对 DB-GPT 的 Agent/SQL 能力更有利;完整目录请以平台模型列表页为准。
RAG 向量化:AimlapiEmbeddings 实现
TOML 中的[[models.embeddings]]段会被解析为AimlapiEmbeddingDeployModelParameters(provider同为proxy/aimlapi),最终实例化AimlapiEmbeddings。其关键实现(packages/dbgpt-ext/src/dbgpt_ext/rag/embeddings/aimlapi.py):
- 批量调用:
embed_documents以max_batch_chunks_size=25为步长分批 POST 到https://api.aimlapi.com/v1/embeddings,请求体为{"model": <model_name>, "input": <batch_texts>},Authorization 使用 Bearer 方式携带AIMLAPI_API_KEY(L71-L95); - 顺序保证:返回的每条向量携带
index字段,代码先按index排序再拼接,确保批量场景下向量与文本一一对应(L92-L93); - 默认模型:
text-embedding-3-small(L50-L52),与 TOML 配置缺省一致;参数类还提供backend字段,当设置backend时以它作为真实请求的模型名,否则直接使用name(L28-L40); - 可选嵌入模型:源码登记了
text-embedding-3-large、text-embedding-ada-002、BAAI/bge-base-en-v1.5、voyage-2、textembedding-gecko@003等多档模型及其维度与上下文长度(L101-L172),切换时注意不同模型向量维度可能不同,更换嵌入模型后已入库的向量数据需要重建索引。
由此,配置完成后 DB-GPT 的完整链路——SQL/Agent 对话走[[models.llms]],知识库问答与 Schema 检索走[[models.embeddings]]——统一由 AI/ML API 一个 Key 驱动。
通过 Dockerfile 以容器方式运行
官方文档同时提供了基于docker/base/Dockerfile的容器化接入方式,在 Dockerfile 中追加/修改三处即可:
# 暴露 Web 服务端口,便于直接对外提供访问 EXPOSE 5670 # 设置 AIMLAPI API Key 环境变量 ENV AIMLAPI_API_KEY="***" # 取消 `Dockerfile` 中下面这一行的注释,即可使用 AI/ML API 配置启动 CMD ["dbgpt", "start", "webserver", "--config", "configs/dbgpt-proxy-aimlapi.toml"]对照仓库现有的 docker/base/Dockerfile 可以看到:文件末尾默认命令为 SiliconFlow 配置(docker/base/Dockerfile#L126),而 AI/ML API 对应的 CMD 已经以注释形式预置在下一行(docker/base/Dockerfile#L128-L129):
# Uncomment the following line to use the AI/ML API configuration # CMD ["dbgpt", "start", "webserver", "--config", "configs/dbgpt-proxy-aimlapi.toml"]也就是说,实际操作时只需取消该注释(或替换默认 CMD)、加上EXPOSE 5670与ENV AIMLAPI_API_KEY,再执行同目录下的 docker/base/build_image.sh 构建镜像即可。需要注意的适用前提:
ENV方式会将 Key 固化进镜像层,仅适合内网/演示场景;生产环境建议改用docker run -e AIMLAPI_API_KEY=*** 注入,因为 TOML 中${env:AIMLAPI_API_KEY}` 在容器运行时从环境变量读取;- TOML 中元数据库与向量库默认指向
pilot/meta_data/dbgpt.db与pilot/data,容器化运行时请挂载相应数据卷以持久化。
小结与排错提示
- 接入的核心就是三件事:Key 进环境变量
AIMLAPI_API_KEY、配置文件指向configs/dbgpt-proxy-aimlapi.toml、provider保持proxy/aimlapi; - 启动报
AI/ML API key is required:说明环境变量未生效,确认 `export AIMLAPI_API_KEY=*** 后再启动(对应 aimlapi.py#L99-L103 的校验逻辑); - 想切换聊天/嵌入模型:优先用
LLM_MODEL_NAME、EMBEDDING_MODEL_NAME环境变量覆盖,而不是修改 TOML; - 想改用自定义端点:LLM 侧可通过参数类中的
api_base或环境变量AIMLAPI_API_BASE覆盖(aimlapi.py#L50-L53),嵌入端点在 TOML 的api_url中调整; - 更多模型能力细节(上下文长度、函数调用支持)可查上文模型元数据表,完整模型目录以 AI/ML API 平台模型列表为准。
【免费下载链接】DB-GPTopen-source agentic AI data assistant for the next generation of AI + Data products.项目地址: https://gitcode.com/GitHub_Trending/db/DB-GPT
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考