Vai al contenuto principale

Come creare un chatbot con Snowflake Cortex AI (guida passo dopo passo)

Scopri come creare un chatbot con Snowflake Cortex AI. Guida passo dopo passo per preparare i dati, usare Cortex Search e distribuire con Streamlit.
· 12 min leggi

Scopri con l'IA

Cortex AI di Snowflake porta potenti funzionalità di IA direttamente nel tuo ambiente Snowflake. Ad esempio, utilizzando l’accesso di Cortex a Large Language Model (LLM) leader del settore, possiamo creare strumenti come chatbot IA che sfruttano dati interni all’azienda senza compromettere la sicurezza delle informazioni sensibili. 

Queste integrazioni hanno determinato un passaggio dalle classiche chat e automazioni basate su regole a chat più flessibili, alimentate dall’IA, in grado di comprendere meglio gli input degli utenti per fornire risposte più complete ed esaustive.

In questo tutorial, ti guiderò a livello alto attraverso i passaggi per creare un chatbot utilizzando Snowflake Cortex. Imparerai a preparare i dati, configurare Cortex Search, usare Document AI per i dati non strutturati, costruire un’interfaccia chatbot in Streamlit e ti darò idee su come integrarlo con applicazioni esterne. Alla fine, avrai sia le competenze pratiche sia la comprensione concettuale necessarie per progettare IA conversazionale su Snowflake.

Se sei alle prime armi con Snowflake, ti consiglio di seguire il percorso di competenze Snowflake Foundations per metterti al passo. Puoi anche ottenere una prova gratuita di Snowflake per mettere in pratica le tue abilità.

Che cos’è Snowflake Cortex?

Alla base, Snowflake Cortex porta nell’ecosistema Snowflake servizi basati su IA e LLM. Questo tutorial tratterà l’integrazione di Cortex con i tuoi dati Snowflake per creare una semplice app chatbot Streamlit usando il servizio Search di Cortex e Document AI per il parsing dei file di documento, così da fornire ulteriore contesto ai modelli LLM esistenti tramite il modello di generazione aumentata dal recupero (RAG) di Cortex.

Questo tutorial coprirà:

  • Configurare l’ambiente Snowflake in preparazione alla creazione di un chatbot con Cortex Search
  • Sfruttare le funzioni LLM di Cortex e Document AI per estrarre insight dai documenti
  • Creare un’app di chatbot e analytics in Streamlit su Snowflake
  • Struttura dei costi e considerazioni quando si usa Cortex

Il vantaggio di usare Cortex è il suo approccio ibrido nativo a vettori, keyword e reranking semantico e la generazione di risposte basata su RAG, che ne migliora accuratezza e specificità. 

Creare chatbot e app di analytics con Streamlit su Snowflake sfrutta la flessibilità dello sviluppo in Python, enfatizzando al contempo sicurezza dei dati e governance mantenendo i dati sensibili all’interno del tuo ambiente Snowflake sicuro. 

Se vuoi farti un’idea delle capacità di Snowflake Cortex AI, dai un’occhiata a questo tutorial sull’uso di Cortex AI per task NLP di base come il riassunto e l’analisi del sentiment.

Prerequisiti

Prima di costruire, prepariamo il tuo account Snowflake. In questo account, ti serviranno i seguenti permessi:

  • Permessi per creare warehouse e permesso USAGE
  • Permessi sul database: USAGE
  • Permessi sullo schema: USAGE, CREATE STREAMLIT, CREATE STAGE, CREATE CORTEX SEARCH SERVICE oppure OWNERSHIP
  • Possibilità di usare Document AI con i corretti permessi a livello di account. Nella maggior parte dei casi userai i ruoli integrati di Snowflake (ad es. ACCOUNTADMIN, SYSADMIN) o un ruolo personalizzato con:
    • USAGE su database e schema
    • CREATE CORTEX SEARCH SERVICE
    • OPERATE sull’oggetto search service una volta creato
  • Per Cortex, in genere ti serve il ruolo CORTEX_USER combinato con concessioni a livello di oggetto (USAGE, OPERATE) per interagire con i servizi.

