使用说明
TrackExpensio
人工智能驱动的个人理财助理——跟踪支出、同步银行,并通过自然语言获得洞察力。
技术栈
| 层 | 技术 |
|---|---|
| 后端 | Python、FastAPI、Uvicorn |
| AI/代理 | Groq(Llama 3.3)、FastMCP、函数调用 |
| 数据库 | MongoDB(异步电机) |
| Auth | Google OAuth、API密钥、来宾会话 |
| 整合 | Plaid、Gmail、雅虎财经、Whisper |
| 前端 | HTML、CSS、香草JS |
特征
- AI聊天 --用简明英语添加费用、设置预算和查询数据
- 银行同步 --通过Plaid连接帐户;自动导入和消除重复事务
- 印度银行支持 --账户聚合器(Setu/Finvu/OneMoney)+用于印度银行警报的短信解析器
- Gmail解析 --从银行提醒电子邮件中提取真实交易,过滤掉促销活动
- 收据上传 --RAG管道从账单图像/PDF中提取商家、金额和日期
- 语音命令 --通过Whisper语音转文本说出费用
- 预算和目标 --设定类别预算并跟踪节省进度
- 投资与债务 --投资组合跟踪、债务偿还记录
- 税务估算 --多管辖区发动机(IN、US、GB、CA、AU、DE、FR、SG、AE、CH)
- 外汇兑换 --使用MongoDB缓存的历史汇率
- 报告 --以PDF格式导出的月度财务摘要
- 安全 --bcrypt密码、速率限制、IP阻止、审计日志
快速开始
先决条件: Python 3.10+,MongoDB
git clone <repo-url> && cd project
python -m venv venv && source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
创建 .env 文件:
MONGODB_URI=mongodb://localhost:27017
MONGODB_DB=ai_expense_tracker
GROQ_API_KEY=your_groq_api_key
GROQ_AGENT_MODEL=llama-3.3-70b-versatile
# Optional
GOOGLE_CLIENT_ID=...
GOOGLE_CLIENT_SECRET=...
PLAID_CLIENT_ID=...
PLAID_SECRET=...
OPENAI_API_KEY=... # for Whisper voice
SMTP_HOST=smtp.gmail.com # for bill reminders
python run_app.py
# → http://127.0.0.1:8080
项目结构
├── main.py # 44 MCP tools (expenses, budgets, investments, …)
├── api.py # FastAPI routes and middleware
├── chat_agent.py # Groq agent with function-calling
├── database.py # MongoDB operations
├── auth.py # API key + session authentication
├── security.py # Rate limiting, IP blocking, bcrypt
├── tax_rules.py # Multi-jurisdiction tax engine
├── fx_timing.py # Historical FX rate management
├── audit_logger.py # Action audit trail
├── services/
│ ├── bank_plaid.py # Plaid Link + transaction sync
│ ├── account_aggregator.py # India AA integration
│ ├── gmail_bills.py # Gmail receipt parsing
│ ├── sms_parser.py # Indian bank SMS parser
│ ├── transaction_filters.py # Promo / credit filtering
│ ├── notifications.py # Email bill reminders
│ └── pdf_reports.py # PDF report generation
└── static/
├── plaid_link.js
├── india_bank_sync.js
└── voice_recording.js
MCP在TrackExpensio中的工作原理
MCP(模型上下文协议) 是AI层的骨干。每个财务操作都被注册为一个类型化的Python函数,而不是硬编码人工智能可以做什么 工具 --代理可以在运行时发现和调用。
模式
User message → Groq agent reads tool schemas → picks the right tool(s) → Python executes → MongoDB writes
AI从不直接写入数据库。它提出了一个工具调用;Python验证并执行它。这使AI层保持无状态,业务逻辑安全且可测试。
如何定义工具(main.py)
@mcp.tool()
async def add_expense(
api_key: str, date: str, amount: float,
category: str, note: str, merchant: str
) -> dict:
"""Add a new expense entry."""
user_id = await auth.authenticate_user(api_key=api_key)
return await db.add_expense(user_id, date, amount, category, note, merchant)
每 @mcp.tool() 装饰器将函数注册到 TOOL_REGISTRY 其名称、docstring和参数schema都会自动暴露给代理。
Agent如何使用工具(chat_agent.py)
Groq代理接收完整的工具注册表作为函数模式。当用户说 "Add ₹500 在Swiggy吃午饭”,代理人:
- 从消息中解析意图
- 选择
add_expense从注册表 - 填写
amount=500,merchant="Swiggy",category="Food",date=today - 返回一个结构化的工具调用——Python执行它
对于复杂的消息,如 “添加午餐费用并显示本月的总费用”,代理问题 并行工具调用 — add_expense 和 list_expenses 同时奔跑。
调用工具的三种方法
| 方法 | 如何 |
|---|---|
| AI聊天 | 代理自动选择和调用工具 |
| REST API | POST /api/mcp/<tool_name> JSON正文 |
| 克劳德桌面 | python mcp_server.py --在STDIO模式下运行 |
为什么这个架构
添加新功能意味着编写一个Python函数 @mcp.tool()。代理可以立即使用它-不需要提示更改,也不需要新的API路由。它使系统具有自然的可扩展性。
MCP工具(共44个)
费用·预算·收入·经常性·储蓄目标·债务·投资·报告·税务·信用评分·账单提醒·多币种·外汇兑换·雅虎财经·银行同步·审计日志·用户管理
所有工具都可以通过聊天、REST API调用(POST /api/mcp/<tool>),或克劳德桌面(STDIO模式)。
API终点
| 方法 | 端点 | 描述 |
|---|---|---|
POST |
/api/chat |
与AI助手聊天 |
POST |
/api/mcp/{tool_name} |
直接调用任何MCP工具 |
POST |
/api/session/create |
创建访客会话 |
GET |
/api/user/profile |
获取用户资料(登录谷歌后) |
GET |
/api/health |
健康检查 |
任选附件
# Receipt RAG + local Whisper (~3.5 GB)
pip install -r requirements-ml.txt
# Standalone MCP server for Claude Desktop
python mcp_server.py
部署
通过渲染一键部署 render.yaml.Set MONGODB_URI, GROQ_API_KEY,以及Render仪表板中的其他秘密——永远不要提交。
许可证
麻省理工学院