背景
9年老Java学大模型应用开发
实操
pom
这里有个问题,原来用的SpringBoot版本是3.5.16,SpringAI版本是1.1.2。结果配置的 initialize-schema: true 无效,项目启动总是报错:collection不存在。用AI找问题说是当前SpringAI版本中有个匹配有问题,问题如下:
完整调用链:
Spring 启动
→ ChromaVectorStore.afterPropertiesSet()→ chromaApi.getCollection(tenant, database, "my_test")
→ HTTP GET /api/v2/tenants/default_tenant/databases/default_database/collections/my_test
→ getErrorMessage() 用 "does not exists" 做 equals 匹配
→ 匹配失败 → 抛出 RuntimeException
→ initialize-schema 逻辑被中断,Collection 未被创建
没细究,遂升级版本解决:SpringAI:2.0.1 SpringBoot版本:4.1.0
pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- openai-->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- rag-->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-rag</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-vector-store-chroma</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-tika-document-reader</artifactId>
</dependency>
application.yaml
application.yml
spring:
application:
name: embedding-app
ai:
openai:
base-url: https://api.agnes-ai.cn
api-key: ${AGNES_KEY}
chat:
options:
model: agnes-2.5-flash
embedding:
api-key: ${EMBEDDING_KEY}
options:
model: BAAI/bge-m3
# dimensions: 1024
base-url: https://api.siliconflow.cn/v1
vectorstore:
chroma:
client:
host: http://192.168.1.2
port: 8000
collection-name: my_test
database-name: default_database
tenant-name: default_tenant
initialize-schema: true
配置类
LLMConfig
@Configuration
@Slf4j
public class LLMConfig {
@Value("${spring.ai.vectorstore.chroma.collection-name}")
private String collectionName;
@Value("${spring.ai.vectorstore.chroma.database-name}")
private String databaseName;
@Value("${spring.ai.vectorstore.chroma.tenant-name}")
private String tenantName;
@Resource
private ChromaVectorStore vectorStore;
@Bean
public ChatClient chatClient(@Qualifier("openAiChatModel") ChatModel chatModel) {
return ChatClient.builder(chatModel).build();
}
@Bean
public RetrievalAugmentationAdvisor retrievalAugmentationAdvisor() {
// 向量库检索设置
VectorStoreDocumentRetriever documentRetriever = VectorStoreDocumentRetriever.builder()
.vectorStore(vectorStore)
.similarityThreshold(0.2)
.topK(2)
.build();
// 查询增强
ContextualQueryAugmenter augmenter = ContextualQueryAugmenter.builder()
.allowEmptyContext(true) // 空的话使用大模型回答
.build();
return RetrievalAugmentationAdvisor.builder()
.documentRetriever(documentRetriever)
.queryAugmenter(augmenter)
.build();
}
@SneakyThrows
@PostConstruct
public void initVectorData() {
List<Document> documents1 = vectorStore.similaritySearch("");
log.info("initVectorData>>>getCount: {}", documents1.size());
if (documents1.isEmpty()) {
ClassPathResource resource = new ClassPathResource("导游面试问答.doc");
String text = new Tika().parseToString(resource.getFile());
TokenTextSplitter splitter = TokenTextSplitter.builder()
.withChunkSize(800)
.withMinChunkSizeChars(400)
.withKeepSeparator(true)
.build();
List<Document> documents = splitter.apply(List.of(new Document(text)));
vectorStore.add(documents);
}
}
}
项目启动
启动成功,能正常查数据

总结
AI确实强大,找问题比人工快的多
这次只是加载类路径文件向量化存储到chroma。还有rag检索的没加上去。
作者:idanyang
出处:http://www.cnblogs.com/idanyang/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
浙公网安备 33010602011771号