Idealmente, hai una certa familiarità con SQL, Python e concetti base di IA. Ti servirà comprendere SQL per muoverti nell’ambiente Snowflake e nei dati. Ti servirà familiarità con Python per costruire l’app Streamlit. Avere una comprensione di base dei concetti di IA ci aiuterà a capire i componenti del nostro Cortex Search Service.

Per quanto riguarda gli strumenti, ci concentreremo su Snowsight di Snowflake, che è il loro browser web. Se preferisci costruire in locale, ti servirà un tuo IDE/editor di testo. 

Anche se proveremo a fornire alcuni sample di dati, l’ideale è avere un corpus di test e un dataset con cui vuoi lavorare. Se non ne hai, consiglio i verbali del Federal Open Market Committee per il tutorial (fonte: Snowflake): sample FOMC minutes.

Come creare un chatbot in Snowflake Cortex

Ok, mettiamoci al lavoro! Alcune di queste istruzioni saranno un po’ generiche per adattarsi a molte opzioni.

Passo 1: Configura Database, Schema e Warehouse in Snowflake

Per prima cosa, creeremo l’ambiente necessario per il nostro progetto di chatbot.

-- Create a dedicated warehouse
CREATE OR REPLACE WAREHOUSE cortex_wh 
  WITH WAREHOUSE_SIZE = 'XSMALL' 
  AUTO_SUSPEND = 60 
  AUTO_RESUME = TRUE;

-- Create a database and stage
CREATE OR REPLACE DATABASE cortex_chatbot_db;
CREATE OR REPLACE STAGE cortex_chatbot_db.public.chatbot_stage;

-- Switch context
USE DATABASE cortex_chatbot_db;
USE WAREHOUSE cortex_wh;

Questo garantisce che tutte le risorse siano isolate e con costi sotto controllo.

Passo 2: Carica e prepara i dati

Il tuo chatbot ha bisogno di dati per rispondere alle domande. Possono essere:

  • Dati strutturati: informazioni sui clienti, log delle transazioni, cataloghi prodotti.
  • Dati non strutturati: PDF, FAQ, policy, knowledge base.

Se ti serve più informazione sull’ingestione dei dati e su come portarli in Snowflake, consulta questa guida all’ingestione dei dati.

Esempio: staging e caricamento di un file CSV.

-- Upload data (done via Snowsight UI or SnowSQL)
-- Example: product_faq.csv

-- Load into a table
CREATE OR REPLACE TABLE cortex_chatbot_db.public.chatbot_stage.product_faq (
  question STRING,
  answer STRING
);

COPY INTO product_faq
FROM @chatbot_stage/product_faq.csv
FILE_FORMAT = (TYPE = CSV FIELD_OPTIONALLY_ENCLOSED_BY='"');

Per i dati non strutturati (ad es. PDF), puoi elaborarli con Cortex Document AI. Nel prossimo passo parleremo di come estrarre dati da fonti non strutturate usando Cortex Document AI.

Vogliamo prendere sia i dati strutturati sia quelli non strutturati, suddividerli in chunk e allegare la metadata necessaria per renderli più efficienti per il RAG.

Passo 3: Training di Document AI e parsing dei documenti

Vediamo come creare un modello usando Document AI per ottenere un modello ottimizzato per il parsing dei documenti. Nota: è opzionale e ti incoraggio a provare i modelli predefiniti di Snowflake per il parsing, poiché sono production-ready e gestiscono OCR, estrazione del layout e rilevamento delle tabelle. Oggi non “alleni” direttamente modelli personalizzati in Cortex Document AI, ma puoi configurare le modalità di estrazione (ad es. estrazione di entità, estrazione di tabelle) in base ai tuoi dati.

Inizia in modo semplice con il parser predefinito e aggiungi configurazioni avanzate solo se i tuoi documenti hanno formattazioni complesse o irregolari.

In Snowsight, apri il menu di navigazione e vai su AI & ML. Seleziona il nostro cortex_wh e poi fai clic su “Build”.  Da lì selezioniamo “Create”. 

