Utilizați FastAPI și Deta Space pentru a vă implementa aplicațiile LangChain

Introducere

Recent, mi-a venit o idee să adaug propriul meu Asistent AI pe site-ul meu – www.akshaymakes.com. Am vrut să răspundă la întrebări despre proiectele mele și despre mine și să vorbesc mult despre învățarea automată și inteligența artificială în general. Site-ul meu este construit pe SvelteKit și aș fi putut alege să folosesc API-ul OpenAI direct din front end. Dar, am vrut ca asistentul să fie scalabil. Adică, pe viitor, mi-am dorit să poată răsfoi blogurile, proiectele și alte materiale de pe site-ul meu și să răspundă mult mai bine la întrebări. Deci, în acest scop și pentru a menține site-ul simplu, am creat o aplicație LangChain folosind FastAPI care s-ar integra cu site-ul meu cu REST API. Am vrut ca experiența să fie similară cu ChatGPT, adică ar trebui să poată aminti contextul conversației și să continue conversația în mod natural. Am implementat aplicația pe Deta Space, care a fost destul de simplu de făcut. Permiteți-mi să vă ghidez pas cu pas prin proces. Vom păstra aplicația simplă chiar acum. În blogurile viitoare, voi explica cum puteți adăuga site-ul dvs. ca context folosind baze de date vectoriale precum Weaviate sau Pinecone pentru a face asistentul de chat mai informat despre dvs.

Deci, în acest tutorial, vă voi arăta cum să creați un API pentru obținerea ieșirilor OpenAI folosind LangChain, FastAPI și Deta Space. Sa incepem.

Configurare

  1. Începeți cu un nou proiect Python într-un director nou. În exemplul nostru, să numim directorul proiectului ca LangChainAPI.
  2. Creați un director în LangChainAPI numit app și un fișier nou .env
  3. În dosarul aplicației, creați un fișier __init__.py gol și un fișier nou main.py și conversation.py.
  4. În acest nou director, inițiați un mediu virtual cu următoarea comandă de terminal.
  5. Așa va arăta structura proiectului
├── app│ 
│   ├── __init__.py
│   ├── main.py
│   ├── conversation.py
├── .venv| 
└── .gitignore
└── .env

6. Activați mediul.

  • Pentru Windows
venv\Scripts\activate.bat
  • Pentru MacOS/Linux
source venv/bin/activate

7. Instalați dependențele

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

8. Instalați Deta Space CLI

  • Pentru Windows, rulați această comandă în terminal
iwr <https://deta.space/assets/space-cli.ps1> -useb | iex
  • Pentru MacOS / Linux, rulați această comandă în terminal
iwr <https://deta.space/assets/space-cli.ps1> -useb | iex

9. Inițiază Git Repository și comite

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

10. Creați un cont pe https://deta.space/signup și obțineți jetonul de acces din setări. Vedeți ultimul GIF pentru a afla cum puteți accesa acest panou.

11. Conectați-vă la Deta Space în CLI. Va cere jetonul de acces. Lipiți-l.

space login

Crearea API-ului

În folderul aplicației, deschideți conversation.py. Aici vom scrie logica pentru 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

În fișierul 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=["*"],
)

În origins puteți adăuga alte domenii care vor face solicitări către API-ul dvs.

Rulați serverul API local

În terminal, utilizați această comandă pentru a porni terminalul local. Va începe pe localhost:8000.

uvicorn app.main:app --reload

Pentru a testa API-ul, accesați localhost:8000/docs în browser. Aceasta ar trebui să deschidă Swagger Docs.

Puteți introduce solicitarea și verifica dacă primiți răspunsul. Odată ce funcționează, nu ezitați să vă jucați cu LangChain. Puteți adăuga memorie, context etc. În acest moment, Deta Space nu acceptă baze de date vectoriale locale. Deci, va trebui să utilizați baze de date vectoriale la distanță dacă trebuie să salvați fișierele de context și înglobările.

Implementați în Deta Space

Odată ce sunteți mulțumit de API, trimiteți modificările în git

git add .
git commit -m "API Works"

Inițiază Deta Space rulând această comandă în terminal:

space new

Aceasta va crea un nou SpaceFile în proiect. Deschideți acest fișier și suprascrieți-l cu următorul text.

# 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

Salvați fișierul și executați această comandă în terminal.

space push

Aceasta va crea o instanță a API-ului dvs. pe tabloul de bord Deta Space. În acest caz, se numește „gpt_server”. În cazul dvs., va fi „LangChainAPI”.

Accesați setările instanței și adăugați cheia API OpenAI din fila „Configurații”. Apoi, accesați fila domenii și obțineți adresa URL de bază a API-ului dvs. Puteți să-l testați mai întâi în browser folosind Swagger Docs și apoi să îl utilizați în aplicația dvs. ca API REST.

Want to Connect?

My website
LinkedIn
Twitter