Sobre o projeto
Últimas atualizações em nosso blog
Exemplo
Visão
Características
Começando
Uso e conceitos
Roteiro
Contribuindo
Licença
Ao trabalhar com outras ferramentas baseadas em Python, surgiram frustrações em relação ao desempenho, estabilidade e facilidade de uso. Assim nasceu Swiftide. O objetivo do Swiftide é oferecer uma biblioteca de geração aumentada de recuperação completa, que seja rápida, fácil de usar, confiável e fácil de estender.
Parte do projeto bosun.ai. Uma futura plataforma para melhoria autônoma de código.
Temos <3 feedback: ideias de projetos, sugestões e reclamações são muito bem-vindas. Sinta-se à vontade para abrir um problema ou entrar em contato conosco no discord.
Ótimos pontos de partida são este leia-me, swiftide.rs, a pasta de exemplos, nosso blog em bosun.ai e tutoriais detalhados em swiftide-tutorial.
Cuidado
O Swiftide está em forte desenvolvimento e pode sofrer alterações importantes enquanto trabalhamos para a versão 1.0. A documentação aqui pode ficar aquém de todos os recursos e, apesar de nossos esforços, estar um pouco desatualizada. Espere bugs. Recomendamos sempre ficar de olho em nossa documentação do github e da API. Se você encontrou um problema ou tem algum tipo de feedback, adoraríamos ouvir sua opinião sobre o problema.
(voltar ao topo)
Avalie pipelines Swiftide com Ragas (15/09/2024)
Lançamento - Swiftide 0.12 (13/09/2024)
Intel de código local com Ollama, FastEmbed e OpenTelemetry (04/09/2024
Lançamento - Swiftide 0.9 (02/09/2024)
Traga seus próprios transformadores (13/08/2024)
Lançamento - Swiftide 0.8 (12/08/2024)
Lançamento - Swiftide 0.7 (28/07/2024)
Construindo um pipeline de resposta a perguntas de código (13/07/2024)
Lançamento - Swiftide 0.6 (12/07/2024)
Lançamento - Swiftide 0.5 (1/07/2024)
(voltar ao topo)
Indexando um projeto de código local, dividindo-o em partes menores, enriquecendo os nós com metadados e persistindo no Qdrant:
indexing :: Pipeline :: from_loader ( FileLoader :: new ( "." ) . with_extensions ( & [ "rs" ] ) )
. with_default_llm_client ( openai_client . clone ( ) )
. filter_cached ( Redis :: try_from_url (
redis_url ,
"swiftide-examples" ,
) ? )
. then_chunk ( ChunkCode :: try_for_language_and_chunk_size (
"rust" ,
10 .. 2048 ,
) ? )
. then ( MetadataQACode :: default ( ) )
. then ( move |node| my_own_thing ( node ) )
. then_in_batch ( Embed :: new ( openai_client . clone ( ) ) )
. then_store_with (
Qdrant :: builder ( )
. batch_size ( 50 )
. vector_size ( 1536 )
. build ( ) ? ,
)
. run ( )
. await ? ;
Consultando um exemplo de como usar o pipeline de consulta:
query :: Pipeline :: default ( )
. then_transform_query ( GenerateSubquestions :: from_client (
openai_client . clone ( ) ,
) )
. then_transform_query ( Embed :: from_client (
openai_client . clone ( ) ,
) )
. then_retrieve ( qdrant . clone ( ) )
. then_answer ( Simple :: from_client ( openai_client . clone ( ) ) )
. query ( "How can I use the query pipeline in Swiftide?" )
. await ? ;
Você pode encontrar mais exemplos em /examples
(voltar ao topo)
Nosso objetivo é criar uma plataforma rápida e extensível para Retrieval Augmented Generation para promover o desenvolvimento de aplicativos automatizados de IA, com uma API fácil de usar e estender.
(voltar ao topo)
tracing
suportado para registro e rastreamento, consulte /examples e a caixa tracing
para obter mais informações.Recurso | Detalhes |
---|---|
Provedores de modelos de linguagem grande suportados | OpenAI (e Azure) – Todos os modelos e embeddings AWS Bedrock - Antrópico e Titã Groq - Todos os modelos Ollama - Todos os modelos |
Carregando dados | Arquivos Raspagem Flúvio Parquete Outros pipelines e fluxos |
Transformadores e geração de metadados | Gere perguntas e respostas para texto e código (Hyde) Resumos, títulos e consultas por meio de um LLM Extraia definições e referências com tree-sitter |
Divisão e fragmentação | Remarcação Texto (divisor_texto) Código (com assistente de árvore) |
Armazenar | Qdrant Redis LanceDB |
Pipeline de consulta | Similaridade e pesquisa híbrida, transformações de consulta e resposta e avaliação |
(voltar ao topo)
Certifique-se de ter o conjunto de ferramentas de ferrugem instalado. Rustup É a abordagem recomendada.
Para usar OpenAI, é necessária uma chave API. Observe que, por padrão, async_openai
usa as variáveis de ambiente OPENAI_API_KEY
.
Outras integrações podem ter seus próprios requisitos.
Configure um novo projeto Rust
Adicionar Swiftide
cargo add swiftide
Habilite os recursos de integrações que você gostaria de usar em seu Cargo.toml
Escreva um pipeline (veja nossos exemplos e documentação)
(voltar ao topo)
Antes de criar seus streams, você precisa habilitar e configurar todas as integrações necessárias. Veja /exemplos.
Temos muitos exemplos, consulte /examples e a documentação
Observação
Nenhuma integração é habilitada por padrão, pois algumas possuem muitos códigos. Recomendamos que você escolha as integrações necessárias. Por convenção, os sinalizadores têm o mesmo nome da integração que representam.
Um fluxo de indexação começa com um Loader que emite Nodes. Por exemplo, com o Fileloader cada arquivo é um Node.
Você pode então dividir, aumentar e filtrar nós. Cada tipo diferente de etapa no pipeline requer características diferentes. Isso permite a extensão.
Os nós possuem um caminho, um pedaço e metadados. Atualmente, os metadados são copiados durante a fragmentação e sempre incorporados ao usar o transformador OpenAIEmbed.
(impl Loader)
ponto inicial do fluxo, cria e emite nós(impl NodeCache)
filtra nós armazenados em cache(impl Transformer)
transforma o nó e o coloca no stream(impl BatchTransformer)
transforma vários nós e os coloca no stream(impl ChunkerTransformer)
transforma um único nó e emite vários nós(impl Storage)
armazena os nós em um backend de armazenamento, que pode ser encadeado Além disso, vários transformadores genéricos são implementados. Eles usam implementadores de SimplePrompt
e EmbedModel
para fazer suas coisas.
Aviso
Devido ao desempenho, a fragmentação antes de adicionar metadados gera erros de limite de taxa no OpenAI muito rápido, especialmente com modelos mais rápidos como 3,5 turbo. Esteja ciente.
Um fluxo de consulta começa com uma estratégia de pesquisa. No pipeline de consulta, uma Query
passa por vários estágios. Transformadores e recuperadores trabalham juntos para inserir o contexto correto em um prompt, antes de gerar uma resposta. Transformers e Retrievers operam em diferentes estágios da consulta por meio de uma máquina de estados genérica. Além disso, a estratégia de busca é genérica em relação ao pipeline e os Retrievers precisam implementar especificamente para cada estratégia.
Parece muito, mas, tl&dr; o pipeline de consulta é totalmente e fortemente digitado .
Além disso, os pipelines de consulta também podem ser avaliados. Ou seja, por Ragas.
Semelhante ao pipeline de indexação, cada etapa é governada por características simples e os fechamentos também implementam essas características.
(voltar ao topo)
Consulte os problemas em aberto para obter uma lista completa dos recursos propostos (e dos problemas conhecidos).
(voltar ao topo)
Se você quiser se envolver mais com o Swiftide, tiver dúvidas ou quiser bater um papo, pode nos encontrar no discord.
(voltar ao topo)
O Swiftide está em um estágio muito inicial e estamos cientes de que faltam recursos para a comunidade em geral. Contribuições são muito bem-vindas. ?
Se você tiver uma ótima ideia, bifurque o repositório e crie uma solicitação pull. Você também pode simplesmente abrir um problema com a tag “aprimoramento”. Não se esqueça de dar uma estrela ao projeto! Obrigado novamente!
Se você quer apenas contribuir (que Deus o abençoe!), veja nossas edições ou junte-se a nós no Discord.
git checkout -b feature/AmazingFeature
)git commit -m 'feat: Add some AmazingFeature'
)git push origin feature/AmazingFeature
)Veja CONTRIBUINDO para mais
(voltar ao topo)
Distribuído sob a licença MIT. Consulte LICENSE
para obter mais informações.
(voltar ao topo)