В чате и встраивании текста и сохранить результат для модулей NeO4 Фреймворк.
Код: Выделить всё
# embedding
spring.ai.model.embedding=ollama
spring.ai.ollama.embedding.options.model=nomic-embed-text:latest
# Neo4j
spring.ai.vectorstore.neo4j.initialize-schema=true
spring.ai.vectorstore.neo4j.database-name=neo4j
spring.ai.vectorstore.neo4j.index-name=vec_index
spring.ai.vectorstore.neo4j.distance-type=cosine
spring.ai.vectorstore.neo4j.dimensions=768
spring.ai.vectorstore.neo4j.embedding-property=embedding
spring.ai.vectorstore.neo4j.label=default_doc_label
< /code>
И результат в NEO4J, он показывает размер встраивания - который мой индекс находится в этом свойстве:
, но как я использую метод. Исключение сказал, что размер хранилища (который говорится, что это 1536, но 768 в конфигурации) вектора не соответствует размеру вопроса вектора (768): < /p>
"org.neo4j.driver.exceptions.ClientException:
Failed to invoke procedure `db.index.vector.queryNodes`:
Caused by: java.lang.IllegalArgumentException:
Index query vector has 768 dimensions, but indexed vectors have 1536"
< /code>
Мне интересно, как я могу получить результат с помощью метода SimlaritySearch, так как все кажется мне правильным, большое спасибо !! Очень признателен, если бы вы все, мастера могли бы мне помочь. Вот мой код: < /p>
import java.util.List;
import org.springframework.ai.document.Document;
import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.ai.embedding.EmbeddingResponse;
import org.springframework.ai.vectorstore.SearchRequest;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class EmbeddingApi {
@Autowired
private EmbeddingModel embeddingModel;
@Autowired
private VectorStore vectorStore;
@GetMapping("/doc/embedding")
public EmbeddingResponse getEmbedding(@RequestParam("text") String text) {
EmbeddingResponse embeddingResponse = this.embeddingModel.embedForResponse(List.of(text));
System.out.println("demension" + embeddingResponse.getResults().get(0).getOutput().length);
return embeddingResponse;
}
@PostMapping("/doc/store")
public String storeEmbedding(@RequestParam("text") String text) {
Document doc = new Document(text);
vectorStore.add(List.of(doc));
return "Stored successfully!";
}
@PostMapping("/doc/search")
public List searchDocument(@RequestParam("input")String input){
EmbeddingResponse embeddingResponse = this.embeddingModel.embedForResponse(List.of(input));
System.out.println("demension: " + embeddingResponse.getResults().get(0).getOutput().length);
System.out.println("====================================================================");
// float[] embedding = embeddingResponse.getResults().get(0).getOutput();
List results = vectorStore.similaritySearch(SearchRequest.builder()
.query(input)
.topK(1)
.build());
return results;
}
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... ysearching