基于Gin框架的Go后端服务,用于处理Apple快捷指令发送的账单图片,通过大模型API进行OCR识别并返回结构化的账单信息。
- 接收Base64编码的图片数据
- 本地存储和MinIO对象存储
- 生成预签名URL(1分钟过期)
- 集成火山引擎大模型API进行账单OCR识别
- 智能分类账单类型
- RESTful API接口
billing/
├── cmd/server/ # 主服务器入口
├── internal/
│ ├── config/ # 配置管理
│ ├── handler/ # HTTP处理器
│ ├── model/ # 数据模型
│ └── service/ # 业务服务
├── uploads/ # 本地图片存储目录
├── go.mod # Go模块文件
└── README.md # 项目说明
运行配置向导,按提示填入您的配置信息:
./setup.sh- 复制配置模板文件:
cp env.example .env- 编辑
.env文件,填入您的实际配置:
# 服务器配置
SERVER_PORT=8080
# MinIO配置(云服务或本地)
MINIO_ENDPOINT=your-minio-endpoint.com:9000
MINIO_ACCESS_KEY=your-access-key
MINIO_SECRET_KEY=your-secret-key
MINIO_USE_SSL=true
MINIO_BUCKET=billing-images
# 火山引擎大模型配置
ARK_API_KEY=your-ark-api-key
ARK_BASE_URL=https://ark.cn-beijing.volces.com/api/v3
ARK_MODEL=your-model-endpoint-id
ARK_MAX_TOKENS=4096
# 上传配置
UPLOAD_PATH=./uploads
UPLOAD_EXPIRY_MINUTES=1注意:所有配置都从 .env 文件读取,请确保所有必需参数都已正确配置。
- 安装依赖:
go mod tidy- 编译项目:
go build -o billing cmd/server/main.go- 启动服务:
./billinggo run cmd/server/main.go- 健康检查:
curl -X GET http://localhost:8080/api/v1/health- 使用测试客户端:
go run test_client.go path/to/your/billing_image.jpg- 直接API测试:
curl -X POST http://localhost:8080/api/v1/upload \
-H "Content-Type: application/json" \
-d '{"image_data": "your_base64_encoded_image_data"}'注意:图片尺寸需要至少14x14像素,大模型才能正确识别。
POST /api/v1/upload
请求体:
{
"image_data": "base64_encoded_image_data"
}响应:
{
"success": true,
"message": "Billing image processed successfully",
"data": {
"amount": 15.00,
"time": "2025-08-08 07:38:41",
"class": "shopping",
"method": "银行卡",
"transaction_id": "21324324234211",
"type": "支出"
}
}GET /api/v1/health
响应:
{
"status": "ok",
"message": "Billing service is running"
}系统支持以下账单分类:
shopping: 电商平台(淘宝、京东、亚马逊等)transfer: 转账、红包等finance: 理财、基金、借贷等dining: 餐饮、外卖等entertainment: 电影、K歌、旅游等recharge: 手机话费、游戏点券等subscription: 会员订阅等gaming: 游戏内购买等other: 其他无法分类的交易
- 框架: Gin
- 对象存储: MinIO
- 大模型: 火山引擎Ark
- 语言: Go 1.21+