现在的AI知识库(RAG)应用非常广泛,但在真实的工业场景下,工程师们常常面临两个令人头疼的痛点:
- 爱胡说:当搜索“某伺服驱动器故障码11”时,基于向量检索的知识库经常给出不相关甚至错误的信息,精准度无法保证。
- 查不到:很多时候工程师记不住具体的故障码,只知道故障现象,比如“电机不转”或“过载”,传统的关键词搜索又难以命中。
本文将分享如何利用 MaxKB(大模型知识库平台) 的“函数调用”功能,结合 飞书在线表格 作为实时数据库,搭建一个既能 100%精准查故障码,又能 听懂故障描述 的超级AI助手。
第一阶段:为什么普通的知识库搞不定?
最初,我们尝试直接将几百页的伺服驱动器维修手册(PDF/Word)整个导入知识库。但很快发现了两个致命问题:
- 数字混淆:故障码通常是简短的数字(如
11、21)。向量数据库对数字的语义表征不敏感,搜索“故障码21”很可能搜出文档中“第21页”或者“温度21度”的内容。
- 数据孤岛:大量的维修经验和现场记录往往沉淀在团队的Excel表格里,并且这些数据会持续更新。每次更新表格都要重新上传、训练知识库,维护成本极高。
破局思路:既然大模型本身不擅长做精确的“查表”工作,那就让它调用工具去查!我们把飞书表格作为“实时更新的中央数据库”,编写一段Python代码作为“查询工具”,而MaxKB则负责“理解用户意图”并智能地调用这个工具。
架构设计
- 前端交互:MaxKB 提供的聊天窗口
- 大脑:背后的大模型(如 Qwen、DeepSeek、GPT 等)
- 手脚(工具):MaxKB 支持的自定义函数(Python脚本)
- 数据源:飞书云文档中的在线表格
实战第一步:打造“精准查号”神器
1. 准备“云数据库” (飞书表格)
我们首先在飞书中建立一个在线表格,包含 品牌、故障码、故障名称、对策 等关键列。
注意:工业表格中为了方便阅读常使用“合并单元格”,但这会给程序化读取带来麻烦,需要在后续代码中进行特殊处理。
2. Python 核心逻辑
在飞书开放平台创建应用并获取权限后,我们编写连接和查询表格的代码。
import requests
import json
# 飞书配置信息 (注意保密)
APP_ID = "xxx"
APP_SECRET = "xxx"
SPREADSHEET_TOKEN = "xxx"
3. MaxKB 接入避坑指南 (高能预警)
在 MaxKB 中创建自定义函数时,如果为每个查询条件(如brand和code)分别定义参数,大模型在实际调用时容易发生参数传递混乱或失败。
最佳实践:直接定义一个字符串参数!将用户查询的所有条件打包成一个 JSON 字符串传递给函数。
函数定义示例:
{
"name": "search_servo_error",
"description": "查询伺服驱动器故障码",
"parameters": {
"type": "object",
"properties": {
"query_params": {
"type": "string",
"description": "JSON格式参数,如: {\"brand\": \"某伺服驱动器品牌名称\", \"code\": \"故障码\"}"
}
},
"required": ["query_params"]
}
}
实战第二步:进化!让AI“听懂人话”
解决了“按故障码精准查询”的问题后,工程师反馈了新的痛点:“我手头没有故障码,只知道‘电机安装失败’,该怎么查?”
这就需要我们对系统进行 2.0版本升级,使其支持基于自然语言描述的模糊搜索。
1. 扩充参数结构
查询参数不仅包含 code,还需增加 description 字段来接收故障现象描述。
MaxKB 函数可接收的参数示例:
{
"brand_name": "某伺服驱动器品牌名称",
"error_code": "",
"description": "过载"
}
2. 代码逻辑升级:三维打击
我们需要在Python代码中明确区分哪些列存储的是用于精确匹配的数字故障码,哪些列存储的是用于模糊搜索的文本描述。
# 定义“描述性文本列”,只在这些列里进行文字模糊搜索
DESCRIPTION_COLUMNS = ['品牌', ‘故障名称’, ‘对策’ 等]
def search_servo_error(query_params):
params = json.loads(query_params)
code = params.get('error_code', '')
desc = params.get('description', '')
# 逻辑分流:
# 1. 如果有 code -> 在“故障码列”进行精确匹配
# 2. 如果有 desc -> 在“DESCRIPTION_COLUMNS”里进行模糊搜索
if desc:
keywords = desc.split() # 支持多词搜索,如"电机 噪音"
# ... (在描述列中进行包含匹配的逻辑) ...
这样设计的好处显而易见:搜索数字“11”时,只在故障码列进行查找;搜索文字“过载”时,只在原因、对策等文本列进行查找。两者互不干扰,确保结果的绝对精准!
终极调教:MaxKB工作流与提示词工程
工具函数准备好了,最关键的一步是“教”会MaxKB工作流中的AI如何正确地使用它。这离不开精细的提示词工程。
1. 参数提取提示词
需要明确告诉AI,如何从用户的自然语言提问中提取结构化的查询参数。如果用户没有提供故障码,绝不能胡编乱造。
你是一个参数提取器。请从用户问题中提取以下JSON信息:
1. **brand_name**: 提取伺服驱动器的品牌名称。
2. **error_code**: 提取明确的数字故障码(如 11)。若用户未提供,则留空字符串。
3. **description**: 提取故障现象或描述(如“电机安装失败”)。若用户未提供,则留空字符串。
用户输入:"某伺服驱动器电机安装失败"
输出:{"brand_name": "某伺服驱动器品牌名称", "error_code": "", "description": "电机安装失败"}
2. 结果展示提示词
指导AI将查询返回的原始JSON数据,组织成清晰易读的Markdown格式报告,提升用户体验。
### 🔧 伺服故障诊断结果
共找到 {count} 条相关记录:
| 故障码 | 故障名称 | 核心原因 |
| :--- | :--- | :--- |
| {code} | {name} | {reason} |
> 💡 处理建议:{solution}
最终成果展示
经过以上步骤,我们得到了一个能够“听懂人话”的工业故障查询助手。无论是通过精准的故障码,还是模糊的现象描述,它都能从飞书表格中快速找到对应的维修方案。

总结
通过 MaxKB + Python自定义函数 + 飞书表格 的组合拳,我们成功实现了一个能从“死板的电子字典”进化为“懂业务的智能顾问”的系统。
方案核心优势:
- 零幻觉:查询结果严格来自预设数据库,查到什么就回答什么,杜绝了大模型胡编乱造的可能性。
- 维护极简:只需在飞书表格中增删改查数据,AI助手即刻就能同步最新信息,无需重新训练模型或知识库。
- 理解业务:深度融合了精确查询与语义搜索,不管用户提供的是精准代码还是模糊描述,都能智能匹配。
- 数据私有:所有核心的故障维修数据都保存在企业自己的飞书表格中,安全可控。
这个基于函数调用的架构思路,不仅适用于工业故障诊断,也可以灵活迁移到客服问答、产品信息查询、内部知识检索等多个需要“精准数据+智能理解”的企业级场景中。