Milvus
Zilliz
  • Home
  • Blog
  • Au-delà de la surcharge de contexte : Comment Parlant × Milvus apporte contrôle et clarté au comportement des agents LLM

Au-delà de la surcharge de contexte : Comment Parlant × Milvus apporte contrôle et clarté au comportement des agents LLM

  • Tutorials
November 05, 2025
Min Yin

Imaginez que l'on vous demande d'accomplir une tâche qui implique 200 règles de gestion, 50 outils et 30 démonstrations, et que vous n'ayez qu'une heure pour le faire. C'est tout simplement impossible. Pourtant, nous attendons souvent des grands modèles de langage qu'ils fassent exactement cela lorsque nous les transformons en "agents" et que nous les surchargeons d'instructions.

Dans la pratique, cette approche s'effondre rapidement. Les cadres d'agents traditionnels, tels que LangChain ou LlamaIndex, injectent toutes les règles et tous les outils dans le contexte du modèle en même temps, ce qui entraîne des conflits de règles, une surcharge du contexte et un comportement imprévisible en production.

Pour résoudre ce problème, un cadre d'agent open-source appelé Parlant a récemment gagné en popularité sur GitHub. Il introduit une nouvelle approche appelée Alignment Modeling, ainsi qu'un mécanisme de supervision et des transitions conditionnelles qui rendent le comportement de l'agent beaucoup plus contrôlable et explicable.

Associé à Milvus, une base de données vectorielle open-source, Parlant devient encore plus performant. Milvus ajoute une intelligence sémantique qui permet aux agents de récupérer dynamiquement les règles et le contexte les plus pertinents en temps réel, ce qui les rend précis, efficaces et prêts pour la production.

Dans ce billet, nous allons explorer le fonctionnement de Parlant dans l'ombre et la manière dont son intégration avec Milvus permet d'atteindre le niveau de production.

Pourquoi les frameworks d'agents traditionnels s'effondrent

Les frameworks d'agents traditionnels aiment faire les choses en grand : des centaines de règles, des dizaines d'outils et une poignée de démonstrations, le tout entassé dans un seul et unique message d'accueil surchargé. Cela peut sembler parfait dans une démo ou un petit test en bac à sable, mais une fois que vous le mettez en production, les fissures commencent à apparaître rapidement.

  • Les règles contradictoires provoquent le chaos : Lorsque deux règles ou plus s'appliquent en même temps, ces frameworks n'ont aucun moyen intégré de décider laquelle l'emporte. Parfois, il en choisit une. Parfois, il mélange les deux. Parfois, il fait quelque chose de totalement imprévisible.

  • Les cas marginaux révèlent les lacunes : Il est impossible de prévoir tout ce qu'un utilisateur pourrait dire. Et lorsque votre modèle est confronté à quelque chose qui ne fait pas partie de ses données d'apprentissage, il se contente de réponses génériques, sans engagement.

  • Le débogage est pénible et coûteux : Lorsqu'un agent se comporte mal, il est presque impossible de déterminer quelle règle est à l'origine du problème. Comme tout se trouve dans une énorme invite système, le seul moyen de résoudre le problème est de réécrire l'invite et de tout tester à nouveau à partir de zéro.

Qu'est-ce que Parlant et comment fonctionne-t-il ?

Parlant est un moteur d'alignement open-source pour les agents LLM. Vous pouvez contrôler précisément le comportement d'un agent dans différents scénarios en modélisant son processus de prise de décision d'une manière structurée et basée sur des règles.

Pour résoudre les problèmes rencontrés dans les cadres d'agents traditionnels, Parlant introduit une nouvelle approche puissante : la modélisation de l'alignement. Son idée centrale est de séparer la définition des règles de leur exécution, en s'assurant que seules les règles les plus pertinentes sont injectées dans le contexte du LLM à tout moment.

Lignes directrices granulaires : Le cœur de la modélisation de l'alignement

Au cœur du modèle d'alignement de Parlant se trouve le concept de directives granulaires. Au lieu d'écrire une invite de système géante pleine de règles, vous définissez de petites directives modulaires - chacune décrivant la manière dont l'agent doit gérer un type de situation spécifique.

