수정 - AI 및 fastAPI 초기 구조 셋팅

This commit is contained in:
2026-06-22 18:20:16 +09:00
parent 3a76b24df0
commit 1face1e216
12 changed files with 63 additions and 31 deletions
+4 -1
View File
@@ -1,9 +1,12 @@
from langchain_ibm import WatsonxEmbeddings
from backend.config.settings import settings
from langchain_ollama import OllamaEmbeddings
watson_embedding = WatsonxEmbeddings(
model_id="ibm/granite-embedding-278m-multilingual",
url=f"{settings.watsonx_url}",
api_key=f"{settings.watsonx_api_key}",
project_id=f"{settings.watsonx_project_id}",
)
)
ollama_embedding = OllamaEmbeddings(model="nomic-embed-text-v2-moe")
+6
View File
@@ -0,0 +1,6 @@
from langchain_ollama import ChatOllama
# 로컬 LLM
qwen_llm = ChatOllama(model="qwen3.5:4b", temperature=0)
exaone_llm = ChatOllama(model="exaone3.5:2.4b", temperature=0)
gemma_llm = ChatOllama(model="gemma4:e2b")
View File
+15 -30
View File
@@ -1,44 +1,29 @@
from fastapi import FastAPI
from starlette.staticfiles import StaticFiles
from contextlib import asynccontextmanager
from backend.routers.stock_router import router as stock_router
from backend.routers.npc_router import router as npc_router
from backend.routers.skill_router import router as skill_router
from backend.repository.db_init import Base, SessionLocal, engine
# from backend.routers.evalu_router import router as evalu_router
# from backend.routers.assistant_router import router as assistant_router
# from backend.routers.call_router import router as call_router
# from backend.repository.seed import seed_customers
@asynccontextmanager
async def lifespan(app: FastAPI):
print("서버 시작")
# Base 에 등록된 모든 모델에 테이블 자동 생성
Base.metadata.create_all(bind=engine)
print("[DB] 테이블 생성 완료 (또는 이미 존재)")
yield
print("서버 종료")
# @asynccontextmanager
# async def lifespan(app: FastAPI):
# print("서버 시작")
#
# # Base 에 등록된 모든 모델에 테이블 자동 생성
# Base.metadata.create_all(bind=engine)
# print("[DB] 테이블 생성 완료 (또는 이미 존재)")
#
# yield
# print("서버 종료")
# app = FastAPI()
# app = FastAPI(title="상담 LLM", version="1.0", lifespan=lifespan)
app = FastAPI(title="$ Stock AI", version="1.0", lifespan=lifespan, description="""
#### $주식 AI 분석 FastAPI + LangGraph + yfinance + ChromaDB
### 주요 기능
| 번호 | 기능 | 엔드포인트 |
| --- | --- | --- |
|1 | 기업 종합 분석 | 'POST /api/stock/analysis'
|2 | 투자 의견 조회 | 'GET /api/stock/opinion/{analysis_id}'
""",
)
app = FastAPI(title="AI npc", version="1.0", description="던전 입구를 지키는 문지기 npc",)
# static 폴더 지정
# app.mount("/static", StaticFiles(directory="backend/static"), name="static")
# 라우터 등록
app.include_router(stock_router)
# app.include_router(assistant_router)
# app.include_router(evalu_router)
app.include_router(npc_router)
app.include_router(skill_router)
View File
+13
View File
@@ -0,0 +1,13 @@
from fastapi import APIRouter, Request, UploadFile
from backend.services.llm_service import question_and_answer
from backend.schemas.basic_schema import QuestionRequest
from fastapi.responses import StreamingResponse
router = APIRouter(prefix="/npc")
# http://127.0.0.1:8000/npc/question
@router.post("/question")
async def question(req: QuestionRequest):
answer = question_and_answer(req.question)
return {"message" : answer}
View File
+13
View File
@@ -0,0 +1,13 @@
from fastapi import APIRouter, Request, UploadFile
from backend.services.llm_service import question_and_answer
from backend.schemas.basic_schema import QuestionRequest
from fastapi.responses import StreamingResponse
router = APIRouter(prefix="/npc")
# http://127.0.0.1:8000/npc/question
@router.post("/question")
async def question(req: QuestionRequest):
answer = question_and_answer(req.question)
return {"message" : answer}
@@ -0,0 +1,4 @@
from pydantic import BaseModel
class QuestionRequest(BaseModel):
question : str
View File
@@ -0,0 +1,8 @@
from backend.ai.llm import watson_llm
# LLM 모델 통신
# 데이터베이스 통신
def question_and_answer(question):
response = watson_llm.invoke(question)
return response.content