Agregue bases de búsqueda a un flujo de trabajo de IA de contrato consultando actualizaciones regulatorias, antecedentes de la empresa y precedentes específicos de la industria antes o durante el análisis de contratos. Las herramientas de inteligencia artificial para la revisión de contratos a menudo funcionan con datos de capacitación estáticos que pasan por alto los cambios regulatorios recientes, los riesgos específicos de la empresa y las condiciones actuales del mercado. Un paso de enriquecimiento de búsqueda que se ejecuta antes del análisis brinda a la IA el contexto actual sobre la contraparte, las regulaciones relevantes y las acciones de cumplimiento recientes, lo que produce evaluaciones de riesgos más precisas.
Requisitos previos
- Python 3.8+ instalado
- solicita biblioteca instalada
- Una clave API de Scavio de scavio.dev
- Un texto del contrato o cláusulas clave para analizar
Guia paso a paso
Paso 1: Extraer entidades clave del contrato
Identifique nombres de empresas, jurisdicciones y tipos de cláusulas que necesitan enriquecimiento de búsqueda.
import os, requests, re
API_KEY = os.environ['SCAVIO_API_KEY']
def extract_entities(contract_text: str) -> dict:
"""Extract searchable entities from contract text."""
entities = {
'companies': [],
'jurisdictions': [],
'clause_types': [],
}
# Simple company name extraction (between quotes or after 'between')
company_patterns = re.findall(r'"([A-Z][^"]{2,50})"', contract_text)
entities['companies'] = list(set(company_patterns))[:5]
# Jurisdiction extraction
jurisdiction_keywords = ['governed by the laws of', 'jurisdiction of', 'state of', 'courts of']
for kw in jurisdiction_keywords:
match = re.search(kw + r'\s+([A-Z][\w\s]{2,30})', contract_text)
if match:
entities['jurisdictions'].append(match.group(1).strip())
# Clause type detection
clause_keywords = {'indemnification': 'indemnif', 'non-compete': 'non-compete',
'termination': 'terminat', 'liability': 'liabilit', 'confidentiality': 'confidential'}
for clause, keyword in clause_keywords.items():
if keyword in contract_text.lower():
entities['clause_types'].append(clause)
return entities
sample = 'Agreement between "Acme Corp" and "Beta LLC" governed by the laws of Delaware. Includes indemnification and non-compete clauses.'
entities = extract_entities(sample)
print(f"Companies: {entities['companies']}")
print(f"Jurisdictions: {entities['jurisdictions']}")
print(f"Clauses: {entities['clause_types']}")Paso 2: Búsqueda de señales de riesgo empresarial
Investigue a cada contraparte en busca de demandas, acciones de cumplimiento y noticias recientes.
def search_company_risk(company: str) -> dict:
queries = [
f'{company} lawsuit 2026',
f'{company} SEC enforcement',
f'{company} bankruptcy risk',
]
risk_signals = {'company': company, 'lawsuits': [], 'enforcement': [], 'news': []}
for query in queries:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google', 'query': query}, timeout=15)
results = resp.json().get('organic_results', [])
for r in results[:3]:
title = r.get('title', '')
if any(w in title.lower() for w in ['lawsuit', 'sued', 'settlement', 'verdict']):
risk_signals['lawsuits'].append(title)
elif any(w in title.lower() for w in ['sec', 'enforcement', 'fine', 'penalty']):
risk_signals['enforcement'].append(title)
else:
risk_signals['news'].append(title)
return risk_signals
risk = search_company_risk('Acme Corp')
print(f"Lawsuits: {len(risk['lawsuits'])}")
print(f"Enforcement: {len(risk['enforcement'])}")Paso 3: Buscar actualizaciones regulatorias
Utilice cambios regulatorios recientes relevantes para la jurisdicción del contrato y los tipos de cláusulas.
def search_regulatory(jurisdiction: str, clause_types: list) -> list:
updates = []
for clause in clause_types:
query = f'{clause} clause regulation {jurisdiction} 2026'
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google', 'query': query}, timeout=15)
results = resp.json().get('organic_results', [])
for r in results[:2]:
updates.append({
'clause': clause,
'title': r.get('title', ''),
'snippet': r.get('snippet', '')[:150],
'url': r.get('link', ''),
})
return updates
updates = search_regulatory('Delaware', ['indemnification', 'non-compete'])
for u in updates:
print(f"[{u['clause']}] {u['title'][:60]}")Paso 4: Construir un contexto de enriquecimiento
Combine todos los resultados de la búsqueda en un bloque de contexto estructurado para la IA del contrato.
def build_contract_context(entities: dict) -> dict:
context = {'companies': {}, 'regulatory': [], 'risk_level': 'low'}
for company in entities.get('companies', []):
risk = search_company_risk(company)
context['companies'][company] = risk
if risk['lawsuits'] or risk['enforcement']:
context['risk_level'] = 'high' if risk['enforcement'] else 'medium'
for jurisdiction in entities.get('jurisdictions', []):
updates = search_regulatory(jurisdiction, entities.get('clause_types', []))
context['regulatory'].extend(updates)
return context
context = build_contract_context(entities)
print(f"Risk level: {context['risk_level']}")
print(f"Regulatory updates: {len(context['regulatory'])}")Paso 5: Generar mensaje de análisis enriquecido
Formatee el contexto de búsqueda en una sección de aviso para la IA de revisión de contrato.
def format_analysis_prompt(contract_text: str, context: dict) -> str:
parts = ['ENRICHMENT CONTEXT (from live search):', '']
if context.get('risk_level') != 'low':
parts.append(f"RISK LEVEL: {context['risk_level'].upper()}")
for company, risk in context.get('companies', {}).items():
parts.append(f'\nCounterparty: {company}')
if risk['lawsuits']:
parts.append(f" Active litigation: {'; '.join(risk['lawsuits'][:2])}")
if risk['enforcement']:
parts.append(f" Enforcement actions: {'; '.join(risk['enforcement'][:2])}")
if context.get('regulatory'):
parts.append('\nRecent regulatory updates:')
for u in context['regulatory'][:3]:
parts.append(f" [{u['clause']}] {u['title'][:60]}")
parts.append('')
parts.append('CONTRACT TEXT:')
parts.append(contract_text[:1000])
return '\n'.join(parts)
prompt = format_analysis_prompt(sample, context)
print(prompt[:500])Ejemplo en Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def contract_context(company, clause):
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': f'{company} {clause} lawsuit 2026'}).json()
return [r.get('title', '')[:60] for r in data.get('organic_results', [])[:3]]
print(contract_context('Acme Corp', 'indemnification'))Ejemplo en JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function contractContext(company, clause) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H,
body: JSON.stringify({platform: 'google', query: `${company} ${clause} lawsuit 2026`})
});
return ((await r.json()).organic_results || []).slice(0, 3).map(r => (r.title || '').slice(0, 60));
}
contractContext('Acme Corp', 'indemnification').then(console.log);Salida esperada
A contract AI workflow enriched with live search data including counterparty risk signals, regulatory updates, and enforcement actions for more accurate contract review.