使访问AI更简单,更高效
简体中文·英语
Vine该项目是Nvwa项目的一部分,代表Nuwa's vine 。
在中国神话中,NVWA是创造的女神。据说她用黄河的泥土用她的形象来制作人类,并用她的神力量向他们呼吸生活。
但是,世界上广阔的土地缓慢, Nvwa疲惫不堪。然后,她从悬崖上拉了一条干葡萄,将其浸入泥土中,然后将其扔在地面上。无论泥浆在哪里溅出,人类都会涌现。不久之后,地球充满了人类。
正如葡萄藤在创造人类方面的效率大大提高了Nvwa项目一样, Vine项目旨在帮助开发人员更有效地构建AI相互作用应用程序。
构建AI交互应用程序时,我们通常需要处理用户输入,生成相应的输出并处理结果。
对于简单的任务,我们可以使用提示模板生成所需的提示。但是,在更复杂的情况下,我们可能需要根据输入,上下文,对话和通过抹布(检索效果的生成)构建详细的提示。此外,我们可能需要复杂的数据结构来捕获AI的输出。
业务越复杂,用户输入方案就越多。随着业务的增长,我们需要不断维护提示及其处理逻辑。
例如,如果我们调整提示的输入或输出结构,我们不仅需要更新相关的代码,还需要描述与之相关的结构和任何少量数据的提示。
由于提示通常与代码分开,因此它们很容易变得不同步。更新提示可能会导致错误,并且管理复杂的逻辑变得更难,就像文档不匹配代码时一样。这是对AI提示框架的需求。
有十多年的建筑经验,我坚信代码是最佳文档形式。同样,当任务分解为原子单元时,代码也可以作为结构化AI交互情况的最佳提示。
Vine提供了一种代码驱动的方法,该方法有助于通过代码生成提示并处理用户输入,从而大大降低了提示和代码之间的差异。这也简化了建筑物提示的过程。
葡萄藤尽可能少的额外代码,可帮助您更快地构建AI交互,并更有效地管理及时的工程。
英语:添加依赖项,可以通过Maven Central存储库找到藤蔓。
当然,您也可以克隆代码并自己构建。
< project >
< dependencyManagement >
< dependencies >
< dependency >
< groupId >work.nvwa</ groupId >
< artifactId >nvwa-vine-bom</ artifactId >
< version >${vine.version}</ version >
< scope >import</ scope >
< type >pom</ type >
</ dependency >
</ dependencies >
</ dependencyManagement >
< dependencies >
< dependency >
< groupId >work.nvwa</ groupId >
< artifactId >nvwa-vine-spring-boot-starter-spring-ai</ artifactId >
</ dependency >
< dependency >
< groupId >org.springframework.ai</ groupId >
< artifactId >spring-ai-openai-spring-boot-starter</ artifactId >
</ dependency >
</ dependencies >
</ project >请参阅Spring AI的用法,以完成聊天模型的相关配置。
例如,使用OpenAI,通过application.yml :
spring :
ai :
openai :
apiKey : <your-api-key>创建一个接口以访问AI,并添加@VineService注释。方法参数是用户输入的变量部分,返回值是AI的结构化输出。
如果业务场景或返回结构更为复杂,则可以使用相应的注释添加描述。
@ VineService
public interface SqlAnalyzeService {
QuerySqlMetadata analyzeSql ( String sql );
}
public record QuerySqlMetadata (
String table ,
String [] select ,
List < QueryCondition > where ,
List < QueryOrderBy > orderBy
) {
}
public record QueryCondition (
String field ,
OperatorType operator ,
String value
) {
}
public record QueryOrderBy (
String field ,
SortOrder order
) {
}
public enum SortOrder {
Descend , Ascend
}
public enum OperatorType {
Equal , NotEqual , GreaterThan , GreaterThanOrEqual , LessThan , LessThanOrEqual , Like , NotLike , IsNull , IsNotNull , IsTrue , IsFalse ,
}在需要调用AI的地方,注入接口并调用相应的方法。
@ Component
public class ChatServiceTest {
private final SqlAnalyzeService sqlAnalyzeService ;
public ChatServiceTest ( SqlAnalyzeService sqlAnalyzeService ) {
this . sqlAnalyzeService = sqlAnalyzeService ;
}
public void businessMethod () {
// needAnalyzeSql is the variable part of user input
// example: "select b,c,a from test_table where a = 1 and b like 'Zhang%' and c <= 3 order by created_time desc"
QuerySqlMetadata sqlMetadata = sqlAnalyzeService . analyzeSql ( needAnalyzeSql );
// use sqlMetadata do something...
}
}Vine的概念很简单。它有助于构建提示并通过代码生成它们,并处理用户输入,同时避免手动编写提示。这减少了提示和代码可能无法匹配的问题。
TBD
TBD
TBD
TBD
TBD(尚未合并)
Vine是在使用Spring Framework 6和Spring Boot 3的Spring AI建造的,因此需要Java 17或更高的运行。
Vine也支持Kotlin。 Vine是Nvwa项目的一部分,完全写在Kotlin 。但是,由于Kotlin用户群较小,因此我们将其与Nvwa分开时在Java中重写了藤蔓。
Vine已获得Apache许可证的许可,版本2.0。有关完整许可文本,请参见许可证。