mirror of
https://github.com/ccmjga/zhilu-admin
synced 2026-03-17 15:23:42 +08:00
72 lines
2.7 KiB
Java
72 lines
2.7 KiB
Java
package com.zl.mjga.service;
|
|
|
|
import static dev.langchain4j.store.embedding.filter.MetadataFilterBuilder.metadataKey;
|
|
|
|
import com.zl.mjga.config.ai.ZhiPuEmbeddingModelConfig;
|
|
import com.zl.mjga.model.urp.Actions;
|
|
import dev.langchain4j.data.document.Metadata;
|
|
import dev.langchain4j.data.embedding.Embedding;
|
|
import dev.langchain4j.data.segment.TextSegment;
|
|
import dev.langchain4j.model.embedding.EmbeddingModel;
|
|
import dev.langchain4j.store.embedding.EmbeddingSearchRequest;
|
|
import dev.langchain4j.store.embedding.EmbeddingSearchResult;
|
|
import dev.langchain4j.store.embedding.EmbeddingStore;
|
|
import dev.langchain4j.store.embedding.filter.Filter;
|
|
import jakarta.annotation.PostConstruct;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import lombok.RequiredArgsConstructor;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
@Configuration
|
|
@RequiredArgsConstructor
|
|
@Service
|
|
public class EmbeddingService {
|
|
|
|
private final EmbeddingModel zhipuEmbeddingModel;
|
|
|
|
private final EmbeddingStore<TextSegment> zhiPuEmbeddingStore;
|
|
|
|
private final ZhiPuEmbeddingModelConfig zhiPuEmbeddingModelConfig;
|
|
|
|
public Map<String, Object> searchAction(String message) {
|
|
Map<String, Object> result = new HashMap<>();
|
|
EmbeddingSearchRequest embeddingSearchRequest =
|
|
EmbeddingSearchRequest.builder()
|
|
.queryEmbedding(zhipuEmbeddingModel.embed(message).content())
|
|
.build();
|
|
EmbeddingSearchResult<TextSegment> embeddingSearchResult =
|
|
zhiPuEmbeddingStore.search(embeddingSearchRequest);
|
|
if (!embeddingSearchResult.matches().isEmpty()) {
|
|
result = embeddingSearchResult.matches().getFirst().embedded().metadata().toMap();
|
|
}
|
|
return result;
|
|
}
|
|
|
|
@PostConstruct
|
|
public void initActionIndex() {
|
|
if (!zhiPuEmbeddingModelConfig.getEnable()) {
|
|
return;
|
|
}
|
|
for (Actions action : Actions.values()) {
|
|
Embedding queryEmbedding = zhipuEmbeddingModel.embed(action.getContent()).content();
|
|
Filter createUserFilter = metadataKey(Actions.INDEX_KEY).isEqualTo(action.getCode());
|
|
EmbeddingSearchRequest embeddingSearchRequest =
|
|
EmbeddingSearchRequest.builder()
|
|
.queryEmbedding(queryEmbedding)
|
|
.filter(createUserFilter)
|
|
.build();
|
|
EmbeddingSearchResult<TextSegment> embeddingSearchResult =
|
|
zhiPuEmbeddingStore.search(embeddingSearchRequest);
|
|
if (embeddingSearchResult.matches().isEmpty()) {
|
|
TextSegment segment =
|
|
TextSegment.from(
|
|
action.getContent(), Metadata.metadata(Actions.INDEX_KEY, action.getCode()));
|
|
Embedding embedding = zhipuEmbeddingModel.embed(segment).content();
|
|
zhiPuEmbeddingStore.add(embedding, segment);
|
|
}
|
|
}
|
|
}
|
|
}
|