Aviso
Este pacote é experimental e está no início de seu desenvolvimento. Tenha cuidado ao usá-lo na produção.
Spehulak.jl é um pacote para observabilidade GenAI - ajudando você a entender o que está acontecendo dentro de seu modelo GenAI. Ele fornece um conjunto de ferramentas para inspecionar e avaliar os rastreamentos salvos por meio do PromptingTools.jl.
Adicione-o ao seu ambiente simplesmente com:
using Pkg
Pkg . activate ( " . " )
Pkg . add ( " Spehulak " )
Em seguida, inicie o aplicativo com
using Spehulak
launch () # starts an asynchronous server on 9001
Abra o navegador e navegue até http://localhost:9001
.
Spehulak pode carregar qualquer conversa LLM serializada ou resultados RAG salvos via PromptingTools.jl (ou seja, arquivos JSON).
Existem duas opções:
Por exemplo, carregue o arquivo log/conversation...
neste repositório.
Existem duas páginas: 1) Navegador de Conversa e 2) Visualizador RAG. Você pode alternar entre eles clicando nos ícones do lado esquerdo.
O Conversation Browser mostra todas as conversas carregadas empilhadas verticalmente, para que você possa navegar rapidamente pelos rastreamentos e observar comportamentos estranhos.
O RAG Viewer sempre exibe apenas um único RAGResult
, mas o faz com uma grande quantidade de detalhes (por exemplo, conversa do usuário, cadeias LLM subjacentes, fontes, contexto, classificação/incorporação de candidatos, etc.).
Para ajudá-lo na navegação, você pode usar as setas no canto superior direito: '<' Ir para o anterior, '>' Ir para o próximo e um ícone de dado para uma seleção aleatória. Você pode usar essas ferramentas de navegação tanto para o Conversation Browser quanto para o RAG Viewer.
No caso do Conversation Browser, você também pode filtrar por palavras-chave específicas (ele aproveita occursin
nos bastidores). Basta digitar alguma palavra-chave e pressionar ENTER. Manterá apenas as conversas que contenham a palavra-chave.
Dica
Ao filtrar conversas, primeiro filtre com Spehulak para reduzir o número de conversas exibidas e depois use a ferramenta de pesquisa do navegador para destacar todas as ocorrências da palavra-chave desejada.
O que isso pode fazer? Navegue por qualquer conversa serializada do LLM. Se você usou mensagens rastreadas, também exibiremos todos os metadados relevantes (modelo, modelos, versões de modelo, etc.).
Como salvar/registrar automaticamente minhas conversas do LLM? Consulte a documentação do PromptingTools.jl
Ou gere alguns exemplos de brinquedos
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)
Você deverá ver alguns arquivos criados na pasta log/
- tente abri-los com Spehulak!
Como salvar meus resultados RAG?
Salvar RAGResult
para análises futuras é tão simples quanto JSON3.write(path, result)
Exemplo completo:
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)
Agora você pode inspecionar seus detalhes com Spehulak!
O que é Spehulak?
"Špehulak" (pronuncia-se "shpeh-hoo-lahk") mistura "espião" e "boneco de neve", recorrendo às palavras tchecas "špeh" para espião e "sněhulák" para boneco de neve. É um nome divertido para uma plataforma de observabilidade porque se trata de manter um olhar atento, como um espião, enquanto a parte do boneco de neve desempenha o papel de ser legal sob pressão enquanto você examina pilhas de dados, além de ser invisível/em segundo plano, não estar no caminho. É perfeito para se aprofundar no funcionamento interno de seus aplicativos LLM!
MultiCandidateChunks
) Este projeto não seria possível sem o incrível Stipple.jl da família Genie.jl!