AI contractanalyse in Shareflex
Studie: Het opzetten van een intelligent AI-systeem dat in staat is om complexe vragen te beantwoorden over bedrijfscontractdocumenten (PDF) opgeslagen in SharePoint Online met Shareflex Contract.
Voorbeelden van vragen die het systeem moet kunnen beantwoorden
- Identificeer contracten met boetebepalingen en leg de kosten uit in het slechtste geval.
- Markeer contracten die schadelijk kunnen zijn voor het bedrijf en leg de risico’s uit.
- Identificeer bestaande NDA-overeenkomsten en geef een samenvatting van hun inhoud.
Het handmatig analyseren van dergelijke vragen kan tijdrovend zijn voor een contractmedewerker. Deze studie onderzoekt of AI deze taak sneller en effectiever kan uitvoeren.
Doel:
Focus uitsluitend op het analyseren van de contract-PDF-documenten, niet op hun metadata. Shareflex biedt al een uitstekende interface voor het filteren en presenteren van contractmetadata, dus een AI-systeem voor metadata-analyse is op dit moment niet nodig.
Om dit te bereiken, heb ik Make.com gebruikt om geautomatiseerde workflows te bouwen voor een AI-systeem dat contractdocumenten verwerkt om deze vragen te beantwoorden. Hoewel Make.com is gekozen vanwege de eenvoud, kunnen vergelijkbare resultaten worden behaald met Python of andere platforms.
Workflow Scenario 1: Van Shareflex / SharePoint naar Pinecone
In deze workflow worden contract-PDF-documenten (samen met wat metadata) samengevat door OpenAI en opgeslagen als vectoren in Pinecone. Vectorrepresentaties van OpenAI-samenvattingen worden gebruikt omdat het GPT-4-model van OpenAI niet alle contractgegevens in één prompt kan verwerken vanwege de limiet van 120.000 tokens (ongeveer 200–300 pagina’s tekst). Het beknopt houden van prompts verbetert de nauwkeurigheid.
Pinecone, een vectordatabase, maakt het mogelijk om de top 10 zoekresultaten (bijvoorbeeld) voor een query op te halen. Leer meer over vectoren in deze video.
Het complete Make.com workflowscenario wordt hieronder geïllustreerd:
Belangrijke Workflowcomponenten
1. SharePoint
Het startpunt is SharePoint Online, waar contractlijstitems en metadata worden opgeslagen. Contractdocumenten bevinden zich in SharePoint-documentbibliotheken en zijn gekoppeld aan hun metadata via contract-ID’s.
2. OneDrive
Contractdocumenten kunnen ook worden opgeslagen in OneDrive. Met behulp van de contract-ID uit de metadata worden de overeenkomstige PDF-documenten gevonden.
3. CloudConvert
CloudConvert wordt gebruikt om PDF-documenten om te zetten naar platte tekst. Deze stap is essentieel, aangezien afbeeldingen of niet-tekstformaten niet door OpenAI kunnen worden verwerkt.
4. HTTP Module
De HTTP-module haalt de tekstinhoud van de geconverteerde documenten op uit CloudConvert.
5. OpenAI
OpenAI wordt gebruikt om betekenisvolle samenvattingen van de contractdocumenten te genereren. Prompts worden aangepast om irrelevante details uit te sluiten en te focussen op belangrijke juridische termen en clausules. Het verfijnen van deze prompts is cruciaal voor toepassingen in de echte wereld.
Je hebt de taak om een gedetailleerde, beknopte en betekenisvolle weergave van de verstrekte contracttekst te genereren. Deze uitvoer zal worden gebruikt om vector embeddings voor een contractbeheersysteem te maken. Richtlijnen: Kerninformatie Alleen: Focus op het extraheren en samenvatten van de belangrijkste aspecten van het contract, inclusief de kernintentie, belangrijke clausules, verplichtingen, boetebepalingen, boetebepalingen en andere belangrijke juridische termen. Gedetailleerde Samenvatting: Zorg ervoor dat alle relevante informatie, vooral juridische verplichtingen en mogelijke financiële risico's zoals boetes, duidelijk wordt weergegeven in de uitvoer. Vermijd overmatige beknoptheid. Platte Tekst Uitvoer: De uitvoer moet platte tekst zijn, zonder onnodige tekens of opmaak. Beperkingen voor Tekens: Gebruik NIET de volgende tekens:`+ - * / % = ** @ # $ ^ & ~ ! ' " () [] {} : ; , . \ < > | `` Opmaak: Gebruik alleen alfanumerieke tekens en spaties in de uitvoer. Omvattende Weergave: Zorg ervoor dat geen cruciale details, zoals boetebepalingen, beëindigingsboetes of verplichtingen, worden weggelaten. Aanvullende Instructie: Als er boetes, vergoedingen of financiële verplichtingen in het contract staan, vermeld deze dan expliciet en de voorwaarden ervan in je uitvoer. Hier is de contracttekst: {{38.newlinesspaces1}}
6. Tools
Deze stap verwijdert newline-tekens en vervangt deze door spaties om interferentie met de daaropvolgende verwerking te voorkomen.
7. OpenAI – Genereer Vectoren
OpenAI genereert een vectorrepresentatie van het samengevatte contractdocument met behulp van het volgende verzoek:
8. Pinecone
De contractsamenvatting, samen met relevante metadata, wordt opgeslagen in Pinecone. Dit maakt efficiënte zoekopdrachten en het ophalen van contractgerelateerde informatie mogelijk.
Hieronder een voorbeeld van een Pinecone-database-invoer:
Voor elk PDF-contractdocument wordt een unieke Pinecone-record aangemaakt, met vectoren en bijbehorende contractmetadata. Pinecone-databases kunnen duizenden van dergelijke records opslaan. Het gebruik van vectoren voegt een beveiligingslaag toe, omdat het omkeren van vectoren naar tekst computermatig niet haalbaar is zonder geavanceerde middelen.
Workflow Scenario 2: Zoek vectoren dichtbij mijn vraag
Het doel van dit scenario is om vectoren (contract-PDF-documenten) in de Pinecone-database te vinden die nauw verwant zijn aan een specifieke vraag:
“Identificeer contracten met boetebepalingen en leg de kosten uit in het slechtste geval.”
Het woord nauw verwant is in deze context van belang.
Het complete Make.com-scenario wordt hieronder geïllustreerd:
Belangrijke Workflowcomponenten
1. Google sheets
Gebruikt om gegevens te wissen uit een Google Sheet die tijdens een vorige run van dit scenario is opgeslagen.
2. OpenAI – API-aanroep
OpenAI genereert een vectorrepresentatie van de vraag:
“Identificeer contracten met boetebepalingen”
met behulp van het volgende verzoek:
Het doel is om vectoren op te halen die gerelateerd zijn aan de vraag.
3. Pinecone – Query
Met behulp van de Pinecone-database kunnen vectoren worden opgehaald die het dichtst bij de vector van de vraag liggen. Pinecone biedt tools om zoekopdrachten te doen op basis van gelijkenis. Dit zorgt ervoor dat de juiste contracten worden opgehaald op basis van de vraag.
4. OpenAI – Maak een completion prompt
Dit is de meest complexe stap. Met de 10 Pinecone-records die in stap 3 zijn opgehaald (elk met metadata zoals ruwe contracttekst, titels, enz.), wordt OpenAI gevraagd de volgende actie uit te voeren:
Je hebt de taak om de relevantie van de onderstaande inhoud voor de vraag met betrekking tot bedrijfscontractdocumenten te bepalen. Je evaluatie zal de herwaardering van de initiële vectorzoekresultaten voor deze vraag verfijnen. Instructies: 1. Beoordeel of de onderstaande inhoud overeenkomt met de vraag. 2. Identificeer specifiek of de inhoud clausules of boetes bevat of er impliciet naar verwijst. Uitvoer: Geef twee waarden terug, gescheiden door een komma: Relevantie: Ja of Nee Vertrouwenspercentage: Een benaderende maat van zekerheid (bijv. 84%) Voorbeeld uitvoerformaat: Ja, 84% Nee, 42% Vraag: Identificeer contracten die boetebepalingen bevatten. Context: Deze analyse heeft tot doel contractdocumenten te vinden die relevant zijn voor vragen met betrekking tot boetes. Inhoud van het contractdocument: Contractdocument Inhoud Deel 1: {{13.metadata.`contract data raw 1`}} Contractdocument Inhoud Deel 2 (indien van toepassing): {{13.metadata.`contract data raw 2`}} Bestandsnaam contractdocument: {{13.metadata.`contract title`}} Contractmetadata: Contract Record Titel: {{13.metadata.`contract title`}} Contract Record Type: {{13.metadata.`contract type`}}
6. Verzamel de gegevens in Google sheets
Deze stap slaat de resultaten van de herwaardering van vectoren op in een Google Sheet. Tot nu toe hebben we enkele contracten geïdentificeerd met “Ja”-waarden.
Workflow Scenario 3: De vraag beantwoord krijgen
In dit scenario richten we ons uitsluitend op de contracten die “Ja” hebben gescoord in Workflow Scenario 2. Op dit punt hoeven we de andere contractdocumenten niet meer te verwerken, aangezien de scope is beperkt tot een paar contracten die relevant zijn voor de vraag.
Het Make.com scenario dat hier wordt gebruikt, wordt hieronder weergegeven:
Belangrijke workflow onderdelen
1. Google sheets
Een Google Sheet bevat nu alleen gegevens voor de contracten die relevant zijn voor de oorspronkelijke vraag.
2. Tools – Tekst aggregator
Deze tekstparser maakt een schone en georganiseerde tekstlijst van alle relevante gegevens voor verdere verwerking.
3. OpenAI – Maak een completion prompt
De uitvoer van de tekstaggregator wordt gebruikt in de laatste OpenAI-prompt om de vraag effectief te beantwoorden.
Je bent een expert in juridische contracten, gespecialiseerd in gedetailleerde analyse en interpretatie. Je reputatie is opgebouwd door het leveren van nauwkeurige, beknopte en uitvoerbare inzichten in contractdocumenten. Belangrijkste Doelen: 1. Beantwoord nauwkeurig de vraag van de gebruiker over de aangeleverde contracten. 2. Leg duidelijk de bevindingen uit, vooral die welke direct relevant zijn voor de vraag. 3. Als je niet zeker bent of niet volledig kunt antwoorden: - Leg uit waarom een definitief antwoord niet gegeven kan worden. - Specificeer welke aanvullende informatie of context nodig is om een compleet antwoord te geven. Jouw Rol: Wees behulpzaam, transparant en professioneel in je antwoorden. Context van de Analyse: Je hebt de taak om contractdocumenten te analyseren die zijn opgeslagen in een vectordatabase. De database maakt gebruik van Pinecone om embedding-representaties van deze documenten op te slaan. De volgende stappen werden gebruikt om de gegevens voor te bereiden: 1. Vectorzoekopdracht: Een vraag werd uitgevoerd om de meest relevante contractdocumenten op te halen. 2. Herwaardering: De initiële vectorzoekresultaten werden hergewaardeerd met behulp van GPT-4O om de relevantie te waarborgen, waarbij een subset van de best scorende resultaten hier werd opgenomen om binnen de context-tokenlimiet te passen. Inhoudsopgave: Vraag: Identificeer contracten die boetebepalingen bevatten en leg de kosten in het slechtste geval uit. Inhoud van het contract: De ruwe contracttekst die hieronder wordt verstrekt bevat details die relevant zijn voor de vraag. Top Scores Herwaardeerde Vector Zoekresultaten: {{2.text}} Actieplan: 1. Beoordeel grondig de vraag en de hergewaardeerde resultaten. 2. Focus op boetebepalingen, kosten in het slechtste geval en eventuele bijbehorende voorwaarden of triggers. 3. Reageer duidelijk, verwijzend naar de zoekresultaten waar van toepassing. 4. Benadruk beperkingen of ontbrekende context die nodig is voor verdere nauwkeurigheid.
OpenAI resultaat
“`markdown
### Vraag: Identificeer contracten met boetebepalingen en leg de kosten uit in het slechtste scenario
### Analyse van contracten:
#### 1. **Contract: Non-Disclosure Agreement (NDA)**
– **Geïdentificeerde boetebepalingen**:
Sectie 5 (“Boetes en Strafen”) legt significante boetes vast voor schendingen van vertrouwelijkheid:
– **Directe financiële boete**: €10.000.000 voor elke niet-vergunde openbaarmaking of gebruik.
– **Doorlopende financiële boete**: €1.000.000 per dag totdat de schending naar tevredenheid van de openbarende partij is gecorrigeerd.
– **Aanvullende schadevergoeding**: Werkelijke schade als gevolg van de schending, inclusief verstoringen van militaire operaties of bedreigingen voor de nationale veiligheid.
– **Slechtste scenario kosten**:
In het geval van meerdere gelijktijdige schendingen (bijvoorbeeld niet-vergunde openbaarmakingen van meerdere documenten), zouden de boetes zich opstapelen. Bijvoorbeeld:
– **Eén openbaarmaking over 10 dagen**: €10.000.000 (initiële boete) + €10.000.000 (dagelijkse boetes) = €20.000.000.
– **Meerdere schendingen**: Als drie afzonderlijke schendingen plaatsvinden en 10 dagen niet worden opgelost, zouden de boetes oplopen tot €60.000.000 (€30.000.000 voor initiële boetes + €30.000.000 voor doorlopende boetes).
– **Aanvullende schadevergoeding**: Schadevergoeding (mogelijk onbeperkt) kan de kosten verder verhogen, maar deze zouden afhangen van de meetbare schade die door de schending wordt veroorzaakt.
#### 2. **Contract: SharePoint Support Services**
– **Geïdentificeerde boetebepalingen**:
Sectie 5.1 introduceert boetes voor het niet naleven van de reactietijden/resoluties in de Service Level Agreement (SLA):
– **Hoge prioriteit kwesties**: €2.000 per keer.
– **Middelmatige prioriteit kwesties**: €1.000 per keer.
– **Lage prioriteit kwesties**: €500 per keer.
– **Cumulatieve bepaling**: Als SLA-schendingen 10 keer per kalenderjaar overschrijden, kan de klant de overeenkomst beëindigen.
– **Slechtste scenario kosten**:
Uitgaande van frequente SLA-schendingen, zou het slechtste scenario afhangen van het aantal schendingen, prioriteitsniveaus en of de schendingen leiden tot beëindiging van het contract. Bijvoorbeeld:
– **10 hoge-prioriteit schendingen in één jaar**: €20.000 aan boetes (€2.000 x 10).
– Aanhoudende SLA-problemen die leiden tot beëindiging zouden opportunitykosten met zich meebrengen, niet-geleverd diensten en schade aan de reputatie.
#### 3. **Contract: SharePoint Fixed-Price Application Development**
– **Geïdentificeerde boetebepalingen**:
Sectie 4.1 specificeert boetes voor vertragingen:
– **Gemiste deadlines voor mijlpalen**: Als de voltooiing meer dan 2 maanden vertraagd is, kan de klant een volledige terugbetaling eisen van de betalingen die voor de vertraagde mijlpaal zijn gedaan.
– **Boete voor late voltooiing**: €10.000 boete per vertraagde mijlpaal die meer dan 2 maanden achterloopt.
– **Beëindigingsoptie**: De klant kan de overeenkomst beëindigen als de vertragingen meer dan 3 maanden bedragen.
– **Slechtste scenario kosten**:
– Als **alle vier de mijlpalen** meer dan 2 maanden zijn vertraagd en de vertragingen langer dan 3 maanden duren:
– Volledige terugbetalingen voor alle mijlpalen (€200.000) + €40.000 boetes (€10.000 x 4 mijlpalen) = €240.000 totaal.
– Het beëindigen van het contract zou resulteren in geen verdere betalingen, maar extra kosten zouden kunnen bestaan uit het inhuren van een andere ontwikkelaar om het project af te maken.
—
### Samenvatting van de slechtste scenario’s voor de verschillende contracten:
1. **NDA**: Boetes voor schendingen kunnen snel oplopen tot tientallen of honderden miljoenen euro’s (€20.000.000+ voor één onopgeloste schending over 10 dagen). Schadevergoeding is onbeperkt en alleen beperkt door de schaal van de bewezen schade.
2. **SharePoint Support Services**: SLA-schendingen zijn minder kostbaar (€20.000 voor 10 SLA-schendingen bijvoorbeeld), maar herhaalde problemen kunnen leiden tot beëindiging van het contract.
3. **SharePoint Fixed-Price Development**: Vertragingen en boetes kunnen resulteren in een financieel verlies van €240.000 in het slechtste scenario (volledige terugbetalingen van mijlpalen + boetes), exclusief extra kosten voor het beëindigen en vervangen van de ontwikkelaar.
### Ontbrekende context:
De boetes voor de NDA, hoewel scherp, gaan ervan uit dat er geen mitigatie of geschil is over de ernst of het optreden van de schending. Evenzo kunnen voor de SharePoint-contracten de werkelijke kosten andere verliezen omvatten (bijvoorbeeld reputatieschade) die verder gaan dan de contractuele boetes. Als specifieke scenario’s (bijvoorbeeld het aantal schendingen, hun oplossing of uitkomsten van geschillen) bekend zijn, kan ik deze kostenanalyse verder verfijnen. Laat het me weten als je diepere inzichten in één onderdeel wilt.
Conclusie
De resultaten zijn uitstekend: de drie contractdocumenten met boetebepalingen zijn succesvol geïdentificeerd, en het slechtste scenario dat ik vroeg, is nauwkeurig geschat.
In de Shareflex Contract-applicatie werden 16 contract-PDF-documenten opgeslagen over 10 contractrecords. Ik heb zorgvuldig verschillende contractdocumentinhouden gecreëerd met behulp van ChatGPT, waarbij ik ervoor zorgde dat de setup de juiste testinhoud bevatte. In 3 van deze contractdocumenten vroeg ik ChatGPT specifiek om boetebepalingen op te nemen, en de Make.com-scenario’s hebben alleen deze 3 documenten succesvol geïdentificeerd.
De workflowautomatiseringen zijn nog niet klaar voor productie, aangezien de gebruikersinterfaces nog ontbreken. Het maken van deze interfaces wordt echter niet als een grote uitdaging beschouwd.
In de nabije toekomst wordt verwacht dat de tokenlimiet van OpenAI aanzienlijk zal stijgen, waardoor veel grotere datasets verwerkt kunnen worden.
Dezezelfde setup kan ook voor andere doeleinden worden aangepast, zoals het analyseren van applicatiecode om delen te identificeren die verantwoordelijk zijn voor het verzenden van gegevens naar andere systemen, bijvoorbeeld.