本文主要研究一下langchain4j-spring-boot-starter的RagAutoConfig
dev/langchain4j/spring/LangChain4jAutoConfig.java
@AutoConfiguration
@Import({
AiServicesAutoConfig.class,
RagAutoConfig.class,
AiServiceScannerProcessor.class
})
public class LangChain4jAutoConfig {
}
LangChain4jAutoConfig自动import了AiServicesAutoConfig、RagAutoConfig、AiServiceScannerProcessor
dev/langchain4j/rag/spring/RagAutoConfig.java
@EnableConfigurationProperties(RagProperties.class)
public class RagAutoConfig {
// TODO make these beans lazy?
@Bean
@ConditionalOnMissingBean
EmbeddingStore<TextSegment> embeddingStore() { // TODO bean name, type
return new InMemoryEmbeddingStore<>();
}
@Bean
@ConditionalOnBean({
EmbeddingModel.class,
EmbeddingStore.class
})
@ConditionalOnMissingBean
ContentRetriever contentRetriever(EmbeddingModel embeddingModel,
EmbeddingStore<TextSegment> embeddingStore,
RagProperties ragProperties) { // TODO bean name, type
EmbeddingStoreContentRetriever.EmbeddingStoreContentRetrieverBuilder builder = EmbeddingStoreContentRetriever.builder()
.embeddingStore(embeddingStore)
.embeddingModel(embeddingModel);
if (ragProperties != null) {
RetrievalProperties retrievalProperties = ragProperties.retrieval();
if (retrievalProperties != null) {
builder
.maxResults(retrievalProperties.maxResults())
.minScore(retrievalProperties.minScore());
}
}
return builder.build();
}
// TODO test
}
RagAutoConfig默认注册了InMemoryEmbeddingStore、ContentRetriever
dev/langchain4j/rag/spring/RagProperties.java
@ConfigurationProperties(prefix = RagProperties.PREFIX)
public record RagProperties(@NestedConfigurationProperty RetrievalProperties retrieval) {
static final String PREFIX = "langchain4j.rag";
}
RagProperties是record类型,它有个嵌套的配置属性为retrieval,类型为RetrievalProperties
record RetrievalProperties(Integer maxResults, Double minScore) {
}
RetrievalProperties是个record类型,定义了maxResults、minScore属性
langchain4j-spring-boot-starter的RagAutoConfig自动注入了InMemoryEmbeddingStore、ContentRetriever,其中EmbeddingStoreContentRetriever会根据ragProperties的retrievalProperties来设置EmbeddingStoreContentRetriever的maxResults及minScore。