|
@@ -1,221 +0,0 @@
|
|
-#!/usr/bin/env python3
|
|
|
|
-"""
|
|
|
|
-测试当前API的真实输出,分析数据结构以确定是否能满足需求
|
|
|
|
-"""
|
|
|
|
-import requests
|
|
|
|
-import json
|
|
|
|
-from datetime import datetime
|
|
|
|
-
|
|
|
|
-def test_current_api():
|
|
|
|
- """测试当前的对话历史API"""
|
|
|
|
- print("=" * 60)
|
|
|
|
- print("测试当前API的真实输出")
|
|
|
|
- print("=" * 60)
|
|
|
|
-
|
|
|
|
- # API URL
|
|
|
|
- api_url = "http://localhost:8084/api/v0/react/users/wang10/conversations/wang10:20250717211620915"
|
|
|
|
-
|
|
|
|
- try:
|
|
|
|
- print(f"📡 调用API: {api_url}")
|
|
|
|
- response = requests.get(api_url, timeout=30)
|
|
|
|
-
|
|
|
|
- print(f"📊 状态码: {response.status_code}")
|
|
|
|
- print(f"📄 响应头: {dict(response.headers)}")
|
|
|
|
-
|
|
|
|
- if response.status_code == 200:
|
|
|
|
- data = response.json()
|
|
|
|
- print(f"✅ API调用成功")
|
|
|
|
- print(f"📋 响应数据结构分析:")
|
|
|
|
- analyze_response_structure(data)
|
|
|
|
-
|
|
|
|
- # 分析消息结构
|
|
|
|
- if 'data' in data and 'messages' in data['data']:
|
|
|
|
- analyze_messages(data['data']['messages'])
|
|
|
|
-
|
|
|
|
- # 保存完整响应到文件
|
|
|
|
- with open('api_response_full.json', 'w', encoding='utf-8') as f:
|
|
|
|
- json.dump(data, f, ensure_ascii=False, indent=2)
|
|
|
|
- print(f"💾 完整响应已保存到 api_response_full.json")
|
|
|
|
-
|
|
|
|
- else:
|
|
|
|
- print(f"❌ API调用失败: {response.status_code}")
|
|
|
|
- print(f"📄 错误响应: {response.text}")
|
|
|
|
-
|
|
|
|
- except requests.exceptions.RequestException as e:
|
|
|
|
- print(f"❌ 网络请求失败: {e}")
|
|
|
|
- except Exception as e:
|
|
|
|
- print(f"❌ 其他错误: {e}")
|
|
|
|
-
|
|
|
|
-def analyze_response_structure(data):
|
|
|
|
- """分析响应数据结构"""
|
|
|
|
- print(f" 🔍 顶级键: {list(data.keys())}")
|
|
|
|
-
|
|
|
|
- if 'data' in data:
|
|
|
|
- data_section = data['data']
|
|
|
|
- print(f" 🔍 data部分键: {list(data_section.keys())}")
|
|
|
|
-
|
|
|
|
- if 'message_count' in data_section:
|
|
|
|
- print(f" 📊 消息总数: {data_section['message_count']}")
|
|
|
|
-
|
|
|
|
- if 'messages' in data_section:
|
|
|
|
- messages = data_section['messages']
|
|
|
|
- print(f" 📊 消息列表长度: {len(messages)}")
|
|
|
|
-
|
|
|
|
-def analyze_messages(messages):
|
|
|
|
- """详细分析消息结构"""
|
|
|
|
- print(f"\n📨 消息详细分析:")
|
|
|
|
- print(f" 总消息数: {len(messages)}")
|
|
|
|
-
|
|
|
|
- # 统计消息类型
|
|
|
|
- message_types = {}
|
|
|
|
- has_id_count = 0
|
|
|
|
- has_timestamp_count = 0
|
|
|
|
- has_tool_calls_count = 0
|
|
|
|
-
|
|
|
|
- print(f"\n 前5条消息样例:")
|
|
|
|
- for i, msg in enumerate(messages[:5]):
|
|
|
|
- print(f" 消息 {i+1}:")
|
|
|
|
- print(f" 类型: {msg.get('type', 'unknown')}")
|
|
|
|
- print(f" 内容长度: {len(str(msg.get('content', '')))}")
|
|
|
|
- print(f" 是否有ID: {'id' in msg}")
|
|
|
|
- print(f" 是否有时间戳: {'timestamp' in msg}")
|
|
|
|
- print(f" 是否有工具调用: {'tool_calls' in msg}")
|
|
|
|
-
|
|
|
|
- if 'id' in msg:
|
|
|
|
- print(f" ID值: {msg['id']}")
|
|
|
|
- if 'timestamp' in msg:
|
|
|
|
- print(f" 时间戳: {msg['timestamp']}")
|
|
|
|
- if 'tool_calls' in msg and msg['tool_calls']:
|
|
|
|
- print(f" 工具调用数量: {len(msg['tool_calls']) if isinstance(msg['tool_calls'], list) else 'non-list'}")
|
|
|
|
-
|
|
|
|
- print(f" 所有字段: {list(msg.keys())}")
|
|
|
|
- print()
|
|
|
|
-
|
|
|
|
- # 统计所有消息的类型和字段
|
|
|
|
- for msg in messages:
|
|
|
|
- msg_type = msg.get('type', 'unknown')
|
|
|
|
- message_types[msg_type] = message_types.get(msg_type, 0) + 1
|
|
|
|
-
|
|
|
|
- if 'id' in msg:
|
|
|
|
- has_id_count += 1
|
|
|
|
- if 'timestamp' in msg:
|
|
|
|
- has_timestamp_count += 1
|
|
|
|
- if 'tool_calls' in msg:
|
|
|
|
- has_tool_calls_count += 1
|
|
|
|
-
|
|
|
|
- print(f" 📊 消息类型统计: {message_types}")
|
|
|
|
- print(f" 📊 包含ID的消息数: {has_id_count}/{len(messages)}")
|
|
|
|
- print(f" 📊 包含时间戳的消息数: {has_timestamp_count}/{len(messages)}")
|
|
|
|
- print(f" 📊 包含工具调用的消息数: {has_tool_calls_count}/{len(messages)}")
|
|
|
|
-
|
|
|
|
-def test_with_parameters():
|
|
|
|
- """测试带参数的API调用(虽然可能不支持)"""
|
|
|
|
- print("\n" + "=" * 60)
|
|
|
|
- print("测试带参数的API调用")
|
|
|
|
- print("=" * 60)
|
|
|
|
-
|
|
|
|
- base_url = "http://localhost:8084/api/v0/react/users/wang10/conversations/wang10:20250717211620915"
|
|
|
|
-
|
|
|
|
- test_params = [
|
|
|
|
- {},
|
|
|
|
- {"include_tools": "false"},
|
|
|
|
- {"simplified": "true"},
|
|
|
|
- {"include_tools": "false", "simplified": "true"}
|
|
|
|
- ]
|
|
|
|
-
|
|
|
|
- for i, params in enumerate(test_params):
|
|
|
|
- print(f"\n🧪 测试 {i+1}: 参数 = {params}")
|
|
|
|
-
|
|
|
|
- try:
|
|
|
|
- response = requests.get(base_url, params=params, timeout=10)
|
|
|
|
- print(f" 状态码: {response.status_code}")
|
|
|
|
-
|
|
|
|
- if response.status_code == 200:
|
|
|
|
- data = response.json()
|
|
|
|
- message_count = data.get('data', {}).get('message_count', 0)
|
|
|
|
- print(f" 消息数量: {message_count}")
|
|
|
|
-
|
|
|
|
- # 检查是否有参数相关的字段
|
|
|
|
- data_section = data.get('data', {})
|
|
|
|
- if 'mode' in data_section:
|
|
|
|
- print(f" 模式: {data_section['mode']}")
|
|
|
|
- if 'include_tools' in data_section:
|
|
|
|
- print(f" include_tools: {data_section['include_tools']}")
|
|
|
|
- if 'simplified' in data_section:
|
|
|
|
- print(f" simplified: {data_section['simplified']}")
|
|
|
|
- else:
|
|
|
|
- print(f" 失败: {response.text[:100]}")
|
|
|
|
-
|
|
|
|
- except Exception as e:
|
|
|
|
- print(f" 错误: {e}")
|
|
|
|
-
|
|
|
|
-def analyze_feasibility():
|
|
|
|
- """基于实际数据分析可行性"""
|
|
|
|
- print("\n" + "=" * 60)
|
|
|
|
- print("需求可行性分析")
|
|
|
|
- print("=" * 60)
|
|
|
|
-
|
|
|
|
- try:
|
|
|
|
- with open('api_response_full.json', 'r', encoding='utf-8') as f:
|
|
|
|
- data = json.load(f)
|
|
|
|
-
|
|
|
|
- messages = data.get('data', {}).get('messages', [])
|
|
|
|
-
|
|
|
|
- print(f"📋 基于 {len(messages)} 条消息的分析:")
|
|
|
|
-
|
|
|
|
- # 需求1: 过滤消息类型
|
|
|
|
- human_messages = [msg for msg in messages if msg.get('type') == 'human']
|
|
|
|
- ai_messages = [msg for msg in messages if msg.get('type') == 'ai']
|
|
|
|
- tool_messages = [msg for msg in messages if msg.get('type') == 'tool']
|
|
|
|
-
|
|
|
|
- print(f"\n🎯 需求1 - 消息过滤:")
|
|
|
|
- print(f" Human消息: {len(human_messages)} 条")
|
|
|
|
- print(f" AI消息: {len(ai_messages)} 条")
|
|
|
|
- print(f" Tool消息: {len(tool_messages)} 条")
|
|
|
|
-
|
|
|
|
- # 分析AI消息中哪些有实际内容
|
|
|
|
- ai_with_content = [msg for msg in ai_messages if msg.get('content', '').strip()]
|
|
|
|
- ai_with_tools = [msg for msg in ai_messages if msg.get('tool_calls')]
|
|
|
|
-
|
|
|
|
- print(f" 有内容的AI消息: {len(ai_with_content)} 条")
|
|
|
|
- print(f" 有工具调用的AI消息: {len(ai_with_tools)} 条")
|
|
|
|
-
|
|
|
|
- # 需求2: 时间戳分析
|
|
|
|
- print(f"\n🕐 需求2 - 时间戳分析:")
|
|
|
|
- messages_with_timestamp = [msg for msg in messages if 'timestamp' in msg]
|
|
|
|
- messages_with_id = [msg for msg in messages if 'id' in msg]
|
|
|
|
-
|
|
|
|
- print(f" 有时间戳的消息: {len(messages_with_timestamp)} 条")
|
|
|
|
- print(f" 有ID的消息: {len(messages_with_id)} 条")
|
|
|
|
-
|
|
|
|
- if messages_with_timestamp:
|
|
|
|
- sample_timestamp = messages_with_timestamp[0]['timestamp']
|
|
|
|
- print(f" 时间戳样例: {sample_timestamp}")
|
|
|
|
-
|
|
|
|
- if messages_with_id:
|
|
|
|
- sample_id = messages_with_id[0]['id']
|
|
|
|
- print(f" ID样例: {sample_id}")
|
|
|
|
-
|
|
|
|
- # 可行性结论
|
|
|
|
- print(f"\n✅ 可行性结论:")
|
|
|
|
- print(f" 需求1 (消息过滤): {'✅ 可行' if human_messages and ai_with_content else '❌ 不可行'}")
|
|
|
|
- print(f" 需求2 (真实时间戳): {'✅ 可行' if messages_with_timestamp else '❌ 需要进一步分析'}")
|
|
|
|
-
|
|
|
|
- except FileNotFoundError:
|
|
|
|
- print("❌ 请先运行主测试获取数据")
|
|
|
|
- except Exception as e:
|
|
|
|
- print(f"❌ 分析失败: {e}")
|
|
|
|
-
|
|
|
|
-if __name__ == "__main__":
|
|
|
|
- print(f"🚀 开始API分析测试 - {datetime.now()}")
|
|
|
|
-
|
|
|
|
- # 测试当前API
|
|
|
|
- test_current_api()
|
|
|
|
-
|
|
|
|
- # 测试参数支持
|
|
|
|
- test_with_parameters()
|
|
|
|
-
|
|
|
|
- # 分析可行性
|
|
|
|
- analyze_feasibility()
|
|
|
|
-
|
|
|
|
- print(f"\n🏁 测试完成 - {datetime.now()}")
|
|
|