def retrieve_chunks(query_vec, index, db, limit=5, max_context_chars=3000):
    # 第1段階: ベクトル検索でlimit個のチャンクを取得
    ids, _ = index.knn_query(query_vec, k=limit)

    conn = sqlite3.connect(db)
    cur = conn.cursor()
    results, total_len = [], 0

    # 第2段階: max_context_charsに達するまでチャンクを追加
    for i in ids[0]:
        cur.execute("SELECT content FROM chunks WHERE id=?", (int(i),))
        row = cur.fetchone()
        if not row:
            continue
        text = row[0]

        # 文字数チェック
        if total_len + len(text) > max_context_chars:
            break  # 上限に達したら停止

        results.append(text)
        total_len += len(text)

    conn.close()
    return "\n".join(results)
