4 начина за производство и предоставяне на LLM chatbot на клиентите

Налични са множество библиотеки за прехвърляне на вашия LLM чатбот от разработка към производство.

В тази статия ще обсъдя някои от популярните методи за постигане на това, базирани на текущите тенденции към момента на писане.

Вариант 1 — Добавяне на QA бот към discord сървъра на вашата компания

Този подход е полезен за вътрешна обратна връзка и когато вашите клиенти също са в екосистемата на Discord.

Освен това, елементи от това решение могат да бъдат адаптирани и за стандартен чатбот на вашия уебсайт. Просто извикайте API Gateway от вашето уеб приложение вместо Discord.

Вариант 2 — Прегръщане на ChatUI за plug-and-play решение

Донесете свой собствен модел или използвайте крайна точка на sagemaker и започнете да чатите с ChatUI.

Вариант 3 — Използване на gradio

Въпреки че предлага по-бързо развитие, необходимо е внимателно обмисляне, преди да се внедри в производствена среда.

Опция 4 — плъгин Streamlit HugChat

Препоръчва се само ако вече работите със Streamlit; в противен случай това не е оптимално решение само за чатбот.

В производствена среда решението обикновено се състои от три основни компонента:

  1. Преобразуване на базата знания на вашата компания във вграждания и тяхното съхраняване.
  2. Преобразуване на входни въпроси във вграждания и ефективно извличане на най-близки съседни вграждания от векторно хранилище.
  3. Предоставяне на контекст и въпроси към LLM и предоставяне на резултата на потребителя.

Тази статия основно се фокусира върху обсъждането на това как да се представи изходът на потребителя. За първите две стъпки предоставих по-подробна статия, която можете да разгледате тук: https://mrmaheshrajput.medium.com/how-to-build-an-intelligent-qa-chatbot-on-your-data -с-llm-или-chatgpt-d0009d256dce.

Вариант 1 — Добавяне на QA бот, управляван от LLM, към Discord

1. Създаване на discord бот и добавяне към вашия сървър

В друга статия се задълбочавам в повече подробности относно създаването на бот и интегрирането му в сървър. Можете да намерите статията тук: https://mrmaheshrajput.medium.com/automating-ad-hoc-reports-with-discord-bot-aws-lambda-and-sagemaker-25d40e371a8a

а. Отидете до https://discord.com/developers/applications

b. Кликнете върху „Ново приложение“

° С. Дайте подходящо име и щракнете върху бутона „Създаване“.

След като приложението бъде създадено, копирайте „ID НА ПРИЛОЖЕНИЕТО“ APP_ID, „PUBLIC KEY“ PUBLIC_KEY за по-късна употреба.

Под елемента от менюто „Бот“ щракнете върху бутона „НУЛИРАЙТЕ ТОКЕН“ и копирайте токена. Запазете това BOT_TOKEN за по-късна употреба.

Под „OAuth2“ родителски елемент от менюто изберете „URL Generator“ дъщерен елемент от менюто, поставете отметка в квадратчето application.commands и копирайте „ГЕНЕРИРАНИЯ URL“ с помощта на бутона „Копиране“.

Поставете URL адреса в браузъра си (в който вашият discord акаунт е влязъл с достъп до вашия сървър, към който искате да добавите този бот).

2. Регистрирайте команди

Ще използваме команди с наклонена черта. Ако сте добре запознати с API на Discord, не се колебайте да проучите алтернативи на този подход.

Изпълнете следния код от всяка среда, в която има инсталиран пакет python и requests.

Ние използваме команди на гилдията, които са по-бързи и командата ще бъде извикана чрез въвеждане /qa в discord.

Не забравяйте да замените APP_ID, BOT_TOKEN, SERVER_ID (щракнете с десния бутон върху сървъра и щракнете върху „Копиране на ID на сървъра“) с вашите стойности.

Регистрирайте тази команда чрез:

python register_command_qa_bot.py

Отговорът:

3. Създайте ламбда, за да управлявате взаимодействие (и задействане на API шлюз)

а. Създайте нова ламбда функция с време за изпълнение на python3.9, изберете правилната архитектура според вашата система, защото ние ще добавим слой към тази функция.

b. Ламбда код:

Кодът е ясен, ако преди сте работили с команди за наклонена черта на бот на Discord. Някои функции може да изглеждат излишни, но могат да бъдат полезни, ако планирате да разширите този проект в бъдеще.

Във функцията lambda_handler t==1 отговаря на командата ping.

Във функцията command_handler ние просто извикваме крайната точка на sagemaker след разбор на въпроса от обекта body.

Този код е подобен на кода, който използвахме в: https://mrmaheshrajput.medium.com/automating-ad-hoc-reports-with-discord-bot-aws-lambda-and-sagemaker-25d40e371a8a

° С. Добавете разрешение `sagemaker:InvokeEndpoint` към тази ламбда.

д. Отидете на конфигурационните настройки на lambda и добавете две променливи на средата:

