这是一个基于 FastAPI + web3.py + OpenAI GPT-4 的链上钱包智能分析助手。用户输入任意以太坊地址,即可获得包括 ETH、USDC、NFT 等链上资产概况,并由 GPT 模型生成个性化中文行为分析报告。 这是一个非常非常非常简单的Demo,用于学习,并不是我实际工作中使用的代码,不代表作者的真实水平,避免抄袭和出于安全考虑,完整版的1.0版本面试可介绍.
Video:https://github.com/user-attachments/assets/5927029d-d9b1-495d-aca8-694809e5bdd6
- ✅ 查询以太坊地址的 ETH、USDC 余额
- ✅ 获取 NFT(基于 ERC721 合约)持有数量
- ✅ 使用 GPT-4o-mini 模型分析钱包行为,生成自然语言总结
- ✅ 提供 API 接口,可集成到 DApp、Bot、智能客服中
| 模块 | 技术 |
|---|---|
| 后端框架 | FastAPI |
| 区块链访问 | Web3.py(Infura) |
| AI 接口 | OpenAI GPT-4 |
| 配置管理 | python-dotenv |
git clone https://github.com/yourname/ai-web3-wallet-analyzer.git
cd ai-web3-wallet-analyzerpip install -r requirements.txt
INFURA_URL=https://mainnet.infura.io/v3/YOUR_INFURA_KEY
OPENAI_API_KEY=YOUR_OPENAI_KEYfastapi dev main.py(After you run,you can see Doc is in http://127.0.0.1:8000/docs)
请求参数
{
"address": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e"
}
(作者本人最终想要实现的是能批量分析的,这里只填入一个,方便初学者学习)
返回
{
"summary": "### 链上行为特征分析报告\n\n#### 用户基本信息\n- **以太坊钱包地址**: 0x742d35Cc6634C0532925a3b844Bc454e4438f44e\n- **ETH 余额**: 964884.9742 ETH\n- **USDC 余额**: 21.08 USDC\n- **NFT 数量**: 0 个\n\n#### 行为特征总结\n\n1. **高额 ETH 余额**:\n - 该用户的以太坊余额高达964884.9742 ETH,这表明其可能是一个大型投资者或机构,具有较强的资金实力。\n - 这种高额的余额可能意味着用户在以太坊网络中进行过大量的交易,或者是长期持有以太坊资产。\n\n2. **相对较低的 USDC 余额**:\n - 用户持有的 USDC 余额仅为21.08 USDC,显示出其在稳定币方面的持有量较少。\n - 这可能表明用户不太依赖于稳定币进行交易,或者其交易策略主要集中在以太坊及其他加密资产上。\n\n3. **无 NFT 持有**:\n - 用户当前没有持有任何 NFT,这可能反映出其投资策略更倾向于传统的加密货币,而非数字艺术品或虚拟资产。\n - 这也可能意味着用户对 NFT 市场的兴趣不大,或是尚未参与该领域的投资。\n\n#### 可能的投资策略\n- 该用户可能专注于以太坊的长期投资,选择持有大量 ETH 以期望其价值增长。\n- 由于缺乏稳定币和 NFT 的持有,用户可能在进行交易时更倾向于直接使用 ETH,而不是通过稳定币进行转换。\n- 用户可能在未来会考虑多样化其资产组合,尤其是在 NFT 和稳定币市场中,以降低风险和增加收益来源。\n\n#### 结论\n综上所述,该用户在以太坊网络中的行为特征显示出其作为一个大型投资者的潜力,主要集中在以太坊资产的持有和交易上。未来可能会根据市场变化调整其投资策略,增加对其他资产类别的关注。",
"eth_balance": 964884.9742269702,
"usdc_balance": 21.0836,
"nft_balance": 0
}
(为了方便学习,这里的Summary比较简洁,完整版实现的是按照表格字段形式的,会有各种字段,如各个币的额度,交易频率,交易金额等,这里只得到数据,下一步再分析,结果会好很多。打开浏览器输入:
👉 http://127.0.0.1:8000/docs
(这个是FastAPI自带的Docs,根据我的代码为我生成文档)
找到 POST /analyze_wallet 接口,点击它。
点击 "Try it out",在文本框中粘贴你的 JSON 请求体:
{
"address": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e"
}