[8기 랭체인방] MyBef 책 학습을 도와주는 러닝 메이트


개인 과제 주제: 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 챗봇



  1. 클론 코딩.

autogpt.py

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"])
5
1개의 답글

👉 이 게시글도 읽어보세요