Appearance
AI 集成
系统集成 DeepSeek 大模型,用于分类打标、自然语言查询与记账等场景,并完整记录调用用量。
客户端
DeepSeekClient 基于 java.net.http.HttpClient 调用 {baseUrl}/chat/completions:
temperature = 0.2,response_format = {"type":"json_object"},非流式。- 解析返回的
choices[0].message.content与usage(含缓存命中 token)。 - 连接超时 10 秒、请求超时 60 秒。
配置存储于 t_ai_config(每用户一条):enabled、api_key、base_url(默认 https://api.deepseek.com)、model(默认 deepseek-chat)。API Key 对外脱敏,支持连通性测试。
调用类型
AiCallType 定义了 7 类调用,全部记录用量:
| 枚举值 | 含义 |
|---|---|
SUGGEST | 交易分类/标签建议(批量 + 单条) |
TEST | 连接测试 |
QUERY | 自然语言查询解析为筛选条件 |
RECORD | 自然语言记账解析为交易记录 |
DECORATE | 分类 Emoji / 标签颜色建议 |
CATEGORY | 自然语言生成分类 |
TAG | 自然语言生成标签 |
分类/标签建议
AiSuggestionServiceImpl:
- 先按「类型 + 支付方式 + 备注」聚合去重,仅将代表记录送模型;单批 ≤ 100 条、总量 ≤ 500 条,超出则分批调用。
- 支持严格模式(仅从已有分类/标签中选择)与增强模式(可返回新分类/新标签)。
- 应用时分类覆盖写入、标签追加;新建分类按「类型 + 名称」去重,新建标签按名称去重并校验颜色格式。
自然语言查询
AiQueryServiceImpl 在提示词中注入当前分类、标签与当前日期,解析出:类型、支付方式、分类名、标签名、日期范围预设(今天/昨天/本周/上周/本月/上月/近7天/近30天/今年/去年/自定义/无)、金额区间、备注、是否计入统计、是否未分类等,并在服务端把预设换算为绝对时间。
自然语言记账
AiRecordServiceImpl 解析类型、金额、分类、标签、支付方式、交易时间、备注、计入统计等字段;金额无效直接报错,时间缺失回退当前时间。
用量记录
- 每次调用写入
t_ai_usage:调用类型、模型、分析条数、输入/输出/总/缓存 token、是否成功、错误信息、耗时。 - 记录失败仅告警,不影响主流程。
GET /api/ai/usage返回汇总与最近明细,对应「模型使用情况」页面。
说明
账单类型识别不使用 AI,而是由邮箱账单的发件人规则确定,结果确定、可预期。详见定时通知与邮箱账单。