Это первая часть более глубокого погружения в Олламу и то, что я узнал о местных LLM и о том, как их можно использовать для приложений, основанных на логических выводах. В этом посте вы узнаете о —
Чтобы понять основы LLM (включая местные LLM), вы можете обратиться к моему предыдущему сообщению на эту тему здесь .
Среди местных LLM я впервые столкнулся с LMStudio. Хотя приложение само по себе простое в использовании, мне понравилась простота и маневренность, которые обеспечивает Ollama. Чтобы узнать больше об Олламе, вы можете пойти сюда .
tl;dr: У Ollama есть собственный список моделей, к которым у вас есть доступ.
Вы можете загрузить эти модели на свой локальный компьютер, а затем взаимодействовать с ними через командную строку. В качестве альтернативы, когда вы запускаете модель, Оллама также запускает сервер вывода, размещенный на порту 11434 (по умолчанию), с которым вы можете взаимодействовать посредством API и других библиотек, таких как Langchain.
На момент написания этой публикации у Олламы было 74 модели, включая такие категории, как встраивание моделей.
Загрузите Ollama для выбранной вами ОС. Как только вы это сделаете, вы запустите команду 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.
Чтобы использовать любую модель, вам сначала нужно «вытащить» ее из Ollama, так же, как вы извлекаете образ из Dockerhub (если вы использовали его раньше) или чего-то вроде Elastic Container Registry (ECR).
Ollama поставляется с некоторыми моделями по умолчанию (например, llama2
, LLM с открытым исходным кодом Facebook), которые вы можете увидеть, запустив.
ollama list
Выберите модель (скажем, phi
), с которой вы хотели бы взаимодействовать, на странице библиотеки Ollama . Теперь вы можете снять эту модель, выполнив команду
ollama pull phi
После завершения загрузки вы можете проверить, доступна ли модель локально, запустив —
ollama list
Теперь, когда модель доступна, она готова к использованию. Запустить модель можно командой —
ollama run phi
Точность ответов не всегда на высшем уровне, но вы можете решить эту проблему, выбрав разные модели или, возможно, выполнив некоторую точную настройку или самостоятельно внедрив решение, подобное RAG, для повышения точности.
Выше я продемонстрировал, как можно использовать модели Олламы с помощью командной строки. Однако, если вы проверите сервер вывода, на котором работает Llama, вы увидите, что существуют программные способы доступа к нему, нажав порт 11434.
Если вы хотите использовать Langchain для доступа к вашей модели Олламы, вы можете использовать что-то вроде —
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)
Вы также можете создать свой собственный вариант модели, используя концепцию Modelfile
в Ollama. Дополнительные параметры для настройки в файле модели можно найти в этой документации.
Пример файла модели —
# 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. """
Получив файл модели, вы можете создать свою модель, используя
ollama create arjunrao87/financellm -f Modelfile
financellm
— это имя вашей модели LLM, а arjunrao87
будет заменено вашим именем пользователя ollama.com (которое также выступает в качестве пространства имен вашего онлайн-реестра ollama). На этом этапе вы можете использовать созданную модель, как и любую другую модель на Ollama.
Вы также можете отправить свою модель в удаленный реестр ollama. Чтобы это произошло, вам нужно
После того, как вы создали свой локальный llm, вы можете отправить его в реестр ollam, используя —
ollama push arjunrao87/financellm
🦄 А теперь перейдем к хорошему.
Во время моего стремления использовать Ollama одним из наиболее приятных открытий стала экосистема разработчиков веб-приложений на основе Python, с которой я столкнулся. Chainlit можно использовать для создания полноценного чат-бота, такого как ChatGPT. Как говорится на их странице,
Chainlit — это пакет Python с открытым исходным кодом для создания готового к использованию диалогового искусственного интеллекта.
Я просмотрел несколько руководств по Chainlit, чтобы понять, что можно делать с Chainlit, что включает в себя такие вещи, как создание последовательностей задач (называемых «шагами»), включение кнопок и действий, отправка изображений и многое другое. За этой частью моего путешествия вы можете следить здесь .
Как только я освоил Chainlit, я захотел собрать простого чат-бота, который в основном использовал бы Ollama, чтобы я мог использовать местный LLM для общения (вместо, скажем, ChatGPT или Claude).
Имея менее 50 строк кода, вы можете сделать это с помощью Chainlit + Ollama. Разве это не безумие?
Библиотеку Chainlit очень просто использовать. Я также использовал Langchain для использования и взаимодействия с Ollama.
from langchain_community.llms import Ollama from langchain.prompts import ChatPromptTemplate import chainlit as cl
Следующий шаг — определить, как должен выглядеть экран загрузки чат-бота, используя декоратор @cl.on_chat_start
Chainlit —
@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() .... ....
Интерфейс Message
— это то, что Chainlit использует для отправки ответов обратно в пользовательский интерфейс. Вы можете создавать сообщения с помощью простого ключа content
, а затем украшать их такими elements
, как в моем случае, я добавил Image
, чтобы показывать изображение при первом входе пользователя в систему.
Следующим шагом является вызов Langchain для создания экземпляра Ollama (с моделью по вашему выбору) и создание шаблона приглашения. Использование cl.user_session
в основном предназначено для поддержания разделения пользовательских контекстов и историй, что не является строго необходимым только для запуска быстрой демонстрации.
Chain — это интерфейс Langchain под названием Runnable
, который используется для создания пользовательских цепочек. Подробнее об этом можно прочитать здесь .
@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)
Теперь у вас есть все необходимое для создания пользовательского интерфейса чат-бота и приема вводимых пользователем данных. Что вы делаете с подсказками, которые предоставляет пользователь? Вы будете использовать обработчик @cl.on_message
из Chainlit, чтобы что-то сделать с сообщением, предоставленным пользователем.
@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()
chain.astream
поскольку в документации предлагается «асинхронно передавать фрагменты ответа», это то, что мы хотим для нашего бота.
Это действительно так. Немного импорта, пара функций, немного сахара — и у вас есть функциональный чат-бот.
Полный код вы можете посмотреть на моем GitHub .
Если этот контент вам интересен, нажмите кнопку 👏 или подпишитесь на мою рассылку здесь → https://a1engineering.beehiiv.com/subscribe . Это дает мне обратную связь о том, что мне нужно сделать что-то больше или меньше! Спасибо ❤️
Также опубликовано здесь