Chaque directive se compose de trois parties :

  • Condition - Une description en langage naturel du moment où la règle doit s'appliquer. Parlant convertit cette condition en un vecteur sémantique et l'associe à la saisie de l'utilisateur pour déterminer si elle est pertinente.

  • Action - Une instruction claire qui définit comment l'agent doit réagir une fois que la condition est remplie. Cette action n'est injectée dans le contexte du LLM que lorsqu'elle est déclenchée.

  • Outils - Toutes les fonctions externes ou API liées à cette règle spécifique. Ils ne sont exposés à l'agent que lorsque la ligne directrice est active, ce qui permet de contrôler l'utilisation des outils et de tenir compte du contexte.

await agent.create_guideline(
    condition="The user asks about a refund and the order amount exceeds 500 RMB",
    action="First call the order status check tool to confirm whether the refund conditions are met, then provide a detailed explanation of the refund process",
    tools=[check_order_status, calculate_refund_amount]
)

Chaque fois qu'un utilisateur interagit avec l'agent, Parlant exécute une étape de correspondance légère pour trouver les trois à cinq directives les plus pertinentes. Seules ces règles sont injectées dans le contexte du modèle, ce qui permet de garder les messages concis et ciblés tout en garantissant que l'agent suit toujours les bonnes règles.

Mécanisme de supervision pour la précision et la cohérence

Pour maintenir la précision et la cohérence, Parlant introduit un mécanisme de supervision qui agit comme un second niveau de contrôle de la qualité. Le processus se déroule en trois étapes :

1. Génération d'une réponse candidate - L'agent crée une réponse initiale basée sur les directives correspondantes et le contexte de la conversation en cours.

2. Vérification de la conformité - La réponse est comparée aux lignes directrices actives pour vérifier que chaque instruction a été suivie correctement.

3. Révision ou confirmation - En cas de problème, le système corrige le résultat ; si tout est conforme, la réponse est approuvée et envoyée à l'utilisateur.

Ce mécanisme de supervision garantit que l'agent non seulement comprend les règles, mais qu'il les respecte avant de répondre, ce qui améliore à la fois la fiabilité et le contrôle.

Transitions conditionnelles pour le contrôle et la sécurité

Dans les cadres d'agents traditionnels, chaque outil disponible est exposé au LLM à tout moment. Cette approche "tout sur la table" conduit souvent à des invites surchargées et à des appels d'outils involontaires. Parlant résout ce problème grâce aux transitions conditionnelles. Comme pour les machines à états, une action ou un outil n'est déclenché que lorsqu'une condition spécifique est remplie. Chaque outil est étroitement lié à la ligne directrice correspondante et ne devient disponible que lorsque la condition de cette ligne directrice est activée.

# The balance inquiry tool is exposed only when the condition "the user wants to make a transfer" is met
await agent.create_guideline(
    condition="The user wants to make a transfer",
    action="First check the account balance. If the balance is below 500 RMB, remind the user that an overdraft fee may apply.",
    tools=[get_user_account_balance]
)

Ce mécanisme transforme l'invocation d'un outil en une transition conditionnelle : les outils passent de l'état "inactif" à l'état "actif" uniquement lorsque leurs conditions de déclenchement sont remplies. En structurant l'exécution de cette manière, Parlant s'assure que chaque action se produit délibérément et contextuellement, ce qui permet d'éviter les abus tout en améliorant l'efficacité et la sécurité du système.

Comment Milvus alimente Parlant

Lorsque nous regardons sous le capot du processus de mise en correspondance des directives de Parlant, un défi technique fondamental apparaît clairement : comment le système peut-il trouver les trois à cinq règles les plus pertinentes parmi des centaines, voire des milliers d'options, en quelques millisecondes seulement ? C'est exactement là qu'intervient une base de données vectorielle. C'est la recherche sémantique qui rend cela possible.

Comment Milvus prend en charge le processus de mise en correspondance des directives de Parlant

