feat(knowledge): add short-term ask memory

This commit is contained in:
2026-07-18 21:22:49 +08:00
parent 2eda757483
commit 064816a784
33 changed files with 1348 additions and 99 deletions
+35 -7
View File
@@ -2,6 +2,7 @@ import type {
AnswerFeedbackVerdict,
KnowledgeSearchResponse,
KnowledgeMediaSelectedFile,
KnowledgeConversationState,
UnifiedKnowledgeResponse,
KnowledgeSnippet,
PositionSopSummary,
@@ -53,7 +54,11 @@ const normalizeSnippet = (snippet: RawKnowledgeSnippet): KnowledgeSnippet => ({
content: snippet.content || snippet.text || ''
});
export const searchKnowledge = async (queryText: string, position = getSelectedPosition()) => {
export const searchKnowledge = async (
queryText: string,
position = getSelectedPosition(),
conversation?: KnowledgeConversationState
) => {
const response = await apiRequest<UnifiedKnowledgeResponse>({
url: '/api/knowledge/query',
method: 'POST',
@@ -61,7 +66,9 @@ export const searchKnowledge = async (queryText: string, position = getSelectedP
queryText,
category: 'sop',
position,
limit: 5
limit: 5,
conversationId: conversation?.conversationId,
contextVersion: conversation?.contextVersion
},
timeout: 30000
});
@@ -72,14 +79,22 @@ export const searchKnowledgeWithMedia = (
file: KnowledgeMediaSelectedFile,
queryText: string,
position = getSelectedPosition(),
onUploadTask?: (task: ReturnType<typeof uni.uploadFile> | null) => void
onUploadTask?: (task: ReturnType<typeof uni.uploadFile> | null) => void,
conversation?: KnowledgeConversationState
) => new Promise<KnowledgeSearchResponse>((resolve, reject) => {
const task = uni.uploadFile({
url: apiUrl('/api/knowledge/query-media'),
filePath: file.path,
name: 'file',
header: authHeaders(false),
formData: { queryText, position },
formData: {
queryText,
position,
...(conversation ? {
conversationId: conversation.conversationId,
contextVersion: String(conversation.contextVersion)
} : {})
},
timeout: 360000,
success: (response) => {
try {
@@ -97,12 +112,20 @@ export const searchKnowledgeWithMedia = (
export const queryKnowledgeTool = async (
toolCode: 'MY_PRACTICE_SUMMARY' | 'TEAM_PRACTICE_SUMMARY',
queryText: string
queryText: string,
conversation?: KnowledgeConversationState
) => {
const response = await apiRequest<UnifiedKnowledgeResponse>({
url: '/api/knowledge/query',
method: 'POST',
data: { queryText, source: 'mobile_uni_tool', limit: 5, toolCode },
data: {
queryText,
source: 'mobile_uni_tool',
limit: 5,
toolCode,
conversationId: conversation?.conversationId,
contextVersion: conversation?.contextVersion
},
timeout: 30000
});
return normalizeUnifiedResponse(response);
@@ -132,7 +155,12 @@ const normalizeUnifiedResponse = (response: UnifiedKnowledgeResponse): Knowledge
usedSpaceCodes: response.usedSpaceCodes || [],
noEvidence: response.noEvidence,
promptVersion: response.promptVersion,
data: response.data
data: response.data,
conversationId: response.conversationId,
contextVersion: response.contextVersion,
intent: response.intent,
rewrittenQuery: response.rewrittenQuery,
resources: response.resources || []
};
};