Skip to content
··5 min de lecture

Une mise à niveau de mon chatbot actuel

J'ai mis à niveau mon chatbot Sydney pour tester la recherche hybride de Weaviate et la structuration des requêtes — des fonctionnalités dont j'ai besoin pour mettre à l'échelle mon chatbot financier pour 500+ entreprises.

Mise à jour (2026) : Sydney a beaucoup évolué depuis cette expérience avec Weaviate. Après avoir testé FAISS, Weaviate et d'autres, j'ai finalement opté pour Supabase pgvector pour la version en production. Sydney tourne désormais sur Claude avec des réponses en streaming et l'utilisation d'outils. Les idées de recherche hybride et de structuration de requêtes décrites ci-dessous ont directement influencé le fonctionnement de Sydney aujourd'hui.

Demander à Sydney →


Article original de mai 2024 conservé ci-dessous pour le contexte.

Comme mentionné dans mon dernier post, je travaille sur un chatbot financier auto-évaluant. Alors pourquoi ce détour pour mettre à jour le chatbot Sydney actuel ? Eh bien, quelques raisons :

  • Tester Weaviate comme magasin vectoriel de bout en bout :
    • J'essaie d'utiliser Weaviate comme magasin vectoriel principal pour le chatbot financier, mais je rencontre le problème de mise à l'échelle/taille de la mémoire. Plus précisément, avec seulement les 10 dernières années de déclarations 10K et 10Q pour environ 20 entreprises, la taille de la collection Weaviate est déjà de 2 Go. Donc avec l'approche actuelle, l'ensemble des entreprises du S&P 500 représenterait une collection d'environ 50+ Go. C'est beaucoup trop grand et coûterait beaucoup d'argent à gérer. J'essaie donc de tester différents paramètres de quantification de produit (PQ).
    • Après avoir essayé de nombreux autres magasins vectoriels, je penche vers Weaviate en raison de sa capacité à effectuer une recherche hybride avec des filtres de métadonnées à grande vitesse.
    • Pendant que je travaillais sur PQ pour Weaviate, une question que j'avais était de savoir comment déployer Weaviate dans un environnement de production, c'est-à-dire Weaviate Cloud ou utilisant AWS/Google Cloud ? Sera-ce difficile à déployer ? Combien cela coûtera-t-il ?
    • À cause de ces questions, j'ai décidé de déployer Weaviate pour le chatbot Sydney actuel. Donc en gros je vais remplacer FAISS par Weaviate.
    • Pour la version actuelle, j'utilise Weaviate Cloud
  • Implémenter la traduction de requêtes et la structuration de requêtes, tout en s'assurant que la sortie est en JSON pour pouvoir être utilisée.
    • Avec la traduction de requêtes, l'objectif est de décomposer l'entrée en un ensemble de sous-problèmes ou sous-questions spécifiques qui peuvent être résolus de façon indépendante.
    • Avec la structuration de requêtes : je me soucie beaucoup de générer non seulement un terme/des phrases de recherche adaptés pour la recherche hybride, mais aussi des métadonnées appropriées pour le filtrage.
      • C'est super important car je veux que le chatbot financier filtre correctement par année, industrie, etc., selon les besoins.
  • Comment effectuer une recherche hybride avec plusieurs filtres et retourner non seulement le contenu mais aussi les métadonnées.

Comme tu peux le voir, j'ai besoin que tout ce qui précède fonctionne pour créer le chatbot financier, alors pourquoi ne pas essayer de l'appliquer d'abord à une échelle beaucoup plus petite avec le chatbot Sydney :)

Je suis heureux de dire que tu peux maintenant essayer Sydney. Il a toutes les fonctionnalités ci-dessus. Tu peux essayer de poser des questions comme ci-dessous et le chatbot devrait retourner des réponses pertinentes avec des liens vers des articles de blog spécifiques d'où il tire le contenu.

  • Qu'a écrit Chandler sur Kevin Rudd en 2020 ?
  • Dis-moi tout ce que Chandler a écrit sur Ray Dalio entre 2020 et maintenant
  • Qu'a écrit Chandler sur les Health Savings Accounts en 2022 ?
  • Qu'a fait Chandler en 2015 ?

C'est tout pour l'instant. Je dois retourner travailler sur le chatbot financier :P

Si tu as expérimenté avec Weaviate ou la recherche hybride avec des filtres de métadonnées, j'adorerais entendre ce qui a fonctionné pour toi.

