feat:新增ai分析,新增储值账户,优化通知规则
This commit is contained in:
@@ -1,9 +1,13 @@
|
||||
import { buildTransactionEnrichmentMessages } from '../../lib/aiPrompt.js'
|
||||
import {
|
||||
buildFinanceChatMessages,
|
||||
buildTransactionEnrichmentMessages,
|
||||
} from '../../lib/aiPrompt.js'
|
||||
import { useSettingsStore } from '../../stores/settings.js'
|
||||
import {
|
||||
applyAiEnrichment,
|
||||
fetchRecentTransactionsForAi,
|
||||
markTransactionAiFailed,
|
||||
markTransactionAiRunning,
|
||||
} from '../transactionService.js'
|
||||
import { DeepSeekProvider } from './deepseekProvider.js'
|
||||
|
||||
@@ -24,11 +28,13 @@ const createProvider = (settingsStore) => {
|
||||
})
|
||||
}
|
||||
|
||||
export const isAiReady = (settingsStore = useSettingsStore()) =>
|
||||
!!settingsStore.aiAutoCategoryEnabled && !!settingsStore.aiApiKey
|
||||
export const hasAiAccess = (settingsStore = useSettingsStore()) => !!settingsStore.aiApiKey
|
||||
|
||||
export const maybeEnrichTransactionWithAi = async (transaction) => {
|
||||
if (!transaction?.id) return transaction
|
||||
export const isAiReady = (settingsStore = useSettingsStore()) =>
|
||||
!!settingsStore.aiAutoCategoryEnabled && hasAiAccess(settingsStore)
|
||||
|
||||
export const maybeEnrichTransactionWithAi = async (transaction, options = {}) => {
|
||||
if (!transaction?.id || transaction.entryType === 'transfer') return transaction
|
||||
|
||||
const settingsStore = useSettingsStore()
|
||||
if (!isAiReady(settingsStore)) {
|
||||
@@ -36,11 +42,16 @@ export const maybeEnrichTransactionWithAi = async (transaction) => {
|
||||
}
|
||||
|
||||
try {
|
||||
const running = await markTransactionAiRunning(transaction.id, settingsStore.aiModel)
|
||||
if (running) {
|
||||
options.onProgress?.(running)
|
||||
}
|
||||
|
||||
const provider = createProvider(settingsStore)
|
||||
const similarTransactions = await fetchRecentTransactionsForAi(6, transaction.id)
|
||||
const messages = buildTransactionEnrichmentMessages({
|
||||
transaction,
|
||||
similarTransactions,
|
||||
similarTransactions: similarTransactions.filter((item) => item.entryType !== 'transfer'),
|
||||
})
|
||||
const result = await provider.enrichTransaction({ messages })
|
||||
const threshold = clampThreshold(settingsStore.aiAutoApplyThreshold)
|
||||
@@ -61,3 +72,19 @@ export const maybeEnrichTransactionWithAi = async (transaction) => {
|
||||
return failed || transaction
|
||||
}
|
||||
}
|
||||
|
||||
export const askFinanceAssistant = async ({ question, transactions = [], conversation = [] }) => {
|
||||
const settingsStore = useSettingsStore()
|
||||
if (!hasAiAccess(settingsStore)) {
|
||||
throw new Error('请先在设置页填写 DeepSeek API Key')
|
||||
}
|
||||
|
||||
const provider = createProvider(settingsStore)
|
||||
const messages = buildFinanceChatMessages({
|
||||
question,
|
||||
transactions,
|
||||
conversation,
|
||||
})
|
||||
|
||||
return provider.chat({ messages })
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user