콘텐츠로 이동

회의실 예약 AI 에이전트 만들기

실행 준비

!pip install openai
!pip install gradio

대화를 통해 회의실 예약에 필요한 정보 얻기

from openai import OpenAI
import gradio as gr

client = OpenAI()

def predict(message, history):
    history_openai_format = []
    history_openai_format.append({"role": "user", "content":"지시사항: 회의실 예약을 위해 주어진 정보가 수집될 때 까지 대화를 요청해줘."})
    history_openai_format.append({"role": "user", "content":"지시사항: 회의실 예약날짜와 예약시간을 알때 까지 대화를 요청해줘."})
    history_openai_format.append({"role": "user", "content":"지시사항: 예약날짜와 예약시간을 모두 알면 질문이 완료되었음을 알려줘."})

    for human, assistant in history:
        history_openai_format.append({"role": "user", "content": human })
        history_openai_format.append({"role": "assistant", "content":assistant})

    history_openai_format.append({"role": "user", "content": message})

    completion = client.chat.completions.create(
        model='gpt-4o-mini',
        messages= history_openai_format,
        temperature=1.0)

    response = completion.choices[0].message;
    return response.content


with gr.Blocks() as demo:
    gr.Markdown(
    """
    # AI 정보 수집 챗봇
    제시된 질문에 답해 주세요!
    """)
    gr.ChatInterface(predict)
demo.launch()

함수 호출 정의하기

from openai import OpenAI
import gradio as gr

client = OpenAI()

def predict(message, history):
    history_openai_format = []
    history_openai_format.append({"role": "user", "content":"지시사항: 회의실 예약을 위해 주어진 정보가 수집될 때 까지 대화를 요청해줘."})
    history_openai_format.append({"role": "user", "content":"지시사항: 회의실 예약날짜와 예약시간을 알때 까지 대화를 요청해줘."})
    history_openai_format.append({"role": "user", "content":"지시사항: 예약날짜와 예약시간을 모두 알면 meeting_reservation 함수를 호출해 주고, 그렇지 않으면 계속 질문해줘."})

    for human, assistant in history:
        history_openai_format.append({"role": "user", "content": human })
        history_openai_format.append({"role": "assistant", "content":assistant})

    history_openai_format.append({"role": "user", "content": message})

    completion = client.chat.completions.create(
        model='gpt-4o-mini',
        messages= history_openai_format,
        temperature=1.0,
        functions=[
          {
            "name": "meeting_reservation",
            "description": "회의실 예약을 처리하는 함수",
            "parameters": {
                "type": "object",
                "properties": {
                    "reserv_date": {
                        "type": "string",
                        "description": "회의실 예약 날짜",
                    },
                    "reserv_time": {
                        "type": "string",
                        "description": "회의실 예약 시간",
                    },
                },
                "required": ["reserv_date", "reserv_time"]
            }
          }
        ]
        )

    response = completion.choices[0].message;
    print(response)

    if completion.choices[0].message.function_call:
      arguments = completion.choices[0].message.function_call.arguments
      function_name = completion.choices[0].message.function_call.name
      return arguments
    else:
      return response.content


with gr.Blocks() as demo:
    gr.Markdown(
    """
    # AI 정보 수집 챗봇
    제시된 질문에 답해 주세요!
    """)
    gr.ChatInterface(predict)
demo.launch()

함수 호출 내역 확인하기

from openai import OpenAI
import gradio as gr
import json

client = OpenAI()

def predict(message, history):
    history_openai_format = []
    history_openai_format.append({"role": "user", "content":"지시사항: 회의실 예약을 위해 주어진 정보가 수집될 때 까지 대화를 요청해줘."})
    history_openai_format.append({"role": "user", "content":"지시사항: 회의실 예약날짜와 예약시간을 알때 까지 대화를 요청해줘."})
    history_openai_format.append({"role": "user", "content":"지시사항: 예약날짜와 예약시간을 모두 알면 meeting_reservation 함수를 호출해 주고, 그렇지 않으면 계속 질문해줘."})

    for human, assistant in history:
        history_openai_format.append({"role": "user", "content": human })
        history_openai_format.append({"role": "assistant", "content":assistant})

    history_openai_format.append({"role": "user", "content": message})

    completion = client.chat.completions.create(
        model='gpt-4o-mini',
        messages= history_openai_format,
        temperature=1.0,
        functions=[
          {
            "name": "meeting_reservation",
            "description": "회의실 예약을 처리하는 함수",
            "parameters": {
                "type": "object",
                "properties": {
                    "reserv_date": {
                        "type": "string",
                        "description": "회의실 예약 날짜",
                    },
                    "reserv_time": {
                        "type": "string",
                        "description": "회의실 예약 시간",
                    },
                },
                "required": ["reserv_date", "reserv_time"]
            }
          }
        ]
        )

    response = completion.choices[0].message;
    print(response)

    if completion.choices[0].message.function_call:
      arguments = completion.choices[0].message.function_call.arguments
      function_name = completion.choices[0].message.function_call.name

      if function_name == "meeting_reservation":
        arguments_obj = json.loads(arguments)
        reserv_date = arguments_obj.get('reserv_date')
        reserv_time = arguments_obj.get('reserv_time')

      return "시스템 예약 정보: " + reserv_date + " / " + reserv_time
    else:
      return response.content


with gr.Blocks() as demo:
    gr.Markdown(
    """
    # AI 정보 수집 챗봇
    제시된 질문에 답해 주세요!
    """)
    gr.ChatInterface(predict)
demo.launch()