66 lines
1.5 KiB
TypeScript
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
|
|
});
|