Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- PDF#챗봇검색#서비스#GPT4#PGT3.5#GPT#랭체인#챗봇#CHATBOT#LLM#문서검색
- firebase#message#메세지#플러터#안드로이드
- flutter#sqlite#chatGPT#
- 마이봇#챗봇
- postgres#vector
- ax5#tree#grid#단계별 펼치기# depth #시트메타
- flutter#채팅창@메모창#url링크#날짜추가
- flutter#ios#앱개발#마이봇#
- 플러터#sms#mms#문자보내기
- 마이봇#chatgpt#ai#인공지능
- 쇼핑몰관리시스템#매입관리#시트메타#매입채널#엑셀업로드
- fcm#메세지전송#안드로이드메세지#플러터메세지전송
- 로우코드#lowcode#erp#관리시스템#시트메이트#시트메타#엑셀업로드#엑셀다운로드#그리드#데이터관리#생산관리시스템#로그관리#히스토리#입력체크
- 커피#그라인더#통돌이 오픈 #로스팅#드립커피#생두#원두
- #창작#SNS#스포츠#반려동물#연애#과제#레시피#활동#건강#운세#글쓰기#비즈니스 #AI비서#챗GPT#CHATGPT
- mediasaop#webrtc#미디어서버#
- 마이봇#pdf챗봇#상담챗봇#faq챗봇#chatgpt#랭체인#llm
- PDF검색#PDF검색챗봇#NEXTJS#스터디#스타트업#랭체이#langchain#prisma#sqlite#
- flutterfire configure#파이어베이스#플러터
- 마이봇#아이폰#아이폰심사#IT고시#
- 임대사업자#리걸테크#legaltech#마이봇#챗봇#법률챗봇#임대사업자챗봇#chatgpt#
- 시트메타#관리시스템#테이블연동#품목관리
- 플러터#
- 펫버틀러#서버연동#프로필등록#로그인서버연동#이미지#동영상#업로드용 화면#앱개발#플러터#반려생활#로딩바#loading bar#
- 마이봇#핸드폰대체#
- figma#flutter#dhwise#피그마#플러터#피그마 to 플러터 #figma to flutter
- 마이봇#API 설정
- 로우코드#ERP#관리시스템#상품관리#선택박스#자동화프로그램
- 광동온더그린#프랜즈#가상CC#스크린골프#
- 마이봇#문서챗봇#PDF#TEXT#유투브#챗봇만들기#랭체인# langchain#벡터데이터#자료검색#챗GPT#GPT4#챗지피티
Archives
- Today
- Total
혼자서 앱 만드는 개발자 함께하는 AI 세상
입력 메시지에 대해 Llama 모델을 사용하여 인텐트를 도출 본문
반응형
1. 입력 메시지에 대해 Llama 모델을 사용하여 인텐트를 도출합니다.
2. 도출된 인텐트에 따라 필요한 슬롯(Slots)을 추출합니다.
3. RAG (Retrieval-Augmented Generation) 방식으로 임베딩된 데이터에서 관련 정보를 검색합니다.
4. Llama 모델에게 최종 답변을 생성하도록 요청합니다.
# 필요한 모듈 임포트
from langchain.embeddings import OpenAIEmbeddings # type: ignore
from langchain.chat_models import ChatOpenAI # type: ignore
from langchain.schema import AIMessage, HumanMessage, SystemMessage # type: ignore
import os
from dotenv import load_dotenv
from langchain_community.embeddings import OllamaEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain_community.llms import Ollama
from langchain.document_loaders import PyPDFLoader
from langchain.chains import ConversationalRetrievalChain
from langchain.prompts import PromptTemplate
# .env 파일에서 API 키 로드 (필요 시 사용)
# load_dotenv()
# OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
# Ollama를 통해 Llama 3.2 모델 로드
llm = Ollama(model="llama3.2")
# Ollama 임베딩 인스턴스 생성
embeddings = OllamaEmbeddings(model="mxbai-embed-large")
# PDFLoader를 사용하여 데이터 로드
pdf_loader = PyPDFLoader(file_path='/Users/skpark/dev/git/ollama/price_carnival.pdf')
data = pdf_loader.load()
# 문서를 작은 조각으로 분할
text_splitter = CharacterTextSplitter.from_tiktoken_encoder(chunk_size=500, chunk_overlap=50)
docs = text_splitter.split_documents(data)
# 분할된 문서에서 텍스트 추출
texts = [doc.page_content for doc in docs]
# Chroma 벡터 스토어에 문서 임베딩 저장
vector_store = Chroma.from_documents(docs, embedding=embeddings)
# 채팅 모델 인스턴스 생성 (필요 시 OpenAI 사용)
# chat = ChatOpenAI(model_name='gpt-4', temperature=0.5)
# RAG 검색을 위한 Conversational Retrieval Chain 설정
retriever = vector_store.as_retriever(search_type="similarity", search_kwargs={"k": 3})
### Step 1: LLM을 사용하여 인텐트 도출 ###
def get_intent_from_input(user_input):
intent_prompt = PromptTemplate(
input_variables=["user_input"],
template="""
당신은 매우 뛰어난 인공지능 비서입니다.
사용자가 다음과 같은 입력을 주었습니다: "{user_input}"
이 입력으로부터 사용자가 무엇을 원하는지 인텐트를 추출해주세요.
가능한 인텐트는 다음과 같습니다: ["문의", "구매", "정보 요청", "이벤트 참여", "기타"]
만약 알 수 없는 인텐트라면 "기타"라고 답해주세요.
"""
)
prompt_text = intent_prompt.format(user_input=user_input)
intent_response = llm(prompt_text)
return intent_response.strip()
### Step 2: 슬롯 추출 ###
def extract_slots(intent):
slot_prompt = PromptTemplate(
input_variables=["intent"],
template="""
사용자의 인텐트는 "{intent}"입니다.
이 인텐트에 해당하는 주요 슬롯들을 도출해주세요.
예시 슬롯: ["이름", "이메일", "제품명", "수량", "날짜", "장소"]
"""
)
slot_text = slot_prompt.format(intent=intent)
slot_response = llm(slot_text)
return slot_response.strip()
### Step 3: RAG (임베딩된 데이터 검색) ###
def search_with_rag(user_input):
# 사용자 입력을 벡터로 임베딩하고 유사한 문서 검색
query_vector = embeddings.embed_query(user_input)
docs = retriever.get_relevant_documents(user_input)
# 검색된 문서에서 내용을 요약
summary_prompt = """
다음 문서들에서 사용자 질문에 대한 답을 찾아주세요:
{docs}
"""
summary_text = summary_prompt.format(docs=[doc.page_content for doc in docs])
return summary_text
### Step 4: 최종 LLM 답변 생성 ###
def generate_final_answer(intent, slots, search_result):
answer_prompt = PromptTemplate(
input_variables=["intent", "slots", "search_result"],
template="""
사용자의 인텐트는 "{intent}"입니다.
추출된 슬롯 정보: {slots}
관련 정보: {search_result}
이 모든 정보를 사용하여 사용자에게 최적의 답변을 제공해주세요.
"""
)
answer_text = answer_prompt.format(
intent=intent, slots=slots, search_result=search_result
)
response = llm(answer_text)
return response.strip()
### 전체 파이프라인 실행 ###
def handle_user_input(user_input):
# Step 1: 인텐트 도출
intent = get_intent_from_input(user_input)
print(f"[도출된 인텐트]: {intent}")
# Step 2: 슬롯 추출
slots = extract_slots(intent)
print(f"[추출된 슬롯]: {slots}")
# Step 3: RAG 검색
search_result = search_with_rag(user_input)
print(f"[검색 결과]: {search_result}")
# Step 4: 최종 답변 생성
final_answer = generate_final_answer(intent, slots, search_result)
print(f"[최종 답변]: {final_answer}")
return final_answer
# 사용자 입력 예시
user_input = "다음 주에 열리는 가격 할인 행사에 대해 알려주세요."
handle_user_input(user_input)
이를 위해 다음 단계를 포함하는 코드 예시를 작성합니다.
코드 설명
1. 인텐트 도출:
• 사용자의 입력에서 인텐트를 도출하기 위해 LLM을 사용합니다.
2. 슬롯 추출:
• 도출된 인텐트에 따라 필요한 슬롯 정보를 추출합니다.
3. RAG 검색:
• 임베딩된 데이터를 활용하여 유사한 정보를 검색합니다.
4. 최종 답변 생성:
• 인텐트, 슬롯, 검색된 정보에 기반하여 LLM을 사용해 사용자에게 답변을 생성합니다.
추가 설치
다음 명령어로 필요한 라이브러리를 설치하세요:
pip install langchain langchain_community tiktoken pypdf chromadb python-dotenv
이 코드는 PDF에서 정보를 검색하고 LLM을 사용하여 답변을 제공하는 전체 파이프라인을 구성합니다. 필요한 경우 추가 조정을 통해 최적화할 수 있습니다.
728x90
반응형
'마이봇 chat GPT 오픈 프로젝트' 카테고리의 다른 글
슬롯, 인텐트, GPT, RAG가 함께 작동하는 방식 (1) | 2024.11.13 |
---|---|
Chatgpt slot Rag intent 관리 (5) | 2024.11.12 |
firebase php 메세지 보내기 키값생성하고 소스 수정 (3) | 2024.11.03 |
청소닷 앱 일정등록 수정 메인화면 변경 (0) | 2024.09.30 |
플러터 안드로이드 버전 문제 해결 (0) | 2024.09.30 |
Comments