L'appariement des directives fonctionne par similarité sémantique. Le champ Condition de chaque ligne directrice est converti en une intégration vectorielle, capturant sa signification plutôt que son texte littéral. Lorsqu'un utilisateur envoie un message, Parlant compare la sémantique de ce message à toutes les lignes directrices stockées pour trouver les plus pertinentes.

Voici comment fonctionne le processus, étape par étape :

1. Encodage de la requête - Le message de l'utilisateur et l'historique des conversations récentes sont transformés en un vecteur de requête.

2. Recherche de similitudes - Le système effectue une recherche de similitudes dans la base de vecteurs de directives pour trouver les correspondances les plus proches.

3. Récupération des résultats Top-K - Les trois à cinq directives les plus pertinentes d'un point de vue sémantique sont renvoyées.

4. Injecter dans le contexte - Ces lignes directrices correspondantes sont ensuite insérées dynamiquement dans le contexte du LLM afin que le modèle puisse agir selon les règles correctes.

Pour que ce flux de travail soit possible, la base de données vectorielles doit offrir trois fonctionnalités essentielles : une recherche par approximation du plus proche voisin (ANN) très performante, un filtrage flexible des métadonnées et des mises à jour des vecteurs en temps réel. Milvus, la base de données vectorielles open-source et cloud-native, offre des performances de niveau production dans ces trois domaines.

Pour comprendre comment Milvus fonctionne dans des scénarios réels, prenons l'exemple d'un agent de services financiers.

Supposons que le système définisse 800 directives commerciales couvrant des tâches telles que les demandes de renseignements sur les comptes, les transferts de fonds et les consultations sur les produits de gestion de patrimoine. Dans cette configuration, Milvus fait office de couche de stockage et d'extraction pour toutes les données relatives aux directives.

from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType
import parlant.sdk as p

# Connect to Milvus connections.connect(host=“localhost”, port=“19530”)

# Define the schema for the guideline collection fields = [ FieldSchema(name=“guideline_id”, dtype=DataType.VARCHAR, max_length=100, is_primary=True), FieldSchema(name=“condition_vector”, dtype=DataType.FLOAT_VECTOR, dim=768), FieldSchema(name=“condition_text”, dtype=DataType.VARCHAR, max_length=1000), FieldSchema(name=“action_text”, dtype=DataType.VARCHAR, max_length=2000), FieldSchema(name=“priority”, dtype=DataType.INT64), FieldSchema(name=“business_domain”, dtype=DataType.VARCHAR, max_length=50) ] schema = CollectionSchema(fields=fields, description=“Agent Guidelines”) guideline_collection = Collection(name=“agent_guidelines”, schema=schema)

# Create an HNSW index for high-performance retrieval index_params = { “index_type”: “HNSW”, “metric_type”: “COSINE”, “params”: {“M”: 16, “efConstruction”: 200} } guideline_collection.create_index(field_name=“condition_vector”, index_params=index_params)

Maintenant, lorsqu'un utilisateur dit "Je veux transférer 100 000 RMB sur le compte de ma mère", le flux d'exécution est le suivant :

1. Rectoriser la requête - Convertir l'entrée de l'utilisateur en un vecteur à 768 dimensions.

2. Recherche hybride - Exécuter une recherche de similarité vectorielle dans Milvus avec filtrage des métadonnées (par exemple, business_domain="transfer").

3. Classement des résultats - Classer les lignes directrices candidates sur la base des scores de similarité combinés à leurs valeurs de priorité.

4. Injection de contexte - Injecter les lignes directrices correspondant au Top 3 ( action_text ) dans le contexte de l'agent Parlant.

Dans cette configuration, Milvus offre une latence P99 inférieure à 15 ms, même lorsque la bibliothèque de lignes directrices atteint 100 000 entrées. Par comparaison, l'utilisation d'une base de données relationnelle traditionnelle avec une correspondance par mot-clé entraîne généralement une latence supérieure à 200 ms et une précision de correspondance nettement inférieure.

Comment Milvus permet la mémoire à long terme et la personnalisation

