본문 바로가기

IT/python

랭체인을 이용한 챗봇 예제

반응형

출처 : 진짜챗GPT API 활용법

 

책에 있는 소스를 그대로 하면 경고가 많이 떨어져서 =ㅁ=

경고에있는 문구를 참고로해서 수정한 소스 입니다!

 

1. 윈도우에서 하면 벡터db용 텍스트도 utf-8 케릭터셋 관련 오류가 발생해서 wsl 를 이용해 우분투 환경해서 실행하면 잘됩니다!

 

2. 첨부된 requirement.txt 파일을 이용해서 필수 모듈을 설치하세요!

requirement.txt
0.00MB

 

python3 -m venv .venv

. .venv/bin/activate

pip install -r requirement.txt

 

3. 책에 있는 벡터소스용 txt 파일을 같은 위치에 둡니다.

 

4. 아래 파일을 실행하면 됩니다.

import os
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import ChatOpenAI
from langchain.chains import RetrievalQA
from langchain_community.document_loaders import TextLoader
from langchain_community.document_loaders import DirectoryLoader
from collections import Counter

import gradio as gr

os.environ["OPENAI_API_KEY"] = "충천후OPENAPI키생성하여사용"
loader = DirectoryLoader('.', glob="*.txt", loader_cls=TextLoader)
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
texts = text_splitter.split_documents(documents)

embedding = OpenAIEmbeddings()
vectordb = Chroma.from_documents(documents=texts, embedding=embedding)
retriever = vectordb.as_retriever(search_kwargs={"k":2})

qa_chain = RetrievalQA.from_chain_type(
	llm=ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0),
	chain_type="stuff",
	retriever=retriever,
	return_source_documents=True)

#인터페이스 생성
with gr.Blocks() as demo:
	chatbot = gr.Chatbot(label="청년정책챗봇")
	msg = gr.Textbox(label="질문해주세요!")
	clear = gr.Button("대화 초기화")

	def respond(message, chat_history):
		result = qa_chain(message)
		bot_message = result['result']
		bot_message += ' # sources :'

		#답변 출처
		for i, doc in enumerate(result['source_documents']):
			bot_message += '[' + str(i+1) + '] ' + doc.metadata['source'] + ' '
		# 채팅 기록 사용자 메시지, 봇 응답 추가
		chat_history.append((message, bot_message))
		return "", chat_history

	msg.submit(respond, [msg, chatbot], [msg, chatbot])
	clear.click(lambda: None, None, chatbot, queue=False)

demo.launch(debug=True)

 

실행 모습입니다!

gradio 라는 모듈이 참 좋군요!

간단한 챗봇 개발에 인터페이스 만드는 용도로 좋네요~

Quickstart (gradio.app)

 

Quickstart

A Step-by-Step Gradio Tutorial

www.gradio.app

 

이제 회사내에서 규정을 학습시킨후 이용해 봐야 겠군요 흐흐흐!

반응형