аз PUBLIC_KEY — копирано при създаване на бота за раздор
ii. ENDPOINT_NAME — предстои да бъде генериран

д. Добавете задействане на REST API Gateway към ламбда:

За да опростите нещата, „Сигурност“ е настроено да се отваря.

f. Добавете слой PyNACL към тази ламбда:

!rm -rf layer/python
!mkdir -p layer/python
!pip install -q --target layer/python PyNaCl
!cd layer && zip -q --recurse-paths layer.zip .

Качете този слой ръчно или го добавете чрез S3, след което го прикачете към вашата ламбда.

4. Добавете URL адрес на крайна точка на взаимодействие

Копирайте крайната точка на API от под задействания,

и го поставете в опцията INTERACTION ENDPOINT URL под „Обща информация“ в портала за разработчици на discord на вашето приложение.

Ако API шлюзът работи

5. Тествайте фиктивна команда

Можете да коментирате свързания с крайната точка код в ламбда и да тествате кода.

В следващия тест просто връщам въпроса на потребителя, за да проверя функционалността.

6. Разположете LLM в крайна точка на Sagemaker

В този пример ще създам крайна точка с помощта на моделите на Sagemaker Jumpstart Foundation. Като алтернатива можете да използвате всеки друг основен модел или фино настроен модел, базиран на вашия набор от данни, и да го внедрите в крайна точка.

Ако не сте заявявали g5 екземпляри преди, започнете, като поискате увеличение на квотата за ml.g5.2xlarge for endpoint usage чрез квоти за услуги. Моля, имайте предвид, че разрешаването на тикета може да отнеме до 24 часа.

След това отворете вашето Sagemaker Studio и под „Sagemaker Jumpstart“ изберете „Llama-2–7b-chat“.

Променете конфигурацията за разполагане по желание, отбележете променливата „Endpoint Name“ ENDPOINT_NAME и щракнете върху бутона „Deploy“.

Този модел не е достъпен за фина настройка, използвайте „Llama 2 7b“ за фина настройка на вашия набор от данни.

След няколко минути състоянието на крайната точка трябва да е в услуга.

Можете също да проверите състоянието на крайната точка от елемента от менюто „Крайни точки“, който е под „Внедрявания“ в Sagemaker Studio.

Ще използваме името на крайната точка, за да я извикаме в ламбда.

7. Променете ламбда, за да извика крайна точка на sagemaker и да върне отговор

Актуализирайте ENDPOINT_NAME името на променливата на средата в ламбда.

Също така премахнете или разкоментирайте тестовия код.

Сега, когато използвате командата /qa в Discord, тя ще извика крайната точка на Sagemaker и ще върне отговора от LLM.

Моля, имайте предвид, че НЕ съм ускорил gif; Lambda е в състояние да реагира в рамките на 3 секунди.

След като приключите взаимодействието с крайната точка, моля, изтрийте я, за да освободите ресурси и да спрете таксуването.

Вариант 2 — HuggingFace ChatUI за plug-and-play

