Skip to content
··5 menit baca

Upgrade untuk Chatbot Saya Saat Ini

Saya meng-upgrade chatbot Sydney untuk menguji hybrid search dan query structuring Weaviate — fitur-fitur yang saya butuhkan untuk men-scale chatbot keuangan saya ke 500+ perusahaan.

Update (2026): Sydney sudah sangat berkembang sejak eksperimen Weaviate ini. Setelah menguji FAISS, Weaviate, dan lainnya, saya menetapkan Supabase pgvector untuk versi produksi. Sydney sekarang berjalan di Claude dengan streaming response dan tool use. Ide hybrid search dan query structuring di bawah secara langsung mempengaruhi cara kerja Sydney saat ini.

Tanya Sydney →


Postingan asli dari Mei 2024 dipertahankan di bawah untuk konteks.

Seperti disebutkan di postingan terakhir saya, saya sedang mengerjakan Chatbot Keuangan Self-Evaluating. Jadi mengapa jalan memutar untuk mengupdate chatbot Sydney saat ini? Nah, ada beberapa alasan:

  • Menguji vector store Weaviate secara end to end:
    • Saya mencoba menggunakan Weaviate sebagai vector store utama untuk chatbot keuangan tapi mengalami masalah scaling/ukuran memori. Khususnya, dengan hanya 10 tahun terakhir filing 10K dan 10Q untuk sekitar 20 perusahaan, ukuran koleksi weaviate sudah 2GB. Jadi dengan pendekatan saat ini, seluruh perusahaan S&P 500 berarti koleksi sekitar 50+ GB. Terlalu besar dan akan memakan banyak uang untuk menjalankan/memelihara. Jadi saya mencoba menguji parameter Product Quantization (PQ) yang berbeda.
    • Setelah mencoba banyak vector store lain, saya condong ke Weaviate karena kemampuannya melakukan hybrid search dengan metadata filter pada kecepatan tinggi.
    • Saat saya mengerjakan PQ untuk Weaviate, satu pertanyaan yang saya miliki adalah bagaimana men-deploy Weaviate di lingkungan produksi, yaitu Weaviate Cloud atau menggunakan AWS/Google Cloud? Apakah sulit untuk di-deploy? Berapa biayanya?
    • Karena pertanyaan-pertanyaan ini, saya memutuskan untuk men-deploy Weaviate untuk chatbot Sydney saat ini. Jadi pada dasarnya saya akan mengganti FAISS dengan Weaviate.
    • Untuk versi saat ini, saya menggunakan Weaviate Cloud
  • Mengimplementasikan query translation dan query structuring, sambil memastikan output dalam format Json sehingga bisa digunakan.
    • Dengan query translation, tujuannya adalah memecah input menjadi sekumpulan sub-masalah atau sub-pertanyaan spesifik yang bisa dijawab secara terpisah.
    • Dengan query structuring: saya sangat peduli tentang menghasilkan tidak hanya istilah/frasa pencarian yang sesuai untuk hybrid search tetapi juga metadata yang sesuai untuk filtering.
      • Ini sangat penting karena saya ingin chatbot keuangan memfilter dengan benar untuk tahun, industri, dll., sesuai kebutuhan.
  • Bagaimana melakukan hybrid-search dengan beberapa filter dan mengembalikan tidak hanya konten tetapi juga metadata.

Seperti yang kamu lihat saya membutuhkan semua hal di atas untuk bekerja demi membuat chatbot keuangan jadi mengapa tidak mencoba menerapkannya dalam skala yang jauh lebih kecil ke chatbot Sydney terlebih dahulu :)

Saya senang bisa mengatakan bahwa kamu bisa mencoba Sydney sekarang. Ia memiliki semua fungsionalitas di atas. Kamu bisa mencoba bertanya seperti di bawah dan chatbot seharusnya mengembalikan jawaban yang relevan dengan tautan ke postingan blog spesifik tempat ia mendapatkan kontennya.

  • Apa yang chandler tulis tentang Kevin Rudd di 2020?
  • Ceritakan semua yang Chandler tulis tentang Ray Dalio antara 2020 sampai sekarang
  • Apa yang chandler tulis tentang Health Savings Accounts di 2022?
  • Apa yang chandler lakukan di 2015?

Itu saja untuk saat ini. Saya harus kembali mengerjakan chatbot keuangan :P

Kalau kamu pernah bereksperimen dengan Weaviate atau hybrid search dengan metadata filter, saya ingin sekali mendengar apa yang berhasil untukmu.

Salam,

Chandler

Update Sep 2024

Sydney sekarang menjadi agent multi-talenta yang mampu:

  • Menjawab pertanyaan tentang perusahaan S&P 500 saat ini, termasuk apa yang mereka kirimkan ke SEC selama 10 tahun terakhir.
  • Memberikan wawasan dari 15 tahun konten blog saya.

Cek di sini.

P.S: Di bawah ini contoh jenis prompt yang saya gunakan untuk query translation dan query structuring.

"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: Saya tahu bahwa front end masih sangat lambat jadi saya mungkin perlu belajar lebih banyak tentang front end development.

Lanjutkan Membaca

Perjalanan Saya
Terhubung
Bahasa
Preferensi