Una volta creato il build, carichiamo i documenti nel build. Al termine dell’elaborazione, possiamo lavorare sull’estrazione dei dati usando l’estrazione di entità oppure l’estrazione di tabelle. L’estrazione di entità consente di porre domande al documento per ottenere dati, mentre l’estrazione di tabelle esegue il parsing dei dati in base a campi definiti nel documento. 

Una volta costruito il modello, vogliamo valutarne l’accuratezza e poi addestrarlo secondo necessità. L’addestramento affina il modello alla struttura specifica dei tuoi documenti. Ora possiamo usare questo modello o il modello predefinito per il parsing dei documenti. Per ora rimarremo sul parser IA predefinito di Snowflake.

CREATE OR REPLACE TABLE cortex_chatbot_db.public.chatbot_stage.doc_data AS --create the table
SELECT
    RELATIVE_PATH,
    TO_VARCHAR (
        SNOWFLAKE.CORTEX.PARSE_DOCUMENT ( --using default cortex parser
            '@cortex_chatbot.public.chatbot_stage',
            RELATIVE_PATH,
            {'mode': 'LAYOUT'} ):content
        ) AS EXTRACTED_LAYOUT
FROM
    DIRECTORY('@cortex_chatbot.public.chatbot_stage') --pull the files from the stage
WHERE
    RELATIVE_PATH LIKE '%.pdf'; --specifically just PDFs

Ora i nostri dati saranno in una tabella e pronti per essere trasformati.

Passo 4: Trasformazione dei dati ed estrazione delle feature

Per preparare i dati alle interazioni del chatbot, i documenti vanno suddivisi in chunk e arricchiti con metadata. Il chunking rende più accurata la ricerca con Cortex Search.

	CREATE OR REPLACE TABLE cortex_chatbot_db.public.chatbot_stage.doc_chunks AS
	SELECT
	    relative_path,
	    BUILD_SCOPED_FILE_URL(@cortex_chatbot.public.chatbot_stage, relative_path) AS file_url,
	    (
	        relative_path || ':\n'
	        || coalesce('Header 1: ' || c.value['headers']['header_1'] || '\n', '')
	        || coalesce('Header 2: ' || c.value['headers']['header_2'] || '\n', '')
	        || c.value['chunk']
	    ) AS chunk,
	    'English' AS language
	FROM
	cortex_chatbot_db.public.chatbot_stage.doc_data
	    LATERAL FLATTEN(SNOWFLAKE.CORTEX.SPLIT_TEXT_MARKDOWN_HEADER(
	        EXTRACTED_LAYOUT,
	        OBJECT_CONSTRUCT('#', 'header_1', '##', 'header_2'),
	        2000, -- chunks of 2000 characters
	        300 -- 300 character overlap
	    ))  c;

Questa SQL fa parecchio, quindi riassumo. Prende ogni file e appiattisce il testo in chunk da 2000 caratteri. 

Spezzare in porzioni più piccole aiuta l’efficienza della ricerca. Aggiunge poi alcune informazioni di intestazione (come i titoli) ai dati nel chunk in modo che il modello abbia il contesto della provenienza di quei dati.

Questo rende i tuoi dati ricercabili e pronti per la generazione aumentata dal recupero (RAG).

Passo 5: Crea e configura Cortex Search o Agent

Costruiamo il nostro Cortex Search Agent, il servizio principale che cercherà tra i chunk e recupererà il contesto per una risposta.

CREATE OR REPLACE CORTEX SEARCH SERVICE cortex_chatbot_db.public.chatbot_stage.cortex_serv
    ON chunk
    ATTRIBUTES category
    WAREHOUSE = cortex_wh
    TARGET_LAG = '1 hour'
    AS (
    SELECT
        chunk,
        relative_path,
        file_url,
        category
    FROM cortex_chatbot_db.public.chatbot_stage.doc_chunks
    );

Questo creerà un servizio iniziale che definisce anche il campo attributes selezionando le colonne da usare per il filtraggio dei risultati di ricerca. Qui ho scelto “category” così da poter teoricamente filtrare su diverse categorie di prodotto. Per questo ho scelto la colonna chunk, che dovrebbe contenere il nostro testo suddiviso in chunk.

