La plateforme ouverte AI Search propose un service de découpage de documents accessible via une API. Vous pouvez intégrer ce service à vos flux de travail métier pour améliorer l'efficacité de la récupération et du traitement des données.
|
Nom du service |
ID du service |
Description |
Limite QPS de l'API |
|
Document Chunking Service-001 |
ops-document-split-001 |
Propose des stratégies générales de découpage de texte pour diviser les données structurées aux formats HTML, Markdown et texte brut, en se basant sur le formatage des paragraphes, la sémantique du texte ou des règles spécifiées. Il prend également en charge l'extraction de blocs de code, d'images et de tableaux à partir de texte enrichi. |
2 Remarque
Pour demander une limite QPS d'API plus élevée, soumettez un ticket au support technique. |
Dans les pipelines de génération augmentée par récupération (RAG), vous convertissez généralement les documents en vecteurs et les stockez dans une base de données vectorielle pour la récupération. Le service de découpage de documents divise les longs documents en fragments plus petits qui respectent les exigences de longueur des modèles d'incorporation de texte. Ce processus vous permet de vectoriser et de récupérer du contenu à partir de documents très longs.
Utilisation de base
L'API de découpage accepte en entrée une chaîne de texte brut et des options de configuration supplémentaires, puis renvoie le texte découpé ainsi que des éléments de texte enrichi potentiels. La réponse de l'API contient quatre listes : chunks, nodes, rich_texts et sentences. Pour l'étape d'incorporation suivante, extrayez le contenu de la liste chunks et des éléments de la liste rich_texts dont le type n'est pas image. Vous pouvez consulter le modèle de code depuis le centre de scénarios. L'exemple Python suivant illustre cette procédure :
# Extract the chunking results. Note that only ["chunks"] and ["rich_texts"] (excluding images) are used.
doc_list = []
for chunk in document_split_result.body.result.chunks:
doc_list.append({"id": chunk.meta.get("id"), "content": chunk.content})
for rich_text in document_split_result.body.result.rich_texts:
if rich_text.meta.get("type") != "image":
doc_list.append({"id": rich_text.meta.get("id"), "content": rich_text.content})
Utilisation avancée
Le service de découpage de documents peut diviser des documents complexes en fragments selon une limite de jetons spécifiée, créant ainsi une structure arborescente multi-nœuds. Vous pouvez utiliser cette structure arborescente lors de la phase de récupération dans un pipeline RAG pour ajouter du contexte aux fragments rappelés, améliorant ainsi la précision de la réponse finale.
La logique du service divise le texte au niveau structurel le plus élevé possible. Si un fragment résultant dépasse la longueur spécifiée, le service le divise de manière récursive jusqu'à ce que tous les fragments respectent l'exigence de longueur. Ce processus récursif forme un arbre de fragments, où chaque nœud feuille correspond à un résultat de fragment final, également appelé nœud final.
Lors du processus ultérieur de rappel vectoriel, vous pouvez utiliser les informations de l'arbre de fragments pour compléter le contexte. Par exemple, dans la limite de jetons de votre modèle, vous pouvez inclure des fragments frères du même niveau que le fragment rappelé afin de rendre les informations contextuelles plus complètes.
Par exemple, considérons le texte suivant :
After you successfully enable the AI Search Open Platform service for the first time, the system automatically creates a default workspace: Default.
Click Create Workspace. Enter a custom workspace name, and then click Confirm. After you click Create new API key, the system generates an API key. You can then click the Copy button to copy and save the API key.
Un arbre de fragments possible est le suivant :
root (6b15)
|
+-- paragraph_node (557b)
|
+-- newline_node (ef4d)[After you successfully enable the AI Search Open Platform...Default.]
|
+-- newline_node (c618)
|
+-- sentence_node (98ce)[Click Create Workspace...and then click Confirm.]
|
+-- sentence_node (922a)[After you click Create new API key...to copy and save the API key.]
Compte tenu d'une taille maximale de fragment, l'arbre de fragments complet contient deux types de nœuds : les nœuds finaux (nœuds contenant le contenu du fragment) et les nœuds intermédiaires (nœuds logiques sans contenu). Le service renvoie l'arbre entier sous forme de liste de tous les nœuds (nodes) et les nœuds finaux dans une liste distincte (chunks). Voici quelques types de nœuds possibles :
root : le nœud racine.
paragraph_node : un nœud de paragraphe qui représente une division basée sur le délimiteur
"\n\n"et identifie la position d'un paragraphe. Étant donné que l'exemple ne contient pas"\n\n", il n'y a qu'un seul nœud intermédiaire de ce type.newline_node : un nœud de saut de ligne qui représente une division basée sur le délimiteur
"\n". Dans l'exemple, lenewline_node (ef4d)respecte l'exigence de taille de fragment et est donc un nœud final, tandis que lenewline_node (c618)nécessite une division supplémentaire et constitue un nœud intermédiaire.sentence_node : un nœud de phrase qui représente une division basée sur un délimiteur de phrase, tel qu'un point (
.).subsentence_node : un nœud de sous-phrase qui représente une division basée sur un délimiteur de clause, tel qu'une virgule (
,). Ce type n'apparaît pas dans l'exemple.
Pour le contenu fourni au format Markdown ou HTML, le service extrait également les éléments de texte enrichi dans une liste rich_texts distincte. Parmi ces éléments figurent les balises <img>, <table> et <code>. Dans le texte découpé, le service remplace les positions de ces éléments par des espaces réservés tels que [image_0], <table>table_0</table> et <code>code_0</code>. Cette conception permet un rappel indépendant des blocs de texte enrichi et facilite leur réinsertion dans le contexte original si nécessaire. Chaque bloc de texte enrichi appartient à un fragment de nœud final unique.
De plus, pour améliorer les taux de rappel pour les requêtes courtes, vous pouvez définir le paramètre strategy.need_sentence sur true. Cela indique au service de diviser le texte original par phrase et de renvoyer les résultats dans une liste sentences distincte, qui peut être utilisée comme chemin de rappel indépendant. Pour faciliter l'extension des phrases, chaque bloc de phrase appartient à un fragment de nœud final unique. Notez que cette liste sentences n'a aucun lien avec le type sentence_node décrit précédemment.
Les champs en gras mentionnés ci-dessus — chunks, nodes, rich_texts et sentences — sont les champs renvoyés par l'API. Vous trouverez des informations détaillées sur l'utilisation dans les descriptions de paramètres qui suivent. Par souci de simplicité, la sortie de chaque fragment utilise une syntaxe HTML simplifiée.
Prérequis
-
Obtenir les identifiants d'authentification
La plateforme ouverte AI Search nécessite une clé API pour l'authentification. Pour obtenir des instructions, consultez Obtenir une clé API.
-
Obtenir le endpoint du service
Vous pouvez appeler le service via le réseau public ou un VPC. Pour plus de détails, consultez Obtenir le endpoint du service.
Spécifications de la requête
Remarques générales
La taille maximale du corps de la requête est de 8 Mo.
Méthode de requête
POST
URL
{host}/v3/openapi/workspaces/{workspace_name}/document-split/{service_id}
host: le endpoint du service. Vous pouvez appeler le service via Internet ou par le biais d'un VPC. Pour plus d'informations, consultez Obtenir les endpoints du service. L'espace réservé{host}correspond à l'adresse du endpoint de l'API. Vous pouvez l'obtenir depuis la page API key Management dans le volet de navigation de gauche de l'atelier de développement AI Search. La section API Endpoint fournit des domaines d'API publics pour l'accès Internet et des domaines d'API internes pour l'accès depuis un VPC dans la même région. Les deux domaines prennent en charge HTTPS.workspace_name: le nom de l'espace de travail. Par exemple,default.service_id: l'ID du service intégré. Par exemple,ops-document-split-001.
Paramètres de requête
Paramètres d'en-tête
Authentification par clé API
|
Paramètre |
Type |
Obligatoire |
Description |
Exemple |
|
Content-Type |
String |
Oui |
Le type de requête : |
application/json |
|
Authorization |
String |
Oui |
La clé API. |
Bearer OS-d1**2a |
Paramètres du corps
|
Paramètre |
Type |
Obligatoire |
Description |
Exemple |
|
document.content |
String |
Oui |
Le contenu en texte brut à découper. Conformément à la norme JSON, les caractères spéciaux suivants dans un champ de chaîne doivent être échappés : |
"Title\nFirst line\nSecond line" |
|
document.content_encoding |
String |
Non |
L'encodage des caractères du contenu.
|
utf8 |
|
document.content_type |
String |
Non |
Le format du contenu.
|
html |
|
strategy.type |
String |
Non |
La stratégie de découpage par paragraphe.
|
default |
|
strategy.max_chunk_size |
Int |
Non |
La longueur maximale du fragment. Valeur par défaut : 300. |
300 |
|
strategy.compute_type |
String |
Non |
La méthode de calcul de la longueur du fragment.
|
token |
|
strategy.need_sentence |
Boolean |
Non |
Indique s'il faut également renvoyer des fragments au niveau de la phrase pour optimiser les recherches pour les requêtes courtes.
|
false |
|
strategy.custom_split_label |
String |
Non |
Chaîne(s) de division personnalisée(s). Lorsque ce paramètre n'est pas vide, seules les chaînes personnalisées sont utilisées pour la division ; la stratégie par défaut est ignorée. Plusieurs chaînes de division personnalisées peuvent être spécifiées, séparées par des virgules (
|
|
Informations complémentaires :
Le paramètre
strategy.need_sentence: le découpage au niveau de la phrase est une stratégie indépendante du découpage au niveau du paragraphe. Chaque phrase est renvoyée comme un fragment individuel. Lorsque le découpage au niveau de la phrase est activé, les fragments courts (phrases) et longs (paragraphes) peuvent être rappelés simultanément, se complétant mutuellement pour améliorer le taux de rappel global.
Paramètres de réponse
|
Paramètre |
Type |
Description |
Exemple |
|
request_id |
String |
L'ID unique que le système attribue à l'appel d'API. |
B4AB89C8-B135-****-A6F8-2BAB801A2CE4 |
|
latency |
Float/Int |
Le temps nécessaire pour traiter la requête, en millisecondes (ms). |
10 |
|
usage |
Object |
Informations de facturation pour l'appel. |
"usage": { "token_count": 3072 } |
|
usage.token_count |
Int |
Le nombre de jetons. |
3072 |
|
result.chunks |
List(Chunk) |
Une liste de résultats de découpage (nœuds finaux), contenant le contenu du fragment et les métadonnées. |
[{ "content" : "xxx", "meta":{'parent_id':x, 'id': x, 'type': 'text'} }] |
|
result.chunks[].content |
String |
Le contenu du fragment. |
"xxx" |
|
result.chunks[].meta |
Map |
Métadonnées pour le fragment. Tous les champs suivants sont de type chaîne :
|
{ 'parent_id': '3b94a18555c44b67b193c6ab4f****', 'id': 'c9edcb38fdf34add90d62f6bf5c6****, 'type': 'text' 'token': 10, } |
|
result.rich_texts |
List(RichText) |
Sortie de texte enrichi. Lorsque Remarque
Ce format n'est pas pris en charge lorsque |
[{ "content" : "xxx", "meta":{'belonged_chunk_id':x, 'id': x, 'type': 'table'} }] |
|
result.rich_texts[].content |
String |
Le contenu du fragment de texte enrichi. Le |
"<table><tr>\n<th>Action</th>\n<th>Description</th>\n</tr><tr>\n<td>Hide component</td>\n<td>Hides the component. No parameters are required.</td>\n</tr></table>" |
|
result.rich_texts[].meta |
Map |
Métadonnées pour le fragment de texte enrichi. Tous les champs suivants sont de type chaîne :
|
{ 'type': 'table', 'belonged_chunk_id': 'f0254cb7a5144a1fb3e5e024a3****b', 'id': 'table_2-1' 'token': 10 } |
|
result.nodes |
List(Node) |
Une liste de tous les nœuds dans l'arbre de fragments. |
[{'parent_id':x, 'id': x, 'type': 'text'}] |
|
result.nodes[] |
Map |
Informations sur un nœud dans l'arbre de fragments. Tous les champs suivants sont de type chaîne :
|
{ 'id': 'f0254cb7a5144a1fb3e5e024a3****b', 'type': 'paragraph_node', 'parent_id': 'f0254cb7a5144a1fb3e5e024a3****b' } |
|
result.sentences (Facultatif) |
List(sentence) |
Une liste de phrases de chaque fragment est renvoyée uniquement lorsque |
[{ "content" : "xxx", "meta":{'belonged_chunk_id':x, 'id': x, 'type': 'sentence'} }] |
|
result.sentences[].content (Facultatif) |
String |
Le contenu de la phrase. |
"123" |
|
result.sentences[].meta (Facultatif) |
Map |
Métadonnées de la phrase :
|
{ 'id': 'f0254cb7a5144a1fb3e5e024a3****b1-1', 'type': 'sentence', 'belonged_chunk_id': 'f0254cb7a5144a1fb3e5e024a3****b', 'token': 10 } |
Exemple de requête cURL
curl -XPOST -H"Content-Type: application/json"
"http://***-hangzhou.opensearch.aliyuncs.com/v3/openapi/workspaces/default/document-split/ops-document-split-001"
-H "Authorization: Bearer YOUR_API_KEY"
-d "{
\"document\":{
\"content\":\"Product Advantages\\nIndustry Algorithm Edition\\nIntelligent\\nFeatures a rich set of customizable algorithm models and industry-specific recall and ranking algorithms to ensure superior search results.\\n\\nFlexible and Customizable\\nDevelopers can customize algorithm models, application structures, data processing, query analysis, and ranking configurations based on their business characteristics and data. This meets personalized search needs, increases click-through rates, enables rapid business iteration, and significantly shortens the time-to-market for new features.\\n\\nSecure and Stable\\nProvides 24/7 operational maintenance and technical support through online tickets and phone support. A comprehensive incident response mechanism includes fault monitoring, automatic alerts, and rapid issue identification. Access control and isolation are enforced at the API level by using Alibaba Cloud AccessKeyId and AccessKeySecret security pairs, ensuring user-level data segregation and security. Data is redundantly backed up to prevent loss.\\n\\nElastic Scaling\\nResources can be elastically scaled up or down as needed.\\n\\nRich Peripheral Features\\nSupports a range of peripheral search features such as hot searches, search suggestions, and statistical reports for convenient display and analysis.\\n\\nOut-of-the-Box\\nNo need to deploy or maintain clusters. Quickly access a one-stop search service.\\n\\nHigh-Performance Retrieval Edition\\nHigh Throughput\\nSupports tens of thousands of write TPS for a single table, with updates in seconds.\\n\\nSecure and Stable\\nProvides 24/7 operational maintenance and technical support through online tickets and phone support. A comprehensive incident response mechanism includes fault monitoring, automatic alerts, and rapid issue identification. Access control and isolation are enforced at the API level by using Alibaba Cloud AccessKeyId and AccessKeySecret security pairs, ensuring user-level data segregation and security. Data is redundantly backed up to prevent loss.\\n\\nElastic Scaling\\nResources can be elastically scaled up or down as needed.\\n\\nOut-of-the-Box\\nNo need to deploy or maintain clusters. Quickly access a one-stop search service.\\n\\nVector Retrieval Edition\\nStable\\nThe underlying implementation in C++ has been developed for over a decade and supports multiple core businesses, making it highly stable and suitable for mission-critical search scenarios.\\n\\nEfficient\\nA distributed search engine that efficiently supports massive data retrieval and real-time data updates (effective in seconds), making it ideal for search scenarios that are sensitive to query latency and timeliness.\\n\\nCost-Effective\\nSupports multiple index compression strategies and multi-value index loading tests to meet user query needs at a lower cost.\\n\\nVector Algorithms\\nSupports vector retrieval for various unstructured data such as voice, images, videos, text, and behaviors.\\n\\nSQL Queries\\nSupports SQL syntax and online multi-table joins. Provides a rich set of built-in UDFs and a UDF customization mechanism to meet diverse retrieval needs. SQL Studio is integrated into the operations system for easy SQL development and testing.\\n\\nRecall Engine Edition\\nStable\\nThe underlying implementation in C++ has been developed for over a decade and supports multiple core businesses, making it highly stable and suitable for mission-critical search scenarios.\\n\\nEfficient\\nThe Wentian Engine is a distributed search engine that efficiently supports massive data retrieval and real-time data updates (effective in seconds), making it ideal for search scenarios that are sensitive to query latency and timeliness.\\n\\nCost-Effective\\nThe Wentian Engine supports multiple index compression strategies and multi-value index loading tests to meet user query needs at a lower cost.\\n\\nFeature-Rich\\nThe Wentian Engine supports various analyzer types, index types, and powerful query syntax to meet user retrieval needs. A plugin mechanism is also provided for customizing business logic.\\n\\nSQL Queries\\nThe Wentian Engine supports SQL syntax and online multi-table joins. Provides a rich set of built-in UDFs and a UDF customization mechanism to meet diverse retrieval needs. SQL Studio will soon be integrated into the operations system for easy SQL development and testing.\",
\"content_encoding\":\"utf8\",\"content_type\":\"text\"
},
\"strategy\":{
\"type\":\"default\",
\"max_chunk_size\":300,
\"compute_type\":\"token\",
\"need_sentence\":false
}
}"
Exemples de réponse
Réponse réussie
{
"request_id": "47EA146B-****-448C-A1D5-50B89D7EA434",
"latency": 161,
"usage": {
"token_count": 800
},
"result": {
"chunks": [
{
"content": "Product Advantages\\nIndustry Algorithm Edition\\nIntelligent\\nFeatures a rich set of customizable algorithm models and industry-specific recall and ranking algorithms to ensure superior search results.\\n\\nFlexible and Customizable\\nDevelopers can customize algorithm models, application structures, data processing, query analysis, and ranking configurations based on their business characteristics and data. This meets personalized search needs, increases click-through rates, enables rapid business iteration, and significantly shortens the time-to-market for new features.\\n\\nSecure and Stable\\nProvides 24/7 operational maintenance and technical support through online tickets and phone support. A comprehensive incident response mechanism includes fault monitoring, automatic alerts, and rapid issue identification. Access control and isolation are enforced at the API level by using Alibaba Cloud AccessKeyId and AccessKeySecret security pairs, ensuring user-level data segregation and security. Data is redundantly backed up to prevent loss.\\n\\nElastic Scaling\\nResources can be elastically scaled up or down as needed.\\n\\nRich Peripheral Features\\nSupports a range of peripheral search features such as hot searches, search suggestions, and statistical reports for convenient display and analysis.\\n\\nOut-of-the-Box\\nNo need to deploy or maintain clusters. Quickly access a one-stop search service.\\n\\nHigh-Performance Retrieval Edition\\nHigh Throughput\\nSupports tens of thousands of write TPS for a single table, with updates in seconds",
"meta": {
"parent_id": "dee776dda3ff4b078bccf989a6bd****",
"id": "27eea7c6b2874cb7a5bf6c71afbf****",
"type": "text"
}
},
{
"content": ".\\n\\nSecure and Stable\\nProvides 24/7 operational maintenance and technical support through online tickets and phone support. A comprehensive incident response mechanism includes fault monitoring, automatic alerts, and rapid issue identification. Access control and isolation are enforced at the API level by using Alibaba Cloud AccessKeyId and AccessKeySecret security pairs, ensuring user-level data segregation and security. Data is redundantly backed up to prevent loss.\\n\\nElastic Scaling\\nResources can be elastically scaled up or down as needed.\\n\\nOut-of-the-Box\\nNo need to deploy or maintain clusters. Quickly access a one-stop search service.\\n\\nVector Retrieval Edition\\nStable\\nThe underlying implementation in C++ has been developed for over a decade and supports multiple core businesses, making it highly stable and suitable for mission-critical search scenarios.\\n\\nEfficient\\nA distributed search engine that efficiently supports massive data retrieval and real-time data updates (effective in seconds), making it ideal for search scenarios that are sensitive to query latency and timeliness.\\n\\nCost-Effective\\nSupports multiple index compression strategies and multi-value index loading tests to meet user query needs at a lower cost.\\n\\nVector Algorithms\\nSupports vector retrieval for various unstructured data such as voice, images, videos, text, and behaviors.\\n\\nSQL Queries\\nSupports SQL syntax and online multi-table joins. Provides a rich set of built-in UDFs and a UDF customization mechanism to meet diverse retrieval needs",
"meta": {
"parent_id": "dee776dda3ff4b078bccf989a6bd****",
"id": "bf9fcfb47fcf410aa05216e268df****",
"type": "text"
}
},
{
"content": ". SQL Studio is integrated into the operations system for easy SQL development and testing.\\n\\nRecall Engine Edition\\nStable\\nThe underlying implementation in C++ has been developed for over a decade and supports multiple core businesses, making it highly stable and suitable for mission-critical search scenarios.\\n\\nEfficient\\nThe Wentian Engine is a distributed search engine that efficiently supports massive data retrieval and real-time data updates (effective in seconds), making it ideal for search scenarios that are sensitive to query latency and timeliness.\\n\\nCost-Effective\\nThe Wentian Engine supports multiple index compression strategies and multi-value index loading tests to meet user query needs at a lower cost.\\n\\nFeature-Rich\\nThe Wentian Engine supports various analyzer types, index types, and powerful query syntax to meet user retrieval needs. A plugin mechanism is also provided for customizing business logic.\\n\\nSQL Queries\\nThe Wentian Engine supports SQL syntax and online multi-table joins. Provides a rich set of built-in UDFs and a UDF customization mechanism to meet diverse retrieval needs. SQL Studio will soon be integrated into the operations system for easy SQL development and testing.",
"meta": {
"parent_id": "dee776dda3ff4b078bccf989a6bd****",
"id": "26ab0e4f7665487bb0a82c5a226a****",
"type": "text"
}
}
],
"nodes": [
{
"id": "dee776dda3ff4b078bccf989a6bd****",
"type": "root",
"parent_id": "dee776dda3ff4b078bccf989a6bd****"
},
{
"id": "27eea7c6b2874cb7a5bf6c71afbf****",
"type": "sentence",
"parent_id": "dee776dda3ff4b078bccf989a6bd****"
},
{
"id": "bf9fcfb47fcf410aa05216e268df****",
"type": "sentence",
"parent_id": "dee776dda3ff4b078bccf989a6bd****"
},
{
"id": "26ab0e4f7665487bb0a82c5a226a****",
"type": "sentence",
"parent_id": "dee776dda3ff4b078bccf989a6bd****"
}
],
"rich_texts": []
}
}
Réponse d'erreur
Si une erreur se produit, la réponse inclut les champs code et message qui indiquent la cause.
{
"request_id": "817964CD-1B84-4AE1-9B63-4FB99734****",
"latency": 0,
"code": "InvalidParameter",
"message": "JSON parse error: Invalid UTF-8 start byte 0xbc; nested exception is com.fasterxml.jackson.core.JsonParseException: Invalid UTF-8 start byte 0xbc\n at line: 2, column: 19]"
}
Codes d'état
Pour plus d'informations, consultez Codes d'état pour la plateforme ouverte AI Search.