Update geminiService.ts
This commit is contained in:
@@ -107,6 +107,7 @@ export const getSupportResponse = async (
|
||||
|
||||
/**
|
||||
* Agent 2: Knowledge Extraction
|
||||
* Returns an ARRAY of suggested articles.
|
||||
*/
|
||||
export const generateNewKBArticle = async (
|
||||
apiKey: string,
|
||||
@@ -114,7 +115,7 @@ export const generateNewKBArticle = async (
|
||||
existingArticles: KBArticle[],
|
||||
provider: AiProvider = AiProvider.GEMINI,
|
||||
model: string = 'gemini-3-pro-preview'
|
||||
): Promise<{ title: string; content: string; category: string } | null> => {
|
||||
): Promise<Array<{ title: string; content: string; category: string }> | null> => {
|
||||
if (!apiKey) return null;
|
||||
|
||||
// Filter only resolved tickets
|
||||
@@ -132,7 +133,7 @@ export const generateNewKBArticle = async (
|
||||
|
||||
const systemPrompt = `
|
||||
Sei un Knowledge Manager AI esperto.
|
||||
Analizza i seguenti ticket risolti e confrontali con gli articoli esistenti nella Knowledge Base.
|
||||
Analizza TUTTI i seguenti ticket risolti e confrontali con gli articoli esistenti nella Knowledge Base.
|
||||
|
||||
ARTICOLI ESISTENTI: ${existingTitles}
|
||||
|
||||
@@ -140,17 +141,21 @@ export const generateNewKBArticle = async (
|
||||
${transcripts}
|
||||
|
||||
OBIETTIVO:
|
||||
1. Identifica un problema ricorrente o una soluzione tecnica presente nei ticket risolti MA NON coperta dagli articoli esistenti.
|
||||
2. Se trovi una lacuna, scrivi un NUOVO articolo di Knowledge Base per colmarla.
|
||||
3. Restituisci il risultato ESCLUSIVAMENTE in formato JSON valido. Non aggiungere markdown code blocks.
|
||||
1. Identifica TUTTI i problemi ricorrenti o le soluzioni tecniche presenti nei ticket risolti MA NON coperti dagli articoli esistenti.
|
||||
2. Per ogni lacuna trovata, scrivi un NUOVO articolo di Knowledge Base per colmarla.
|
||||
3. Restituisci il risultato ESCLUSIVAMENTE come un ARRAY JSON di oggetti. Non aggiungere markdown code blocks.
|
||||
|
||||
SCHEMA JSON RICHIESTO:
|
||||
{
|
||||
"foundGap": boolean,
|
||||
"title": "Titolo del nuovo articolo",
|
||||
"content": "Contenuto dettagliato in formato Markdown",
|
||||
"category": "Categoria suggerita"
|
||||
}
|
||||
SCHEMA JSON RICHIESTO (ARRAY):
|
||||
[
|
||||
{
|
||||
"title": "Titolo del nuovo articolo",
|
||||
"content": "Contenuto dettagliato in formato Markdown (usa elenchi puntati per istruzioni)",
|
||||
"category": "Categoria suggerita"
|
||||
},
|
||||
...
|
||||
]
|
||||
|
||||
Se non trovi lacune significative, restituisci un array vuoto [].
|
||||
`;
|
||||
|
||||
try {
|
||||
@@ -171,19 +176,15 @@ export const generateNewKBArticle = async (
|
||||
|
||||
if (!rawText) return null;
|
||||
|
||||
// Clean markdown if present (sometimes models add ```json ... ```)
|
||||
// We escape the backticks in the regex to ensure safety in all environments
|
||||
// Clean markdown if present
|
||||
const cleanedText = rawText.replace(/\`\`\`json/g, '').replace(/\`\`\`/g, '').trim();
|
||||
|
||||
const result = JSON.parse(cleanedText);
|
||||
if (result.foundGap) {
|
||||
return {
|
||||
title: result.title,
|
||||
content: result.content,
|
||||
category: result.category
|
||||
};
|
||||
|
||||
if (Array.isArray(result) && result.length > 0) {
|
||||
return result;
|
||||
}
|
||||
return null;
|
||||
return [];
|
||||
|
||||
} catch (error) {
|
||||
console.error("Knowledge Agent Error:", error);
|
||||
|
||||
Reference in New Issue
Block a user