Узнайте, как создать веб-приложение, интегрирующее платформу Langchain с моделью GPT3 Streamlit и OpenAI.

Стримлит 🔥

Streamlit — это библиотека Python с открытым исходным кодом, которая позволяет легко создавать красивые настраиваемые веб-приложения для машинного обучения и обработки данных и делиться ими. Всего за несколько минут вы можете создать и развернуть мощные приложения для работы с данными.

Мы будем использовать его для создания базового пользовательского интерфейса для нашего приложения, а затем подключим компоненты пользовательского интерфейса для обслуживания ответа LLM через клиент Langchain и OpenAI. 🙌

Стримлит Документы

Ленгчейн 🔗

LangChain — это фреймворк для разработки приложений на основе языковых моделей. Это позволяет приложениям, которые:

  • Осведомленность о данных: подключение языковой модели к другим источникам данных
  • Агентный: позволяет языковой модели взаимодействовать с окружающей средой.

Мы будем использовать фреймворк Langchain для создания цепочек с использованием отдельных подсказок/задач. LLM будет обрабатывать каждое звено в цепочке 🔗последовательно, и это позволит нам выполнять более сложные запросы через модель. Вывод одной подсказки станет вводом для следующей и так далее.

Лангчейн Документы

OpenAI | GPT3.5 🤖

Клиент OpenAI от Langchain позволит нам использовать мощь их современных моделей GPT. Мы будем использовать модель «gpt-3.5-turbo», но вы можете использовать любую модель, которую захотите.

Вот краткое описание модели, которую мы собираемся использовать, с веб-сайта OpenAI —

Самая мощная модель GPT-3.5, оптимизированная для чата, стоит 1/10 стоимости text-davinci-003. Будет обновлена ​​​​наша последняя итерация модели через 2 недели после ее выпуска.

4096 макс. токенов

Подробнее здесь!

🧑‍💻Начнем с кода ‹/›

Во-первых, о приложении —

Мы создадим генератор рэп-песен. Это будет наше собственное веб-приложение LLM-Powered.

На основе заданной темы он сгенерирует соответствующее название песни, а затем также сгенерирует стихи для этого названия. Вот демонстрация приложения:

Захватывающий? Начнем строить!🧑🏻‍💻💪🏻

🙋🏻‍ Операторы импорта и начальная настройка —

Для этого проекта нам нужны 3 основных пакета. Установите их и любые другие пакеты, если это необходимо.

После этого мы импортируем API KEY и установим его как переменную среды. Кроме того, поскольку существует несколько моделей GPT, которые мы можем выбрать для нашего приложения, я определил ту, которую хочу, в переменной. Вы можете изменить его в соответствии с вашими потребностями.

#pip3 install streamlit
#pip3 install langchain
#pip3 install openai

import os
import streamlit as st
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain, SimpleSequentialChain, SequentialChain
from langchain.chat_models import ChatOpenAI

#import API key from config file
from config import OPEN_API                     

# environment variable & the model to use
model_id = 'gpt-3.5-turbo'
os.environ["OPENAI_API_KEY"] = OPEN_API

✒️ Элементы пользовательского интерфейса (потоковое освещение) —

Streamlit имеет очень удобный API, который позволяет нам легко создавать интерфейс для наших приложений ML/Data Science.

В приведенном ниже коде мы сначала создали заголовок для нашего приложения, а прямо под ним у нас есть поле ввода для пользователя, где он/она вводит тему для песни.

После этого у нас есть еще 2 заголовка, один для названия, а другой для стихов. Каждый из этих заголовков имеет свои собственные поля для вывода, куда будут добавляться результаты после их создания.

# main title & the input box
st.title("🎙️ Rap Song Generator 🎙️🔥")                                                                           
prompt = st.text_input("topic for the song?")                                                               

# second heading & the output area for song title
st.markdown("#### Song Title")
title_box = st.empty()

# third heading & the output area for verses
st.markdown("#### Verses")
verse_box = st.empty()

Когда ввод предоставлен, он будет сохранен в переменной «приглашение». Эта переменная позже будет использоваться для генерации выходных данных.

💥 Шаблоны подсказок, цепочки и LLM (langchain, OpenAI) —

Теперь нам нужно создать шаблоны как для генерации заголовков, так и для генерации стихов.

  • В первом приглашении вводом является «тема», которую пользователь ввел из пользовательского интерфейса. Эта «тема» будет использоваться для форматирования строки шаблона. Этот шаблон будет использоваться для вывода «названия» песни.
  • Вторая подсказка будет использовать «название», сгенерированное выше, в качестве входных данных и будет использовать его для форматирования второй строки шаблона, которая будет генерировать стихи на основе этого входного «названия». Результатом этого шаблона (цепочки) будут «стихи».

Когда у нас будет 2 шаблона, мы создадим по 2 цепочки для каждого из них. Первая цепочка будет цепочкой заголовков и будет использовать шаблон заголовка.

Точно так же вторая цепочка будет цепочкой стихов и будет использовать шаблон стиха.

Вывод, который мы получим, будет в формате словаря, поэтому для каждой цепочки мы можем указать, что использовать в качестве ключа. Это можно сделать, установив «output_key = something» в обеих цепочках.

# prompt template for generating title
title_template = PromptTemplate(                                                                    
    input_variables = ["topic"],
    template = "generate a rap song title on the topic: {topic}"
)

# prompt template for generating verses
verse_template = PromptTemplate(                                                                    
    input_variables = ["title"],
    template = "generate 2 rhyming verses for a rap song titled : {title}"
)

# building chains
title_chain = LLMChain(llm=llm, prompt=title_template, verbose=True, output_key="title")                                 
verse_chain = LLMChain(llm=llm, prompt=verse_template, verbose=True, output_key="verse")                                    

# combining chains
sequential_chain = SequentialChain(
    chains=[title_chain, verse_chain], 
    input_variables=["topic"],
    output_variables=["title", "verse"],
    verbose=True,
)    

В конце мы объединяем обе цепочки, и они будут работать последовательно, когда мы начнем выполнение. Входными переменными в этой комбинированной цепочке будут ["тема"] и выходными переменными будет ["название", "стих"], как определено при объединении цепочек.

📺 Вывод на экран —

Как только мы получим ввод от пользователя, мы запустим объединенную цепочку, которую мы только что создали. Мы передадим приглашение как «тему», поскольку это имя, которое мы определили для нашего параметра «input_variables».

Ответом будет словарь, и мы можем извлечь из него требуемый текст, используя ключи, которые мы также определили ранее в переменных «output_variables» и «output_keys».

# run chains if prompt is provided
if prompt:
    response = sequential_chain({
        "topic" : prompt
    })
    
    title = response["title"]
    body = response["verse"]
  
    # display each output in it's own output box
    title_box.markdown(title)
    verse_box.markdown(body)

Чтобы запустить приложение, используйте команду —

streamlit run filename.py

Это все для этой статьи. Я надеюсь, что это стоило вашего времени, и следите за обновлениями в будущем!

🖤 Спасибо, что прочитали, посмотрите похожие записи —