ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

干货分享|MaxKB + MCP 智能问数方案及步骤详解:从数据接入到问答验证全流程

干货分享|MaxKB + MCP 智能问数方案及步骤详解:从数据接入到问答验证全流程

1. MaxKB + MCP 智能问数到底解决什么问题

MaxKB 是一个开源的企业级 AI 助手框架,它能把你手头的文档、表格、数据库结构变成可对话的知识库,再挂上大模型做问答。MCP(Model Context Protocol)则是一套让大模型调用外部工具的协议,简单说就是给模型装上"手"——能去查数据库、能去画图表。把这两个东西拼在一起,就得到了一个"智能问数"系统:员工用大白话问"哪个老师带的学生最多",系统自动写 SQL、查库、画图、给结论。

这套方案适合谁?我梳理了三类典型场景。第一类是企业内部已经有 MySQL、PostgreSQL 这类关系型数据库,业务人员不会写 SQL 但天天要看数据;第二类是数据分析团队想快速搭一个自然语言查询入口,不想从零写前后端;第三类是已经用 MaxKB 做了知识库问答,想再往前一步把结构化数据也接进来。这三类需求本质上都指向同一个痛点:数据在库里躺着,但取数门槛太高,中间隔着一个会写 SQL 的人。

传统做法是 BI 工具加报表,但报表是死的,问题一变就得重新做。智能问数的价值在于"问什么答什么",而且答案里带图表、带解释。MaxKB 负责理解问题、检索表结构和示例 SQL,MCP Server 负责真正去执行查询和生成图表,大模型负责把这几步串起来。整个链路的每一环都可替换、可调试,不是黑盒。

我实测下来,这套组合最舒服的地方是"知识库 + 工具调用"的分工很清晰。表结构 DDL 和 SQL 示例放知识库,解决"模型不知道你的表长什么样"的问题;MCP 工具解决"模型不能真的查库"的问题。两者缺一不可,只给 DDL 模型会瞎编 SQL,只给工具模型不知道表名。下面按数据准备、MCP 部署、MaxKB 编排、效果验证四步走,每一步都给可复制的配置。

2. TaoToken 前置准备与模型接入配置

在动手搭 MaxKB 之前,得先把大模型这一环搞定。MaxKB 的 AI 对话节点需要调用一个支持 MCP 的模型,DeepSeek Chat、Qwen-Plus 这类都行。如果你手头没有现成的 API Key,或者想统一管理多个模型的调用,可以用 TaoToken 来做接入层。它的 API 地址是 https://taotoken.net/api,兼容 OpenAI 风格的接口,MaxKB 里填 Base URL 和 Key 就能用。

先说清楚 TaoToken 在这里的角色:它是一个模型调用网关,你拿到一个 Key,就能在 MaxKB、Cline、Claude Code 这些工具里统一配置模型。不是必须用它,但如果你要同时试 DeepSeek 和 Qwen 哪个写 SQL 更准,用网关切换比每个工具单独配省事。注册和拿 Key 的入口在 https://taotoken.net/api-keys,登录后在控制台创建 API Key 即可。

拿到 Key 之后,在 MaxKB 里配置模型的路径是这样的:进入 MaxKB 管理后台,找到"模型设置"或"系统设置"里的模型管理,添加一个 OpenAI 兼容的模型供应商。Base URL 填 https://taotoken.net/api,API Key 填你刚创建的 Key,模型名称填你要用的具体模型 ID,比如 deepseek-chat 或 qwen-plus。保存后 MaxKB 会做一次连通性测试,通了就能在 AI 对话节点里选到这个模型。

这里有个细节要注意:MaxKB 的 AI 对话节点要选"支持 MCP"的模型。不是所有模型都支持工具调用,DeepSeek Chat 和 Qwen-Plus 是实测可用的。如果你选的模型在对话节点里调 MCP 工具时报"tool not supported",换模型就行,不是配置问题。

配置片段参考如下,这是 MaxKB 模型供应商的典型填写方式:

{ "provider": "openai-compatible", "base_url": "https://taotoken.net/api", "api_key": "sk-你的Key", "model": "deepseek-chat", "support_mcp": true }

如果你用的是 Claude Code 或 Cline 这类编码工具来辅助调试 MCP Server,它们的配置也类似。Claude Code 的 settings 里填 Anthropic 兼容端点,Cline 的 MCP 配置里填 Base URL 和 Key。三件套永远是 Base URL + Key + Model ID,缺一不可。TaoToken 的接入文档在 https://taotoken.net/doc,里面有各工具的详细配置示例,遇到 401 先查 Key 有没有复制全,遇到 model not found 先查模型 ID 拼写。

模型这一环搞定后,MaxKB 就有了"大脑"。接下来要给它配"手"——也就是 MCP Server。数据库 MCP 负责查数,图表 MCP 负责画图,两个都要部署。

3. 可复制的 MCP Server 与 MaxKB 编排配置

这一步是整个方案的核心,配置写对了后面就顺,写错了会卡在"模型不调用工具"或"调用报错"上。我按数据库 MCP、图表 MCP、MaxKB 编排三块拆开讲,每块都给可复制的 JSON 或参数。

