使訪問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。有關完整許可文本,請參見許可證。