AIへのアクセスがよりシンプルで効率的になります
简体中文イギリス
Vineという名前を選んだ理由このプロジェクトは、 Nuwa's vineを代表するNvwaプロジェクトの一部です。
古代中国の神話では、NVWAは創造の女神です。彼女はイエローリバーの泥を使って人間をイメージに作り上げ、神の力で彼らに命を吹き込んだと言われています。
しかし、世界の広大な土地はプロセスが遅く、 Nvwa疲れ果てていました。それから彼女は崖から乾いたブドウを引っ張り、泥の中に浸し、地面に投げた。泥が飛び散ったところならどこでも、人間が飛び出しました。やがて、地球は人間で満たされていました。
Vineが人間の作成におけるNvwaの効率を大幅に高めたように、 Vine Projectは、開発者がAIインタラクションアプリケーションをより効率的に構築できるようにすることを目指しています。
AIインタラクションアプリケーションを構築するとき、ユーザー入力を処理し、対応する出力を生成し、結果を処理する必要があることがよくあります。
簡単なタスクの場合、プロンプトテンプレートを使用して、必要なプロンプトを生成できます。ただし、より複雑なシナリオでは、RAG(検索された生成)を通じて取得された入力、コンテキスト、会話、および情報に基づいて詳細なプロンプトを構築する必要がある場合があります。さらに、AIの出力をキャプチャするには、複雑なデータ構造が必要になる場合があります。
ビジネスが複雑になればなるほど、ユーザー入力シナリオはより多様になります。ビジネスが成長するにつれて、プロンプトとその取り扱いロジックを継続的に維持する必要があります。
たとえば、プロンプトの入力または出力構造を調整すると、関連するコードを更新するだけでなく、構造とそれに関連する少数のデータを記述するプロンプトも更新する必要があります。
プロンプトは多くの場合、コードとは別にされているため、同期しなくなるのは簡単です。プロンプトを更新すると、エラーが発生する可能性があり、複雑なロジックの管理は、ドキュメントがコードと一致しない場合と同じように困難になります。これは、AIプロンプトフレームワークの必要性が発生する場所です。
10年以上の建築体験により、コードがドキュメントの最良の形式であると固く信じています。同様に、タスクがアトミック単位に分解されると、コードは構造化されたAI相互作用シナリオの最良のプロンプトとしても機能します。
Vineは、コード駆動型のアプローチを提供し、プロンプトを生成し、コードを介してユーザーの入力を処理し、プロンプトとコードの間の不一致を大幅に削減します。これにより、プロンプトの構築プロセスも簡素化されます。
可能な限り追加のコードを使用すると、VineはAIインタラクションをより速く構築し、迅速なエンジニアリングをより効果的に管理するのに役立ちます。
英語:依存関係を追加し、vineは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を書き直しました。
Vine 、バージョン2.0のApacheライセンスに基づいてライセンスされています。完全なライセンステキストについては、ライセンスを参照してください。