Luồng V2 không sinh ra lệnh SQL truyền thống mà sử dụng sức mạnh của cơ sở dữ liệu Vector (StarRocks hỗ trợ Vector) để truy xuất dữ liệu sản phẩm ngữ nghĩa.

Mục tiêu của kiến trúc này là tốc độ. Việc chia làm 2 LLM call (1 để dịch SQL, 1 để dịch kết quả ra text) tốn quá nhiều thời gian. V2 gộp lại thành luồng duy nhất:

### Sequence Diagram V2

```mermaid
sequenceDiagram
    participant User
    participant V2 as Text-to-SQL V2
    participant OpenAI as Embedding API
    participant StarRocks as DB (Vector)
    participant Gemini as LLM (Gemini 3.1)

    User->>V2: Hỏi tư vấn ("Áo len đỏ đi làm")
    
    rect rgb(200, 220, 250)
    note right of V2: Step 1 (~200ms)
    V2->>OpenAI: Tạo Embedding Text-3-Small
    OpenAI-->>V2: Trả về Float Vector [0.1, -0.5, ...]
    end

    rect rgb(200, 250, 220)
    note right of V2: Step 2 (~200ms)
    V2->>StarRocks: Query approx_cosine_similarity() > 0.3
    StarRocks-->>V2: Trả về Top 30 Sản phẩm
    end

    rect rgb(250, 220, 200)
    note right of V2: Step 3 (~2s)
    V2->>Gemini: Prompt Tư vấn + Top 10 Sản Phẩm (JSON)
    Gemini-->>V2: Viết câu trả lời tự nhiên
    end
    
    V2-->>User: Trả về AI Response + Danh sách SP
```

### Chi tiết kĩ thuật
- **Model Embedding:** Sử dụng `text-embedding-3-small`.
- **Query Vector trên StarRocks:** Cột `vector` chứa float array. Truy vấn sử dụng cú pháp: `approx_cosine_similarity(vector, [v1, v2...])`
- **LLM Tư Vấn:** Prompt định nghĩa khắt khe: **CẤM bịa thông tin**, phải bám sát data trả về (giá bán, mã SKU, sale_price). Cung cấp tối đa 10 sản phẩm vào ngữ cảnh của Gemini để giảm context window.