Vue d’ensemble
April Flow comme plateforme de développement
April Flow est une plateforme d’IA souveraine pour les documents et les données. Les développeurs peuvent l’utiliser à partir de services backend, scripts, workers, outils en ligne de commande et applications internes.
Les SDK exposent des API typées pour les Collections, téléversements, documents, prompts, identité, facturation, messages de support et notifications. Le projet de scraping démontre comment un outil Python peut collecter du contenu et l’envoyer vers April Flow.
Modèle d’intégration typique
Application, worker, script, ou CLI
-> SDK April Flow
-> Collections
-> Téléversements
-> Documents
-> Sessions de prompts
-> Notifications
-> Votre assistant, scraper, automatisation ou flux de travail produit
SDK Java
SDK Java pour les applications côté serveur, services backend, traitements par lots et systèmes basés sur la JVM.
SDK Python
SDK Python pour les scripts, outils CLI, automatisations, scraping, traitement de données et services backend.
CLI de scraping
Un projet de scraping Python utilisant le SDK Python April Flow pour collecter et téléverser du contenu.
Dépôt
Structure du dépôt
Le dépôt regroupe les SDK et les outils au même endroit afin que les développeurs puissent consulter les deux implémentations de langage ainsi que l’exemple de scraper.
aprilflow-sdk
aprilflow-java-sdk
SDK Java
Projet Maven
Java 17+
Client HTTP Jersey
Sérialisation JSON Jackson
Prise en charge des notifications SSE
aprilflow-python-sdk
SDK Python
Python 3.10+
Client HTTP httpx
Modèles pydantic
Prise en charge du flux de notifications
aprilflow-scraper
CLI de scraping Python
Utilise aprilflow-python-sdk
Utilise Scrapy et Playwright
Fournit des commandes de collection, scraping, téléversement et shell
Conçu autour de profils de scraping extensibles
Prérequis
Prérequis
SDK Java
- Java 17 ou version ultérieure
- Maven
- URL de base April Flow
- Clé utilisateur April Flow
SDK Python
- Python 3.10 ou version ultérieure
- httpx
- pydantic
- URL de base April Flow
- Clé utilisateur April Flow
Conservez les clés utilisateur côté serveur
Les clés utilisateur April Flow doivent être stockées uniquement sur des systèmes backend de confiance. Ne les intégrez pas dans du JavaScript de navigateur, des applications mobiles, des dépôts publics ou des bundles frontend téléchargeables.
Installation
Installer les SDK
Utilisez le SDK Java depuis Maven ou installez-le localement pendant le développement. Utilisez le SDK Python en mode éditable pour le développement local.
<dependency>
<groupId>com.aprilsoftware</groupId>
<artifactId>aprilflow-java-sdk</artifactId>
<version>1.0</version>
</dependency>
cd aprilflow-java-sdk
mvn clean install
cd aprilflow-python-sdk
pip install -e .
pip install -e '.[notifications]'
pip install -e '.[test]'
Client
Créer un client
Les deux SDK s’authentifient avec une clé utilisateur April Flow. Le client obtient des jetons d’accès et utilise une authentification bearer pour les appels API.
import aprilflow.sdk.AprilFlowClient;
AprilFlowClient client;
client = AprilFlowClient.create(
"https://api.aprilflow.ai",
System.getenv("APRILFLOW_USER_KEY")
);
System.out.println(client.prompt().builtWith());
AprilFlowClient client;
client = AprilFlowClient.builder()
.baseUrl("https://api.aprilflow.ai")
.userKey(System.getenv("APRILFLOW_USER_KEY"))
.build();
import os
from aprilflow import AprilFlowClient
client = AprilFlowClient.create(
base_url="https://api.aprilflow.ai",
user_key=os.environ["APRILFLOW_USER_KEY"],
)
print(client.prompt.built_with())
from aprilflow import AprilFlowClient
client = AprilFlowClient(
base_url="https://api.aprilflow.ai",
user_key="YOUR_USER_KEY",
)
client.close()
Collections
Travailler avec les Collections
Les Collections regroupent le contenu téléversé et peuvent être utilisées par les prompts. Une Collection peut représenter une base de connaissances, un espace client, un site web, un jeu de données ou un ensemble de documentation produit.
import aprilflow.sdk.collection.Collection;
import aprilflow.sdk.collection.CollectionVisibility;
import aprilflow.sdk.collection.CreateCollectionRequest;
Collection collection;
collection = client.collection().create(
CreateCollectionRequest.create()
.name("SDK example collection")
.description("Collection created from the Java SDK")
.visibility(CollectionVisibility.Private)
);
System.out.println(collection.getId());
from aprilflow import CollectionVisibility
collection = client.collection.create(
name="SDK example collection",
description="Collection created from the Python SDK",
visibility=CollectionVisibility.PRIVATE,
)
print(collection.id)
Téléversements
Téléverser des documents et attendre leur traitement
L’API de téléversement prend en charge les octets, fichiers et flux. Les deux SDK fournissent également des assistants d’attente qui s’abonnent aux notifications et renvoient le résultat lorsque le traitement atteint un statut final.
import aprilflow.sdk.upload.Upload;
import aprilflow.sdk.upload.UploadFileRequest;
import aprilflow.sdk.upload.UploadWaitOptions;
import java.nio.file.Path;
Upload upload;
upload = client.upload().uploadFileAndWait(
UploadFileRequest.create()
.collectionId(collection.getId())
.file(Path.of("/path/to/document.pdf"))
.fileName("document.pdf")
.contentType("application/pdf"),
UploadWaitOptions.defaultOptions()
);
System.out.println(upload.getStatus());
from pathlib import Path
from aprilflow import UploadWaitOptions, UploadStatus
upload = client.upload.upload_file_and_wait(
collection_id=collection.id,
file=Path("/path/to/document.pdf"),
file_name="document.pdf",
content_type="application/pdf",
wait_options=UploadWaitOptions(
timeout=300,
terminal_statuses=[
UploadStatus.PROCESSED,
UploadStatus.IGNORED,
UploadStatus.CANCELED,
UploadStatus.ON_ERROR,
UploadStatus.DOCUMENT_DELETED,
UploadStatus.QUOTA_EXCEEDED,
],
),
)
print(upload.status)
Documents
Rechercher et récupérer des documents
L’API document fournit des fonctions de recherche, récupération par lot, récupération d’objet, opérations sur les documents originaux et suppression.
import aprilflow.sdk.document.DocumentItem;
import aprilflow.sdk.document.DocumentSearchRequest;
java.util.List<DocumentItem> documents;
documents = client.document().search(
DocumentSearchRequest.create()
.collectionId(collection.getId())
.text("search text")
.maxResult(10)
);
from aprilflow import DocumentSearchRequest
documents = client.document.search(
DocumentSearchRequest(
collection_id=collection.id,
text="search text",
max_result=10,
)
)
Prompts
Créer des sessions de prompts
Les sessions de prompts permettent aux applications de conserver un contexte conversationnel. Elles peuvent fonctionner avec du texte simple, des Collections sélectionnées ou des téléversements sélectionnés.
import aprilflow.sdk.prompt.CreateSessionResult;
import aprilflow.sdk.prompt.PromptRequest;
import aprilflow.sdk.prompt.PromptWaitOptions;
CreateSessionResult result;
result = client.prompt().session().createAndWait(
PromptRequest.create()
.text("Summarize the uploaded content.")
.collectionIds(java.util.List.of(collection.getId())),
PromptWaitOptions.defaultOptions()
);
System.out.println(result.getPrompt().getOutput());
from aprilflow import PromptRequest, PromptWaitOptions, PromptStatus
result = client.prompt.session.create_and_wait(
PromptRequest(
text="Summarize the uploaded content.",
collection_ids=[collection.id],
),
wait_options=PromptWaitOptions(
timeout=300,
terminal_statuses=[
PromptStatus.COMPLETED,
PromptStatus.INTERRUPTED,
PromptStatus.ON_ERROR,
PromptStatus.QUOTA_EXCEEDED,
],
),
)
print(result.prompt.output)
Notifications
Écouter le traitement asynchrone
Le traitement des téléversements et des prompts peut être suivi via des flux de notifications. La plupart des applications devraient utiliser les assistants d’attente de plus haut niveau, mais des abonnements directs sont disponibles lorsqu’un flux de travail nécessite des événements.
import aprilflow.sdk.notification.NotificationSubscription;
NotificationSubscription subscription;
subscription = client.upload().watch(
collection.getId(),
upload.getId(),
notification -> {
System.out.println(notification.getAction());
System.out.println(notification.getObjectType());
System.out.println(notification.getObject());
},
error -> {
error.printStackTrace();
}
);
subscription.close();
from aprilflow import Notification
def on_notification(notification: Notification):
print(notification.action, notification.object_type, notification.object)
def on_error(error: Exception):
print("notification stream error", error)
subscription = client.notification.listen(
["collection.upload", "prompt"],
on_notification,
on_error,
)
subscription.close()
Scraper
Exemple de CLI de scraping
Le dépôt comprend un CLI de scraping Python qui utilise le SDK Python April Flow pour les appels API. Il est construit autour de profils de scraping extensibles, afin que les développeurs puissent ajouter de nouvelles sources tout en réutilisant le même flux de sélection de Collection, de gestion des exécutions, de téléversement et de shell.
Flux de travail du scraper
- Installez le SDK Python et le projet de scraping.
- Définissez l’URL de base April Flow et la clé utilisateur.
- Listez ou sélectionnez la Collection cible.
- Exécutez un profil de scraping.
- Examinez le répertoire d’exécution généré.
- Téléversez le répertoire d’exécution scrappé dans April Flow.
- Utilisez des sessions de prompts pour poser des questions sur le contenu téléversé.
Profils de scraping
Étendre le scraper avec des profils
Le scraper est conçu autour de profils. Un profil définit la manière dont une source spécifique doit être découverte, explorée, analysée, normalisée et écrite dans un répertoire d’exécution avant le téléversement.
Cela rend le scraper extensible. Les développeurs peuvent ajouter leurs propres profils pour des sites web publics, portails de documentation, sources réglementaires, bases de connaissances internes ou sources spécifiques à un client, tout en réutilisant le même flux en ligne de commande et pipeline de téléversement April Flow.
Responsabilité du profil
- Définir la source à scraper
- Découvrir les pages, enregistrements ou URL sources
- Récupérer le contenu à l’aide de Scrapy, Playwright ou d’une logique spécifique à la source
- Extraire le contenu pertinent des pages
- Normaliser titre, texte, URL, date et métadonnées
- Écrire les fichiers dans un répertoire d’exécution structuré
Pipeline de scraping partagé
- Exécute les profils depuis le CLI
- Conserve les sorties d’exécution organisées
- Prend en charge la sélection de Collections
- Téléverse les fichiers scrappés dans April Flow
- Prend en charge l’utilisation par shell interactif
- Peut être utilisé manuellement, par tâches cron ou dans des workers d’automatisation
Structure conceptuelle d’un profil
aprilflow-scraper
profiles
cssf
Découvrir les pages sources
Extraire le contenu des pages
Normaliser les documents
Écrire la sortie de l’exécution
votre_profil
Découvrir votre source
Extraire votre contenu
Normaliser vos documents
Réutiliser la même commande de téléversement
Pourquoi les profils sont importants
La logique de scraping est généralement spécifique à une source, mais le téléversement, la sélection de Collections, la gestion des exécutions, les commandes shell, la journalisation et les appels API April Flow ne doivent pas être réécrits pour chaque source. Les profils isolent l’extraction spécifique à une source tandis que le reste du scraper reste réutilisable.
Cela rend le scraper utile à la fois comme exemple et comme point de départ pour des intégrations réelles. Une équipe peut conserver plusieurs profils dans le même projet, chacun ciblant un site web, un espace documentaire, un fournisseur de données ou un système de contenu interne différent.
Installation
pip install -e ../aprilflow-python-sdk
cd aprilflow-scraper
pip install -e .
playwright install chromium
playwright install-deps chromium
Configuration
export APRILFLOW_BASE_URL="https://api.aprilflow.ai"
export APRILFLOW_USER_KEY="..."
export SCRAPER_DATA_DIR="$HOME/scraper"
Ligne de commande
scraper collections list
scraper collections get ab12cd34
scraper collections use ab12cd34
scraper scrape cssf --limit 20
scraper upload <run_dir> --into ab12cd34 --concurrency 2
Shell interactif
scraper shell
collections list
use ab12cd34
scrape cssf
upload ~/scraper/runs/2026-02-11_174642_cssf --concurrency 2
quit
Production
Notes d’intégration en production
Sécurité
Stockez les clés utilisateur dans une gestion de secrets, des variables d’environnement ou une configuration serveur protégée. Renouvelez les clés lorsque nécessaire.
Traitement
Utilisez les assistants d’attente pour les workers simples. Utilisez les abonnements aux notifications lorsque vous devez réagir à des événements de traitement asynchrone.
Périmètres de données
Concevez les Collections autour de limites claires telles qu’un produit, client, espace de travail, domaine ou politique de rétention.
Observabilité
Journalisez les identifiants de téléversement, prompts et Collections, ainsi que les événements de notification afin que les workers puissent être surveillés et relancés de manière fiable.
GitHub
Dépôt GitHub
Utilisez le dépôt GitHub pour consulter le SDK Java, le SDK Python, le CLI de scraping, les tests et les exemples.