HyperAIHyperAI

Command Palette

Search for a command to run...

Automatisation de mon travail chez Google : Construire un Système de Recherche Approfondie pour Répondre aux Questions Techniques sur GCP

Automatisation du travail d'ingénieur chez Google avec un système de recherche approfondie personnalisé Dans le domaine de l'IA générative, de nombreux ingénieurs ont adopté des solutions standard comme RAG (Retrieval-Augmented Generation) pour répondre aux demandes complexes de leurs clients. Cependant, en 2025, ces solutions semblent de moins en moins efficaces face aux besoins toujours plus complexes et imprécis. En réponse à ce défi, une nouvelle approche baptisée Deep Research a émergé. Cette méthode, bien plus polyvalente et précise, permet d’automatiser des tâches de recherche complexes en trois étapes : comprendre et décomposer la demande de l'utilisateur, mener une recherche parallèle pour collecter des informations, puis agréger ces résultats. Comprendre et décomposer la demande utilisateur La première étape consiste à extraire les questions techniques des transcriptions de rencontres avec des clients. Pour cela, nous utilisons un prompt simple en entrée, qui prend le transcript brut du meeting. Le résultat souhaité est un tableau flexible de questions, chaque question étant un objet avec une description concise. L'utilisation du framework Genkit en TypeScript facilite cette tâche. Voici comment est définie la structure des objets de tâche : typescript const TaskSchema = z.object({ description: z.string(), }); const TaskArraySchema = ai.defineSchema( 'TaskArraySchema', z.array(TaskSchema) ); Le prompt explicite les règles de l'extraction : il doit inclure tous les sujets sur lesquels l’ingénieur client a promis de revenir, se concentrer sur les questions techniques spécifiques, et ne pas inventer ou omettre des questions. La température du modèle est fixée à 0.1 pour plus de précision et de concision. ```yaml ---config: temperature: 0.1 input: schema: transcript: string output: schema: TaskArraySchema << System Instructions >> Vous êtes un assistant IA qui extrait les questions techniques des clients à partir d'une conversation entre un Ingénieur Client Google Cloud (CE) et un client. Analysez le transcript et identifiez les principales questions techniques, besoins ou problèmes exprimés ou sous-entendus par le client. Concentrez-vous sur les questions qui soulignent la compréhension technique et les exigences du client concernant Google Cloud. Always include topics that the CE promised to follow up on. Always focus on specific technical questions that can be answered based on the GCP documentation. Only focus on questions that have NOT YET been answered in the meeting. DO NOT include high-level business and use case questions. << Output Formatting >> Format de sortie : un tableau JSON de tâches, chaque tâche comportant : description : la question technique du client formulée comme une question concise du point de vue du client. ``` Recherche parallèle des tâches La deuxième phase implique la recherche parallèle de chaque question extracting. Nous utilisons deux sources principales pour cela : une base de connaissances personnalisée stockée dans Firestore, et l'API Google Programmable Search Engine. La premièresource contient des fragments de documentation GCP transformés en embeddings de texte, facilement accessibles via le Firestore Vector index. La seconde, en revanche, permet d'effectuer des recherches en temps réel sur des documents et des sites spécifiques, notamment ceux mis à jour récemment. Le rétrecisseur Firestore Vector Search est défini comme suit : typescript export async function createSimpleFirestoreVSRetriever(ai: Genkit) { return ai.defineSimpleRetriever( { name: "simpleFirestoreVSRetriever", configSchema: z.object({ limit: z.number().optional().default(5), }).optional(), content: (doc: Document) => doc.text, metadata: (doc: Document) => ({ ...doc.metadata }), }, async (query, config) => { const results = await vectorSearchAction(query.text, { limit: config?.limit }); const resultDocs: Document[] = results.map(doc => { return Document.fromText( doc.content || '', { firestore_id: doc.documentId, chunkId: doc.chunkId } ); }); return resultDocs; } ); } Pour l'API Google Programmable Search Engine, nous récupérons les résultats via leur URL, nettoyons le contenu HTML et le transformons en objets de documentation Genkit pour un traitement ultérieur. Cette étape garantit que notre assistant a accès aux informations les plus récentes. Le schéma de la réponse de recherche pour chaque tâche est également rigoureusement définit : typescript const TaskResearchResponse = ai.defineSchema( 'TaskResearchResponse', z.object({ answer: z.string(), caveats: z.array(z.string()), docReferences: z.array(z.object({ title: z.string(), url: z.string(), relevantContent: z.string().optional(), })), }) ); Nous utilisons alors un prompt simple pour résumer chaque question en fonction des documents pertinents : ```yaml ---config: temperature: 0.1 input: schema: task: string format_instructions: string output: schema: TaskResearchResponse Research the following technical task using the provided Google Cloud documentation context. Task: {{task}} Provide a response that: 1. Clearly answers the technical question 2. Includes specific steps or configurations where relevant 3. Notes any important caveats or best practices 4. References specific sections of the documentation Technical Response: ``` Enfin, nous parallélisons ces étapes de recherche pour chaque tâche, ce qui optimise considérablement l’efficacité du processus. typescript export const taskResearchFlow = ai.defineFlow( { name: "taskResearchFlow", inputSchema: TaskArraySchema, outputSchema: TaskResearchResponseArray, }, async (tasks) => { console.log("Running Task Research Flow on transcript..."); const retrievalPromises = tasks.map(task => { return ai.retrieve({ retriever: 'simpleFirestoreVSRetriever', query: task.description, options: { limit: 10 } }); }); const taskDocsArray = await Promise.all(retrievalPromises); const taskResearchPrompt = ai.prompt('taskResearch'); const generationPromises = tasks.map(async (task, index) => { const docs = taskDocsArray[index]; const { output } = await taskResearchPrompt( { question: task.description }, { docs: docs, output: { schema: TaskResearchResponse } } ); return output; }); const researchResults = await Promise.all(generationPromises); return researchResults; } ); Agrégation des résultats de recherche Après avoir collecté toutes les réponses, la dernière étape consiste à les aggréger dans un rapport cohérent et utile, dans notre cas, un brouillon d'email professionnel. Cette étape est cruciale pour assurer que le ton, la structure et le niveau de détail correspondent aux attentes du client. Le schéma de sortie spécifie le format de l'email généré : typescript const EmailResponseSchema = ai.defineSchema( 'EmailResponseSchema', z.object({ email: z.string(), }) ); Le prompt pour l'agrégation des résultats est plus élaboré car il doit adapter les réponses aux exigences stylistiques spécifiques. Une approche à plusieurs tirs (multi-shot prompting) avec des exemples divers et propres aide le modèle à suivre les instructions. ```yaml ---config: temperature: 1 input: schema: tasks: string research: string output: schema: email: string Generate a professional follow-up email to the customer based on the technical research results. Original Task: {{tasks}} Research Findings: {{research}} Requirements for the email: 1. Start with a brief meeting reference and summary 2. Address each technical question briefly and concisely, most bullet points should not be longer than one sentence 3. Link to specific documentation sections whenever possible, but only as it makes sense in the context 4. Maintain a professional but friendly tone 5. End with next steps or an offer for further clarification Generate a professional follow-up email to the customer based on the technical research results. Original Task: {{tasks}} Research Findings: {{research}} Please match the level of details provided in the example. See example in the full codebase Generated Email: ``` Pour finaliser, nous intégrons ce prompt dans un flux Genkit, permettant de produire un email complet et professionnel répondant à chacune des questions techniques. Conclusion et étapes suivantes Le modèle de Deep Research représente une avancée significative par rapport aux systèmes RAG traditionnels. Il est particulièrement utile pour automatiser des tâches complexes et répétitives, comme l’envoi d'emails de suivi techniques après des réunions clients. Bien que cette solution soit déjà très performante, son efficacité dépend fortement de la qualité des sources de connaissances utilisées et de la précision de l'agrégation finale des résultats. Une adaptation personnalisée de ce modèle à différents cas d'utilisation est donc essentielle. L'implémentation présentée ici utilise un workflow basé sur des modèles IApréexistants, mais une boucle agente pourrait être envisagée pour des tâches encore plus complexes. Ce projet n'est qu'un début, et son potentiel est immense. Évaluation par des professionnels de l'industrie Selon de nombreux experts en ingénierie ML, le Deep Research est une solution incontournable pour l'avenir. Il répond aux défis de la complexité et de l'imprécision des requêtes en offrant une automatisation précise et adaptable. Des entreprises comme Google et Microsoft investissent massivement dans ces technologies, anticipant leur importance croissante dans l'écosystème de l'IA générative. Profil de l’entreprise : Genkit est une plateforme open-source développée par Google qui facilite la création de workflows IA de manière modulaire et scalable. Elle est particulièrement adaptée à la gestion de tâches complexes en IA, permettant d'intégrer facilement des plugins préexistants ou des fonctions personnalisées. Son utilisation dans ce projet démontre son potentiel dans l'autonomisation des ingénieurs et la réduction du temps de réponses aux clients. Quelles tâches automatiseriez-vous avec Deep Research ? L'efficacité du Deep Research vous a convaincu ? Partagez votre expérience et les tâches que vous souhaitez automatiser dans votre journée de travail !

Liens associés

Automatisation de mon travail chez Google : Construire un Système de Recherche Approfondie pour Répondre aux Questions Techniques sur GCP | Articles tendance | HyperAI