Cortex Search usa di default una ricerca ibrida vettoriale + keyword, migliorando l’accuratezza del chatbot. Con questo, possiamo aggiungere ulteriore contesto usando un modello semantico. Se ti aspetti formulazioni particolari o abbreviazioni tecniche, puoi configurare un file YAML di modello semantico usando il generatore di modelli semantici Cortex Analyst. Questo ti permette di fornire contesto e sinonimi al modello, così da riconoscere che “CUST” può anche significare “customer”. 

Questo abilita workflow RAG, in cui il chatbot recupera il contesto rilevante prima di generare le risposte.

Passo 6: Crea l’app del chatbot con Streamlit

Ora creiamo un front-end molto semplice per il chatbot dentro Snowflake usando Streamlit. In Snowsight cerca l’app “Streamlit in Snowflake” per creare la tua applicazione chatbot. Questo usa Snowpark per connettersi al tuo Snowflake. 

Se vuoi qualche informazione sulla costruzione di chatbot in generale, ti consiglio prima questo corso su come costruire chatbot in Python. 

Per prima cosa, permettiamo all’utente di connettersi a Snowflake usando Session.builder. Poi, dato un input, lo passiamo come query a SNOWFLAKE.CORTEX.SEARCH 

import streamlit as st
import snowflake.connector
from snowflake.snowpark import Session

# Connect to Snowflake
session = Session.builder.configs({
    "account": "<account_id>",
    "user": "<username>",
    "password": "<password>",
    "role": "SYSADMIN",
    "warehouse": "CORTEX_WH",
    "database": "CORTEX_CHATBOT",
    "schema": "PUBLIC"
}).create()

st.title("Snowflake Cortex Chatbot")

user_input = st.text_input("Ask me a question:")

if user_input:
    # Query Cortex Search
    result = session.sql(f"""
        SELECT PARSE_JSON(
SNOWFLAKE.CORTEX.SEARCH(
            chatbot_serv',
                 '{
         "query": "{user_input}",
         "columns":[
            "col1",
            "col2"
         ],
         "filter": {"@eq": {"col1": "filter value"} }
      }'
)
)[‘results’] AS results
    """).collect()

    st.write("**Chatbot:**", result[0]['RESPONSE'])

Questo semplice chatbot recupera informazioni pertinenti dall’indice di Cortex Search e restituisce risposte in tempo reale. È anche possibile creare un chatbot multi-turno (conversazionale) aggiungendo la possibilità di archiviare la cronologia della chat di sessione in memoria. Questo si può fare nativamente in Streamlit usando l’esistente search service.

Passo 7: Implementazione tramite endpoint REST API

Per integrare il chatbot in app esterne (ad es. siti web, bot Slack), usa la REST API di Snowflake. In generale, l’URL avrà un aspetto simile a: https://<account_url>/api/v2/databases/<db_name>/schemas/<schema_name>/cortex-search-services/<service_name>:query.

Queste API richiedono autenticazione per motivi di sicurezza, il che significa che sono limitate agli utenti che hanno accesso al tuo ambiente Snowflake. Questo approccio API-first consente comunque di incorporare le funzionalità del chatbot in modo più flessibile e per un pubblico più ampio. 

Un caso d’uso potrebbe essere la creazione di uno strumento interno ospitato su un web server, che consente agli utenti di porre domande su documenti come report finanziari trimestrali o note di riunione. Queste integrazioni richiederebbero lo sviluppo di strumenti in grado di effettuare richieste API.

Passo 8: Test e validazione

Prima di distribuire su larga scala, testa il chatbot per:

  • Accuratezza – recupera risposte corrette?
  • Velocità – la latenza è accettabile?
  • Usabilità – l’interfaccia è intuitiva?

Puoi loggare le query e confrontare gli output con ground truth note per il benchmarking. È comune avere un set di domande con risposta prescritta e usare altri modelli per confronti di accuratezza. 

Passo 9: Pulizia (opzionale)

