Esta é a primeira parte de um mergulho mais profundo em Ollama e nas coisas que aprendi sobre LLMs locais e como você pode usá-los para aplicativos baseados em inferência. Nesta postagem, você aprenderá sobre - Como usar o Ollama Como criar seu próprio modelo no Ollama Usando Ollama para construir um chatbot Para entender os fundamentos dos LLMs (incluindo LLMs locais), você pode consultar minha postagem anterior sobre este tópico . aqui Primeiro, alguns antecedentes No espaço dos LLMs locais, encontrei pela primeira vez o LMStudio. Embora o aplicativo em si seja fácil de usar, gostei da simplicidade e manobrabilidade que Ollama oferece. Para saber mais sobre Ollama você pode acessar . aqui dr: Ollama hospeda sua própria lista selecionada de modelos aos quais você tem acesso. Você pode baixar esses modelos para sua máquina local e interagir com eles por meio de um prompt de linha de comando. Alternativamente, quando você executa o modelo, Ollama também executa um servidor de inferência hospedado na porta 11434 (por padrão) com o qual você pode interagir por meio de APIs e outras bibliotecas como Langchain. Neste post, Ollama conta com 74 modelos, que também incluem categorias como modelos de incorporação. Como usar o Ollama o Ollama para o sistema operacional de sua escolha. Depois de fazer isso, execute o comando para confirmar que está funcionando. Deve mostrar o menu de ajuda – Baixe ollama Usage: ollama [flags] ollama [command] Available Commands: serve Start ollama create Create a model from a Modelfile show Show information for a model run Run a model pull Pull a model from a registry push Push a model to a registry list List models cp Copy a model rm Remove a model help Help about any command Flags: -h, --help help for ollama -v, --version Show version information Use "ollama [command] --help" for more information about a command. Para usar qualquer modelo, primeiro você precisa “retirá-los” do Ollama, da mesma forma que extrairia uma imagem do Dockerhub (se você já usou isso no passado) ou algo como Elastic Container Registry (ECR). Ollama vem com alguns modelos padrão (como que é o LLM de código aberto do Facebook) que você pode ver executando. llama2 ollama list Selecione o modelo (digamos ) com o qual você gostaria de interagir na . Agora você pode baixar este modelo executando o comando phi página da biblioteca Ollama ollama pull phi Assim que o download for concluído, você pode verificar se o modelo está disponível localmente executando — ollama list Agora que o modelo está disponível, ele está pronto para ser executado. Você pode executar um modelo usando o comando — ollama run phi A precisão das respostas nem sempre é excelente, mas você pode resolver isso selecionando modelos diferentes ou talvez fazendo alguns ajustes ou implementando uma solução semelhante ao RAG por conta própria para melhorar a precisão. O que demonstrei acima é como você pode usar modelos Ollama usando o prompt da linha de comando. No entanto, se você verificar o servidor de inferência que o Llama está executando, poderá ver que existem maneiras programáticas de acessá-lo, acessando a porta 11434. Se você quiser usar Langchain para acessar seu modelo Ollama, você pode usar algo como – from langchain_community.llms import Ollama from langchain.chains import RetrievalQA prompt = "What is the difference between an adverb and an adjective?" llm = Ollama(model="mistral") qa = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=retriever, return_source_documents=True, ) response = qa(prompt) Como criar seu próprio modelo em Ollama Você também pode criar sua própria variante de modelo usando o conceito de no Ollama. Para obter mais parâmetros para configurar em seu Modelfile, você pode consultar estes documentos. Modelfile Exemplo de arquivo de modelo - # Downloaded from Hugging Face https://huggingface.co/TheBloke/finance-LLM-GGUF/tree/main FROM "./finance-llm-13b.Q4_K_M.gguf" PARAMETER temperature 0.001 PARAMETER top_k 20 TEMPLATE """ {{.Prompt}} """ # set the system message SYSTEM """ You are Warren Buffet. Answer as Buffet only, and do so in short sentences. """ Depois de ter o Modelfile, você pode criar seu modelo usando ollama create arjunrao87/financellm -f Modelfile onde é o nome do seu modelo LLM e seria substituído pelo seu nome de usuário ollama.com (que também atua como o namespace do seu registro ollama online). Neste ponto, você pode usar o modelo criado como qualquer outro modelo no Ollama. financellm arjunrao87 Você também pode optar por enviar seu modelo para o registro remoto do ollama. Para que isso aconteça, você precisa Crie sua conta em ollama.com Adicionar um novo modelo Configure as chaves públicas para permitir que você envie modelos de sua máquina remota. Depois de criar seu llm local, você pode enviá-lo para o registro ollama usando - ollama push arjunrao87/financellm 🦄 Agora, vamos para a parte boa. Usando Ollama para construir um chatbot Durante minha busca para usar o Ollama, uma das descobertas mais agradáveis foi esse ecossistema de construtores de aplicativos web baseados em Python que encontrei. pode ser usado para construir um chatbot completo como o ChatGPT. Como diz a página deles, Chainlit Chainlit é um pacote Python de código aberto para construir IA conversacional pronta para produção Percorri alguns dos tutoriais do Chainlit para entender o que você pode fazer com o Chainlit, que inclui coisas como criar sequências de tarefas (chamadas de “etapas”), ativar botões e ações, enviar imagens e todo tipo de coisas. Você pode acompanhar esta parte da minha jornada . aqui Depois que peguei o jeito do Chainlit, quis montar um chatbot simples que basicamente usasse Ollama para que eu pudesse usar um LLM local para conversar (em vez de, digamos, ChatGPT ou Claude). Com menos de 50 linhas de código, você pode fazer isso usando Chainlit + Ollama. Isso não é loucura? Chainlit como biblioteca é super simples de usar. Também usei Langchain para usar e interagir com Ollama. from langchain_community.llms import Ollama from langchain.prompts import ChatPromptTemplate import chainlit as cl O próximo passo é definir como você deseja que seja a tela de carregamento do chatbot, usando o decorador do chainlit — @cl.on_chat_start @cl.on_chat_start async def on_chat_start(): elements = [cl.Image(name="image1", display="inline", path="assets/gemma.jpeg")] await cl.Message( content="Hello there, I am Gemma. How can I help you?", elements=elements ).send() .... .... A interface é o que Chainlit usa para enviar respostas de volta à IU. Você pode construir mensagens com a chave simples e, em seguida, embelezá-las com coisas como que, no meu caso, adicionei uma para mostrar uma imagem quando o usuário fizer login pela primeira vez. Message content elements Image A próxima etapa é invocar Langchain para instanciar o Ollama (com o modelo de sua escolha) e construir o modelo de prompt. O uso de é principalmente para manter a separação dos contextos e históricos do usuário, o que não é estritamente necessário apenas para fins de execução de uma demonstração rápida. cl.user_session Chain é uma interface Langchain chamada que é usada para criar cadeias personalizadas. Você pode ler mais sobre isso . Runnable aqui @cl.on_chat_start async def on_chat_start(): .... .... model = Ollama(model="mistral") prompt = ChatPromptTemplate.from_messages( [ ( "system", "You are a knowledgeable historian who answers super concisely", ), ("human", "{question}"), ] ) chain = prompt | model cl.user_session.set("chain", chain) Agora, você tem todas as peças para ter uma IU do chatbot e aceitar entradas do usuário. O que você faz com as solicitações fornecidas pelo usuário? Você usará o manipulador do Chainlit para fazer algo com a mensagem fornecida pelo usuário. @cl.on_message @cl.on_message async def on_message(message: cl.Message): chain = cl.user_session.get("chain") msg = cl.Message(content="") async for chunk in chain.astream( {"question": message.content}, ): await msg.stream_token(chunk) await msg.send() como os documentos sugerem “transmitir partes da resposta assíncrona”, que é o que queremos para nosso bot. chain.astream É realmente isso. Algumas importações, algumas funções, um pouco de açúcar e você tem um chatbot funcional. Para o código completo, você pode ver meu . GitHub Se este conteúdo for interessante para você, clique no botão 👏 ou assine minha newsletter aqui → . Isso me dá o feedback de que preciso fazer mais ou menos alguma coisa! Obrigado ❤️ https://a1engineering.beehiiv.com/subscribe Também publicado aqui