React (캔버스 판서) → NestJS (API) → Python (LLM inference)
→ LangChain으로 “도형 의미 분석 + 이미지 추천 문장 생성”

Feature

$ pip install langchain langchain-openai pydantic

OpenAI 키 없이도 FastAPI + LangChain로 바로 쓸 수 있는 두 가지 예시

$ python -m venv .venv
. .venv/Scripts/activate   # (Windows)  /  source .venv/bin/activate (mac/linux)

$ pip install --upgrade pip
$ pip install fastapi "uvicorn[standard]" python-dotenv \\
            langchain-core langchain-community langchain-huggingface pydantic

1. ollama 다운로드

image.png

https://ollama.com/download

2. 버전 확인

$ (.venv) PS D:\\Project\\Luppy\\llm> Get-ChildItem -Path "$env:LOCALAPPDATA\\Programs" -Recurse -Filter ollama.exe -ErrorAction SilentlyContinue

    디렉터리: C:\\Users\\roxie\\AppData\\Local\\Programs\\Ollama

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----      2025-09-26   오전 4:41       32767480 ollama.exe

$ (.venv) PS D:\\Project\\Luppy\\llm> & "C:\\Users\\roxie\\AppData\\Local\\Programs\\Ollama\\ollama.exe" --version
ollama version is 0.12.3

3. 실행

# uvicorn
$ & "C:\\Users\\roxie\\AppData\\Local\\Programs\\Ollama\\ollama.exe" serve

$ (.venv) PS D:\\Project\\Luppy\\llm> & "C:\\Users\\roxie\\AppData\\Local\\Programs\\Ollama\\ollama.exe" pull llama3.1
pulling manifest
pulling 667b0c1932bc: 100% ▕█████████████████████████████▏ 4.9 GB
pulling 948af2743fc7: 100% ▕█████████████████████████████▏ 1.5 KB
pulling 0ba8f0e314b4: 100% ▕█████████████████████████████▏  12 KB
pulling 56bb8bd477a5: 100% ▕█████████████████████████████▏   96 B
pulling 455f34728c9b: 100% ▕█████████████████████████████▏  487 B
verifying sha256 digest
writing manifest
success

$ (.venv) PS D:\\Project\\Luppy\\llm> & "C:\\Users\\roxie\\AppData\\Local\\Programs\\Ollama\\ollama.exe" run llama3.1 "hello"
Hello! How can I assist you today?

$ (.venv) PS D:\\Project\\Luppy\\llm> uvicorn app:app --reload --host 0.0.0.0 --port 8000  

# powershell
PS D:\\Project\\Luppy\\llm> & D:/Project/Luppy/llm/.venv/Scripts/Activate.ps1
(.venv) PS D:\\Project\\Luppy\\llm> Invoke-RestMethod -Uri "<http://localhost:8000/analyze>" `  -Method POST `  -ContentType "application/json" `  -Body '{"shape":"rectangle","color":"blue","context":"메모 박스"}'

  ok recommendations
  -- ---------------
True {1. ì´ ëíì ì¬ê°íì ì미íë©°, ì¼ë°ì ì¼ë¡ ë¤ìí UI...

image.png