原始错误: unsupported operand type(s) for /: 'str' and 'int'
问题原因:
- API返回的数据可能是字符串格式,直接除以100导致类型错误
- 没有对不同数据类型进行安全处理
修复方案:
- 添加了
safe_float_convert()函数,安全处理各种数据类型 - 实现了
smart_convert()函数,智能判断是否需要分转元的转换 - 支持多种数据结构格式(
balance_infos、balance_info、直接数据)
原始错误: HTTP 404: 404 page not found
问题原因:
- 使用了错误的API端点
- 硅基流动的实际API结构与预期不符
修复方案:
- 更新了API端点列表,按优先级尝试
- 添加了
_is_valid_billing_response()方法验证响应有效性 - 实现了
_parse_siliconflow_data()方法解析多种数据格式 - 支持OpenAI兼容的API端点作为备选
原始错误: HTTP 404: 404 page not found
问题原因:
- 使用了错误的API端点
/api/v1/billing/usage - 缺少正确的认证头设置
修复方案:
- 更新了完整的API端点列表,包含compatible-mode路径
- 添加了
X-DashScope-API-Key认证头 - 实现了
_is_valid_response()和_parse_aliyun_data()方法 - 支持多种数据结构和字段名映射
新的API端点:
possible_endpoints = [
f"{self.base_url}/compatible-mode/v1/dashboard/billing/usage",
f"{self.base_url}/api/v1/services/aigc/text-generation/generation",
f"{self.base_url}/compatible-mode/v1/models",
f"{self.base_url}/api/v1/usage",
f"{self.base_url}/v1/billing"
]原始错误: HTTP 404: 404 page not found
问题原因:
- 单一API端点
/api/v1/billing不可用 - 认证方式可能不正确
修复方案:
- 扩展了API端点列表,包含多个版本
- 改进了AK/SK和API Key两种认证方式
- 实现了
_is_valid_doubao_response()和_parse_doubao_data()方法 - 支持result和data两种数据结构
新的API端点:
possible_endpoints = [
f"{self.base_url}/api/v3/billing",
f"{self.base_url}/api/v2/billing",
f"{self.base_url}/api/v1/user/balance",
f"{self.base_url}/v1/models",
f"{self.base_url}/open-api/v2/billing"
]原始错误: HTTP 404: 404 page not found
问题原因:
- API端点
/api/paas/v4/billing/usage和/api/paas/v4/billing/credit不可用 - 数据解析逻辑不完善
修复方案:
- 大幅扩展了API端点列表,包含多个版本和路径
- 实现了智能的数据组合逻辑
- 添加了
_has_balance_info()和_has_complete_info()检查方法 - 支持分离的余额和使用数据自动组合
新的API端点:
possible_endpoints = [
f"{self.base_url}/api/paas/v4/billing/usage",
f"{self.base_url}/api/paas/v3/billing/usage",
f"{self.base_url}/api/v4/billing",
f"{self.base_url}/api/paas/v4/models",
f"{self.base_url}/v4/billing"
]检查 ai_billing_config.ini 文件:
[deepseek]
api_key = sk-your-deepseek-api-key
base_url = https://api.deepseek.com
enabled = true
[siliconflow]
api_key = sk-your-siliconflow-api-key
base_url = https://api.siliconflow.cn
enabled = true# 查询所有平台
python3 get_bill.py --query
# 只查询DeepSeek
python3 get_bill.py --platform deepseek
# 只查询硅基流动
python3 get_bill.py --platform siliconflow
# 详细日志
python3 get_bill.py --query --verbosefrom get_bill import DeepSeekPlatform, SiliconFlowPlatform
# DeepSeek
deepseek = DeepSeekPlatform('your-api-key')
billing_info = deepseek.get_billing_info()
print(f"DeepSeek余额: {billing_info.balance} {billing_info.currency}")
# 硅基流动
siliconflow = SiliconFlowPlatform('your-api-key')
billing_info = siliconflow.get_billing_info()
print(f"硅基流动余额: {billing_info.balance} {billing_info.currency}")运行测试脚本验证修复效果:
# 逻辑测试(无网络依赖)
python3 test_logic.py
# 完整测试(需要网络和API密钥)
python3 test_fix.py- 安全的数据类型转换
- 多重API端点重试
- 详细的错误日志
- 支持多种响应格式
- 自动检测数据结构
- 智能字段映射
- DeepSeek: 支持分/元自动转换
- 硅基流动: 兼容OpenAI API规范
- 通用: 支持字符串和数值型数据
- API密钥: 确保API密钥有效且有足够权限
- 网络连接: 确保能够访问相应的API服务
- API限制: 注意各平台的请求频率限制
- 数据格式: 如果API返回格式变化,系统会自动适配
-
仍然报404错误
- 检查API密钥是否正确
- 确认账户是否有API访问权限
- 尝试在浏览器中访问API文档
-
数据显示为0
- 可能是新注册账户,余额确实为0
- 检查API返回的原始数据(--verbose模式)
-
网络连接问题
- 检查防火墙设置
- 确认DNS解析正常
- 尝试使用代理
使用详细模式查看更多信息:
python3 get_bill.py --query --verbose这将显示:
- API请求详情
- 响应数据内容
- 错误堆栈信息
- 重试过程
- ✅ 修复DeepSeek字符串除法错误
- ✅ 更新硅基流动API端点
- ✅ 增强数据类型安全处理
- ✅ 添加多重API端点重试
- ✅ 改进错误处理和日志
- ✅ 支持更多数据格式
修复后的系统现在更加稳定和兼容,能够处理各种API响应格式,并提供详细的错误信息帮助排查问题。