Recherche conversationnelle avec OCI Generative AI
Suivez les étapes de cette procédure pas à pas pour configurer et utiliser un pipeline de génération augmentée par extraction de bout en bout dans la recherche OCI avec OpenSearch, à l'aide d'un connecteur du service d'intelligence artificielle générative pour OCI.
Vous pouvez tirer parti du connecteur pour avoir accès à toutes les fonctions du service Intelligence artificielle générative, telles que la génération augmentée de récupération (RAG), le sommaire de texte, la génération de texte, la recherche conversationnelle et la recherche sémantique.
Les étapes suivantes sont requises pour créer un connecteur d'intelligence artificielle générative :
En complément de ces étapes de base, cette rubrique continue avec les étapes requises pour configurer et utiliser un pipeline de génération augmentée par extraction (RAG) de bout en bout dans la recherche OCI avec OpenSearch, à l'aide d'un connecteur d'IA générative OCI. Chaque étape comprend un modèle générique du code requis. Vous pouvez utiliser la console pour générer automatiquement ce code avec des valeurs configurées pour votre environnement. Voir Création d'un pipeline de RAG pour la recherche avec OpenSearch.
Le connecteur utilise le modèle d'intégration Cohere hébergé par l'intelligence artificielle générative. L'IA générative prend également en charge le modèle Llma2 que vous pouvez expérimenter.
Préalables
- Pour utiliser le service d'intelligence artificielle générative pour OCI, la location doit être abonnée à la région Midwest des États-Unis (Chicago) ou à la région Centre de l'Allemagne (Francfort). Vous n'avez pas besoin de créer la grappe dans l'une ou l'autre de ces régions. Assurez-vous que la location est abonnée à l'une des régions.
-
Pour utiliser un connecteur du service d'intelligence artificielle générative pour OCI avec la recherche OCI avec OpenSearch, vous avez besoin d'une grappe configurée pour utiliser OpenSearch version 2.11. Par défaut, les nouvelles grappes sont configurées pour utiliser la version 2.11. Pour créer une grappe, voir Création d'une grappe OpenSearch.
Pour les grappes existantes configurées pour la version 2.3, vous pouvez effectuer une mise à niveau en ligne vers la version 2.11. Pour plus d'informations, voir Mises à niveau logicielles de grappe OpenSearch.
Pour mettre à niveau les grappes existantes configurées pour la version 1.2.3 vers la version 2.11, vous devez utiliser le processus de mise à niveau décrit dans Mises à niveau du logiciel de grappe OpenSearch.
- Créez une politique pour accorder l'accès aux ressources du service d'intelligence artificielle générative. L'exemple de politique suivant inclut les autorisations requises :
ALLOW ANY-USER to manage generative-ai-family in tenancy WHERE ALL {request.principal.type='opensearchcluster', request.resource.compartment.id='<cluster_compartment_id>'}Pour en connaître davantage sur les politiques, voir Introduction aux politiques et Politiques communes.
- Utilisez l'opération paramètres des API de grappe pour configurer les paramètres de grappe recommandés qui vous permettent de créer un connecteur. L'exemple suivant présente les paramètres recommandés :
PUT _cluster/settings { "persistent": { "plugins": { "ml_commons": { "only_run_on_ml_node": "false", "model_access_control_enabled": "true", "native_memory_threshold": "99", "rag_pipeline_feature_enabled": "true", "memory_feature_enabled": "true", "allow_registering_model_via_local_file": "true", "allow_registering_model_via_url": "true", "model_auto_redeploy.enable":"true", "model_auto_redeploy.lifetime_retry_times": 10 } } } }
Enregistrer le groupe de modèles
Enregistrez un groupe de modèles à l'aide de l'opération Enregistrer dans les API de groupe de modèles, comme illustré dans l'exemple suivant :
POST /_plugins/_ml/model_groups/_register
{
"name": "public_model_group-emb",
"description": "This is a public model group"
}
Notez la valeur model_group_id retournée dans la réponse :
{
"model_group_id": "<model_group_ID>",
"status": "CREATED"
}
Créer le connecteur
Vous pouvez créer un connecteur pour n'importe quel modèle de grand modèle de langage distant pris en charge par le service GenAI. Il existe plusieurs modèles hébergés ON-DEMAND, mais ces modèles sont parfois obsolètes. Vous pouvez éventuellement configurer et utiliser un point d'extrémité de modèle GENAI DÉDIÉ si vous le souhaitez.
Si vous utilisez le modèle ON-DEMAND, restez à jour avec les avis d'abandon de modèle du service GenAI et mettez à jour votre connecteur si nécessaire pour éviter d'éventuelles interruptions de service. Voir Modèles fondamentaux préentraînés dans l'intelligence artificielle générative pour sélectionner un modèle de langage volumineux dans la liste des modèles pris en charge.
Si vous utilisez le modèle DEDICATED, remplacez le paramètre servingType dans l'exemple de données utiles suivant ON-DEMAND par DEDICATED.
Les sections suivantes présentent le modèle de données utiles pour les classes de modèle Cohere et Llama.
GenAI Modèle de connecteur pour les modèles Cohere.Command
Fournissez les informations pour les paramètres fictifs suivants dans vos données utiles :
<connector_name>: Entrez un nom unique pour identifier votre connecteur. Par exemple, "cohere command-r-plus connector v01."<connector_description>: Entrez une description abrégée de votre connecteur comportant jusqu'à 30 caractères. Par exemple, "Mon connecteur vers le modèle GenAI cohere.command-r-plus."<compartment_OCID>: Entrez l'OCID du compartiment dans lequel réside votre grappe OpenSearch.<genai_cohere_model>: Entrez le nom du modèle Cohere à utiliser. Par exemple, "cohere.command-r-plus."
POST _plugins/_ml/connectors/_create
{
"name": "<connector_name>",
"description": "<connector_description>",
"version": 2,
"protocol": "oci_sigv1",
"parameters": {
"endpoint": "inference.generativeai.us-chicago-1.oci.oraclecloud.com",
"auth_type": "resource_principal"
},
"credential": {
},
"actions": [
{
"action_type": "predict",
"method": "POST",
"url": "https://${parameters.endpoint}/20231130/actions/chat",
"request_body": "{\"compartmentId\":\"<compartment_OCID>\",\"servingMode\":{\"modelId\":\"<genai_cohere_model>\",\"servingType\":\"ON_DEMAND\"},\"chatRequest\":{\"message\":\"${parameters.prompt}\",\"maxTokens\":600,\"temperature\":1,\"frequencyPenalty\":0,\"presencePenalty\":0,\"topP\":0.75,\"topK\":0,\"isStream\":false,\"chatHistory\":[],\"apiFormat\":\"COHERE\"}}",
"post_process_function": "def text = params['chatResponse']['text'].replace('\n', '\\\\n').replace('\"','');\n return '{\"name\":\"response\",\"dataAsMap\":{\"inferenceResponse\":{\"generatedTexts\":[{\"text\":\"' + text + '\"}]}}}'"
}
]
}
GenAI Modèle de connecteur pour les modèles Meta LLAMA
Fournissez les informations pour les paramètres fictifs suivants dans vos données utiles :
<connector_name>: Entrez un nom unique pour identifier votre connecteur. Par exemple, " connecteur Meta-llama v1 ".<connector_description>: Entrez une description abrégée de votre connecteur comportant jusqu'à 30 caractères. Par exemple, " Mon connecteur vers GenAI meta.llama. "<compartment_OCID>: Entrez l'OCID du compartiment dans lequel réside votre grappe OpenSearch.<genai_llama_model>: Entrez le nom du modèle LLAMA à utiliser. Par exemple, " connecteur Meta-llama v1 ".
POST _plugins/_ml/connectors/_create
{
"name": "<connector_name>",
"description": "<connector_description>",
"version": 2,
"protocol": "oci_sigv1",
"parameters": {
"endpoint": "inference.generativeai.us-chicago-1.oci.oraclecloud.com",
"auth_type": "resource_principal"
},
"credential": {
},
"actions": [
{
"action_type": "predict",
"method": "POST",
"url": "https://${parameters.endpoint}/20231130/actions/chat",
"request_body": "{\"compartmentId\":\<compartment_OCID>\",\"servingMode\":{\"modelId\":\"<genai_llama_model>\",\"servingType\":\"ON_DEMAND\"},\"chatRequest\":{\"maxTokens\":600,\"temperature\":1,\"frequencyPenalty\":0,\"presencePenalty\":0,\"topP\":0.75,\"topK\":-1,\"isStream\":false,\"apiFormat\":\"GENERIC\",\"messages\":[{\"role\":\"USER\",\"content\":[{\"type\":\"TEXT\",\"text\":\"${parameters.prompt}\"}]}]}}",
"post_process_function": "def text = params['chatResponse']['choices'][0]['message']['content'][0]['text'].replace('\n', '\\\\n').replace('\"','');\n return '{\"name\":\"response\",\"dataAsMap\":{\"inferenceResponse\":{\"generatedTexts\":[{\"text\":\"' + text + '\"}]}}}'"
}
]
}
GenAI Modèles de connecteur pour les modèles OpenAI
Voici des exemples de modèles de connecteur GenAI pour les modèles OpenAI :
4o/4o-mini
POST _plugins/_ml/connectors/_create
{
"name": "rag-connector",
"description": "OpenAI connector for RAG pipeline",
"version": 2,
"protocol": "oci_sigv1",
"parameters": {
"endpoint": "inference.generativeai.us-chicago-1.oci.oraclecloud.com",
"auth_type": "resource_principal"
},
"credential": {
},
"actions": [
{
"action_type": "predict",
"method": "POST",
"url": "https://${parameters.endpoint}/20231130/actions/chat",
"request_body": "{\"compartmentId\":\"<compartment_OCID>\",\"servingMode\":{\"modelId\":\"<MODEL NAME>\",\"servingType\":\"ON_DEMAND\"},\"chatRequest\":{\"maxCompletionTokens\":600,\"temperature\":0.5,\"frequencyPenalty\":0,\"presencePenalty\":0,\"topP\":1.0,\"isStream\":false,\"apiFormat\":\"GENERIC\",\"messages\":[{\"role\":\"USER\",\"content\":[{\"type\":\"TEXT\",\"text\":\"${parameters.prompt}\"}]}]}}",
"post_process_function": "def text = params['chatResponse']['choices'][0]['message']['content'][0]['text'].replace('\n', '\\\\n').replace('\"','');\n return '{\"name\":\"response\",\"dataAsMap\":{\"inferenceResponse\":{\"generatedTexts\":[{\"text\":\"' + text + '\"}]}}}'"
}
]
}
o3-mini/o1
POST _plugins/_ml/connectors/_create
{
"name": "o3-mini-rag-connector",
"description": "OpenAI o3-mini connector for RAG pipeline",
"version": 2,
"protocol": "oci_sigv1",
"parameters": {
"endpoint": "inference.generativeai.us-chicago-1.oci.oraclecloud.com",
"auth_type": "resource_principal"
},
"credential": {
},
"actions": [
{
"action_type": "predict",
"method": "POST",
"url": "https://${parameters.endpoint}/20231130/actions/chat",
"request_body": "{\"compartmentId\":\"<compartment_OCID>\",\"servingMode\":{\"modelId\":\"<MODEL_NAME>\",\"servingType\":\"ON_DEMAND\"},\"chatRequest\":{\"isStream\":false,\"apiFormat\":\"GENERIC\",\"reasoningEffort\":\"LOW\",\"messages\":[{\"role\":\"USER\",\"content\":[{\"type\":\"TEXT\",\"text\":\"${parameters.prompt}\"}]}]}}",
"post_process_function": "def text = params['chatResponse']['choices'][0]['message']['content'][0]['text'].replace('\n', '\\\\n').replace('\"','');\n return '{\"name\":\"response\",\"dataAsMap\":{\"inferenceResponse\":{\"generatedTexts\":[{\"text\":\"' + text + '\"}]}}}'"
}
]
}
Enregistrer le modèle
Enregistrez le modèle distant à l'aide du connecteur du service d'intelligence artificielle générative avec l'ID connecteur et l'ID groupe de modèles des étapes précédentes, comme illustré dans l'exemple suivant :
POST /_plugins/_ml/models/_register
{
"name": "oci-genai-embed-test",
"function_name": "remote",
"model_group_id": "<model_group_ID>",
"description": "test semantic",
"connector_id": "<connector_ID>"
}
Déployer le modèle
Déployez le modèle à l'aide de l'ID de modèle retourné dans la réponse des étapes précédentes, comme illustré dans l'exemple suivant :
POST /_plugins/_ml/models/<embedding_model_ID>/_deploy
Créer un pipeline RAG
Créez un pipeline RAG à l'aide de model_id à l'étape précédente, comme illustré dans l'exemple suivant :
PUT /_search/pipeline/demo_rag_pipeline
{
"response_processors": [
{
"retrieval_augmented_generation": {
"tag": "genai_conversational_search_demo",
"description": "Demo pipeline for conversational search Using Genai Connector",
"model_id": "<llm_model_ID>",
"conversation_id": "<conversation_ID>",
"context_field_list": ["<text_field_name>"],
"system_prompt":"hepfull assistant",
"user_instructions":"generate concise answer"
}
}
]
}
Créer l'index de recherche
Une fois le pipeline RAG créé, vous pouvez effectuer une recherche RAG plus conversationnelle sur n'importe quel index. Vous pouvez également tirer parti d'un pipeline d'ingestion de données avec un modèle préentraîné pour utiliser la recherche hybride dans le cadre de l'extraction.
Créer l'index de recherche sans le plugin k-NN
Cette section décrit les étapes pour créer un index sans utiliser de pipeline d'ingestion.
Utilisez cette option pour créer des données sans intégration,
- Créez un index de recherche, comme illustré dans l'exemple suivant :
PUT /conversation-demo-index { "settings": { "index": { "number_of_shards": 1, "number_of_replicas": 0 } }, "mappings": { "properties": { "title": { "type": "text" }, "text": { "type": "text" } } } } - Ingérez les données dans l'index, comme illustré dans l'exemple suivant :
PUT /conversation-demo-index/_doc/1 { "text": "The emergence of resistance of bacteria to antibiotics is a common phenomenon. Emergence of resistance often reflects evolutionary processes that take place during antibiotic therapy. The antibiotic treatment may select for bacterial strains with physiologically or genetically enhanced capacity to survive high doses of antibiotics. Under certain conditions, it may result in preferential growth of resistant bacteria, while growth of susceptible bacteria is inhibited by the drug. For example, antibacterial selection for strains having previously acquired antibacterial-resistance genes was demonstrated in 1943 by the Luria–Delbrück experiment. Antibiotics such as penicillin and erythromycin, which used to have a high efficacy against many bacterial species and strains, have become less effective, due to the increased resistance of many bacterial strains." } GET /conversation-demo-index/_doc/1 PUT /conversation-demo-index/_doc/2 { "text": "The successful outcome of antimicrobial therapy with antibacterial compounds depends on several factors. These include host defense mechanisms, the location of infection, and the pharmacokinetic and pharmacodynamic properties of the antibacterial. A bactericidal activity of antibacterials may depend on the bacterial growth phase, and it often requires ongoing metabolic activity and division of bacterial cells. These findings are based on laboratory studies, and in clinical settings have also been shown to eliminate bacterial infection. Since the activity of antibacterials depends frequently on its concentration, in vitro characterization of antibacterial activity commonly includes the determination of the minimum inhibitory concentration and minimum bactericidal concentration of an antibacterial. To predict clinical outcome, the antimicrobial activity of an antibacterial is usually combined with its pharmacokinetic profile, and several pharmacological parameters are used as markers of drug efficacy." } PUT /conversation-demo-index/_doc/3 { "text": "Antibacterial antibiotics are commonly classified based on their mechanism of action, chemical structure, or spectrum of activity. Most target bacterial functions or growth processes. Those that target the bacterial cell wall (penicillins and cephalosporins) or the cell membrane (polymyxins), or interfere with essential bacterial enzymes (rifamycins, lipiarmycins, quinolones, and sulfonamides) have bactericidal activities. Those that target protein synthesis (macrolides, lincosamides and tetracyclines) are usually bacteriostatic (with the exception of bactericidal aminoglycosides). Further categorization is based on their target specificity. Narrow-spectrum antibacterial antibiotics target specific types of bacteria, such as Gram-negative or Gram-positive bacteria, whereas broad-spectrum antibiotics affect a wide range of bacteria. Following a 40-year hiatus in discovering new classes of antibacterial compounds, four new classes of antibacterial antibiotics have been brought into clinical use in the late 2000s and early 2010s: cyclic lipopeptides (such as daptomycin), glycylcyclines (such as tigecycline), oxazolidinones (such as linezolid), and lipiarmycins (such as fidaxomicin)" } PUT /conversation-demo-index/_doc/4 { "text": "The Desert Land Act of 1877 was passed to allow settlement of arid lands in the west and allotted 640 acres (2.6 km2) to settlers for a fee of $.25 per acre and a promise to irrigate the land. After three years, a fee of one dollar per acre would be paid and the land would be owned by the settler. This act brought mostly cattle and sheep ranchers into Montana, many of whom grazed their herds on the Montana prairie for three years, did little to irrigate the land and then abandoned it without paying the final fees. Some farmers came with the arrival of the Great Northern and Northern Pacific Railroads throughout the 1880s and 1890s, though in relatively small numbers" } PUT /conversation-demo-index/_doc/5 { "text": "In the early 1900s, James J. Hill of the Great Northern began promoting settlement in the Montana prairie to fill his trains with settlers and goods. Other railroads followed suit. In 1902, the Reclamation Act was passed, allowing irrigation projects to be built in Montana's eastern river valleys. In 1909, Congress passed the Enlarged Homestead Act that expanded the amount of free land from 160 to 320 acres (0.6 to 1.3 km2) per family and in 1912 reduced the time to prove up on a claim to three years. In 1916, the Stock-Raising Homestead Act allowed homesteads of 640 acres in areas unsuitable for irrigation. This combination of advertising and changes in the Homestead Act drew tens of thousands of homesteaders, lured by free land, with World War I bringing particularly high wheat prices. In addition, Montana was going through a temporary period of higher-than-average precipitation. Homesteaders arriving in this period were known as Honyockers, or scissorbills. Though the word honyocker, possibly derived from the ethnic slur hunyak, was applied in a derisive manner at homesteaders as being greenhorns, new at his business or unprepared, the reality was that a majority of these new settlers had previous farming experience, though there were also many who did not" } PUT /conversation-demo-index/_doc/6 { "text": "In June 1917, the U.S. Congress passed the Espionage Act of 1917 which was later extended by the Sedition Act of 1918, enacted in May 1918. In February 1918, the Montana legislature had passed the Montana Sedition Act, which was a model for the federal version. In combination, these laws criminalized criticism of the U.S. government, military, or symbols through speech or other means. The Montana Act led to the arrest of over 200 individuals and the conviction of 78, mostly of German or Austrian descent. Over 40 spent time in prison. In May 2006, then-Governor Brian Schweitzer posthumously issued full pardons for all those convicted of violating the Montana Sedition Act." } PUT /conversation-demo-index/_doc/7 { "text": "When the U.S. entered World War II on December 8, 1941, many Montanans already had enlisted in the military to escape the poor national economy of the previous decade. Another 40,000-plus Montanans entered the armed forces in the first year following the declaration of war, and over 57,000 joined up before the war ended. These numbers constituted about 10 percent of the state's total population, and Montana again contributed one of the highest numbers of soldiers per capita of any state. Many Native Americans were among those who served, including soldiers from the Crow Nation who became Code Talkers. At least 1500 Montanans died in the war. Montana also was the training ground for the First Special Service Force or Devil's Brigade a joint U.S-Canadian commando-style force that trained at Fort William Henry Harrison for experience in mountainous and winter conditions before deployment. Air bases were built in Great Falls, Lewistown, Cut Bank and Glasgow, some of which were used as staging areas to prepare planes to be sent to allied forces in the Soviet Union. During the war, about 30 Japanese balloon bombs were documented to have landed in Montana, though no casualties nor major forest fires were attributed to them" }
Comme cette procédure n'utilise pas de pipeline d'ingestion avec cet index, les intégrations ne sont pas générées pour les documents texte lors de l'ingestion. Cela signifie que seule la recherche BM25 est utilisée pour extraire les documents pertinents.
Après avoir créé un index de recherche sans le plugin k-NN, lorsque vous exécutez la commande suivante pour vérifier un document indexé, seul le texte est retourné, comme suit :
Demande :
GET /conversation-demo-index/_doc/1
Réponse :
{
"_index": "conversation-demo-index",
"_id": "1",
"_version": 1,
"_seq_no": 0,
"_primary_term": 1,
"found": true,
"_source": {
"text": "The emergence of resistance of bacteria to antibiotics is a common phenomenon. Emergence of resistance often reflects evolutionary processes that take place during antibiotic therapy. The antibiotic treatment may select for bacterial strains with physiologically or genetically enhanced capacity to survive high doses of antibiotics. Under certain conditions, it may result in preferential growth of resistant bacteria, while growth of susceptible bacteria is inhibited by the drug. For example, antibacterial selection for strains having previously acquired antibacterial-resistance genes was demonstrated in 1943 by the Luria–Delbrück experiment. Antibiotics such as penicillin and erythromycin, which used to have a high efficacy against many bacterial species and strains, have become less effective, due to the increased resistance of many bacterial strains."
}
}
Créer l'index de recherche avec le plugiciel k-NN
Pour tirer parti de la recherche hybride au lieu de BM25 pour enrichir la partie d'extraction du pipeline RAG, vous devez configurer un pipeline d'ingestion et utiliser un modèle préentraîné importé afin que les intégrations de documents soient créées au moment de l'ingestion.
Utilisez cette option pour créer l'index avec un pipeline d'ingestion afin de générer automatiquement l'intégration des données lors de l'ingestion.
- Aux fins de cette procédure pas à pas, utilisez l'une des options suivantes :
-
Option 1 : Enregistrez et déployez un modèle préentraîné hébergé dans la recherche OCI avec OpenSearch à l'aide des étapes décrites sous Utilisation d'un modèle préentraîné OpenSearch. Cette option est la plus simple à utiliser, vous n'avez pas besoin de configurer de politiques IAM supplémentaires et les données utiles ne sont pas aussi complexes que les données utiles de l'option suivante.
-
Option 2 : Importez, enregistrez et déployez un modèle préentraîné OpenSearch à l'aide des étapes décrites dans Modèles personnalisés. Cela inclut le chargement du fichier de modèle dans un seau de stockage d'objets, puis la spécification de l'URL de stockage d'objets du fichier de modèle lors de l'enregistrement du modèle.
-
Option 3 : Vous pouvez également enregistrer et déployer un modèle d'intégration GenAI distant tel que cohere.embed-english-v3.0 dans votre grappe à l'aide de notre connecteur GenAI. Vous devez d'abord créer un connecteur, puis enregistrer et déployer le modèle à l'aide de l'ID connecteur, comme décrit dans les étapes suivantes.
Note
Si vous utilisez le modèle ON-DEMAND, restez à jour avec les avis d'abandon de modèle du service GenAI et mettez à jour votre connecteur si nécessaire pour éviter d'éventuelles interruptions de service. Voir Modèles fondamentaux préentraînés dans l'intelligence artificielle générative pour les modèles d'intégration pris en charge afin de sélectionner un modèle d'intégration dans la liste des modèles pris en charge.
Si vous utilisez le modèle DEDICATED, remplacez le paramètre
servingTypedans l'exemple de données utiles suivant ON-DEMAND par DEDICATED.
Notez l'ID modèle retourné lors de l'enregistrement et du déploiement du modèle.
-
- Créez un pipeline d'ingestion à l'aide de
model idà l'étape précédente, comme illustré dans l'exemple suivant :PUT _ingest/pipeline/minil12-test-pipeline { "description": "pipeline for RAG demo index", "processors" : [ { "text_embedding": { "model_id": "<embedding_model_ID>", "field_map": { "text": "passage_embedding" } } } ] } - Créez un index de recherche avec un pipeline d'ingestion, comme illustré dans l'exemple suivant :
PUT /conversation-demo-index-knn { "settings": { "index.knn": true, "default_pipeline": "minil12-test-pipeline" }, "mappings": { "properties": { "passage_embedding": { "type": "knn_vector", "dimension": <model_dimension>, "method": { "name":"hnsw", "engine":"lucene", "space_type": "l2", "parameters":{ "m":512, "ef_construction": 245 } } }, "text": { "type": "text" } } } } -
Ingérer les données à l'aide du pipeline d'ingestion de l'étape précédente, comme illustré dans l'exemple suivant
PUT /conversation-demo-index-knn/_doc/1 { "text": "The emergence of resistance of bacteria to antibiotics is a common phenomenon. Emergence of resistance often reflects evolutionary processes that take place during antibiotic therapy. The antibiotic treatment may select for bacterial strains with physiologically or genetically enhanced capacity to survive high doses of antibiotics. Under certain conditions, it may result in preferential growth of resistant bacteria, while growth of susceptible bacteria is inhibited by the drug. For example, antibacterial selection for strains having previously acquired antibacterial-resistance genes was demonstrated in 1943 by the Luria–Delbrück experiment. Antibiotics such as penicillin and erythromycin, which used to have a high efficacy against many bacterial species and strains, have become less effective, due to the increased resistance of many bacterial strains." } GET /conversation-demo-index-knn/_doc/1 PUT /conversation-demo-index-knn/_doc/2 { "text": "The successful outcome of antimicrobial therapy with antibacterial compounds depends on several factors. These include host defense mechanisms, the location of infection, and the pharmacokinetic and pharmacodynamic properties of the antibacterial. A bactericidal activity of antibacterials may depend on the bacterial growth phase, and it often requires ongoing metabolic activity and division of bacterial cells. These findings are based on laboratory studies, and in clinical settings have also been shown to eliminate bacterial infection. Since the activity of antibacterials depends frequently on its concentration, in vitro characterization of antibacterial activity commonly includes the determination of the minimum inhibitory concentration and minimum bactericidal concentration of an antibacterial. To predict clinical outcome, the antimicrobial activity of an antibacterial is usually combined with its pharmacokinetic profile, and several pharmacological parameters are used as markers of drug efficacy." } PUT /conversation-demo-index-knn/_doc/3 { "text": "Antibacterial antibiotics are commonly classified based on their mechanism of action, chemical structure, or spectrum of activity. Most target bacterial functions or growth processes. Those that target the bacterial cell wall (penicillins and cephalosporins) or the cell membrane (polymyxins), or interfere with essential bacterial enzymes (rifamycins, lipiarmycins, quinolones, and sulfonamides) have bactericidal activities. Those that target protein synthesis (macrolides, lincosamides and tetracyclines) are usually bacteriostatic (with the exception of bactericidal aminoglycosides). Further categorization is based on their target specificity. Narrow-spectrum antibacterial antibiotics target specific types of bacteria, such as Gram-negative or Gram-positive bacteria, whereas broad-spectrum antibiotics affect a wide range of bacteria. Following a 40-year hiatus in discovering new classes of antibacterial compounds, four new classes of antibacterial antibiotics have been brought into clinical use in the late 2000s and early 2010s: cyclic lipopeptides (such as daptomycin), glycylcyclines (such as tigecycline), oxazolidinones (such as linezolid), and lipiarmycins (such as fidaxomicin)" } PUT /conversation-demo-index-knn/_doc/4 { "text": "The Desert Land Act of 1877 was passed to allow settlement of arid lands in the west and allotted 640 acres (2.6 km2) to settlers for a fee of $.25 per acre and a promise to irrigate the land. After three years, a fee of one dollar per acre would be paid and the land would be owned by the settler. This act brought mostly cattle and sheep ranchers into Montana, many of whom grazed their herds on the Montana prairie for three years, did little to irrigate the land and then abandoned it without paying the final fees. Some farmers came with the arrival of the Great Northern and Northern Pacific Railroads throughout the 1880s and 1890s, though in relatively small numbers" } PUT /conversation-demo-index-knn/_doc/5 { "text": "In the early 1900s, James J. Hill of the Great Northern began promoting settlement in the Montana prairie to fill his trains with settlers and goods. Other railroads followed suit. In 1902, the Reclamation Act was passed, allowing irrigation projects to be built in Montana's eastern river valleys. In 1909, Congress passed the Enlarged Homestead Act that expanded the amount of free land from 160 to 320 acres (0.6 to 1.3 km2) per family and in 1912 reduced the time to prove up on a claim to three years. In 1916, the Stock-Raising Homestead Act allowed homesteads of 640 acres in areas unsuitable for irrigation. This combination of advertising and changes in the Homestead Act drew tens of thousands of homesteaders, lured by free land, with World War I bringing particularly high wheat prices. In addition, Montana was going through a temporary period of higher-than-average precipitation. Homesteaders arriving in this period were known as Honyockers, or scissorbills. Though the word honyocker, possibly derived from the ethnic slur hunyak, was applied in a derisive manner at homesteaders as being greenhorns, new at his business or unprepared, the reality was that a majority of these new settlers had previous farming experience, though there were also many who did not" } PUT /conversation-demo-index-knn/_doc/6 { "text": "In June 1917, the U.S. Congress passed the Espionage Act of 1917 which was later extended by the Sedition Act of 1918, enacted in May 1918. In February 1918, the Montana legislature had passed the Montana Sedition Act, which was a model for the federal version. In combination, these laws criminalized criticism of the U.S. government, military, or symbols through speech or other means. The Montana Act led to the arrest of over 200 individuals and the conviction of 78, mostly of German or Austrian descent. Over 40 spent time in prison. In May 2006, then-Governor Brian Schweitzer posthumously issued full pardons for all those convicted of violating the Montana Sedition Act." } PUT /conversation-demo-index-knn/_doc/7 { "text": "When the U.S. entered World War II on December 8, 1941, many Montanans already had enlisted in the military to escape the poor national economy of the previous decade. Another 40,000-plus Montanans entered the armed forces in the first year following the declaration of war, and over 57,000 joined up before the war ended. These numbers constituted about 10 percent of the state's total population, and Montana again contributed one of the highest numbers of soldiers per capita of any state. Many Native Americans were among those who served, including soldiers from the Crow Nation who became Code Talkers. At least 1500 Montanans died in the war. Montana also was the training ground for the First Special Service Force or Devil's Brigade a joint U.S-Canadian commando-style force that trained at Fort William Henry Harrison for experience in mountainous and winter conditions before deployment. Air bases were built in Great Falls, Lewistown, Cut Bank and Glasgow, some of which were used as staging areas to prepare planes to be sent to allied forces in the Soviet Union. During the war, about 30 Japanese balloon bombs were documented to have landed in Montana, though no casualties nor major forest fires were attributed to them" }
Après avoir créé l'index de recherche avec le plugiciel k-NN, lorsque vous exécutez la commande suivante pour vérifier un document indexé, la réponse inclut les intégrations, comme suit :
Demande :
GET /conversation-demo-index-knn/_doc/1
Réponse :
{
"_index": "conversation-demo-index-knn",
"_id": "1",
"_version": 1,
"_seq_no": 0,
"_primary_term": 1,
"found": true,
"_source": {
"passage_embedding": [
-0.02929831,
-0.04421867,
-0.10647401,
0.07105031,
0.004921746,
-0.04529944,
-0.092778176,
0.14189903,
-0.0016610072,
0.08001712,
0.053442925,
-0.022703059,
0.039608333,
0.042299673,
..............
Créer un ID conversation
Exécutez cette commande pour créer l'ID conversation :
POST /_plugins/_ml/memory/conversation
{
"name": "rag-conversation"
}
Réponse :
{
"conversation_id": "<conversation_ID>"
}
Effectuer la RAG avec BM25
Une fois les documents indexés, vous pouvez effectuer la RAG à l'aide du nom du pipeline RAG spécifié dans Créer un pipeline RAG, comme illustré dans l'exemple suivant.
Si vous utilisez un connecteur du service de science des données, vous devez remplacer la valeur "llm_model" par "oci_datascience/<your_llm_model_name>".
GET /conversation-demo-index/_search?search_pipeline=<pipeline_name>
{
"query": {
"match": {
"text": {
"query": "when did us pass espionage act?"
}
}
},
"ext": {
"generative_qa_parameters": {
"llm_model": "oci_genai/<your_llm_model_name>",
"llm_question": "when did us pass espionage act? answer only in two sentences using provided context.",
"conversation_id": "<conversation_ID>",
"context_size": 2,
"interaction_size": 1,
"timeout": 15
}
}
}
La première partie est l'extraction avec l'interrogation à l'index pour trouver les documents les plus pertinents en fonction de l'interrogation de l'utilisateur. La deuxième partie augmente la requête de l'utilisateur avec plus d'instructions, puis utilise la réponse de la partie extraction comme contexte. Ceux-ci sont ensuite tous transmis au grand modèle de langage pour générer la réponse en utilisant uniquement les connaissances dans les données de cas d'utilisation.
Spécifiez le nom du modèle que vous avez utilisé dans les données utiles à partir de Créer le connecteur pour <your_llm_model_name>. Voici des exemples de noms de modèle :
oci_genai/cohere.command-r-plus-08-2024oci_genai/cohere.command-08-2024oci_genai/meta.llama-3.1-70b-instructoci_genai/meta.llama-3.2-90b-vision-instruct
Dans la réponse suivante, la première partie est un ensemble de documents retournés par l'extracteur (moteur de recherche dans OpenSearch). Ceci est suivi de la réponse du grand modèle de langage (LLM), qui est la réponse réelle du modèle LLM à l'aide de la génération de texte et de l'apprentissage en contexte pour augmenter la base de connaissances du LLM. Le moteur de recherche utilisé ici est BM25, car l'index conversation-demo-index n'utilise pas de modèle déployé pour générer des intégrations de document lors de l'ingestion.
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 4,
"relation": "eq"
},
"max_score": 3.6364775,
"hits": [
{
"_index": "conversation-demo-index",
"_id": "6",
"_score": 3.6364775,
"_source": {
"text": "In June 1917, the U.S. Congress passed the Espionage Act of 1917 which was later extended by the Sedition Act of 1918, enacted in May 1918. In February 1918, the Montana legislature had passed the Montana Sedition Act, which was a model for the federal version. In combination, these laws criminalized criticism of the U.S. government, military, or symbols through speech or other means. The Montana Act led to the arrest of over 200 individuals and the conviction of 78, mostly of German or Austrian descent. Over 40 spent time in prison. In May 2006, then-Governor Brian Schweitzer posthumously issued full pardons for all those convicted of violating the Montana Sedition Act."
}
},
{
"_index": "conversation-demo-index",
"_id": "4",
"_score": 2.675274,
"_source": {
"text": "The Desert Land Act of 1877 was passed to allow settlement of arid lands in the west and allotted 640 acres (2.6 km2) to settlers for a fee of $.25 per acre and a promise to irrigate the land. After three years, a fee of one dollar per acre would be paid and the land would be owned by the settler. This act brought mostly cattle and sheep ranchers into Montana, many of whom grazed their herds on the Montana prairie for three years, did little to irrigate the land and then abandoned it without paying the final fees. Some farmers came with the arrival of the Great Northern and Northern Pacific Railroads throughout the 1880s and 1890s, though in relatively small numbers"
}
},
{
"_index": "conversation-demo-index",
"_id": "5",
"_score": 2.5380564,
"_source": {
"text": "In the early 1900s, James J. Hill of the Great Northern began promoting settlement in the Montana prairie to fill his trains with settlers and goods. Other railroads followed suit. In 1902, the Reclamation Act was passed, allowing irrigation projects to be built in Montana's eastern river valleys. In 1909, Congress passed the Enlarged Homestead Act that expanded the amount of free land from 160 to 320 acres (0.6 to 1.3 km2) per family and in 1912 reduced the time to prove up on a claim to three years. In 1916, the Stock-Raising Homestead Act allowed homesteads of 640 acres in areas unsuitable for irrigation. This combination of advertising and changes in the Homestead Act drew tens of thousands of homesteaders, lured by free land, with World War I bringing particularly high wheat prices. In addition, Montana was going through a temporary period of higher-than-average precipitation. Homesteaders arriving in this period were known as Honyockers, or scissorbills. Though the word honyocker, possibly derived from the ethnic slur hunyak, was applied in a derisive manner at homesteaders as being greenhorns, new at his business or unprepared, the reality was that a majority of these new settlers had previous farming experience, though there were also many who did not"
}
},
{
"_index": "conversation-demo-index",
"_id": "7",
"_score": 1.4905708,
"_source": {
"text": "When the U.S. entered World War II on December 8, 1941, many Montanans already had enlisted in the military to escape the poor national economy of the previous decade. Another 40,000-plus Montanans entered the armed forces in the first year following the declaration of war, and over 57,000 joined up before the war ended. These numbers constituted about 10 percent of the state's total population, and Montana again contributed one of the highest numbers of soldiers per capita of any state. Many Native Americans were among those who served, including soldiers from the Crow Nation who became Code Talkers. At least 1500 Montanans died in the war. Montana also was the training ground for the First Special Service Force or Devil's Brigade a joint U.S-Canadian commando-style force that trained at Fort William Henry Harrison for experience in mountainous and winter conditions before deployment. Air bases were built in Great Falls, Lewistown, Cut Bank and Glasgow, some of which were used as staging areas to prepare planes to be sent to allied forces in the Soviet Union. During the war, about 30 Japanese balloon bombs were documented to have landed in Montana, though no casualties nor major forest fires were attributed to them"
}
}
]
},
"ext": {
"retrieval_augmented_generation": {
"answer": " Through the Espionage Act of 1917 and the Sedition Act of 1918, passed in May of 1918, the U.S. Congress outlawed criticism of the military, government, or symbols through speech or other means. The Montana Sedition Act was enacted in February 1918, serving as a model for the federal version, and resulting in the arrest of over 200 people, chiefly of German or Austrian descent, with over 40 imprisoned. "
}
}
}
Effectuer la RAG avec la recherche hybride
Vous pouvez également effectuer la RAG avec la recherche hybride en tant qu'extracteur. L'utilisation de la recherche hybride au lieu de BM25 peut améliorer considérablement la qualité de l'extracteur. En effet, l'extracteur de recherche hybride utilise un modèle déployé pour intégrer l'interrogation utilisateur dans le même hyperspace que les documents indexés, puis effectue une recherche sémantique pure pour extraire les documents les plus pertinents afin d'augmenter les connaissances du LLM. Si l'extracteur ne fait pas un bon travail pour extraire et fournir le contexte le plus pertinent au LLM, la réponse du modèle de LLM n'est pas aussi précise.
À l'aide de l'index conversation-demo-index-knn Create the Search Index (Créer l'index de recherche), qui utilise déjà un pipeline d'ingestion avec un modèle de transformateur de phrase préentraîné déployé, l'interrogation RAG utilise la recherche hybride au lieu de la recherche BM5, comme illustré dans l'exemple suivant :
GET /conversation-demo-index-knn/_search?search_pipeline=<pipeline_name>
{
"query": {
"bool" : {
"should" : [
{
"script_score": {
"query": {
"neural": {
"passage_embedding": {
"query_text": "when did us pass espionage act?",
"model_id": "<embedding_model_ID>",
"k": 3
}
}
},
"script": {
"source": "_score * 1.5"
}
}
}
]
}
},
"ext": {
"generative_qa_parameters": {
"llm_model": "oci_genai/<your_llm_model_name>",
"llm_question": "when did us pass espionage act? answer only in two sentences using provided context.",
"context_size": 2,
"interaction_size": 1,
"timeout": 15
}
}
}
Spécifiez le nom du modèle que vous avez utilisé dans les données utiles à partir de Créer le connecteur pour <your_llm_model_name>. Voici des exemples de noms de modèle :
oci_genai/cohere.command-r-plus-08-2024oci_genai/cohere.command-08-2024oci_genai/meta.llama-3.1-70b-instructoci_genai/meta.llama-3.2-90b-vision-instruct
Si vous utilisez un connecteur du service de science des données, vous devez remplacer la valeur "llm_model" par "oci_datascience/<your_llm_model_name>".
Réponse :
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": 0.80985546,
"hits": [
{
"_index": "conversation-demo-index-knn",
"_id": "6",
"_score": 0.80985546,
"_source": {
"passage_embedding": [
-0.015252565,
0.023013491,
-0.023333456,
-0.088787265,
0.03142115,
0.053571254,
0.067729644,
-0.018526044,
-0.02262757,
0.054774728,
0.095119946,
.......
],
"text": "In June 1917, the U.S. Congress passed the Espionage Act of 1917 which was later extended by the Sedition Act of 1918, enacted in May 1918. In February 1918, the Montana legislature had passed the Montana Sedition Act, which was a model for the federal version. In combination, these laws criminalized criticism of the U.S. government, military, or symbols through speech or other means. The Montana Act led to the arrest of over 200 individuals and the conviction of 78, mostly of German or Austrian descent. Over 40 spent time in prison. In May 2006, then-Governor Brian Schweitzer posthumously issued full pardons for all those convicted of violating the Montana Sedition Act."
}
},
{
"_index": "conversation-demo-index-knn",
"_id": "7",
"_score": 0.5822973,
"_source": {
"passage_embedding": [
0.016897075,
-0.027237555,
-0.026178025,
-0.041597113,
-0.07700658,
0.02490874,
0.009785392,
........
],
"text": "When the U.S. entered World War II on December 8, 1941, many Montanans already had enlisted in the military to escape the poor national economy of the previous decade. Another 40,000-plus Montanans entered the armed forces in the first year following the declaration of war, and over 57,000 joined up before the war ended. These numbers constituted about 10 percent of the state's total population, and Montana again contributed one of the highest numbers of soldiers per capita of any state. Many Native Americans were among those who served, including soldiers from the Crow Nation who became Code Talkers. At least 1500 Montanans died in the war. Montana also was the training ground for the First Special Service Force or Devil's Brigade a joint U.S-Canadian commando-style force that trained at Fort William Henry Harrison for experience in mountainous and winter conditions before deployment. Air bases were built in Great Falls, Lewistown, Cut Bank and Glasgow, some of which were used as staging areas to prepare planes to be sent to allied forces in the Soviet Union. During the war, about 30 Japanese balloon bombs were documented to have landed in Montana, though no casualties nor major forest fires were attributed to them"
}
},
{
"_index": "conversation-demo-index-knn",
"_id": "4",
"_score": 0.58108574,
"_source": {
"passage_embedding": [
0.017924132,
0.03570767,
0.024848921,
-0.023073182,
-0.0023820316,
0.009969,
0.076653704,
-0.10182037,
.......
],
"text": "The Desert Land Act of 1877 was passed to allow settlement of arid lands in the west and allotted 640 acres (2.6 km2) to settlers for a fee of $.25 per acre and a promise to irrigate the land. After three years, a fee of one dollar per acre would be paid and the land would be owned by the settler. This act brought mostly cattle and sheep ranchers into Montana, many of whom grazed their herds on the Montana prairie for three years, did little to irrigate the land and then abandoned it without paying the final fees. Some farmers came with the arrival of the Great Northern and Northern Pacific Railroads throughout the 1880s and 1890s, though in relatively small numbers"
}
}
]
},
"ext": {
"retrieval_augmented_generation": {
"answer": """ The United States passed the Espionage Act in 1917, with the Sedition Act being enacted in 1918. This was preceded by the Montana Sedition act in 1918, which served as a model for the federal version, and resulted in the arrest of over 200 people, many of German or Austrian descent.
Would you like to know more about the Espionage act or any other events that occurred during that period? """
}
}
}
Effectuer une recherche conversationnelle
Pour effectuer une recherche conversationnelle, créez une mémoire de conversation et transmettez l'ID conversation retourné à l'appel d'API RAG. Spécifiez le nom du modèle que vous avez utilisé dans les données utiles à partir de Créer le connecteur pour le nom du modèle dans ces exemples, remplacez <llm_model_name> par le nom du modèle. Voici des exemples de noms de modèle :
oci_genai/cohere.command-r-plus-08-2024oci_genai/cohere.command-08-2024oci_genai/meta.llama-3.1-70b-instructoci_genai/meta.llama-3.2-90b-vision-instruct
L'exemple suivant montre comment créer la mémoire de conversation pour obtenir l'ID conversation :
POST /_plugins/_ml/memory/conversation
{
"name": "rag-conversation"
}
Réponse :
{
"conversation_id": "<conversation_ID>"
}
Recherche conversationnelle avec BM25 Retriever
GET /conversation-demo-index/_search?search_pipeline=<pipeline_name>
{
"query": {
"match": {
"text": {
"query": "when did us pass espionage act?"
}
}
},
"ext": {
"generative_qa_parameters": {
"llm_model": "oci_genai/<your_llm_model_name>",
"llm_question": "when did us pass espionage act? answer only in two sentences using provided context.",
"conversation_id": "<conversation_ID>",
"context_size": 2,
"interaction_size": 1,
"timeout": 15
}
}
}
Recherche conversationnelle avec extraction de recherche hybride
GET /conversation-demo-index-knn/_search?search_pipeline=<pipeline_name>
{
"query": {
"bool" : {
"should" : [
{
"script_score": {
"query": {
"neural": {
"passage_embedding": {
"query_text": "when did us pass espionage act?",
"model_id": "<embedding_model_ID>",
"k": 3
}
}
},
"script": {
"source": "_score * 1.5"
}
}
}
]
}
},
"ext": {
"generative_qa_parameters": {
"llm_model": "oci_genai/<your_llm_model_name>",
"llm_question": "when did us pass espionage act? answer only in two sentences using provided context.",
"conversation_id": "<conversation_ID>",
"context_size": 2,
"interaction_size": 1,
"timeout": 15
}
}
}
<your_llm_model_name>, spécifiez le nom du modèle que vous utilisez, par exemple : oci_genai/cohere.command-r-plus-08-2024oci_genai/cohere.command-08-2024oci_genai/meta.llama-3.1-70b-instructoci_genai/meta.llama-3.2-90b-vision-instruct
La spécification de l'ID conversation invite OpenSearch à créer une mémoire pour suivre l'historique de la conversation. Les détails suivants sont transmis au GML pour la recherche conversationnelle :
- Documents contextuels extraits.
- Interrogation d'entrée de l'utilisateur et réglage fin des invites.
- Historique de conversation précédent de l'utilisateur en fonction de l'ID conversation spécifié.
Vous pouvez contrôler le nombre de contextes de conversation précédents à prendre en compte lors de l'utilisation du paramètre interaction_size dans l'appel d'API. Vous pouvez également utiliser context_size pour contrôler le nombre de documents principaux extraits que vous souhaitez analyser dans le LLM en tant que contexte afin d'augmenter les connaissances.