Files
prop-ai-hr/mobile-uni/src/services/knowledge.ts
T

66 lines
1.5 KiB
TypeScript

import type {
AnswerFeedbackVerdict,
KnowledgeSearchResponse,
KnowledgeSnippet,
SummaryCardResponse
} from '@/types/api';
import { apiRequest } from './api';
type RawKnowledgeSnippet = KnowledgeSnippet & {
title?: string;
text?: string;
};
const normalizeSnippet = (snippet: RawKnowledgeSnippet): KnowledgeSnippet => ({
...snippet,
docTitle: snippet.docTitle || snippet.title || '',
content: snippet.content || snippet.text || ''
});
export const searchKnowledge = async (queryText: string) => {
const response = await apiRequest<KnowledgeSearchResponse>({
url: '/api/knowledge/search',
method: 'POST',
data: {
queryText,
category: 'sop',
limit: 5
},
timeout: 30000
});
return {
...response,
snippets: (response.snippets || []).map((item) => normalizeSnippet(item as RawKnowledgeSnippet))
};
};
export const submitAnswerFeedback = (params: {
queryText: string;
fragmentIds: number[];
verdict: AnswerFeedbackVerdict;
}) =>
apiRequest<{ saved: number }>({
url: '/api/knowledge/answer-feedback',
method: 'POST',
data: {
queryText: params.queryText,
fragmentIds: params.fragmentIds,
verdict: params.verdict,
category: 'sop',
position: '生活顾问',
source: 'mobile_uni_sop'
},
timeout: 15000
});
export const generateSummaryCard = (queryText: string) =>
apiRequest<SummaryCardResponse>({
url: '/api/knowledge/summary-card',
method: 'POST',
data: {
queryText,
category: 'sop'
},
timeout: 45000
});