AI

태태개발일지 - 간단한 langchain streamlit 코드

태태코 2026. 5. 5. 12:59
반응형

CHAT GPT API 사용

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

user_input = "뉴턴의 만유인력이 뭐야?"
user_input2 = "뉴턴의 캐플러법칙은 뭐야?"
user_input3 = "뉴턴의 가속도의 법칙은 뭐야?"
llm = ChatOpenAI(model_name="gpt-5", temperature=0)

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "꼭 충청도 사투리로 답해."),
        ("user", "{user_input}"),
    ]
)

output_parser = StrOutputParser()
chain = prompt | llm | output_parser
 # response = chain.invoke({"user_input": user_input})
# response = chain.batch([{"user_input": user_input},{"user_input":user_input2},{"user_input":user_input3}])
for response in chain.stream({"user_input": user_input}):
    print(response)

print(response)

 

 

  1. chain.invoke : 바로 한줄 실행
  2. chain.batch : 여러개 실행
  3. chain.stream: 실시간실행
Lanchain의 Fallbacks,RunnableParaller 기능을 통해, 하나의 llm이 안될경우 다른 llm을 사용하는 Fallbacks 기능과, 여러개의 llm을 병렬로 실행하는 RunnableParaller 기능을 제공한다.

 

 

Streamlit

import streamlit as st
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.output_parsers import StrOutputParser
from openai import api_key

def select_model():
    temperature = st.sidebar.slider("Temperature", 0.0, 1.0, 0.5)
    models = ("gpt-4o", "gpt-3.5-turbo")
    model = st.sidebar.radio("Choose a model", models)

    if model == "gpt-4o":
        st.session_state.model_name = "gpt-4o"
        return ChatOpenAI(model_name=st.session_state.model_name, temperature=temperature,api_key=keys)

    elif model == "gpt-3.5-turbo":
        st.session_state.model_name = "gpt-3.5-turbo"
        return ChatOpenAI(model_name=st.session_state.model_name, temperature=temperature, api_key=keys)

def init_message():
    clear_button = st.sidebar.button("Clear Conversation",key="clear")

    if clear_button or "message_history" not in st.session_state:
        st.session_state.message_history = []


def main():

    st.header("ChatGPT")
    st.session_state.llm = select_model()
    init_message()


    # llm = ChatOpenAI(model_name="gpt-5.2", temperature=0,)


    prompt = ChatPromptTemplate.from_messages(
        [
            ("system", "You are a helpful assistant."),
            MessagesPlaceholder(variable_name="history"),
            ("user", "{user_input}"),
        ]
    )

    output_parser = StrOutputParser()

    chain = prompt | st.session_state.llm | output_parser

    if user_input := st.chat_input("Ask a question about the world!"):
       with  st.spinner("Thinking..."):
           response = chain.invoke({"history": st.session_state["message_history"], "user_input": user_input})

           st.session_state["message_history"].append({"role": "user", "content": user_input})
           st.session_state["message_history"].append({"role": "assistant", "content": response})

    for msg in st.session_state["message_history"]:
        st.chat_message(msg["role"]).write(msg["content"])


if __name__ == "__main__":
    main()

 

side bar를 만들어서, 모델과 온도를 변경해가며, 실제 GPT UI를 경험한 것이다.

 

 

반응형