Milvus ne se contente pas de faire correspondre des lignes directrices. Dans les scénarios où les agents ont besoin d'une mémoire à long terme et de réponses personnalisées, Milvus peut servir de couche de mémoire qui stocke et récupère les interactions passées des utilisateurs sous forme de vecteurs intégrés, ce qui aide l'agent à se souvenir de ce qui a été discuté auparavant.

# store user’s past interactions
user_memory_fields = [
    FieldSchema(name="interaction_id", dtype=DataType.VARCHAR, max_length=100, is_primary=True),
    FieldSchema(name="user_id", dtype=DataType.VARCHAR, max_length=50),
    FieldSchema(name="interaction_vector", dtype=DataType.FLOAT_VECTOR, dim=768),
    FieldSchema(name="interaction_summary", dtype=DataType.VARCHAR, max_length=500),
    FieldSchema(name="timestamp", dtype=DataType.INT64)
]
memory_collection = Collection(name="user_memory", schema=CollectionSchema(user_memory_fields))

Lorsque le même utilisateur revient, l'agent peut récupérer les interactions historiques les plus pertinentes dans Milvus et les utiliser pour générer une expérience plus connectée et plus humaine. Par exemple, si un utilisateur a posé une question sur un fonds d'investissement la semaine dernière, l'agent peut se souvenir de ce contexte et y répondre de manière proactive : "Bienvenue ! Avez-vous encore des questions sur le fonds dont nous avons parlé la dernière fois ?"

Comment optimiser les performances des systèmes d'agents alimentés par Milvus ?

Lors du déploiement d'un système d'agent alimenté par Milvus dans un environnement de production, l'optimisation des performances devient essentielle. Pour obtenir une faible latence et un débit élevé, plusieurs paramètres clés doivent être pris en compte :

1. Choix du bon type d'index

Il est important de sélectionner la structure d'index appropriée. Par exemple, HNSW (Hierarchical Navigable Small World) est idéal pour les scénarios à fort taux de rappel tels que la finance ou la santé, où la précision est essentielle. IVF_FLAT fonctionne mieux pour les applications à grande échelle telles que les recommandations en matière de commerce électronique, où un rappel légèrement inférieur est acceptable en échange d'une performance plus rapide et d'une utilisation réduite de la mémoire.

2. Stratégie de partage

Lorsque le nombre de recommandations stockées dépasse un million d'entrées, il est recommandé d'utiliser Partition pour diviser les données par domaine d'activité ou par cas d'utilisation. Le partitionnement réduit l'espace de recherche par requête, ce qui améliore la vitesse d'extraction et maintient la latence stable, même lorsque l'ensemble de données augmente.

3. Configuration du cache

Pour les directives fréquemment consultées, telles que les requêtes standard des clients ou les flux de travail à fort trafic, vous pouvez utiliser la mise en cache des résultats de la requête Milvus. Cela permet au système de réutiliser les résultats précédents, réduisant la latence à moins de 5 millisecondes pour les recherches répétées.

Démonstration pratique : Comment construire un système intelligent de questions-réponses avec Parlant et Milvus Lite

Milvus Lite est une version légère de Milvus - une bibliothèque Python qui peut être facilement intégrée dans vos applications. Elle est idéale pour le prototypage rapide dans des environnements tels que les carnets Jupyter ou pour l'exécution sur des appareils périphériques et intelligents avec des ressources de calcul limitées. Malgré son faible encombrement, Milvus Lite prend en charge les mêmes API que les autres déploiements Milvus. Cela signifie que le code côté client que vous écrivez pour Milvus Lite peut se connecter de manière transparente à une instance Milvus ou Zilliz Cloud complète ultérieurement - aucune refonte n'est nécessaire.

Dans cette démo, nous utiliserons Milvus Lite en conjonction avec Parlant pour démontrer comment construire un système de questions-réponses intelligent qui fournit des réponses rapides et contextuelles avec une configuration minimale.

Conditions préalables

1. GitHub Parlant : https://github.com/emcie-co/parlant

2. documentation Parlant : https://parlant.io/docs

3. python3.10+

4. clé OpenAI

5. MlivusLite