先说数据库 MCP Server。本方案用 MySQL,选 DBHub 这个开源项目来部署,它同时支持 PostgreSQL 和 SQL Server。部署方式有两种:用 1Panel 应用商店一键装,或者用 Docker 手动跑。1Panel 的方式更省事,进入应用商店的"AI/大模型"分类找到 DBHub,点安装,注意放行 SSE 端口。装完后用 curl 验证:

curl http://你的服务器IP:8080/sse

返回 SSE 事件流信息就说明部署成功。DBHub 的 MCP 配置里需要填数据库连接串,格式是mysql://user:password@host:port/dbname,这个连接串决定了 MCP 能查哪个库。

再说图表 MCP Server。用 QuickChart 加 Quickchart-MCP-Server 组合,QuickChart 负责根据数据和样式参数生成图表 URL 或图片,MCP Server 负责把能力暴露给模型。这个项目没有 SSE 访问方式,所以要在 1Panel 的 MCP 模块里部署。操作路径是:1Panel 面板 → AI → MCP → 创建 MCP 服务器 → 导入 MCP Server 配置,粘贴下面这段:

{ "mcpServers": { "quickchart-server": { "command": "npx", "args": [ "-y", "@gongrzhe/quickchart-mcp-server" ] } } }

导入后开启外部端口访问,等几秒看到 QuickChart 的 MCP Server 状态变成运行中,再用 curl 验证一次。两个 MCP Server 都跑起来后,记下它们的访问地址,下一步要填进 MaxKB。

现在进 MaxKB 做编排。创建一个空白的高级编排应用,然后加节点。第一步加两个知识库检索节点,一个检索表信息,一个检索示例 SQL。相似度设 0.4,引用分段数 TOP 设 6。这两个值是起点,不是终点,后面要根据实际问答效果调。表信息知识库里,每张表的 DDL 作为一个分段,同时给每张表配几个"问题",比如班级表配"7年级有多少个班""每个班多少人",这样用户问"7年级一共有多少老师"时能同时命中班级表和教师表。示例 SQL 库同理,一条 SQL 一个分段,配对应的问题。

第二步加 AI 对话节点,选支持 MCP 的模型,然后在节点里配置 MCP Server。配置信息如下:

{ "quickchart-server": { "url": "http://10.1.240.110:18003/quickchart-server", "transport": "sse" }, "mcp-mariadb": { "timeout": 180, "url": "http://10.1.240.106:8080/sse", "transport": "sse" } }

注意 url 要换成你自己服务器的实际地址,transport 都是 sse。timeout 设 180 秒是因为复杂查询加画图可能耗时较长,设太短会中断。

第三步配角色提示词。这段提示词决定了模型的行为边界,要写清楚它能做什么、不能做什么、按什么顺序做。核心是三条技能:生成并验证 SQL、绘制图表、分析和解释数据。限制部分要明确"仅围绕 SQL 生成、查询验证、图表生成、数据分析回答",防止模型跑偏去聊别的。提示词里要显式提到工具名mcp-mysql和quickchart-server,模型才知道调哪个。

第四步配用户提示词,把知识库检索结果和用户问题拼进去:

# 已知信息 ## 表信息: {{表信息.data}} ## 参考示例SQL: {{示例SQL.data}} # 用户问题: {{开始.question}}

这里的{{表信息.data}}和{{示例SQL.data}}是 MaxKB 的变量引用语法,对应前面两个知识库检索节点的输出。配完后保存,就可以进调试了。

4. 验证请求与成功结果对照

配置写完不算完,得跑通才算。MaxKB 的调试入口在编排页面右上角,点"调试"就能对话。我按四个典型问题来验证,每个问题对应一类查询模式,跑通了说明链路没问题。

第一个问题:"每个班级学生占比图"。这个问题需要查班级表和学生表,做聚合计数,再算占比,最后画饼图或柱状图。预期行为是模型先根据表信息生成 SQL,调用 mcp-mysql 验证并执行,拿到结果后调用 quickchart-server 生成图表,最后用文字解释占比情况。如果模型只生成了 SQL 没画图,检查 quickchart-server 的 url 是否可达;如果 SQL 报错,检查表信息知识库里 DDL 是否完整。

第二个问题:"每个年级有多少名学生?"这是典型的 group by 查询,考验模型对年级、班级、学生三张表关联的理解。预期结果是模型输出 SQL、查询结果表格、柱状图、文字总结。如果模型把年级和班级搞混,说明表信息知识库里的问题覆盖不够,需要补充"年级"和"班级"的别名问题。

第三个问题:"哪个老师教的学生最多?"这个问题涉及教师表、班级表、学生表的三表关联,是难度较高的一类。预期模型能正确写出 JOIN 语句并排序取第一。如果模型生成的 SQL 漏了关联条件导致笛卡尔积,说明示例 SQL 库里缺少多表关联的样例,补几条进去。

第四个问题:"成绩排名前 10 的学生名字、分数和班级。"这是排序加 limit 的查询,相对简单。预期模型输出 SQL、结果列表、可能配一个表格图或柱状图。如果模型没加 limit 返回了全部数据,检查角色提示词里有没有强调"按用户要求限制返回条数"。

