From a47ab6df072ac1ea62ce62425d7dec84c59d1d93 Mon Sep 17 00:00:00 2001 From: yuanzhipeng <2501363769@qq.com> Date: Mon, 26 Jan 2026 09:50:09 +0800 Subject: [PATCH] =?UTF-8?q?feat(api=5Fclient):=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=AF=A6=E7=BB=86=E7=9A=84API=E8=AF=B7=E6=B1=82=E5=92=8C?= =?UTF-8?q?=E5=93=8D=E5=BA=94=E6=97=A5=E5=BF=97=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加对test_sql_with_schema接口的详细日志记录功能, 包括传入数据和返回数据的完整信息,便于调试和问题排查。 fix(utils): 修复sqlParams为空时的处理逻辑 修改process_skill_response函数中对空sqlParams的处理, 避免在sqlParams为None时导致JSON解析错误,并注释掉默认参数设置逻辑。 chore(config): 更新环境配置和项目版本 更新多个项目的数据库ID、数据源ID和后端基础URL配置, 并将lzwcai-mcp-sqlexecutor版本从0.1.8升级到0.10。 chore(logger): 改进日志目录创建逻辑 修改LoggerConfig类中的日志目录创建方法,使用mkdir(parents=True, exist_ok=True) 确保所有父目录都被创建。 --- .../utils/api_client.py | 37 ++++++++++++++++--- .../utils/logger_config.py | 4 +- lzwcai_mcp_sqlexecutor/main.py | 5 +++ lzwcai_mcp_sqlexecutor/pyproject.toml | 2 +- lzwcai_mcpskills_mfg_data_agent/main.py | 6 +-- lzwcai_mcpskills_mfg_data_agentv2/main.py | 7 ++-- 6 files changed, 46 insertions(+), 15 deletions(-) diff --git a/lzwcai_mcp_sqlexecutor/lzwcai_mcp_sqlexecutor/utils/api_client.py b/lzwcai_mcp_sqlexecutor/lzwcai_mcp_sqlexecutor/utils/api_client.py index 96d66eb..034bd1f 100644 --- a/lzwcai_mcp_sqlexecutor/lzwcai_mcp_sqlexecutor/utils/api_client.py +++ b/lzwcai_mcp_sqlexecutor/lzwcai_mcp_sqlexecutor/utils/api_client.py @@ -128,6 +128,19 @@ class DataSourceAPIClient: Exception: 请求失败时抛出 """ try: + # 详细记录传入的数据 + logger.info("=" * 80) + logger.info("test_sql_with_schema 接口接收到的数据:") + logger.info(f"数据类型: {type(request_data)}") + logger.info(f"数据内容: {json.dumps(request_data, ensure_ascii=False, indent=2)}") + logger.info(f"数据源ID: {request_data.get('datasourceId')}") + logger.info(f"业务名称: {request_data.get('businessName')}") + logger.info(f"业务描述: {request_data.get('businessDescription')}") + logger.info(f"SQL模板: {request_data.get('sqlTemplate')}") + logger.info(f"参数定义: {request_data.get('parameters')}") + logger.info(f"测试参数: {request_data.get('testParams')}") + logger.info("=" * 80) + url = f"{self.base_url}/datasource/sqlExecutionLog/testSqlWithSchema" # 构建请求头(包含Content-Type) @@ -151,8 +164,19 @@ class DataSourceAPIClient: # 解析JSON响应 data = response.json() + # 详细记录返回的数据 + logger.info("=" * 80) + logger.info("test_sql_with_schema 接口返回的数据:") + logger.info(f"HTTP状态码: {response.status_code}") + logger.info(f"响应数据类型: {type(data)}") + logger.info(f"响应数据内容: {json.dumps(data, ensure_ascii=False, indent=2)}") + if isinstance(data, dict): + logger.info(f"响应code: {data.get('code')}") + logger.info(f"响应msg: {data.get('msg')}") + logger.info(f"响应data: {data.get('data')}") + logger.info("=" * 80) + logger.info(f"测试SQL API调用成功") - logger.debug(f"响应数据: {json.dumps(data, ensure_ascii=False, indent=2)}") return data @@ -267,7 +291,8 @@ def process_skill_response(response: Dict[str, Any]) -> List[Dict[str, Any]]: queries = [] for skill in data_list: # 解析sqlParams字符串为JSON对象 - sql_params = json.loads(skill.get("sqlParams", "{}")) + sql_params_str = skill.get("sqlParams") or "{}" + sql_params = json.loads(sql_params_str) # 判断sqlParams是否为空对象 is_empty_params = ( @@ -278,10 +303,10 @@ def process_skill_response(response: Dict[str, Any]) -> List[Dict[str, Any]]: len(sql_params.get("required", [])) == 0 ) - # 如果是空对象,使用默认的员工ID参数 - if is_empty_params: - logger.info(f"技能 {skill.get('name')} (ID: {skill.get('id')}) 的sqlParams为空,使用默认员工ID参数") - sql_params = default_employee_schema + # # 如果是空对象,使用默认的员工ID参数 + # if is_empty_params: + # logger.info(f"技能 {skill.get('name')} (ID: {skill.get('id')}) 的sqlParams为空,使用默认员工ID参数") + # sql_params = default_employee_schema # 映射字段 query = { diff --git a/lzwcai_mcp_sqlexecutor/lzwcai_mcp_sqlexecutor/utils/logger_config.py b/lzwcai_mcp_sqlexecutor/lzwcai_mcp_sqlexecutor/utils/logger_config.py index 290964f..07c411e 100644 --- a/lzwcai_mcp_sqlexecutor/lzwcai_mcp_sqlexecutor/utils/logger_config.py +++ b/lzwcai_mcp_sqlexecutor/lzwcai_mcp_sqlexecutor/utils/logger_config.py @@ -29,8 +29,8 @@ class LoggerConfig: project_root = Path(__file__).parent.parent self.logs_dir = project_root / "logs" - # 创建日志目录 - self.logs_dir.mkdir(exist_ok=True) + # 创建日志目录(包括父目录) + self.logs_dir.mkdir(parents=True, exist_ok=True) # 日志格式 self.log_format = '%(asctime)s - %(name)s - %(levelname)s - [%(filename)s:%(lineno)d] - %(message)s' diff --git a/lzwcai_mcp_sqlexecutor/main.py b/lzwcai_mcp_sqlexecutor/main.py index 8a0eb27..e87912b 100644 --- a/lzwcai_mcp_sqlexecutor/main.py +++ b/lzwcai_mcp_sqlexecutor/main.py @@ -2,8 +2,13 @@ Entry point for lzwcai-mcp-sqlexecutor Runs the MCP server for SQL query execution """ +import os +os.environ["databaseId"] = "12" +os.environ["skillId"] = "2013848312313335809" +os.environ["backendBaseUrl"] = "http://192.168.11.24:8088" if __name__ == "__main__": # Import and run the actual MCP server from lzwcai_mcp_sqlexecutor.main import main + main() diff --git a/lzwcai_mcp_sqlexecutor/pyproject.toml b/lzwcai_mcp_sqlexecutor/pyproject.toml index 8ed0806..0666aa4 100644 --- a/lzwcai_mcp_sqlexecutor/pyproject.toml +++ b/lzwcai_mcp_sqlexecutor/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "lzwcai-mcp-sqlexecutor" -version = "0.1.8" +version = "0.1.10" description = "MCP server for executing business SQL queries with dynamic tool generation" readme = "README.md" requires-python = ">=3.13" diff --git a/lzwcai_mcpskills_mfg_data_agent/main.py b/lzwcai_mcpskills_mfg_data_agent/main.py index 90de015..6a240d9 100644 --- a/lzwcai_mcpskills_mfg_data_agent/main.py +++ b/lzwcai_mcpskills_mfg_data_agent/main.py @@ -4,9 +4,9 @@ Runs the MCP server for manufacturing data intelligence """ import os -os.environ["databaseId"] = "19" -os.environ["datasourceId"] = "19" -os.environ["backendBaseUrl"] = "http://192.168.11.24:8088" +os.environ["databaseId"] = "57" +os.environ["datasourceId"] = "57" +os.environ["backendBaseUrl"] = "http://192.167.30.2:8088" if __name__ == "__main__": # Import and run the actual MCP server from lzwcai_mcpskills_mfg_data_agent.main import main diff --git a/lzwcai_mcpskills_mfg_data_agentv2/main.py b/lzwcai_mcpskills_mfg_data_agentv2/main.py index f0da2de..420d025 100644 --- a/lzwcai_mcpskills_mfg_data_agentv2/main.py +++ b/lzwcai_mcpskills_mfg_data_agentv2/main.py @@ -4,9 +4,10 @@ Runs the MCP server for manufacturing data intelligence """ import os -os.environ["databaseId"] = "19" -os.environ["datasourceId"] = "19" -os.environ["backendBaseUrl"] = "http://192.168.11.24:8088" + +os.environ["databaseId"] = "57" +os.environ["datasourceId"] = "57" +os.environ["backendBaseUrl"] = "http://192.167.30.2:8088" if __name__ == "__main__": # Import and run the actual MCP server from lzwcai_mcpskills_mfg_data_agentv2.main import main