Etape 1 : Installer les dépendances

# Install required Python packages
pip install pymilvus parlant openai
# Or, if you’re using a Conda environment:
conda activate your_env_name
pip install pymilvus parlant openai

Étape 2 : Configurer les variables d'environnement

# Set your OpenAI API key
export OPENAI_API_KEY="your_openai_api_key_here"
# Verify that the variable is set correctly
echo $OPENAI_API_KEY

Étape 3 : Implémenter le code de base

  • Créer un Embedder OpenAI personnalisé
class OpenAIEmbedder(p.Embedder):
    # Converts text into vector embeddings with built-in timeout and retry
    # Dimension: 1536 (text-embedding-3-small)
    # Timeout: 60 seconds; Retries: up to 2 times
  • Initialiser la base de connaissances

1. créer une collection Milvus nommée kb_articles.

2. insérer des échantillons de données (par exemple, politique de remboursement, politique d'échange, délai d'expédition)

3. construire un index HNSW pour accélérer la recherche.

  • Construire l'outil de recherche vectorielle
@p.tool
async def vector_search(query: str, top_k: int = 5, min_score: float = 0.35):
    # 1. Convert user query into a vector
    # 2. Perform similarity search in Milvus
    # 3. Return results with relevance above threshold
  • Configurer l'agent Parlant

Ligne directrice 1 : Pour les questions factuelles ou liées à la politique, l'agent doit d'abord effectuer une recherche vectorielle.

Directive 2 : Lorsque des preuves sont trouvées, l'agent doit répondre en utilisant un modèle structuré (résumé + points clés + sources).

# Guideline 1: Run vector search for factual or policy-related questions
await agent.create_guideline(
            condition="User asks a factual question about policy, refund, exchange, or shipping",
            action=(
                "Call vector_search with the user's query. "
                "If evidence is found, synthesize an answer by quoting key sentences and cite doc_id/title. "
                "If evidence is insufficient, ask a clarifying question before answering."
            ),
            tools=[vector_search],

# Guideline 2: Use a standardized, structured response when evidence is available await agent.create_guideline( condition=“Evidence is available”, action=( “Answer with the following template:\n” “Summary: provide a concise conclusion.\n” “Key points: 2-3 bullets distilled from evidence.\n” “Sources: list doc_id and title.\n” “Note: if confidence is low, state limitations and ask for clarification.” ), tools=[], )

tools=[],

)

  • Rédiger le code complet
import os
import asyncio
import json
from typing import List, Dict, Any
import parlant.sdk as p
from pymilvus import MilvusClient, DataType
# 1) Environment variables: using OpenAI (as both the default generation model and embedding service)
# Make sure the OPENAI_API_KEY is set
OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
if not OPENAI_API_KEY:
    raise RuntimeError("Please set OPENAI_API_KEY environment variable")
# 2) Initialize Milvus Lite (runs locally, no standalone service required)
# MilvusClient runs in Lite mode using a local file path (requires pymilvus >= 2.x)
client = MilvusClient("./milvus_demo.db")  # Lite mode uses a local file path
COLLECTION = "kb_articles"
# 3) Example data: three policy or FAQ entries (in practice, you can load and chunk data from files)
DOCS = [
    {"doc_id": "POLICY-001", "title": "Refund Policy", "chunk": "Refunds are available within 30 days of purchase if the product is unused."},
    {"doc_id": "POLICY-002", "title": "Exchange Policy", "chunk": "Exchanges are permitted within 15 days; original packaging required."},
    {"doc_id": "FAQ-101", "title": "Shipping Time", "chunk": "Standard shipping usually takes 3–5 business days within the country."},
]
# 4) Generate embeddings using OpenAI (you can replace this with another embedding service)
# Here we use Parlant’s built-in OpenAI embedder for simplicity, but you could also call the OpenAI SDK directly.
class OpenAIEmbedder(p.Embedder):
    async def embed(self, texts: List[str], hints: Dict[str, Any] = {}) -> p.EmbeddingResult:
        # Generate text embeddings using the OpenAI API, with timeout and retry handling
        import openai
        try:
            client = openai.AsyncOpenAI(
                api_key=OPENAI_API_KEY,
                timeout=60.0,  # 60-second timeout
                max_retries=2  # Retry up to 2 times
            )
            print(f"Generating embeddings for {len(texts)} texts...")
            response = await client.embeddings.create(
                model="text-embedding-3-small",
                input=texts
            )
            vectors = [data.embedding for data in response.data]
            print(f"Successfully generated {len(vectors)} embeddings.")
            return p.EmbeddingResult(vectors=vectors)
        except Exception as e:
            print(f"OpenAI API call failed: {e}")
            # Return mock vectors for testing Milvus connectivity
            print("Using mock vectors for testing...")
            import random
            vectors = [[random.random() for _ in range(1536)] for _ in texts]
            return p.EmbeddingResult(vectors=vectors)
    @property
    def id(self) -> str:
        return "text-embedding-3-small"
    @property
    def max_tokens(self) -> int:
        return 8192
    @property
    def tokenizer(self) -> p.EstimatingTokenizer:
        from parlant.core.nlp.tokenization import ZeroEstimatingTokenizer
        return ZeroEstimatingTokenizer()
    @property
    def dimensions(self) -> int:
        return 1536
