데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      Azure OpenAI Assistant - Part 2

      ZIGI 24.04.25
      1,087 5 0
      DEVOTEE 요약
      이 포스팅은 Azure OpenAI Service의 Assistant 기능과 Code Interpreter를 사용하여 AI가 수학 문제를 해결하는 방법을 소개합니다. Azure OpenAI의 API를 활용하여 'AI 수학 도우미2'라는 Assistant를 생성하고, 사용자의 질문에 대한 답변 과정을 통해 실제 코드가 어떻게 작성되고 실행되는지 설명합니다. 이 과정은 Azure OpenAI를 통해 다양한 문제 해결 및 데이터 분석을 자동화하는 방법을 보여줍니다.
      DEVOTEE 추천 블로그

      Today Keys :   azure, openai, assistant, service, code interpreter


      이번 포스팅에서는 Azure OpenAI Service의 Assistant 기능에 대한 사용법에 대해서 알아봅니다.

      두 번째 포스팅에서는 첫 번째 포스팅에서 Play Ground를 통해서 사용한 Code Interpreter를 코드를 이용해서 사용해 봅니다.


      Azure OpenAI를 사용하기 위한 서비스를 생성합니다.

      먼저 각자의 Azure Open API Key와 Endpoint를 설정하고, 

      API Version은 Azure Open AI의 Assistant를 지원하는 API 버전인 2024-02-15-preview 버전을 사용합니다.

      import os
      import time
      import json
      from openai import AzureOpenAI
      
      client = AzureOpenAI(
          api_key=os.getenv("AZURE_OPENAI_API_KEY"),
          api_version="2024-02-15-preview",                 #Azure OpenAI Assistants를 위한 API 버전
          azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
          )

      다음은 Assistant를 생성합니다.

      본 포스팅에서 'AI 수학 도우미2'라는 Code Interpreter를 사용하는 Assistant를 만듭니다.

      수학 도우미를 위한 적절헌 Instructions를 입력하고, 

      model은 Azure Open AI에서 Assistant를 지원하는 버전인 gpt-4-1106-preview 모델을 사용합니다. 

      참고로, 현재 Azure Open AI에서 Assistant 기능은 Preview이기 때문에 

      패키지에 beta라고 포함되어 있으며, 향후 GA가 된 이후에는 beta가 빠진 패키지 명이 될 것으로 생각됩니다.

      # assistant 생성
      assistant = client.beta.assistants.create(
          name="AI 수학 도우미2",
          instructions="당신은 수학 문제에 답하는 데 도움이 되는 코드를 작성할 수 있는 AI 도우미입니다..",
          tools=[{"type": "code_interpreter"}],  
                       # tools를 dict형태의 Assistant type을 배열 내에 다수 등록 가능.
          model="gpt-4-1106-preview"
      )

      다음은 Assistant와 사용자 간의 대화 세션인 Thread를 생성합니다.

      일종의 대화를 주고 받는 방이라고 보시면 됩니다.

      그리고,  Thread에 실제 대화 내용인 Message를 추가합니다. 

      Message를 추가 할 때의 누구의 메시지인지를 위한 role과 실제 대화내용인 content를 넣고,

      이 대화가 어떤 Assistant와 이뤄질지를 위해서 thread.id를 지정합니다.

      즉, Message를 분리하여 다양한 Assistant와 대화 히스토리를 이어나갈 수도 있습니다.

      # thread 생성
      thread = client.beta.threads.create()
      
      content = "어떤 정사각형의 가로를 3cm, 세로를 2cm만큼 늘였더니 넓이가 처음의 2배가 되었다. 처음 정사각형의 한 변의 길이는?"
      
      # thread에 사용자 message를 추가
      message = client.beta.threads.messages.create(
          thread_id=thread.id,
          role="user",
          content=content
      )

      Thread를 실행하여, Assistant와 대화를 시작하게 합니다.

      "어떤 정사각형의 가로를 3cm, 세로를 2cm만큼 늘였더니 넓이가 처음의 2배가 되었다.

       처음 정사각형의 한 변의 길이는?"

      라는 사용자 대화에 답을 하기 위해 Code Interpreter가 해당 문제를 풀기 위한

      코드를 작성하여, 답을 하게 됩니다.

      전체 동작이 완료까지 시간이 걸리기 때문에 run.status로 상태 값을 확인하고, 

      완료(completed) 될 때까지 기다립니다.

      # thread를 실행한 Assistant 활성화 
      run = client.beta.threads.runs.create(
        thread_id=thread.id,
        assistant_id=assistant.id,
      )
      
      run = client.beta.threads.runs.retrieve(
        thread_id=thread.id,
        run_id=run.id
      )
      
      status = run.status
      
      # Wait till the assistant has responded
      while status not in ["completed", "cancelled", "expired", "failed"]:
          time.sleep(5)
          run = client.beta.threads.runs.retrieve(thread_id=thread.id,run_id=run.id)
          status = run.status

      Assistant의 답변을 확인하기 위해서 Thread에서 message list를 가져옵니다.

      messages = client.beta.threads.messages.list(
        thread_id=thread.id
      )

      전체 message list를 json 형태로 변경해서, dictionary 타입으로 가져옵니다.

      message list에는 기존 대화 내역들이 기록되는 데, 

      앞서 문자를 질의한 사용자의 대화가 있고, Assistant의 답변이 있으면

      가장 최근 대화가 배열의 앞에 위치하게 됩니다.

      따라서, result_dict["data"][0]을 가져옵니다.

      실제 답변을 뽑기 위해서 위치한 내용만 출력합니다.

      result = messages.model_dump_json()
      
      import json
      
      result_dict = json.loads(result)
      print(result_dict["data"][0]["content"][0]["text"]["value"])

      출력결과는 다음과 같습니다. (colab에서 동작 시킨 코드 포함)



      실제 Code Interpreter가 어떤 코드를 작성해서 문제를 풀었는지를 확인 할 수도 있습니다.

      message list에 문제에 사용된 코드를 요청하는 사용자 메시지를 추가합니다.

      그리고, 다시 대화를 시작합니다.

      message = client.beta.threads.messages.create(
          thread_id=thread.id,
          role="user",
          content="이 문제를 풀기 위해서 사용한 코드를 알려줘"
      )
      
      run = client.beta.threads.runs.create(
        thread_id=thread.id,
        assistant_id=assistant.id
      )
      
      run = client.beta.threads.runs.retrieve(
        thread_id=thread.id,
        run_id=run.id
      )
      
      status = run.status
      
      # Wait till the assistant has responded
      while status not in ["completed", "cancelled", "expired", "failed"]:
          time.sleep(5)
          run = client.beta.threads.runs.retrieve(thread_id=thread.id,run_id=run.id)
          status = run.status

      Assistant의 답변을 모두 완료하여 다시, 메시지 리스트를 가져와서

      Assistant의 답변인 가장 최근의 메시지를 가져와서 출력합니다..

      messages = client.beta.threads.messages.list(
        thread_id=thread.id
      )
      data = json.loads(messages.model_dump_json(indent=2))
      code = data['data'][0]['content'][0]['text']['value']
      print(code)

      출력한 결과 값은 아래와 같습니다.

      최초에 남긴 사용자 질문을 풀기 위한 Python 코드를 확인 할 수 있습니다.

      실제 최초 질문을 남기면 답변을 위해서 이러한  Python 코드를 작성하고

      Python 코드로 실행한 결과 값을 도출하고 이를 토대로 답변까지 작성하게 되는 것입니다. 




      이러한 코드 작성을 통해 답변을 생성할 수 있게 되면서, 

      문제를 푸는 것 뿐만 아니라, 주어진 데이터 분석 및 분석된 데이터에 그래프 생성 등의

      다양한 역할을 할 수 있게 도와줍니다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      ZIGI 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기