Użyj FastAPI i Deta Space, aby wdrożyć swoje aplikacje LangChain

Wstęp

Niedawno wpadłem na pomysł dodania własnego Asystenta AI do mojej strony internetowej — www.akshaymakes.com. Chciałem, żeby odpowiadał na pytania dotyczące moich projektów i mnie oraz mówił dużo o uczeniu maszynowym i ogólnie o sztucznej inteligencji. Moja strona internetowa jest zbudowana na SvelteKit i mogłem zdecydować się na użycie API OpenAI bezpośrednio z poziomu frontonu. Chciałem jednak, aby asystent był skalowalny. Oznacza to, że chciałem, aby w przyszłości mógł przeglądać moje blogi, projekty i inne materiały na mojej stronie internetowej oraz znacznie lepiej odpowiadać na pytania. Dlatego w tym celu i aby strona była prosta, stworzyłem aplikację LangChain przy użyciu FastAPI, która integruje się z moją witryną za pomocą REST API. Chciałem, aby doświadczenie było podobne do ChatGPT, tj. powinno być w stanie zapamiętać kontekst rozmowy i naturalnie kontynuować rozmowę. Wdrożyłem aplikację na Deta Space, co było dość proste. Pozwól, że przeprowadzę Cię krok po kroku przez ten proces. W tej chwili aplikacja będzie prosta. W przyszłych blogach wyjaśnię, jak dodać swoją witrynę internetową jako kontekst, korzystając z wektorowych baz danych, takich jak Weaviate lub Pinecone, aby asystent czatu miał o Tobie większą wiedzę.

W tym samouczku pokażę, jak utworzyć interfejs API do uzyskiwania wyników OpenAI przy użyciu LangChain, FastAPI i Deta Space. Zaczynajmy.

Konfiguracja

  1. Zacznij od nowego projektu Pythona w nowym katalogu. W naszym przykładzie wywołajmy katalog projektu jako LangChainAPI.
  2. Utwórz katalog w LangChainAPI o nazwie app i nowy plik .env
  3. W folderze aplikacji utwórz pusty plik __init__.py oraz nowy plik main.py i conversation.py.
  4. W tym nowym katalogu zainicjuj środowisko wirtualne za pomocą następującego polecenia terminala.
  5. Tak będzie wyglądać struktura projektu
├── app│ 
│   ├── __init__.py
│   ├── main.py
│   ├── conversation.py
├── .venv| 
└── .gitignore
└── .env

6. Aktywuj środowisko.

  • Dla Windowsa
venv\Scripts\activate.bat
  • Dla systemu MacOS/Linux
source venv/bin/activate

7. Zainstaluj zależności

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

8. Zainstaluj interfejs CLI Deta Space

  • W systemie Windows uruchom to polecenie w terminalu
iwr <https://deta.space/assets/space-cli.ps1> -useb | iex
  • W systemie MacOS/Linux uruchom to polecenie w terminalu
iwr <https://deta.space/assets/space-cli.ps1> -useb | iex

9. Zainicjuj repozytorium Git i zatwierdź

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

10. Załóż konto na https://deta.space/signup i uzyskaj token dostępu w ustawieniach. Zobacz ostatni GIF, aby dowiedzieć się, jak uzyskać dostęp do tego panelu.

11. Zaloguj się do Deta Space w CLI. Poprosi o token dostępu. Wkleić to.

space login

Tworzenie API

W folderze aplikacji otwórz conversation.py. Tutaj napiszemy logikę dla 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

W pliku 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=["*"],
)

W origins możesz dodać inne domeny, które będą wysyłać żądania do Twojego API.

Uruchom serwer API lokalnie

W terminalu użyj tego polecenia, aby uruchomić terminal lokalnie. Rozpocznie się localhost:8000.

uvicorn app.main:app --reload

Aby przetestować swoje API, przejdź do localhost:8000/docs w swojej przeglądarce. Powinno to otworzyć Dokumenty Swagger.

Możesz wpisać monit i sprawdzić, czy otrzymujesz odpowiedź. Gdy to zadziała, możesz pobawić się z LangChain. Możesz dodać pamięć, kontekst itp. W tej chwili Deta Space nie obsługuje lokalnych baz danych wektorowych. Będziesz więc musiał użyć zdalnych wektorowych baz danych, jeśli chcesz zapisać pliki kontekstowe i osadzenia.

Rozmieść się w przestrzeni Deta

Gdy będziesz zadowolony z API, zatwierdź zmiany w git

git add .
git commit -m "API Works"

Zainicjuj Deta Space, uruchamiając to polecenie w terminalu:

space new

Spowoduje to utworzenie nowego SpaceFile w projekcie. Otwórz ten plik i zastąp go następującym tekstem.

# 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

Zapisz plik i uruchom to polecenie w terminalu.

space push

Spowoduje to utworzenie instancji Twojego API na pulpicie nawigacyjnym Deta Space. W tym przypadku nosi on nazwę „gpt_server”. W Twoim przypadku będzie to „LangChainAPI”.

Przejdź do ustawień instancji i dodaj swój klucz API OpenAI z zakładki „Konfiguracje”. Następnie przejdź do zakładki domeny i pobierz podstawowy adres URL swojego API. Możesz najpierw przetestować go w przeglądarce, korzystając z Dokumentów Swagger, a następnie użyć go w swojej aplikacji jako interfejsu API REST.

Want to Connect?

My website
LinkedIn
Twitter