四个问题都跑通后,你会看到完整的链路:知识库检索命中表信息和示例 SQL → 模型生成 SQL → MCP 工具执行查询 → MCP 工具生成图表 → 模型输出分析。这个过程在调试面板里能看到每一步的耗时和输出,方便定位瓶颈。确认无误后点"发布",应用就能嵌入 OA 或业务系统了。

验证时有个技巧:先单独测 MCP Server 是否可用,再测 MaxKB 编排。单独测的方法是用 curl 直接调 MCP 的 SSE 端点,或者用 MCP 客户端工具连一下。如果 MCP 本身不通,MaxKB 里怎么调都没用。我踩过的坑是 SSE 端口没放行,curl 一直超时,查了半天以为是配置问题,其实是防火墙。

5. 本篇常见错误排查

智能问数这套链路环节多,报错也分散。我把高频错误按现象、原因、解法三列整理成表,方便对照。

报错现象可能原因解法
401 UnauthorizedAPI Key 错误或过期检查 TaoToken Key 是否复制完整,重新在控制台生成
local proxy failed网络不通或 Base URL 写错确认 https://taotoken.net/api 可达,检查服务器出网
reading choices 报错模型返回格式异常换模型试,或检查 MaxKB 模型配置的兼容模式
OAuth 相关报错认证方式不匹配确认用的是 API Key 而非 OAuth,检查请求头
模型不调用 MCP 工具模型不支持工具调用换 DeepSeek Chat 或 Qwen-Plus
SQL 执行超时查询复杂或 timeout 太短调大 MCP 配置里的 timeout 到 180 或更高
图表不显示quickchart-server 不可达curl 验证 SSE 端点,检查端口放行
知识库检索不到表信息相似度阈值太高从 0.4 往下调,或补充表的问题别名
模型瞎编表名DDL 信息不完整补全字段类型、约束、注释
多表关联错误示例 SQL 缺少 JOIN 样例往示例库补多表查询 SQL

重点说几个容易误判的。401 不一定是 Key 错,也可能是请求头格式不对,MaxKB 里 OpenAI 兼容模式要求Authorization: Bearer sk-xxx,少个 Bearer 也会 401。local proxy failed 通常是服务器无法访问外网,或者 DNS 解析有问题,先在服务器上 curl 一下 API 地址确认。reading choices 这类报错多半是模型返回了非标准格式,换模型或调整 MaxKB 的响应解析配置。

还有一个隐蔽的坑:MCP Server 的 url 用了内网 IP,但 MaxKB 部署在另一台机器上,跨机器访问内网 IP 不通。解法是把 url 换成 MaxKB 能访问到的地址,或者把 MCP Server 和 MaxKB 部署在同一网络。这个错误不会报"连接失败",而是表现为"模型不调用工具",因为工具列表根本没拉取成功。

排查顺序建议从下往上:先确认 MCP Server 本身可用(curl SSE 端点),再确认 MaxKB 能连到 MCP(看编排日志),再确认模型支持工具调用(换模型试),最后确认知识库检索命中(看检索节点输出)。一层层排除,比盲目改配置快得多。

6. 长期使用与模型调用建议

跑通 demo 只是开始,真正投入使用还要考虑稳定性和成本。智能问数这类应用的特点是查询频次不固定,业务人员可能一天问几十次,也可能一周问几次。模型调用这块,如果只是内部几个人用,按量付费的 API 就够;如果要做成全员工具,得算一下 token 消耗。

MaxKB 的 AI 对话节点每次调用会带上知识库检索结果,表信息加示例 SQL 可能占几千 token,加上用户问题和模型输出,单次对话的 token 量不小。优化方向有两个:一是精简知识库分段,表信息只保留必要字段,示例 SQL 按查询模式归类而不是全量导入;二是调低引用分段数 TOP,从 6 降到 4 或 3,减少上下文长度。

模型选择上,DeepSeek Chat 写 SQL 的能力实测不错,Qwen-Plus 在多表关联上表现稳。如果你要长期跑,建议用 TaoToken 的 Coding Plan 来管理调用额度,入口在 https://taotoken.net/coding-plan,适合需要持续调用模型的场景。模型对话的调试入口在 https://taotoken.net/chat,可以先用它试提示词效果,再搬到 MaxKB 里。

MCP Server 的运维也别忽视。DBHub 和 QuickChart 都是独立进程,要监控它们的存活状态。1Panel 的面板里能看到 MCP 的运行状态,建议配个告警,进程挂了及时知道。数据库连接串里的密码如果改了,MCP 配置也要同步更新,否则查询会报认证失败。

最后说一个实际经验:智能问数的准确率不是 100%,模型偶尔会写错 SQL 或选错表。上线前要跟业务方说清楚"这是辅助工具,关键数据要复核"。同时把高频问题的正确 SQL 沉淀到示例库里,用得越久,命中率越高。这套系统是"越用越准"的类型,前提是你愿意持续维护知识库。MaxKB 的接入文档和 MCP 配置示例在 https://taotoken.net/doc 里都有,遇到配置问题先查文档再动手改。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进