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

3.1 KiB
Raw Blame History

推荐服务 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 覆盖:

# 如果传入的是空字符串,保持为空字符串(不覆盖)
# 这样推荐服务可以使用空字符串来明确表示"只使用公开接口"

2. 修复 connect 方法

当 API key 为空时,跳过权限验证:

# 验证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 确实是空的:

# 验证:确保 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 环境变量。