什么是Spring AI?
Spring AI是一个用于在Java中构建GenAI应用程序的框架。它提供了一组工具和实用程序,用于处理GenAI模型和架构,例如LLM和RAG。Spring AI构建在Spring框架之上,Spring框架是一个用于构建企业应用程序的流行Java框架,允许那些已经熟悉或参与Spring生态系统的用户将GenAI策略合并到他们已经存在的应用程序和工作流中。
在Java中也有其他GenAI的选择,例如Langchain4j,但是在这篇文章中将关注Spring AI。
创建项目
在开始使用Spring AI时,需要创建一个新项目或向现有项目添加适当的依赖项。可以使用Spring Initializr创建一个新项目,这是一个用于生成Spring Boot项目的基于Web的工具。
当创建一个新项目时,需要添加以下依赖项:
- Spring Web
- OpenAI或其他LLM模型(例如Mistral、Ollama等)
- Neo4j Vector Database (其他矢量数据库选项也可用)
- Spring Data Neo4j
如果人工将这些依赖项添加到现有项目中,可以在相关的GitHub存储库中看到依赖项的详细信息。
Spring Web依赖项允许开发人员为GenAI应用程序创建REST API。需要OpenAI依赖来访问OpenAI模型,这是一个流行的LLM。Neo4j Vector Database依赖项允许存储和查询用于相似性搜索的向量。最后,添加Spring Data Neo4j依赖项为在Spring应用程序中使用Neo4j数据库提供了支持,允许在Neo4j中运行Cypher查询并将实体映射到Java对象。
继续生成项目,然后在喜欢的IDE中打开它。查看pom.xml文件,应该会看到里程碑存储库已包含在内。由于Spring AI还不是一个通用版本,需要包含里程碑存储库来获得依赖项的预发布版本。
一个样板文件
构建Neo4j数据库可以使用Neo4j Aura免费层,因为它管理了实例,当然还有Docker镜像和其他方法。
根据选择的LLM模型,还需要API密钥。对于OpenAI,可以通过在OpenAI注册获得API密钥。
一旦有了Neo4j数据库和API密钥,就可以在应用程序中设置application.properties文件。以下是一个可能的示例:
Properties files
spring.ai.openai.api-key=<YOUR API KEY HERE>
spring.neo4j.uri=<NEO4J URI HERE>
spring.neo4j.authentication.username=<NEO4J USERNAME HERE>
spring.neo4j.authentication.password=<NEO4J PASSWORD HERE>
spring.data.neo4j.database=<NEO4J DATABASE NAME HERE>
注意:将API密钥和密码等敏感信息保存在环境变量或应用程序外部的其他位置是一个很好的想法。要创建环境变量,可以在终端中使用export命令或在IDE中设置它们。
可以为OpenAI客户端和Neo4j矢量存储设置Spring Beans,这将允许在应用程序中需要的任何地方访问必要的组件。
可以在SpringAiApplication类中添加以下代码:
Java
@Bean
public EmbeddingClient embeddingClient() {
return new OpenAiEmbeddingClient(new OpenAiApi(System.getenv("SPRING_AI_OPENAI_API_KEY")));
}
@Bean
public Neo4jVectorStore vectorStore(Driver driver, EmbeddingClient embeddingClient) {
return new Neo4jVectorStore(driver, embeddingClient,
Neo4jVectorStore.Neo4jVectorStoreConfig.builder()
.withLabel("Review")
.withIndexName("review-embedding-index")
.build());
}
EmbeddingClient bean为OpenAI API创建一个客户端,并传入API密钥环境变量。最后,Neo4jVectorStore bean将Neo4j配置为嵌入(向量)的存储。通过为存储嵌入的节点指定标签来定制配置,因为Spring的默认设置是查找Document实体。还为嵌入指定索引名(默认是spring
版权归原作者 奔向理想的星辰大海 所有, 如有侵权,请联系我们删除。