diff --git a/ai-server/backend/ai/embedding.py b/ai-server/backend/ai/embedding.py index 4f1a98a..0ac04b9 100644 --- a/ai-server/backend/ai/embedding.py +++ b/ai-server/backend/ai/embedding.py @@ -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}", -) \ No newline at end of file +) + +ollama_embedding = OllamaEmbeddings(model="nomic-embed-text-v2-moe") \ No newline at end of file diff --git a/ai-server/backend/ai/local_llm.py b/ai-server/backend/ai/local_llm.py new file mode 100644 index 0000000..b0b32ee --- /dev/null +++ b/ai-server/backend/ai/local_llm.py @@ -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") \ No newline at end of file diff --git a/ai-server/backend/graph/graph.py b/ai-server/backend/graph/graph.py deleted file mode 100644 index e69de29..0000000 diff --git a/ai-server/backend/main.py b/ai-server/backend/main.py index 35a9c93..a660c99 100644 --- a/ai-server/backend/main.py +++ b/ai-server/backend/main.py @@ -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) \ No newline at end of file +app.include_router(npc_router) +app.include_router(skill_router) \ No newline at end of file diff --git a/ai-server/backend/prompts/prompt.py b/ai-server/backend/prompts/prompt.py deleted file mode 100644 index e69de29..0000000 diff --git a/ai-server/backend/routers/npc_router.py b/ai-server/backend/routers/npc_router.py new file mode 100644 index 0000000..5583b30 --- /dev/null +++ b/ai-server/backend/routers/npc_router.py @@ -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} \ No newline at end of file diff --git a/ai-server/backend/routers/router.py b/ai-server/backend/routers/router.py deleted file mode 100644 index e69de29..0000000 diff --git a/ai-server/backend/routers/skill_router.py b/ai-server/backend/routers/skill_router.py new file mode 100644 index 0000000..5583b30 --- /dev/null +++ b/ai-server/backend/routers/skill_router.py @@ -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} \ No newline at end of file diff --git a/ai-server/backend/schemas/basic_schema.py b/ai-server/backend/schemas/basic_schema.py new file mode 100644 index 0000000..feb36ee --- /dev/null +++ b/ai-server/backend/schemas/basic_schema.py @@ -0,0 +1,4 @@ +from pydantic import BaseModel + +class QuestionRequest(BaseModel): + question : str \ No newline at end of file diff --git a/ai-server/backend/schemas/schema.py b/ai-server/backend/schemas/schema.py deleted file mode 100644 index e69de29..0000000 diff --git a/ai-server/backend/services/llm_service.py b/ai-server/backend/services/llm_service.py new file mode 100644 index 0000000..448a540 --- /dev/null +++ b/ai-server/backend/services/llm_service.py @@ -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 diff --git a/ai-server/backend/services/service.py b/ai-server/backend/services/service.py deleted file mode 100644 index e69de29..0000000