Skip to content
··5 min de leitura

Um upgrade no meu chatbot atual

Atualizei meu chatbot Sydney para testar a busca híbrida e a estruturação de consultas do Weaviate — recursos que preciso para escalar meu chatbot financeiro para mais de 500 empresas.

Atualização (2026): Sydney evoluiu muito desde este experimento com Weaviate. Depois de testar FAISS, Weaviate e outros, me decidi pelo Supabase pgvector para a versão de produção. Sydney agora roda no Claude com respostas em streaming e uso de ferramentas. As ideias de busca híbrida e estruturação de consultas abaixo influenciaram diretamente como Sydney funciona hoje.

Pergunte à Sydney →


Post original de maio de 2024 preservado abaixo para contexto.

Como mencionado no meu último post, estou trabalhando em um Chatbot Financeiro com auto-avaliação. Então por que esse desvio para atualizar o chatbot atual Sydney? Bem, alguns motivos:

  • Testar o vector store Weaviate de ponta a ponta:
    • Estou tentando usar o Weaviate como o vector store principal para o chatbot financeiro, mas estou me deparando com o problema de escala/tamanho de memória. Especificamente, com apenas os últimos 10 anos de documentos 10K e 10Q para cerca de 20 empresas, o tamanho da coleção do Weaviate já é de 2 GB. Então, com a abordagem atual, as empresas do S&P 500 inteiro significariam uma coleção de cerca de 50+ GB. É muito grande e custará muito dinheiro para executar/manter. Então estou tentando testar diferentes parâmetros de Quantização de Produto (PQ).
    • Depois de experimentar muitos outros vector stores, estou inclinado para o Weaviate por sua capacidade de conduzir busca híbrida com filtros de metadados em velocidades rápidas.
    • Enquanto trabalhava no PQ para o Weaviate, uma pergunta que tinha era como fazer o deploy do Weaviate em um ambiente de produção, ou seja, Weaviate Cloud ou usando AWS/Google Cloud? Será difícil fazer o deploy? Quanto dinheiro custará?
    • Por causa dessas questões, decidi fazer o deploy do Weaviate para o chatbot atual Sydney. Basicamente, substituirei o FAISS pelo Weaviate.
    • Para a versão atual, estou usando o Weaviate Cloud
  • Implementar tradução de consultas e estruturação de consultas, garantindo que o output esteja em JSON para que possam ser usados.
    • Com tradução de consultas, o objetivo é dividir a entrada em um conjunto de sub-problemas ou sub-questões específicas que podem ser respondidas isoladamente.
    • Com estruturação de consultas: me importo muito em gerar não apenas um termo/frases de busca adequados para busca híbrida, mas também metadados adequados para filtragem.
      • Isso é super importante porque quero que o chatbot financeiro filtre corretamente por ano, setor, etc., conforme necessário.
  • Como conduzir busca híbrida com múltiplos filtros e retornar não apenas o conteúdo, mas também os metadados.

Como você pode ver, preciso que tudo isso acima funcione para criar o chatbot financeiro, então por que não tentar aplicar isso em uma escala muito menor no chatbot Sydney primeiro :)

Fico feliz em dizer que você pode experimentar Sydney agora. Ela tem todas as funcionalidades acima. Você pode tentar fazer perguntas como as abaixo e o chatbot deve retornar respostas relevantes com links para posts específicos do blog de onde obtém o conteúdo.

  • O que chandler escreveu sobre Kevin Rudd em 2020?
  • Me diga tudo que Chandler escreveu sobre Ray Dalio entre 2020 até agora
  • O que chandler escreveu sobre Health Savings Accounts em 2022?
  • O que chandler fez em 2015?

É isso por agora. Preciso voltar a trabalhar no chatbot financeiro :P

Se você experimentou o Weaviate ou busca híbrida com filtros de metadados, adoraria ouvir o que funcionou para você.

Abraços,

Chandler

Atualização setembro de 2024

Sydney agora é um agente multi-talentoso capaz de:

  • Responder perguntas sobre as atuais empresas do S&P 500, incluindo o que elas enviaram à SEC nos últimos 10 anos.
  • Fornecer insights dos meus 15 anos de conteúdo de blog.

Confira aqui.

P.S: Abaixo estão exemplos do tipo de prompt que estou usando para tradução de consultas e estruturação de consultas.

"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: Sei que o frontend ainda está muito lento, então provavelmente preciso aprender mais sobre desenvolvimento frontend.

Continuar Lendo

Minha Jornada
Conectar
Idioma
Preferências