1.部署MaxKB后创建函数库


2.增加Python语句

Python语句:
import pymysqlfrom typing import Dict, Anydef get_devices_by_name(InputData: str) -> Dict[str, Any]:"""根据外部输入的人名片段模糊查询 deviceinfo 表。参数 InputData: 要匹配的中文名字段(如 "张"),自动包装为 %关键词%返回格式: {"success": bool, "data": list, "error": str}"""# 自动构造模糊匹配模式like_pattern = f"%{InputData}%"config = {'host': '192.168.74.235','port': 3306,'user': 'mysql-onelink','password': "sk$dhfs4df4s*fd4s$44$sshg-4hy@mysql@onelink",'database': 'onelink.db.device','charset': 'utf8mb4','cursorclass': pymysql.cursors.DictCursor}sql = "SELECT * FROM `deviceinfo` WHERE `NameCN` LIKE %s"try:with pymysql.connect(**config) as conn:with conn.cursor() as cursor:cursor.execute(sql, (like_pattern,))result = cursor.fetchall()return {"success": True, "data": result, "error": ""}except pymysql.OperationalError as e:return {"success": False, "data": [], "error": str(e)}except Exception as e:return {"success": False, "data": [], "error": f"未知错误: {str(e)}"}
3.调试


4.优化查询语句
优化口语查询:
import reimport pymysqlfrom typing import Dict, Any# ------------------ 指令提取(只去动作词,保留全名)------------------def extract_name_from_command(raw_input: str) -> str:"""从自然语言指令中提取设备名称。只去掉开头的动作词,保留剩余全部内容。"""action_words = ['打开', '关闭', '启动', '停止', '开启', '关掉', '断开', '切换']for w in action_words:if raw_input.startswith(w):return raw_input[len(w):].strip()return raw_input.strip()# ------------------ 可选:无结果时自动尝试去掉后缀再查 ------------------def fallback_search(raw_name: str) -> str:"""如果直接用“xxx灯”查不到,可以尝试去掉常见的设备后缀再查一次。返回更短的查询词(如“彩灯” -> “彩”)。"""suffixes = ['灯', '设备', '电器', '开关', '插座', '窗帘', '空调', '电视', '风扇']for s in suffixes:if raw_name.endswith(s):return raw_name[:-len(s)]return raw_name # 没有匹配后缀则原样返回# ------------------ 主查询函数 ------------------def get_devices_by_name(InputData: str) -> Dict[str, Any]:"""根据外部输入(可以是“彩灯”或“打开彩灯”)模糊查询 deviceinfo 表。先尝试用完整提取词查,若无结果,自动去掉常见后缀再查一次。"""# 1. 解析指令,得到初步查询词search_term = extract_name_from_command(InputData)config = {'host': '192.168.74.235','port': 3306,'user': 'mysql-onelink','password': "sk$dhfs4df4s*fd4s$44$sshg-4hy@mysql@onelink",'database': 'onelink.db.device','charset': 'utf8mb4','cursorclass': pymysql.cursors.DictCursor}sql = "SELECT * FROM `deviceinfo` WHERE `NameCN` LIKE %s"def do_query(like_pattern: str):"""内部查询执行器"""with pymysql.connect(**config) as conn:with conn.cursor() as cursor:cursor.execute(sql, (like_pattern,))return cursor.fetchall()try:# 2. 第一次查询:使用完整名词(如“彩灯”)results = do_query(f"%{search_term}%")if results:return {"success": True, "data": results, "error": ""}# 3. 如果没结果,尝试去掉后缀再查(如“彩灯”->“彩”)short_term = fallback_search(search_term)if short_term != search_term:results2 = do_query(f"%{short_term}%")if results2:return {"success": True, "data": results2, "error": ""}# 4. 仍无结果,返回空return {"success": True, "data": [], "error": ""}except pymysql.OperationalError as e:return {"success": False, "data": [], "error": str(e)}except Exception as e:return {"success": False, "data": [], "error": f"未知错误: {str(e)}"}
5.设置聊天对话



夜雨聆风