Per gestire i costi e mantenere la governance, elimina le risorse non usate.

	DROP WAREHOUSE IF EXISTS cortex_wh;
	DROP DATABASE IF EXISTS cortex_chatbot;
	DROP STAGE IF EXISTS chatbot_stage;

Concetti aggiuntivi e best practice

Aggiungiamo un po’ di contesto alla funzione del nostro chatbot e alcune best practice.

Retrieval Augmented Generation (RAG) in Snowflake Cortex

RAG è una tecnica utilizzata da molti large language model per arricchire i dati originali con conoscenza esterna. 

Snowflake Cortex aggiunge i dati della tua azienda al contesto del tuo chatbot, consentendogli di fornire risposte usando il contesto aggiuntivo. Usando una combinazione di ricerca vettoriale e per keyword, è in grado di analizzare un prompt con dati contestuali e utilizza il reranking semantico per scegliere i documenti più rilevanti e fornire una risposta contestualizzata. 

Questo semplifica anche l’implementazione del RAG tramite un unico motore Cortex Search invece di dover creare manualmente vettori, funzioni di similarità ed embedding. La potenza del RAG ci permette di costruire, ad esempio, chatbot orientati alla documentazione tecnica.

Prompt engineering per i chatbot Snowflake

Il prompt engineering è importante per assicurare che qualsiasi chatbot fornisca risposte adeguate alle domande degli utenti. Avere una buona comprensione del prompt engineering è fondamentale per fare in modo che il tuo servizio di chat restituisca buone risposte. 

Qualcosa che aiuta a fornire risposte migliori è offrire agli utenti una guida d’uso che li aiuti a formulare domande migliori.

Puoi anche aggiungere template di prompt alle query degli utenti prima di inviarle al servizio Cortex. I template di prompt aiutano a fornire un contesto coerente al modello affinché usi le informazioni giuste per fornire una risposta. 

Un template utile per dati aziendali potrebbe essere: "Sei un assistente utile per i dati storici dell’azienda. Rispondi basandoti solo sulla knowledge base aziendale." Questo farà concentrare il modello sull’uso dei dati aziendali per le risposte.

Capiteranno anche domande o input ambigui. Invece di forzare il modello a rispondere, puoi aggiungere al tuo template qualcosa come: "Se l’utente fa una domanda vaga, fornisci la risposta: Non lo so." Questo potrebbe spingerlo a porre una domanda più specifica.

Flessibilità e scelte di implementazione

Snowflake Cortex supporta LLM predefiniti (veloci, pronti per la produzione) e modelli personalizzati (ottimizzati per domini specifici). Questi si possono definire al momento della creazione del servizio. Inoltre, aggiungere modelli semantici personalizzati introduce un contesto specifico di settore/azienda a un linguaggio che altrimenti potrebbe risultare oscuro al modello, senza dover fornire un ampio corpus di testo. Questa flessibilità consente integrazioni di modelli future.

Sicurezza, governance e conformità

Cortex segue lo stesso controllo degli accessi basato sui ruoli, audit logging e crittografia offerti da Snowflake. Questo garantisce la conformità a HIPAA, GDPR e altre normative. La responsabilità principale dalla tua parte è assicurare che le persone giuste abbiano i ruoli corretti.

Struttura dei costi

Snowflake Cortex utilizza un modello di pricing a consumo. Come altri prodotti Snowflake, paghi per compute e storage, ma ci sono alcuni livelli extra specifici di Cortex Search. Paghi per:

  • Compute del Virtual Warehouse: È il compute principale, che elabora le query sui dati Snowflake e consuma crediti
  • EMBED_TEXT utilizzo di token: Durante l’elaborazione dei documenti, Snowflake Cortex gestisce l’embedding dei token e ti viene addebitato quando i documenti vengono aggiunti o modificati
  • Serving Compute: Il Cortex Search Service utilizza un serving compute per fornire un servizio a bassa latenza e alto throughput all’utente. È separato dal compute del virtual warehouse e addebita costi ogni volta che il servizio è disponibile, non solo quando è utilizzato
  • Storage per indici semantici e dati in stage.
  • Cloud Service Compute: Sono costi a livello Snowflake che permettono a Snowflake di rilevare cambiamenti negli oggetti di base. Vengono fatturati solo se superano il 10% del costo giornaliero del warehouse.

