23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
OpenLLM 스터디 모임 경과를 정리하면서 현재까지 구현된 RAG 챗봇 내용을 함께 공유드립니다.
ollama 로 모델이 배포되지 않은 경우 vllm 사용
pre/post retriever 부분에서 시간 지연이 큰 경우 정상동작하는 다른 멤버의 코드 참고
langchain 과 LlamaIndex 중 langchain 의 평가가 좋지 않은 것으로 보이지만 개념 이해를 위해 langchain 사용 가능
개인별로 업무에서 적용할 RAG 챗봇 개념 공유
완성된 챗봇 초안 코드 공유
코드에 대한 의견 공유
OpenLLM 스터디 4차 과제를 수행하였습니다. 구현에 적용한 RAG 컴포넌트 들은 다음과 같습니다.
LLM - llama-2-7b-chat.Q4_K_M.gguf
Embedding model - BAAI/bge-m3
Rerank model - Dongjin-kr/ko-reranker
Vector search library - FAISS
Orchestration tool - LangChain
Chat UI - Streamlit
Embedding 자료 - Nexo_quickguide.pdf (현대자동차 웹 사이트에서 다운로드 받음)
OS - Windows 11
LLM Inference - CPU
LLM Server - LangServe, FastAPI, Uvicorn 활용해 분리
python - 3.8.19 (conda 환경)
python package - requirements.txt 첨부함
기존 코드 동일하며, 아래 사항을 추가하였습니다.
from langserve import RemoteRunnable
# Request query to Remote LLM using FastAPI
def generate_response_remote(query):
# single-query retriever 셋팅
retriever = load_embedding_singlequery()
#Set-up remote LLM
llm = RemoteRunnable(url="http://localhost:8000/llm")
template = """Use the following pieces of information to answer the user's question.
If you don't know the answer, just say that you don't know, don't try to make up an answer.
Context: {context}
Question: {question}
Only return the Korean answer below and nothing else.
Korean answer: """
prompt = PromptTemplate(
template=template,
input_variables=['context', 'question'])
qa_chain = (
{
'context': retriever,
'question': RunnablePassthrough()
}
| prompt
| llm
)
query = query
print('input query: ' + query)
#generate answer
output = qa_chain.invoke(query)
print(output)
return output
st.title("OpenLLM AI Chatbot")
user_input = st.text_input("여기에 질문을 입력하세요")
if user_input:
#response = generate_response(user_input)
#response = generate_response_rerank(user_input)
#response = generate_response_multiquery(user_input)
response = generate_response_remote(user_input)
st.write("AI Chatbot 답변: ")
st.write(response)여동기 님의 기 구현하신 코드를 많이 참조하였습니다.
from fastapi import FastAPI
from fastapi.responses import RedirectResponse
from langserve import add_routes
from fastapi.middleware.cors import CORSMiddleware
from typing import List, Union
from langserve.pydantic_v1 import BaseModel, Field
from langchain_core.messages import HumanMessage, AIMessage, SystemMessage
# user-defined llm.py
from llm import llm as chain
# Set FastAPI
app = FastAPI()
# Set Cross-Origin Resource Sharing(CORS) config for FastAPI
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
expose_headers = ["*"],
)
# Re-direct to llm server when get event is triggered via chrome browser
@app.get("/")
async def redirect_root_to_llmserver():
return RedirectResponse("/llm/playground")
# Set routes to call llm with LlamaCpp located in llm.py
add_routes(app, chain, path="/llm")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)아래와 같이 정상적으로 LLM 서버가 구동 됨을 확인하였습니다.
LlamaCpp를 이용하여 llama-2-7b-chat.Q4_K_M.gguf 를 로드하였습니다.
연산은 CPU로 설정하였습니다.
추후 Llama-3 8B Instruct 모델로도 테스트 예정입니다.
from langchain_community.llms import LlamaCpp
# LLM 경로 지정
MODEL_PATH = "C:\Work\GenAI\FoundationModel\llama-2–7b-chat\llama-2-7b-chat.Q4_K_M.gguf"
#MODEL_PATH = "C:\Work\GenAI\FoundationModel\Llama-3-8B-Instruct\Meta-Llama-3-8B-Instruct.Q4_K_M.gguf"
llm = LlamaCpp(
model_path=MODEL_PATH,
temperature=0.2,
top_p=1,
max_tokens=3072,
verbose=True,
n_ctx=3072,
)LLM을 분리 후에도 정상적인 결과가 나옴을 확인했습니다.
그런데 결과가 완전히 일관 되지는 않는 것 같습니다.^^;;
성능은 약 5 tokens per second 나왔습니다.
Multi-query retriever 동작 확인
Llama-3로 변경하여 동작 확인
GPU 환경에서의 동작 및 성능 확인
Ragas 프레임워크를 integration 하여 정확도 수치 확인
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.