embedder = OpenAIEmbedder()
async def ensure_collection_and_load():
    # Create the collection (schema: primary key, vector field, additional fields)
    if not client.has_collection(COLLECTION):
        client.create_collection(
            collection_name=COLLECTION,
            dimension=len((await embedder.embed(["dimension_probe"])).vectors[0]),
            # Default metric: COSINE (can be changed with metric_type="COSINE")
            auto_id=True,
        )
        # Create an index to speed up retrieval (HNSW used here as an example)
        client.create_index(
            collection_name=COLLECTION,
            field_name="vector",
            index_type="HNSW",
            metric_type="COSINE",
            params={"M": 32, "efConstruction": 200}
        )
    # Insert data (skip if already exists; simple idempotent logic for the demo)
    # Generate embeddings
    chunks = [d["chunk"] for d in DOCS]
    embedding_result = await embedder.embed(chunks)
    vectors = embedding_result.vectors
    # Check if the same doc_id already exists; this is for demo purposes only — real applications should use stricter deduplication
    # Here we insert directly. In production, use an upsert operation or an explicit primary key
    client.insert(
        COLLECTION,
        data=[
            {"vector": vectors[i], "doc_id": DOCS[i]["doc_id"], "title": DOCS[i]["title"], "chunk": DOCS[i]["chunk"]}
            for i in range(len(DOCS))
        ],
    )
    # Load into memory
    client.load_collection(COLLECTION)
# 5) Define the vector search tool (Parlant Tool)
@p.tool
async def vector_search(context: p.ToolContext, query: str, top_k: int = 5, min_score: float = 0.35) -> p.ToolResult:
    # 5.1 Generate the query vector
    embed_res = await embedder.embed([query])
    qvec = embed_res.vectors[0]
    # 5.2 Search Milvus
    results = client.search(
        collection_name=COLLECTION,
        data=[qvec],
        limit=top_k,
        output_fields=["doc_id", "title", "chunk"],
        search_params={"metric_type": "COSINE", "params": {"ef": 128}},
    )
    # 5.3 Assemble structured evidence and filter by score threshold
    hits = []
    for hit in results[0]:
        score = hit["distance"] if "distance" in hit else hit.get("score", 0.0)
        if score >= min_score:
            hits.append({
                "doc_id": hit["entity"]["doc_id"],
                "title": hit["entity"]["title"],
                "chunk": hit["entity"]["chunk"],
                "score": float(score),
            })
    return p.ToolResult({"evidence": hits})
