개인 과제 주제: My BeF - a running mate for your book reading
설명: 휴먼이 선택한 책 (학습서, 일반 서적)에 대한 PDF 파일을 입력받아 휴먼과 책의 내용에 대해 의견을 주고 받거나, 주요 학습 내용을 요약하거나, 퀴즈를 내거나 해서 선택한 책을 이해하고 소화하는데 도움을 주는 베스트 프렌드
어딘가이 이미 있을법한 ..
학습 내용
참고 영상: LangChain 의 거의 모든것, 모두의AI, https://www.youtube.com/watch?v=WWRCLzXxUgs&t=18s
LangChain 홈페이지에서의 소개 문구: LangChain은 언어 모델로 구동되는 애플리ㅔㅋ이션을 개발하기 위한 프레임워크로서 가장 강력하고 차별화된 어프리케아ㅣ션은 API 을 통해 언어 모델을 호출할 뿐만 아니라 이를 통해 개발될것으로 믿습니다.
데이터 인식: 언어 모델을 다른 데이터 소스에 연결합니다
에이전트 기능: 언어 모델이 환경과 상호 작용할 수 있도록 합니다.
ChatGPT 한계
정보 접급 제한: ChatGPT(GPT-3.5기준)는 2021년까지의 데이터를 학습한 LLM(초거대언어모델)이므로, 그 이후의 정보에 대해서는 답변을 하지 못한다. 것짓된 답변을 제공할수도 있다
토큰 제한: ChatGPT에서 제공하는 모델인 GPT-3.5와 GPT-4 각각 입력할수 있는 문장의 길이가 제한된다
환각현상(Hallucination) : Fact 에 대한 질문을 했을 때 엉뚱한 대답을 하거나 거짓말을 하는 경우가 많다
ChatGPT 한계의 해결 방법들
Fine-tunning: 기존 딥러닝 모델의 weight 를 조정하여ㅓ 원하는 용도의 모델로 업데이트 한다
N-shot Learning: 0개-n개의 출력 예시를 제시하여 딥러닝이 용도에 알맞는 출력을 하도록 조정한다.
In-context Learning: 문맥을 제시하고 이 문맥 기반으로 모델이 출력하도록 조정합니다.
LangChain 은 in-context learning 기반으로 chatgpt 의 한계를 보완해주고 있습니다.
LangChain 을 통한 ChatGPT 보완
정보 접근 제한: vectorstore 기반 정보 탐색 혹은 Agent 활용한 검색 결합
토큰 제한: TextSplitter를 활용한 문서 분할
환각현상: 주어진 문서에 대해서만 답하도록 prompt 입력
LangChain 구조
LLM: 초거대 언어모델로 생성 모델의 엔진과 같은 역할을 하는 핵심 구성 요소
Prompts: LLM 지시 명령문
Index: LLM이 문서를 쉽게 탐색할 수 있도록 구조화 하는 모듈
Memory: 채팅 이력을 기억하도록 하여, 이를 기반으로 대화가 가능하도록 하는 모듈
Chain: LLM 체인을 형성하여 연속적인 LLM 호출이 가능하도록 하는 핵심 구성 요소
Agent: LLM 이 기존 Prompt Template 으로 수행할 수 없는 작업을 가능케하는 모듈
예제: PDF 챗봇
클론 코딩.
from langchain.utilities import SerpAPIWrapper
from langchain.agents import Tool
from langchain.tools.file_management.write import WriteFileTool
from langchain.tools.file_management.read import ReadFileTool
import os
from dotenv import load_dotenv
from langchain.vectorstores import FAISS
from langchain.docstore import InMemoryDocstore
from langchain.embeddings import OpenAIEmbeddings
import faiss
from langchain_experimental.autonomous_agents import AutoGPT
from langchain.chat_models import ChatOpenAI
from langchain.memory.chat_message_histories import FileChatMessageHistory
load_dotenv()
# get from serpapi key from https://serpapi.com/manage-api-key
# store the Key=Value in into .env file
serpapi_api_key = os.getenv('SERPAPI_API_KEY')
print(serpapi_api_key)
search = SerpAPIWrapper(serpapi_api_key=serpapi_api_key)
tools = [
Tool(
name="search",
func=search.run,
description="userful for when you need to answer question about current event. You should ask targeted questions",
),
WriteFileTool(),
ReadFileTool(),
]
# embeding and vectorstore
embeddings_model = OpenAIEmbeddings()
embedding_size = 1536
index = faiss.IndexFlatL2(embedding_size)
vectorstore = FAISS(embeddings_model.embed_query,
index,
InMemoryDocstore({}), {})
# agent
agent = AutoGPT.from_llm_and_tools(
ai_name="Tom",
ai_role="Assistant",
tools=tools,
llm=ChatOpenAI(temperature=0),
memory=vectorstore.as_retriever(),
)
agent.chain.verbose = True
agent.run(["write a weather report for Seoul in Korea today"])