Cordialement,

Chandler

Mise à jour septembre 2024

Sydney est maintenant un agent polyvalent capable de :

  • Répondre aux questions sur les entreprises actuelles du S&P 500, y compris ce qu'elles ont soumis à la SEC au cours des 10 dernières années.
  • Fournir des insights de mes 15 ans de contenu de blog.

Découvre-le ici.

P.S : Ci-dessous des exemples du type de prompt que j'utilise pour la traduction de requêtes et la structuration de requêtes.

"You are a helpful assistant that generates multiple sub-questions related to an input question. "
             "The current year is 2024."
             "The goal is to break down the input into a set of specific sub-problems / sub-questions that can be answered in isolation. "
             "Each specific sub-question will be used to retrieve relevant content from a vector store, using similarity search with score. "
             "Phrase the wording of the questions appropriately for this purpose.\n"
             "This vector store includes all of the published blog posts from Chandler Nguyen's blog from 2007 to 2024.\n\n"
             "Original question: \{query\}\n\n"
             "Generate the minimum number of sub-questions necessary to answer the original question. "
             "Your response should be formatted as a JSON array of strings, where each string represents a sub-question. "
             "Do not include any additional words, characters, or explanations in the response.\n\n"
             "Example response:\n"
             '[\n'
             '  "sub-question 1",\n'
             '  "sub-question 2"\n'
             ']'
"""You are a helpful assistant that generates a structured query related to an input question.
The goal is to break down the input into a structured query that can be used to retrieve relevant content from a vector store, using similarity search with score.
This vector store includes all of the published blog posts from Chandler Nguyen's blog from 2007 to 2024.
Original question: \{query\}

You must generate a response in JSON format as described below without any additional words or characters:
[
    "content_search": Similarity search query used to apply to the content of the Chandler Nguyen published blog posts to find similar documents related to the sub-question(s). Ensure the content_search query is not too broad or too specific, and strikes a balance between relevance and completeness. \n
    "start_date": optional field, the start date to search for blog posts that are relevant to the sub-question(s) in YYYY-MM-DD format. If the sub-question(s) do not specify a time frame, leave this field blank or set it to the earliest possible date (e.g., 2007-01-01) to cover a broader range. \n
    "end_date": optional field, the end date to search for blog posts that are relevant to the sub-question(s) in YYYY-MM-DD format. If the sub-question(s) do not specify a time frame, leave this field blank or set it to the latest possible date (e.g., 2024-12-31) to cover a broader range. \n
]

If the sub-question(s) include multiple years or a specific time range, generate 1 response for each year or time range, enclosed in separate JSON objects within the outer array.

Example responses:

For an open-ended sub-question without a specific time frame:
Sub-questions: ["What are the key insights Chandler wrote about Health Savings Accounts (HSA)?"]
[
    "content_search": "Chandler Nguyen blog posts about Health Savings Accounts",
    "start_date": "2007-01-01",
    "end_date": "2024-12-31"
]

For a sub-question specifying a year:
Sub-questions: ["What blog posts did Chandler write in 2018?", "Which blog posts written by Chandler in 2018 mention Kevin Rudd?"]
[
    "content_search": "Chandler Nguyen blog posts in 2018",
    "start_date": "2018-01-01",
    "end_date": "2018-12-31"
],
[
    "content_search": "Kevin Rudd mentioned in Chandler Nguyen blog posts in 2018",
    "start_date": "2018-01-01",
    "end_date": "2018-12-31"
]

For a sub-question specifying a time range:
Sub-questions: ["What did Chandler write about Ray Dalio in 2020?", "What did Chandler write about Ray Dalio in 2021?", "What did Chandler write about Ray Dalio in 2022?"]
[
    "content_search": "Chandler Nguyen blog posts about Ray Dalio in 2020",
    "start_date": "2020-01-01",
    "end_date": "2020-12-31"
],
[
    "content_search": "Chandler Nguyen blog posts about Ray Dalio in 2021",
    "start_date": "2021-01-01",
    "end_date": "2021-12-31"
],
[
    "content_search": "Chandler Nguyen blog posts about Ray Dalio in 2022",
    "start_date": "2022-01-01",
    "end_date": "2022-12-31"
]
"""

P.P.S : Je sais que le frontend est encore très lent, je dois probablement en apprendre davantage sur le développement frontend.

Continuer la lecture

Mon parcours
Me suivre
Langue
Preferences