auto_trade_sys/RECOMMENDATION_SERVICE_API_KEY_FIX.md
薇薇安 1032295052 a
2026-01-25 09:16:16 +08:00

76 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 推荐服务 API Key 修复说明
## 问题描述
推荐服务(`recommendations_main.py`)仍然在使用真实的 API key导致可能使用错误的账户如 account_id=2进行下单。
## 根本原因
1. **推荐服务不应该使用任何账户的 API key**:推荐服务只需要获取公开行情数据,不需要认证。
2. **`config.py` 在导入时会读取 `ATS_ACCOUNT_ID`**:如果推荐服务的 supervisor 配置中设置了 `ATS_ACCOUNT_ID=2`,那么 `config.py` 会读取 account_id=2 的 API key。
3. **`BinanceClient.__init__` 可能被覆盖**:即使传入空字符串,如果 `config._config_manager` 存在,可能会在某个地方被覆盖。
## 修复方案
### 1. 修复 `BinanceClient.__init__` 逻辑
确保传入空字符串时不会被 config 覆盖:
```python
# 如果传入的是空字符串,保持为空字符串(不覆盖)
# 这样推荐服务可以使用空字符串来明确表示"只使用公开接口"
```
### 2. 修复 `connect` 方法
当 API key 为空时,跳过权限验证:
```python
# 验证API密钥权限仅当提供了有效的 API key 时)
if self.api_key and self.api_secret:
await self._verify_api_permissions()
else:
logger.info("✓ 使用公开 API跳过权限验证只能获取行情数据")
```
### 3. 在推荐服务中添加验证
`recommendations_main.py` 中添加验证逻辑,确保 API key 确实是空的:
```python
# 验证:确保 API key 确实是空的
if client.api_key:
logger.error(f"❌ 推荐服务 API Key 非空!当前值: {client.api_key[:4]}...")
logger.error(" 这可能导致推荐服务使用错误的账户密钥,请检查 BinanceClient.__init__ 逻辑")
else:
logger.info("✓ 推荐服务 API Key 确认为空,将只使用公开接口")
```
## 检查清单
1. ✅ 确保 `recommendations_main.py` 传入空字符串:`BinanceClient(api_key="", api_secret="")`
2. ✅ 确保 `BinanceClient.__init__` 不会覆盖空字符串
3. ✅ 确保 `connect` 方法在 API key 为空时跳过权限验证
4. ✅ 在推荐服务中添加验证逻辑,确保 API key 确实是空的
## 验证方法
1. 查看推荐服务的日志,确认显示:
- `✓ 推荐服务 API Key 确认为空,将只使用公开接口`
- `✓ 使用公开 API跳过权限验证只能获取行情数据`
2. 如果看到以下日志,说明仍有问题:
- `❌ 推荐服务 API Key 非空!`
- `初始化币安客户端: gqtx...sYmj, l3IB...I6NA`(显示真实的 API key
## 注意事项
1. **推荐服务不应该设置 `ATS_ACCOUNT_ID`**:推荐服务的 supervisor 配置不应该设置 `ATS_ACCOUNT_ID`,或者应该明确设置为空。
2. **推荐服务不应该下单**:推荐服务只生成推荐,不应该进行任何下单操作。
3. **如果推荐服务仍然使用真实的 API key**:检查 supervisor 配置,确保推荐服务进程没有设置 `ATS_ACCOUNT_ID`
## 后续优化
1. 考虑在 `config.py` 中添加一个标志,区分推荐服务和交易服务。
2. 考虑在推荐服务启动时,明确清除 `ATS_ACCOUNT_ID` 环境变量。