Skip to content

Commit f9af153

Browse files
committed
add support for setting similarity through request context
1 parent 002beef commit f9af153

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

advisors/spring-ai-advisors-vector-store/src/main/java/org/springframework/ai/chat/client/advisor/vectorstore/VectorStoreChatMemoryAdvisor.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@
5656
*/
5757
public final class VectorStoreChatMemoryAdvisor implements BaseChatMemoryAdvisor {
5858

59+
public static final String SIMILARITY_THRESHOLD = "chat_memory_vector_store_similarity_threshold";
60+
5961
public static final String TOP_K = "chat_memory_vector_store_top_k";
6062

6163
private static final String DOCUMENT_METADATA_CONVERSATION_ID = "conversationId";
@@ -128,10 +130,12 @@ public ChatClientRequest before(ChatClientRequest request, AdvisorChain advisorC
128130
String conversationId = getConversationId(request.context(), this.defaultConversationId);
129131
String query = request.prompt().getUserMessage() != null ? request.prompt().getUserMessage().getText() : "";
130132
int topK = getChatMemoryTopK(request.context());
133+
double similarityThreshold = getChatMemorySimilarityThreshold(request.context());
131134
String filter = DOCUMENT_METADATA_CONVERSATION_ID + "=='" + conversationId + "'";
132135
var searchRequest = org.springframework.ai.vectorstore.SearchRequest.builder()
133136
.query(query)
134137
.topK(topK)
138+
.similarityThreshold(similarityThreshold)
135139
.filterExpression(filter)
136140
.build();
137141
java.util.List<org.springframework.ai.document.Document> documents = this.vectorStore
@@ -163,6 +167,11 @@ private int getChatMemoryTopK(Map<String, Object> context) {
163167
return context.containsKey(TOP_K) ? Integer.parseInt(context.get(TOP_K).toString()) : this.defaultTopK;
164168
}
165169

170+
private double getChatMemorySimilarityThreshold(Map<String, Object> context) {
171+
return context.containsKey(SIMILARITY_THRESHOLD)
172+
? Double.parseDouble(context.get(SIMILARITY_THRESHOLD).toString()) : this.defaultSimilarityThreshold;
173+
}
174+
166175
@Override
167176
public ChatClientResponse after(ChatClientResponse chatClientResponse, AdvisorChain advisorChain) {
168177
List<Message> assistantMessages = new ArrayList<>();

0 commit comments

Comments
 (0)