본문 바로가기

Getting started with LangChain - 대형 언어 모델과 함께 작업하는 강력한 도구(Streamlit)

출입금지 발행일 : 2023-06-06

Getting started with LangChain - 대형 언어 모델과 함께 작업하는 강력한 도구

Streamlit 프런트엔드 내에서 OpenAI GPT3 언어 모델과 LangChain의 SimpleSequentialChain을 사용하여 웹 애플리케이션 구축하기.

langchain
streamlit

 

 

랭체인이란 무엇인가요?

LangChain은 대규모 언어 모델(LLM)로 작업하는 데 사용할 수 있는 강력한 도구입니다. LLM은 본질적으로 매우 일반적이기 때문에 많은 작업을 효과적으로 수행할 수 있지만, 깊은 도메인 지식이나 전문성이 필요한 질문이나 작업에 대한 구체적인 답변을 제공하지 못할 수도 있습니다. 예를 들어 의학이나 법률과 같은 특정 분야에 대한 질문에 답하기 위해 LLM을 사용하고자 한다고 가정해 보겠습니다. LLM은 해당 분야에 대한 일반적인 질문에는 답변할 수 있지만, 전문 지식이나 전문성이 필요한 세부적이거나 미묘한 답변은 제공하지 못할 수 있습니다.

 

왜 LangChain이 필요할까요?

이러한 한계를 해결하기 위해 LangChain은 텍스트 말뭉치를 청크 또는 요약으로 분해하여 벡터 공간에 포함시키고, 질문이 있을 때 유사한 청크를 검색하여 전처리하는 유용한 접근 방식을 제공합니다. 이러한 전처리, 실시간 수집, LLM과의 상호 작용 패턴은 일반적이며 코드 및 시맨틱 검색과 같은 다른 시나리오에서도 사용할 수 있습니다. LangChain은 이러한 조각들을 구성하는 과정을 단순화하는 추상화를 제공합니다. 이러한 "신속한 배관"은 매우 중요하며, LLM이 더욱 강력해지고 더 많은 데이터를 적시에 제공해야 하는 상황에 따라 점점 더 중요해질 것입니다.

 

LangChain의 일반적인 사용 사례에 대한 자세한 내용은 문서 또는 GitHub 리포지토리를 통해 확인할 수 있습니다. 이 패키지에 대해 더 넓은 관점을 가질 것을 적극 권장합니다.

 

LangChain + OpenAI + Streamlit으로 데모 웹앱 구축하기

이제 실제 사용 사례에서 LangChain의 아이디어를 구현해 보겠습니다. 그러면 빠르게 이해하는 데 도움이 될 것입니다!

하지만 그 전에! LangChain과 OpenAI GPT-3 모델을 사용하여 Streamlit 웹 앱을 구축 할 것이므로 몇 가지 종속성을 설치해야합니다.

# Dependencies to install 

pip install streamlit 
pip install langchain
pip install openai
  • Streamlit : 은 데이터 과학 웹 앱 구축에 널리 사용되는 Python 라이브러리입니다.
  • OpenAI : 는 OpenAI의 GPT-3 언어 모델에 대한 액세스를 제공합니다.

 

웹 앱 빌드

1. 라이브러리 가져오기

여기서는 필요한 패키지를 가져오는 것부터 시작합니다. 또한 langchain 패키지에서 세 가지 클래스를 가져옵니다: LLMChain, SimpleSequentialChain, PromptTemplate입니다. 이 클래스들은 언어 모델 체인을 정의하고 실행하는 데 사용됩니다.

import streamlit as st # import the Streamlit library
from langchain.chains import LLMChain, SimpleSequentialChain # import LangChain libraries
from langchain.llms import OpenAI # import OpenAI model
from langchain.prompts import PromptTemplate # import PromptTemplate

2. 앱의 기본 설정 (헤더, 서브 헤더 등...)

# Set the title of the Streamlit app
st.title("✅ What's TRUE  : Using LangChain `SimpleSequentialChain`")

# Add a link to the Github repository that inspired this app
st.markdown("Inspired from [fact-checker](https://github.com/jagilley/fact-checker) by Jagiley")

3. 프런트엔드 사용자와 상호 작용하기 위한 입력 위젯(API 키, 질문 위젯...)

# If an API key has been provided, create an OpenAI language model instance
if API:
    llm = OpenAI(temperature=0.7, openai_api_key=API)
else:
    # If an API key hasn't been provided, display a warning message
    st.warning("Enter your OPENAI API-KEY. Get your OpenAI API key from [here](https://platform.openai.com/account/api-keys).\n")

또한 사용자가 질문을 입력할 수 있는 입력 위젯을 제공해야 합니다.

# Add a text input box for the user's question
user_question = st.text_input(
    "Enter Your Question : ",
    placeholder = "Cyanobacteria can perform photosynthetsis , are they considered as plants?",
)

3. 체인  작동

# Generating the final answer to the user's question using all the chains
if st.button("Tell me about it", type="primary"):
    # Chain 1: Generating a rephrased version of the user's question
    template = """{question}\n\n"""
    prompt_template = PromptTemplate(input_variables=["question"], template=template)
    question_chain = LLMChain(llm=llm, prompt=prompt_template)

    # Chain 2: Generating assumptions made in the statement
    template = """Here is a statement:
        {statement}
        Make a bullet point list of the assumptions you made when producing the above statement.\n\n"""
    prompt_template = PromptTemplate(input_variables=["statement"], template=template)
    assumptions_chain = LLMChain(llm=llm, prompt=prompt_template)
    assumptions_chain_seq = SimpleSequentialChain(
        chains=[question_chain, assumptions_chain], verbose=True
    )

    # Chain 3: Fact checking the assumptions
    template = """Here is a bullet point list of assertions:
    {assertions}
    For each assertion, determine whether it is true or false. If it is false, explain why.\n\n"""
    prompt_template = PromptTemplate(input_variables=["assertions"], template=template)
    fact_checker_chain = LLMChain(llm=llm, prompt=prompt_template)
    fact_checker_chain_seq = SimpleSequentialChain(
        chains=[question_chain, assumptions_chain, fact_checker_chain], verbose=True
    )

    # Final Chain: Generating the final answer to the user's question based on the facts and assumptions
    template = """In light of the above facts, how would you answer the question '{}'""".format(
        user_question
    )
    template = """{facts}\n""" + template
    prompt_template = PromptTemplate(input_variables=["facts"], template=template)
    answer_chain = LLMChain(llm=llm, prompt=prompt_template)
    overall_chain = SimpleSequentialChain(
        chains=[question_chain, assumptions_chain, fact_checker_chain, answer_chain],
        verbose=True,
    )

    # Running all the chains on the user's question and displaying the final answer
    st.success(overall_chain.run(user_question))

SimpleSequentialChain은 여러 연산 체인을 결합하여 파이프라인을 실행합니다. 여기서는 팩트 체커 파이프라인을 구축하기 위해 네 가지 체인을 사용하고 있습니다.

반응형

댓글