Skip to content

AI 集成

系统集成 DeepSeek 大模型,用于分类打标、自然语言查询与记账等场景,并完整记录调用用量。

客户端

DeepSeekClient 基于 java.net.http.HttpClient 调用 {baseUrl}/chat/completions

  • temperature = 0.2response_format = {"type":"json_object"},非流式。
  • 解析返回的 choices[0].message.contentusage(含缓存命中 token)。
  • 连接超时 10 秒、请求超时 60 秒。

配置存储于 t_ai_config(每用户一条):enabledapi_keybase_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,而是由邮箱账单的发件人规则确定,结果确定、可预期。详见定时通知邮箱账单

相关文档

基于 Spring Boot 3 + Vue 3 的个人收支管理系统