iT邦幫忙

2025 iThome 鐵人賽

DAY 25
0
生成式 AI

nutc_imac_Agent拼裝車系列 第 25

Day25|RAG 實戰篇 (二):啟動 Qdrant 並建立 Collection

  • 分享至 

  • xImage
  •  

在 Day24 我們認識了 RAG 的概念與流程,
今天我們正式進入實作,
先從最基礎但最重要的一步開始:
啟動 Qdrant 並建立自己的向量資料庫 Collection。


一、Qdrant 是什麼?

Qdrant 是一個專門為 AI 語意搜尋(Vector Search)打造的資料庫。
它可以儲存文字、圖片、或其他內容的「向量(vector)」,
讓模型能以語意距離(例如 cosine similarity)搜尋最相關的資料。

📦 簡單理解:

Qdrant 就是你的 AI 的「長期記憶空間」。


二、啟動 Qdrant

如果你是第一次使用 Qdrant,可以用 Docker 一鍵啟動:

docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant
  • 6333:HTTP REST API 介面
  • 6334:gRPC 高效通訊介面(Spring 會用這個)

打開瀏覽器輸入:

http://localhost:6333/dashboard

就能看到 Qdrant 的管理介面,
會顯示目前的 collections、文件數量與索引狀態。


三、Spring 專案設定

1️⃣ 加入依賴(pom.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Qdrant Vector Store Starter -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-starter-vector-store-qdrant</artifactId>
    </dependency>
</dependencies>

四、建立 Qdrant Client 設定檔

Spring 不會自動建立 Qdrant Client,
我們自己配置 gRPC Client 方便連線:

@Configuration
public class QdrantConfig {
    @Bean(name = "QdrantClient")
    public QdrantClient qdrantClient () {
        return new QdrantClient(
                QdrantGrpcClient
                        .newBuilder("localhost", 6334, false)
                        .build());
    }
}

這樣我們就能在 Service 中直接注入 QdrantClient 使用。


五、建立 Collection API

接著建立一個可以:

  • 建立 Collection
  • 刪除 Collection

的 API。
這樣我們能自由管理不同任務的向量儲存空間。

Controller

@RestController
@RequiredArgsConstructor
@RequestMapping("/v1/rag/collection")
@Slf4j
public class CollectionController {

    private final CollectionService collectionService;

    /** 建立 Collection */
    @PostMapping("/add")
    public ResponseEntity<BaseResponse> addCollection(@RequestBody CollectionRequest request) {
        return ResponseEntity.ok(collectionService.addCollection(request));
    }

    /** 刪除 Collection */
    @DeleteMapping("/delete")
    public ResponseEntity<BaseResponse> deleteCollection(@RequestBody CollectionRequest request) {
        return ResponseEntity.ok(collectionService.deleteCollection(request));
    }
}

Service 實作

@Slf4j
@Service
@RequiredArgsConstructor
public class CollectionImp implements CollectionService {

    private final QdrantClient qdrantClient;

    @Override
    public BaseResponse addCollection(CollectionRequest request) {
        try {
            qdrantClient.createCollectionAsync(request.getCollectionName(),
                    Collections.VectorParams.newBuilder()
                            .setDistance(Collections.Distance.Cosine)
                            .setSize(1024) // 向量維度
                            .build());

            return BaseResponse.builder().code("0000").msg("Success").build();

        } catch (Exception e) {
            return BaseResponse.builder().code("1111").msg("Fail").data(e.getMessage()).build();
        }
    }

    @Override
    public BaseResponse deleteCollection(CollectionRequest request) {
        try {
            qdrantClient.deleteCollectionAsync(request.getCollectionName());
            return BaseResponse.builder().code("0000").msg("Success").build();

        } catch (Exception e) {
            return BaseResponse.builder().code("1111").msg("Fail").data(e.getMessage()).build();
        }
    }
}

dtos

@Data
public class CollectionRequest {

    @JsonProperty("Collection_Name")
    private String collectionName;
    @JsonProperty("Collection_Size")
    private Integer collectionSize;
}

六、測試範例

建立 Collection

https://ithelp.ithome.com.tw/upload/images/20251007/201503696cfwfln0d0.pnghttps://ithelp.ithome.com.tw/upload/images/20251007/20150369J7D6e4Lzzc.png

刪除 Collection

https://ithelp.ithome.com.tw/upload/images/20251007/20150369op4JN78bq6.pnghttps://ithelp.ithome.com.tw/upload/images/20251007/201503699MUbE3dTjo.png---

七、Qdrant Dashboard 驗證

打開 http://localhost:6333/dashboard
你會看到剛剛建立的 Collection 名稱。

到這裡為止,我們已經擁有一個可用的向量儲存空間,
接下來的步驟就是「轉成向量」存進去。


八、小結

模組 功能
Qdrant 儲存與搜尋語意向量
QdrantClient (gRPC) 與伺服器通訊、建立 / 刪除 collections
Spring Boot 提供 REST 管理接口

這一篇我們讓 Qdrant 跑起來、能被操作。
在下一篇,我們要讓它真正「開始學習文字」!



上一篇
Day24 RAG 實戰篇 (一):認識 Retrieval-Augmented Generation
系列文
nutc_imac_Agent拼裝車25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言