# 6) Run Parlant Server and create the Agent + Guidelines
async def main():
    await ensure_collection_and_load()
    async with p.Server() as server:
        agent = await server.create_agent(
            name="Policy Assistant",
            description="Rule-controlled RAG assistant with Milvus Lite",
        )
        # Example variable: current time (can be used in templates or logs)
        @p.tool
        async def get_datetime(context: p.ToolContext) -> p.ToolResult:
            from datetime import datetime
            return p.ToolResult({"now": datetime.now().isoformat()})
        await agent.create_variable(name="current-datetime", tool=get_datetime)
        # Core Guideline 1: Run vector search for factual or policy-related questions
        await agent.create_guideline(
            condition="User asks a factual question about policy, refund, exchange, or shipping",
            action=(
                "Call vector_search with the user's query. "
                "If evidence is found, synthesize an answer by quoting key sentences and cite doc_id/title. "
                "If evidence is insufficient, ask a clarifying question before answering."
            ),
            tools=[vector_search],
        )
        # Core Guideline 2: Use a standardized, structured response when evidence is available
        await agent.create_guideline(
            condition="Evidence is available",
            action=(
                "Answer with the following template:\\n"
                "Summary: provide a concise conclusion.\\n"
                "Key points: 2-3 bullets distilled from evidence.\\n"
                "Sources: list doc_id and title.\\n"
                "Note: if confidence is low, state limitations and ask for clarification."
            ),
            tools=[],
        )
        # Hint: Local Playground URL
        print("Playground: <http://localhost:8800>")
if __name__ == "__main__":
    asyncio.run(main())

Étape 4 : Exécuter le code

# Run the main program
python main.py

  • Visitez le terrain de jeu :
<http://localhost:8800>

Vous avez maintenant réussi à construire un système de questions-réponses intelligent en utilisant Parlant et Milvus.

Parlant vs. LangChain/LlamaIndex : Leurs différences et leur complémentarité

En quoi Parlant diffère-t-il des frameworks d'agents existants tels que LangChain ou LlamaIndex?

LangChain et LlamaIndex sont des frameworks à usage général. Ils fournissent une large gamme de composants et d'intégrations, ce qui les rend idéaux pour le prototypage rapide et les expériences de recherche. Cependant, lorsqu'il s'agit de les déployer en production, les développeurs doivent souvent créer eux-mêmes des couches supplémentaires, telles que la gestion des règles, les contrôles de conformité et les mécanismes de fiabilité, afin de maintenir la cohérence et la fiabilité des agents.

Parlant propose une gestion intégrée des directives, des mécanismes d'autocritique et des outils d'explicitation qui aident les développeurs à gérer la façon dont un agent se comporte, répond et raisonne. Parlant est donc particulièrement adapté aux cas d'utilisation à fort enjeu, en contact avec les clients, où l'exactitude et la responsabilité sont importantes, comme dans les secteurs de la finance, de la santé et des services juridiques.

En fait, ces cadres peuvent fonctionner ensemble :

  • Utilisez LangChain pour construire des pipelines de traitement de données complexes ou des flux de recherche.

  • Utilisez Parlant pour gérer la couche d'interaction finale, en veillant à ce que les résultats respectent les règles de l'entreprise et restent interprétables.

  • Utiliser Milvus comme base de données vectorielles pour assurer la recherche sémantique en temps réel, la mémoire et la récupération des connaissances dans l'ensemble du système.

Conclusion

Alors que les agents LLM passent de l'expérimentation à la production, la question clé n'est plus de savoir ce qu'ils peuvent faire, mais comment ils peuvent le faire de manière fiable et sûre. Parlant fournit la structure et le contrôle nécessaires à cette fiabilité, tandis que Milvus fournit l'infrastructure vectorielle évolutive qui assure la rapidité et la prise en compte du contexte.

Ensemble, ils permettent aux développeurs de construire des agents d'IA qui ne sont pas seulement capables, mais dignes de confiance, explicables et prêts pour la production.

Découvrez Parlant sur GitHub et intégrez-le à Milvus pour créer votre propre système d'agents intelligents et guidés par des règles.

Vous avez des questions ou souhaitez approfondir une fonctionnalité ? Rejoignez notre canal Discord ou déposez des questions sur GitHub. Vous pouvez également réserver une session individuelle de 20 minutes pour obtenir des informations, des conseils et des réponses à vos questions dans le cadre des Milvus Office Hours.

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

    Continuer à Lire