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
- Zacznij od nowego projektu Pythona w nowym katalogu. W naszym przykładzie wywołajmy katalog projektu jako
LangChainAPI.
- Utwórz katalog w
LangChainAPI
o nazwieapp
i nowy plik.env
- W folderze aplikacji utwórz pusty plik
__init__.py
oraz nowy plikmain.py
iconversation.py
. - W tym nowym katalogu zainicjuj środowisko wirtualne za pomocą następującego polecenia terminala.
- 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