NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 팁 앤 테크
  • 매뉴얼

    팁과 테크니컬 노하우를 확인하세요.

    팁 앤 테크

    팁과 테크니컬 노하우를 확인하세요.

    본 사이트의 컨텐츠는 저작권법의 보호를 받으므로 무단 복사, 게재, 배포 등을 금합니다.

    커스텀 OpenAI를 이용한 질문과 답변을 처리하는 엔지엠 매크로의 커스텀 모듈 만들기.

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 오늘은 OpenAI의 Open API를 이용해서 질문을 입력하면 답변들 받을 수 있는 커스텀 모듈(Custom Module)를 만들어 보도록 하겠습니다. 커스텀 모듈 제작에 대한 기초적인 내용은 이미 학습하시고 오셨다는 가정하에 핵심 내용만 간추려서 진행하도록 할께요^^; 우선, 아래 글을 참고하셔서 OpenAI에 회원 가입하고 API 키를 확인하세요.

    [ OpenAI 회원 가입 및 테스트 ]

     

    API 키는 아래 그림처럼 자신의 계정을 클릭하면 확인할 수 있습니다.

    bHSjx7m.png

     

     

    View API Keys를 클릭하세요.

    QhEJMnV.png

     

     

    Create new secret key 버튼을 클릭하세요.

    kRtw5oC.png

     

     

    복사하기 버튼을 클릭하세요. 그리고, 클립보드에 복사된 Open API 키를 메모장이나 어딘가에 붙여넣기 해놓고 저장하세요. 나중에 사용해야 하거든요~

    Ps4JA4i.png

     

     

    Visual Studio를 실행하고, 새로운 프로젝트를 하나 생성하세요. 이 예제에서는 CustomOpenAI 이름으로 닷넷 라이브러리 프로젝트를 만들었습니다.

    rfst5LF.png

     

     

    기본 클래스(Class1.cs)는 CustomOpenAIModel.cs로 이름을 변경하세요. 프로젝트의 참조 추가에 아래 그림과 같이 엔지엠 매크로의 커스텀 인터페이스 모듈 3개를 추가하세요. 엔지엠 매크로 인터페이스 모듈은 엔터프라이즈 라이센스를 가진 분들만 사용할 수 있습니다. 관리자에게 요청해야 받을 수 있습니다.

    T8u9a7o.png

     

     

    기본적인 내용을 아래와 같이 작성 해주세요.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.ComponentModel.Design;
    using System.Drawing.Design;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace CustomOpenAI
    {
        [Serializable]
        public class CustomOpenAIModel : NGM.Models.Interface.BaseCustomToolModel
        {
            public override string DisplayCategory => "OpenAI";
    
            public override string DisplayName => "OpenAI QA";

     

    질문을 입력받고, 답변을 표시할 속성(Property)들을 만드세요. 추가적인 정보가 필요하면 더 만들어도 되지만, 저는 3개만 추가 해두었습니다. 만약, Open API 키를 내부에 심어두려면 두번째 API Key 속성은 삭제해도 됩니다. 그러나, 범용적인 프로그램을 만들기 위해서 사용자 각각의 키를 사용하도록 유도하는게 좋을겁니다. 이렇게 사용자가 제어할 수 있는 부분들을 많이 만들어두면 좀 더 유연한 프로그램이 됩니다.

            [Category("Data")]
            [DisplayName("답변")]
            [Description("사용자 질문에 대한 답변입니다.")]
            [Browsable(true)]
            [DefaultValue(null)]
            [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
            public string Result { get; set; }
    
            [Category("Action")]
            [DisplayName("API Key")]
            [Description("OpenAI의 Open API의 키를 입력하세요.")]
            [Browsable(true)]
            [DefaultValue(null)]
            [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
            public string ApiKey { get; set; }
    
            [Category("Action")]
            [DisplayName("질문")]
            [Description("OpenAI에게 질문할 내용을 작성하세요.")]
            [Browsable(true)]
            [DefaultValue(null)]
            [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
            public string Question { get; set; }

     

    이제 OpenAI와 Open API 통신을 위한 코드를 아래 Execute 메소드에 작성해야 합니다.

            public override void Execute()
            {
                
            }

     

    코드를 작성하기는 어려우니... OpenAI에게 일단 물어봅시다. 질문은 "openai와 open api로 통신하는 C# 코드 작성해줘"와 같이 입력했습니다. 답변은 아래와 같구요.

    jTMHO6c.png

     

     

    OpenAI가 알려준 코드에서 static void Main에 있는 코드만 복사해서 Execute 메소드 안에 붙여넣기 해줍니다.

            public override void Execute()
            {
                string url = "https://api.openai.com/v1/engines/davinci/completions";
                string query = "{\"prompt\": \"Hello world\", \"temperature\": 0.7}";
                string secret = "YOUR_SECRET_KEY";
    
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "POST";
                request.Headers.Add("Authorization", "Bearer " + secret);
                request.ContentType = "application/json";
    
                using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
                {
                    writer.Write(query);
                }
    
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                    {
                        string responseString = reader.ReadToEnd();
                        Console.WriteLine(responseString);
                    }
                }
            }

     

    코드에서 "YOUR_SECRET_KEY"를 API Keys에서 복사해두었던 값으로 대체하세요. 그리고, 프로젝트를 컴파일(Compile) 또는 빌드(Build)하면 bin 폴더에 아래와 같은 라이브러리가 만들어집니다. 저는 엔지엠 매크로에서 라이브러리를 쉽게 찾도록 바탕화면에 따로 복사 해두었습니다.

    EygoA8Z.png

     

     

    엔지엠 매크로를 실행하세요. 상단 메뉴의 관리자를 선택하고, 도구 모듈 설치 버튼을 클릭하세요.

    ecXF659.png

     

     

    바탕화면에 복사해둔 라이브러리를 선택하면 아래 그림과 같이 커스텀 모듈이 엔지엠 매크로에 설치됩니다.

    QtCG0b4.png

     

     

    새로운 스크립트를 하나 추가하세요.

    cnOuw3h.gif

     

     

    사용자 도구 상자에 보면 방금 설치한 OpenAI가 보일겁니다. 더블 클릭하거나 드래그해서 스크립트에 추가하세요.

    gJkmHKr.png

     

     

    크리스마스가 쉬는날인지 물어볼까요?

    aGJ2mW2.png

     

     

    아래와 같은 답변을 받았습니다.

    네, 크리스마스는 주로 휴식을 취하는 날입니다.

     

    이외에도 다양한 여러가지 질문들을 해봤는데요. 아무래도 검색해서 나온 정보를 알려주는것도 있는거 같아요. 자연어를 처리할 수 있다는것만 해도 대단한거 같긴하지만요. 유튜브에 보면 GPT-3로 코딩을하면 개발자를 대체할거라는 말들이 많아요. 언젠가는 그렇게 될 수 있을지도 모르겠지만~ 갈길이 아직은 멀지 않았을까 생각됩니다. 기획이나 구조 설계, 디자인 패턴, OOP등등... 인공지능이 대체하기 어려운 부분들도 있습니다. 저는 아직 10년은 더 먹고 살수 있을거 같아요^^; 10년 후에는 인공지능이 많은 부분을 대체할겁니다. 이제~ 또다른 먹거리를 찾아봐야 할거 같아요.

    ESOLV3p.png

     

     

    OpenAI의 답변

    대단히 어렵다. 인공지능은 복잡한 소프트웨어를 구축하거나 기존의 프로그램을 보완하기 위해 프로그래밍 언어를 사용하는 능력이 없다. 
    그러나 인공지능이 미래에 개발자를 완전히 대체하지는 않을 것으로 예상된다. 
    인공지능은 개발자의 일부 업무를 대신해줄 수 있고, 개발자가 개발 작업을 더 효율적으로 수행할 수 있도록 돕는 데 큰 도움이 될 것이다.

     

    업무 자동화 RPA 매크로 제작 및 견젹 문의 ]

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.