Используйте FastAPI и Deta Space для развертывания приложений LangChain

Введение

Недавно у меня появилась идея добавить на свой сайт собственного ИИ-помощника — www.akshaymakes.com. Я хотел, чтобы он отвечал на вопросы о моих проектах и ​​обо мне, а также много говорил о машинном обучении и искусственном интеллекте в целом. Мой веб-сайт построен на SvelteKit, и я мог бы использовать API OpenAI непосредственно из внешнего интерфейса. Но я хотел, чтобы помощник был масштабируемым. То есть в будущем я хотел, чтобы он мог просматривать мои блоги, проекты и другие материалы на моем веб-сайте и гораздо лучше отвечать на вопросы. Поэтому для этой цели и для простоты веб-сайта я создал приложение LangChain с использованием FastAPI, которое будет интегрироваться с моим веб-сайтом с помощью REST API. Я хотел, чтобы опыт был похож на ChatGPT, то есть он должен был иметь возможность запоминать контекст разговора и естественно продолжать разговор. Я развернул приложение на Deta Space, что было довольно просто сделать. Позвольте мне провести вас шаг за шагом через этот процесс. Мы сохраним приложение простым прямо сейчас. В будущих блогах я объясню, как вы можете добавить свой веб-сайт в качестве контекста, используя векторные базы данных, такие как Weaviate или Pinecone, чтобы сделать помощника чата более осведомленным о вас.

Итак, в этом уроке я покажу вам, как создать API для получения выходных данных OpenAI с использованием LangChain, FastAPI и Deta Space. Давай начнем.

Настройка

  1. Начните с нового проекта Python в новом каталоге. В нашем примере давайте назовем каталог проекта как LangChainAPI.
  2. Создайте каталог в LangChainAPI с именем app и новый файл .env
  3. Внутри папки приложения создайте пустой файл __init__.py и новые файлы main.py и conversation.py.
  4. В этом новом каталоге запустите виртуальную среду с помощью следующей команды терминала.
  5. Вот так будет выглядеть структура проекта
├── app│ 
│   ├── __init__.py
│   ├── main.py
│   ├── conversation.py
├── .venv| 
└── .gitignore
└── .env

6. Активируйте среду.

  • Для Windows
venv\Scripts\activate.bat
  • Для MacOS/Linux
source venv/bin/activate

7. Установите зависимости

pip install langchain fastapi "uvicorn[standard]" openai python-dotenv

8. Установите интерфейс командной строки Deta Space

  • Для Windows выполните эту команду в терминале
iwr <https://deta.space/assets/space-cli.ps1> -useb | iex
  • Для MacOS/Linux выполните эту команду в терминале
iwr <https://deta.space/assets/space-cli.ps1> -useb | iex

9. Запустите репозиторий Git и зафиксируйте

git init
git add .
git commit -m "First Commit"

10. Создайте аккаунт на https://deta.space/signup и получите токен доступа из настроек. Посмотрите последний GIF, чтобы узнать, как вы можете получить доступ к этой панели.

11. Войдите в Deta Space через интерфейс командной строки. Он запросит токен доступа. Вставьте его.

space login

Создание API

В папке приложения откройте conversation.py. Здесь мы будем писать логику для LangChain.

    from langchain import OpenAI, ConversationChain, LLMChain, PromptTemplate

    load_dotenv()

    def conversation(human_input):
        template = """Assistant is a large language model trained by  OpenAI.

        Assistant is designed to be able to assist with a wide range of tasks, from answering simple questions to providing in-depth explanations and discussions on a wide range of topics. As a language model, Assistant is able to generate human-like text based on the input it receives, allowing it to engage in natural-sounding conversations and provide responses that are coherent and relevant to the topic at hand.

        Assistant is constantly learning and improving, and its capabilities are constantly evolving. It is able to process and understand large amounts of text, and can use this knowledge to provide accurate and informative responses to a wide range of questions. Additionally, Assistant is able to generate its own text based on the input it receives, allowing it to engage in discussions and provide explanations and descriptions on a wide range of topics.

        Overall, Assistant is a powerful tool that can help with a wide range of tasks and provide valuable insights and information on a wide range of topics. Whether you need help with a specific question or just want to have a conversation about a particular topic, Assistant is here to assist.

        {history}
        Human: {human_input}
        Assistant:"""

        prompt = PromptTemplate(
            input_variables=["history", "human_input"],
            template=template
        )

        chatgpt_chain = LLMChain(
            llm=OpenAI(temperature=0),
            prompt=prompt,
            verbose=True,
        )

        output = chatgpt_chain.predict(human_input=human_input)
        return output

В файле main.py.

from fastapi import FastAPI
from langcorn import create_service
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from app.conversation import conversation

class Input(BaseModel):
    human_input: str

class Output(BaseModel):
    output: str

app=FastAPI()

@app.post("/conversation")
async def input(input: Input):
    output = Output(output=conversation(input.human_input))
    return output

origins = [
    "<http://localhost>",
    "<http://localhost:5173>",
        "...Your Domains..."
]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

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

Запустите сервер API локально

В терминале используйте эту команду для локального запуска терминала. Он начнется localhost:8000.

uvicorn app.main:app --reload

Чтобы протестировать API, перейдите на страницу localhost:8000/docs в браузере. Это должно открыть Swagger Docs.

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

Развернуть в Deta Space

Как только вы будете довольны API, внесите изменения в git.

git add .
git commit -m "API Works"

Запустите Deta Space, выполнив эту команду в терминале:

space new

Это создаст новый SpaceFile в проекте. Откройте этот файл и перезапишите его следующим текстом.

# Spacefile Docs: <https://go.deta.dev/docs/spacefile/v0>
v: 0
micros:
  - name: LangChainAPI
    src: ./
    engine: python3.9
    primary: true
    run: uvicorn app.main:app
    presets: 
      env: 
        - name: OPENAI_API_KEY
          description: Secret message only available to this Micro
          default: "OpenAPI Key"
      api_keys: true

Сохраните файл и запустите эту команду в терминале.

space push

Это создаст экземпляр вашего API на панели инструментов Deta Space. В данном случае он называется «gpt_server». В вашем случае это будет «LangChainAPI».

Перейдите к настройкам экземпляра и добавьте свой ключ API OpenAI на вкладке «Конфигурации». Затем перейдите на вкладку домены и получите базовый URL вашего API. Вы можете сначала протестировать его в браузере, используя Swagger Docs, а затем использовать его в своем приложении как REST API.

Want to Connect?

My website
LinkedIn
Twitter