警告
このパッケージは実験的なものであり、開発の初期段階にあります。本番環境で使用する場合は注意してください。
Spehulak.jl は GenAI の可観測性のためのパッケージであり、GenAI モデル内で何が起こっているかを理解するのに役立ちます。 PromptingTools.jl 経由で保存されたトレースを検査および評価するためのツールのセットを提供します。
次のようにするだけで環境に追加できます。
using Pkg
Pkg . activate ( " . " )
Pkg . add ( " Spehulak " )
次に、アプリを起動します
using Spehulak
launch () # starts an asynchronous server on 9001
ブラウザを開いてhttp://localhost:9001
に移動します。
Spehulak は、PromptingTools.jl 経由で保存されたシリアル化された LLM 会話または RAG 結果 (つまり、JSON ファイル) をロードできます。
次の 2 つのオプションがあります。
例として、このリポジトリにファイルlog/conversation...
をロードします。
1) 会話ブラウザと 2) RAG ビューアの 2 つのページがあります。左側のアイコンをクリックすると、それらを切り替えることができます。
会話ブラウザには、読み込まれたすべての会話が垂直に積み上げられて表示されるため、トレースをすばやく参照して奇妙な動作に気づくことができます。
RAG Viewer は常に 1 つのRAGResult
のみを表示しますが、非常に詳細な情報 (ユーザーの会話、内部の LLM チェーン、ソース、コンテキスト、ランキング/埋め込み候補など) を表示します。
ナビゲーションを支援するために、右上隅の矢印「<」前に移動、「>」次へ移動、およびランダムに選択するサイコロ アイコンを使用できます。これらのナビゲーション ツールは、会話ブラウザと RAG ビューアの両方で使用できます。
会話ブラウザの場合、特定のキーワードでフィルタリングすることもできます (内部でoccursin
機能を利用します)。キーワードを入力して Enter キーを押すだけです。キーワードを含む会話のみが保持されます。
ヒント
会話をフィルタリングするときは、まず Spehulak でフィルタリングして表示される会話の数を減らし、次にブラウザの検索ツールを使用して目的のキーワードの出現をすべてハイライトします。
何ができるのでしょうか?シリアル化された LLM 会話を参照します。トレースされたメッセージを使用した場合は、関連するすべてのメタデータ (モデル、テンプレート、テンプレートのバージョンなど) も表示されます。
LLM の会話を自動的に保存/ログに記録するにはどうすればよいですか? PromptingTools.jl ドキュメントを参照してください。
または、おもちゃのサンプルをいくつか生成します
using PromptingTools
using PromptingTools : TracerSchema, SaverSchema, OpenAISchema, pprint
schema = OpenAISchema () |> TracerSchema |> SaverSchema
# Let's create a multi-turn conversation
conversation = aigenerate (schema, :JuliaExpertAsk ; ask = " Write a function to convert vector of strings into pig latin " , model = " gpt4o " , return_all = true )
pprint (conversation)
# Let's create one more turn -- notice that we provide the past conversation as a kwarg
conversation = aigenerate (schema, " That's too complicated. Please simplify it. Think step by step first " ; conversation, model = " gpt4o " , return_all = true )
pprint (conversation)
log/
フォルダーにいくつかのファイルが作成されたことがわかります。Spehulak でファイルを開いてみてください。
RAG 結果を保存するにはどうすればよいですか?
今後の分析のためにRAGResult
保存するのはJSON3.write(path, result)
と同じくらい簡単です。
完全な例:
using PromptingTools
using PromptingTools : pprint
using PromptingTools . Experimental . RAGTools
# to access unexported functionality
const RT = PromptingTools . Experimental . RAGTools
sentences = [
" Search for the latest advancements in quantum computing using Julia language. " ,
" How to implement machine learning algorithms in Julia with examples. " ,
" Looking for performance comparison between Julia, Python, and R for data analysis. " ,
" Find Julia language tutorials focusing on high-performance scientific computing. " ,
" Search for the top Julia language packages for data visualization and their documentation. " ,
" How to set up a Julia development environment on Windows 10. " ,
" Discover the best practices for parallel computing in Julia. " ,
" Search for case studies of large-scale data processing using Julia. " ,
" Find comprehensive resources for mastering metaprogramming in Julia. " ,
" Looking for articles on the advantages of using Julia for statistical modeling. " ,
" How to contribute to the Julia open-source community: A step-by-step guide. " ,
" Find the comparison of numerical accuracy between Julia and MATLAB. " ,
" Looking for the latest Julia language updates and their impact on AI research. " ,
" How to efficiently handle big data with Julia: Techniques and libraries. " ,
" Discover how Julia integrates with other programming languages and tools. " ,
" Search for Julia-based frameworks for developing web applications. " ,
" Find tutorials on creating interactive dashboards with Julia. " ,
" How to use Julia for natural language processing and text analysis. " ,
" Discover the role of Julia in the future of computational finance and econometrics. "
]
sources = map (i -> " Doc $i " , 1 : length (sentences))
# # Build the index
index = RT . build_index (sentences; chunker_kwargs = (; sources))
# # Generate an answer
question = " What are the best practices for parallel computing in Julia? "
result = airag (index; question, return_all = true )
# You can preview the RAGResult with pretty-printing
pprint (result)
# Save the RAGResult
mkpath ( " log " )
JSON3 . write ( " log/rag_result_20240615.json " , result)
スペフラクでその詳細を確認できるようになりました。
スペフラクって何?
「シュペフラク」(「シュペ・フー・ラーク」と発音)は、「スパイ」と「雪だるま」を組み合わせたもので、チェコ語でスパイを意味する「シュペ」と雪だるまを意味する「スネフラク」をもじったものです。これは、可観測性プラットフォームの楽しい名前です。スパイのように監視することがすべてである一方で、雪だるまの部分は、大量のデータを選別する際のプレッシャーの下でクールであることに加えて、目に見えない/バックグラウンドで、周囲に存在しないという役割を果たしています。方法。 LLM アプリの内部動作を深く掘り下げるのに最適です。
MultiCandidateChunks
) このプロジェクトは、Genie.jl ファミリーの素晴らしい Stipple.jl なしでは不可能です。