### 1、知识库准备


```java
//构建 embeddingModel
EmbeddingModel embeddingModel = EmbeddingModel.of(embedding_apiUrl)
        .apiKey(embedding_apiKey)
        .model(embedding_model)
        .build();

//构建 repository
InMemoryRepository repository = new InMemoryRepository(embeddingModel);

//加载文档并存储
PdfLoader loader = new PdfLoader(new File("ticket.pdf")).additionalMetadata("file", "ticket.pdf");

//再次（按需）组合切割
List<Document> documents = new SplitterPipeline() //2.分割文档（确保不超过 max-token-size）
                .next(new RegexTextSplitter("\n\n"))
                .next(new TokenSizeTextSplitter(500))
                .split(loader.load());

//存储仓库
repository.insert(documents);
```

### 2、建立会话


```java
ChatSession chatSession = InMemoryChatSession.builder().build();
```

 或者基于 Map 管理
 
 ```java
 Map<String, ChatSession> sessions = new ConcurrentHashMap<>();
 
ChatSession chatSession = sessions.computeIfAbsent(sessionId, k -> InMemoryChatSession.builder().sessionId(k).build());
```


一般，会话需要持久化。比如放到数据库里（需要定制 ChatSession 接口）。


### 3、检索应用

```java
//构建 rerankingModel（可选）
RerankingModel  rerankingModel = RerankingModel.of(reranking_apiUrl)
        .apiKey(reranking_apiKey)
        .model(reranking_model)
        .build();

//构建 chatModel
ChatModel chatModel = ChatModel.of(chat_apiUrl)
                .provider(provider)
                .model(model)
                .build();

//用户输入消息
String message = "刘德华今年有几场演唱会？";

//1. 检索
List<Document> context = repository.search(message);

//2. 优化排序（可选）
context = rerankingModel.rerank(message, context);

//3. 消息增强
ChatMessage chatMessage = ChatMessage.ofUserAugment(message, context);
//或者用模板构建
//ChatMessage chatMessage = ChatMessage.ofUserTmpl("#{query} \n\n 请参考以下内容回答：#{context}")
//                        .paramAdd("query", query)
//                        .paramAdd("context", context)
//                        .generate()

//4.加入会话
chatSession.addMessage(chatMessage);

//5. 提交大模型
ChatResponse resp = chatModel.prompt(chatSession).call();

//打印结果
System.out.println(resp.getMessage());
```