Prova le seguenti tecniche per gestire i costi:

  • Snowflake raccomanda warehouse MEDIUM o più piccoli
  • Monitora l’uso dei token e imposta quote di utilizzo.
  • Archivia gli indici non utilizzati o consenti un lag di freschezza dati più lungo se i documenti più recenti non sono necessari
  • Sospendi il servizio quando non serve. Potrebbe essere utile impostare un timer che ne consenta l’accensione/spegnimento quando non viene usato.

Conclusione

Creare un chatbot con Snowflake Cortex sblocca IA conversazionale specifica per l’azienda direttamente nel Data Cloud. Dall’ingestione al recupero fino alla distribuzione, puoi lavorare interamente nell’ambiente governato di Snowflake. Questi chatbot possono aiutare a snellire processi come l’onboarding, rispondere a domande analitiche approfondite e creare documentazione tecnica.

Cortex abilita chatbot basati su RAG che combinano LLM con i tuoi dati. Costruire un chatbot in Streamlit su Snowflake rende semplice distribuire interfacce user-friendly all’interno di Snowflake. Sicurezza, governance e gestione dei costi sono integrate nel workflow. Con Cortex, le organizzazioni possono evolvere dai dashboard di BI tradizionali ad assistenti intelligenti che interagiscono con i dati in modo conversazionale.

Per maggiori informazioni su Snowflake e le sue capacità di IA, dai un’occhiata alle seguenti risorse:

FAQ su Snowflake Cortex Chatbot

Quali sono i principali vantaggi di usare Snowflake Cortex per la business intelligence?

Cortex semplifica l’analisi permettendo agli utenti non tecnici di porre domande in linguaggio naturale e ottenere risposte basate su SQL. Elimina la scrittura manuale delle query, riduce i colli di bottiglia della BI e consente insight più rapidi. Inoltre, tutti i risultati ereditano sicurezza, lineage e controlli di accesso di Snowflake.

Snowflake Cortex Analyst può gestire query complesse su più tabelle?

 Sì. Cortex Analyst supporta join multi-tabella e può ragionare attraverso gli schemi, purché le relazioni siano chiare e la metadata sia ben definita. Documentazione adeguata, modelli semantici e pratiche di data governance migliorano l’accuratezza delle query complesse.

Come garantisce Snowflake la sicurezza e la governance dei dati utilizzati da Cortex Analyst?

Cortex Analyst esegue all’interno dell’ambiente Snowflake, garantendo che i dati sensibili non escano mai dalla piattaforma. Rispetta RBAC (controllo degli accessi basato sui ruoli), tagging degli oggetti, policy di masking e audit logging, così gli insight basati sull’IA seguono le stesse regole di conformità delle query tradizionali.

Quali sono i limiti di Snowflake Cortex Analyst nella gestione delle domande di follow-up?

Cortex Analyst è forte per le query a singolo turno ma ha memoria limitata per conversazioni multi-turno rispetto a framework di chatbot completi. Per dialoghi avanzati o follow-up contestuali, abbinarlo a Cortex Search o a un chatbot personalizzato costruito su Streamlit offre risultati migliori.

Le aziende possono personalizzare o ottimizzare i modelli alla base di Snowflake Cortex?

Sebbene Cortex utilizzi principalmente LLM gestiti da Snowflake, consente configurazioni tramite modelli semantici, template di prompt e pipeline di retrieval. Per una personalizzazione più profonda, Cortex può integrarsi con modelli esterni usando Snowpark Python o API, a seconda delle esigenze aziendali.

Tim Lu

Autore

Tim Lu

Sono una data scientist con esperienza in analisi spaziale, machine learning e pipeline dei dati. Ho lavorato con GCP, Hadoop, Hive, Snowflake, Airflow e altri processi di data science/engineering.

Argomenti

Correlato