Във видеоклипа си Абхишек Тхакур (https://www.youtube.com/watch?v=o1BCq1KJULM) използва прегръщащото лице извод за генериране на текст ( https://github.com/huggingface/text-generation-inference) заедно с chat-ui (https://github.com/huggingface/chat-ui) за решение за чатбот .

Ако притежавате крайна точка за извеждане на прегръщащо лице или възнамерявате да използвате LLM от вашата локална машина, започнете с конфигуриране и генериране на крайна точка с помощта на пакета за извод за генериране на текст.

Този процес ще изпълни LLM с отворен код на вашата машина и крайната точка ще се появи, както следва: 127.0.0.1:8080

Можете да използвате това като крайна точка или да изберете крайната точка на SageMaker, при условие че установите нова Lambda, способна да извика тази крайна точка и да прикачите нов тригер на API Gateway към функцията Lambda.

1. Създайте нова ламбда с Python среда.

2. Функционален код:

3. Дайте разрешение на `sagemaker:InvokeEndpoint` за тази ламбда политика.

4. Добавете ENDPOINT_NAME в променливата на средата.

5. Добавете нов тригер на REST API Gateway и отбележете крайната точка на API.

6. Клонирайте хранилището на https://github.com/huggingface/chat-ui.

7. ChatUI изисква работещ екземпляр на MongoDB за съхраняване на хронологията на чата. Можете да използвате MongoDB контейнер, както е посочено в хранилището:

docker run -d -p 27017:27017 --name mongo-chatui mongo:latest

8. Създайте нов .env.local файл в главната директория на ChatUI и добавете два нови обекта, MONDODB_URL и MODELS.

Обектът Models е подобен на файла .env, с изключение на това, че добавяме нов ключ endpoints.

MONGODB_URL=mongodb://localhost:27017
MODELS=`[
  {
    "name": "LLAMA 2 7B Chat, running on sagemaker endpoint",
    "endpoints": [{"url": "API_ENDPOINT"}],
    "datasetName": "Llama2-7b-chat/qa-sm",
    "description": "A good alternative to ChatGPT",
    "websiteUrl": "https://mrmaheshrajput.github.io",
    "userMessageToken": "<|prompter|>",
    "assistantMessageToken": "<|assistant|>",
    "messageEndToken": "</s>",
    "preprompt": "Below are a series of dialogues between various people and an AI assistant. The AI tries to be helpful, polite, honest, sophisticated, emotionally aware, and humble-but-knowledgeable. The assistant is happy to help with almost anything, and will do its best to understand exactly what is needed. It also tries to avoid giving false or misleading information, and it caveats when it isn't entirely sure about the right answer. That said, the assistant is practical and really does its best, and doesn't let caution get too much in the way of being useful.\n-----\n",
    ...
  }
]`

Заменете url с крайната точка на API, създадена по-горе.

8. Изпълнете и двете следните команди:

npm install
npm run dev

URL адресът, даден от npm run dev, ще стартира приложението ChatUI.

Тъй като не можах да разбера нашия синтаксис на отговора, ChatUI винаги ми даваше тази грешка:

Но крайната точка и ламбда успяха успешно да върнат изход според регистрационните файлове на Cloudwatch.

Вариант 3 — Gradio chatbot

Gradio е мощен инструмент, използван за създаване на потребителски интерфейси за модели за машинно обучение. Само с няколко реда код можете лесно да настроите демонстрация за почти всеки ML модел.

Курсът на Андрю Нг, „Изграждане на генериращи AI приложения с Gradio“, набляга на бързото създаване и демонстриране на приложения за машинно обучение с помощта на Gradio.

В този пример ще използваме крайна точка Hugging Face във връзка с интерфейс за генериране на текст, за да установим крайна точка.

Код на приложението Gradio:

Ще използваме функцията gr.Chatbot с режим на поточно предаване.

Вариант 4 — Streamlit chatbot

Статията „Как да създадем ChatBot, задвижван от LLM, със Streamlit“ е чудесно място да започнете вашето пътуване по тази тема.

1. Клонирайте това репо: https://github.com/streamlit/app-starter-kit

2. Променете кода на файла streamlit_app.py със следното:

3. Създайте secrets.toml файл в .streamlit директория.

Имате възможност да добавите EMAIL и PASS в самия файл, за да предотвратите въвеждането на вашите HF идентификационни данни.

Можете също да ги пропуснете и въведете по време на зареждане.

Ако всичко е правилно, ще можете да разговаряте с LLM, избран в интерфейса за генериране на текст.

Производствена настройка

Моля, имайте предвид, че в производствена среда в идеалния случай бихте искали ботът да реагира единствено въз основа на информацията, съдържаща се във вашата база знания, която може да включва текст, PDF файлове, видеоклипове и т.н.

В друга моя статия (https://mrmaheshrajput.medium.com/how-to-build-an-intelligent-qa-chatbot-on-your-data-with-llm-or-chatgpt-d0009d256dce), аз обсъдете как да постигнете това. Можете също така да използвате RDS или друга база данни, за да съхранявате контекста и да го предавате заедно с всеки вход.

За съхраняване на вгражданията на вашата база знания можете да изберете „pgvector“ или база данни за вграждане или да обмислите използването на ANN библиотека, ако вашето дърво за търсене е сравнително малко.

CDK от AWS

AWS предлага изчерпателен пример за внедряване на чатбот, задвижван от множество LLM, използвайки AWS CDK в инфраструктура на AWS.

Можете да получите достъп до него тук: https://github.com/aws-samples/aws-genai-llm-chatbot

Той разгръща цялостен потребителски интерфейс, изграден с React, който взаимодейства с внедрените LLM като chatbots, поддържайки заявки за синхронизиране и режими на стрийминг за достигане на крайни точки на LLM, управление на историята на разговорите, спиране на генерирането на модел в режим на стрийминг и превключване между всички внедрени модели за експериментиране.

Ако лично вие разполагате с необходимите ресурси, това е едно от най-стабилните решения, които можете да приложите във вашата производствена среда.

Този стек съдържа необходимите ресурси за настройка на система за чатбот, включително:

а. Възможността за внедряване на един или повече големи езикови модели чрез персонализирана конструкция, поддържаща три различни техники:

  • Внедряване на модели от модели на SageMaker Foundation чрез указване на конкретния модел ARN.
  • Внедряване на модели, поддържани от контейнера HuggingFace TGI.
  • Внедряване на всички други модели от Hugging Face с персонализиран код за извод.

b. Бекенд ресурси за потребителския интерфейс, включително чат бекенд действия и Cognito потребителски пул за удостоверяване.

° С. Поддържана от DynamoDB система за управление на историята на разговорите.

Този стек също така включва „моделни адаптери“, позволяващи настройката на различни параметри и функции за конкретни модели, без да се променя основната логика за изпълнение на заявки и консумиране на отговори от крайни точки на SageMaker за различни LLM.

Можете да се свържете с мен в LinkedIn: https://www.linkedin.com/in/maheshrajput/

Моят уебсайт в github: https://mrmaheshrajput.github.io/