Kraken api - get token with python

Kraken api - get token with python an example of how you can generate a WebSocket authentication token using Python for Kraken's API: ```python import time import base64 import hashlib import hmac import urllib.request import json # Replace with your Kraken API public and private keys api_key = 'YOUR_API_PUBLIC_KEY' api_secret = 'YOUR_API_PRIVATE_KEY' # API endpoint and parameters api_path = '/0/private/GetWebSocketsToken' api_nonce = str(int(time.time() * 1000)) api_post = 'nonce=' + api_nonce # Create the SHA256 hash api_sha256 = hashlib.sha256(api_nonce.encode('utf-8') + api_post.encode('utf-8')).digest() # Create the HMAC signature api_hmac = hmac.new(base64.b64decode(api_secret), api_path.encode('utf-8') + api_sha256, hashlib.sha512) api_signature = base64.b64encode(api_hmac.digest()) # Create the request api_request = urllib.request.Request('https://api.kraken.com' + api_path, api_post.encode('utf-8')) ap

PromptChainer: Chaining Large Language Model Prompts through Visual Programming




PromptChainer: Chaining Large Language Model Prompts through Visual Programming 

Authors: Tongshuang Wu, Ellen Jiang, Aaron Donsbach, Jeff Gray


[초록]

LM을 사용하면 새로운 ML 기능의 프로토타입을 빠르게 제작할 수 있지만, 많은 실제 애플리케이션에는 단일 LLM 실행을 통해 쉽게 처리할 수 없는 복잡한 작업이 포함됩니다. 최근 연구에 따르면 여러 LLM 실행을 함께 연결하면(한 단계의 출력이 다음 단계의 입력이 됨) 사용자가 이러한 보다 복잡한 작업을 수행하는 데 도움이 될 수 있으며 보다 투명하고 제어 가능한 방식으로 인식되는 것으로 나타났습니다. 그러나 자체 LLM 체인을 작성할 때 사용자에게 무엇이 필요한지는 아직 알려지지 않았습니다. 이는 AI 전문가가 아닌 사람이 AI 주입 애플리케이션 프로토타입을 작성하는 데 대한 장벽을 낮추는 핵심 단계입니다. 이 작업에서는 LLM 체인 작성 프로세스를 살펴봅니다. 우리는 파일럿 연구를 통해 사용자가 체인 단계 간 데이터 변환과 여러 세부 수준에서 체인 디버깅을 지원해야 한다는 사실을 발견했습니다. 이러한 요구를 해결하기 위해, 우리는 시각적 프로그래밍 체인을 위한 대화형 인터페이스인 PromptChainer를 설계했습니다. 4명의 디자이너 및 개발자와의 사례 연구를 통해 우리는 PromptChainer가 다양한 애플리케이션에 대한 프로토타입 제작을 지원하고 체인을 더욱 복잡한 작업으로 확장하고 low-fi 체인 프로토타입 지원에 대한 공개 질문으로 결론을 내렸습니다.



PromptChainer: 시각적 프로그래밍을 통해 대규모 언어 모델 프롬프트 연결



1 INTRODUCTION


대규모 언어 모델(LLMs)은 인공 지능(AI)으로 프로토타입을 작성하는 새로운 가능성을 소개했습니다 [18]. 대량의 텍스트 데이터로 사전 훈련된 GPT-3 [3] 및 Jurassic-1 [10]과 같은 모델은 인문 맥락 학습을 지원하기에 충분한 정보를 인코딩합니다. 이들은 자연어 지시문이라 불리는 프롬프트를 통해 새로운 작업을 처리하기 위해 런타임에서 쉽게 사용자 정의될 수 있습니다(재훈련이 필요 없음). 예를 들어 사용자는 "장르: 재즈; 아티스트: 루이 암스트롱. 장르: 컨트리; 아티스트: "라는 프롬프트 문자열을 사용하여 미리 훈련된 범용 LLM을 사용자 정의하여 음악가를 위한 임시 검색 엔진을 만들 수 있습니다. LLM은 아마도 이 프롬프트를 나라 아티스트의 이름과 함께 계속 진행할 것입니다. 이 장난감 예제 이상으로 비전문가들은 실시간으로 다양한 ML 기능을 달성하기 위해 프롬프팅을 사용했으며, 이는 코드 생성, 질문 응답, 창의적 글쓰기 등을 포함합니다 [3, 13, 15]. 

최근의 프롬프트 기반 프로토타이핑 연구 [8]는 LLM의 자연어 프롬프트에 대한 유연한 적응력으로 인해 비전문가들(예: 디자이너, 제품 관리자, 프런트엔드 개발자 등)가 데이터 수집과 모델 훈련이 필요하지만 비용이 많이 드는 프로세스를 우회하고 더 낮은 노력과 시간으로 사용자 정의 ML 기능의 프로토타입을 만들 수 있게 되었습니다 [2, 8].

LLM의 확실한 다양성에도 불구하고 많은 실제 응용 프로그램은 단일 LLM 실행으로 처리하기 어려운 복잡하거나 다단계 작업을 포함하고 있습니다. 예를 들어 음악 중심의 챗봇(그림 2에서 구축된 것)은 응답을 생성하기 전에 AI가 먼저 사용자의 쿼리 유형(위에 표시된 것처럼 장르별 아티스트 찾기 또는 아티스트가 주어진 노래 찾기 등)을 결정해야 할 수 있습니다. 결과적으로 디자이너와 개발자는 단일 LLM 프롬프트만 사용하여 현실적인 응용 프로그램을 프로토타입화하기 어려울 수 있습니다.

이에 대응하여 이전에는 여러 LLM 실행을 연결하는 "체이닝"을 제안했습니다 [17]. 즉, 전체 작업을 고도로 대상화된 하위 작업의 시리즈로 분해하고 각 작업을 별도의 LLM 단계에 매핑하며 한 단계의 출력을 다음 입력으로 사용하는 것입니다. 그들은 사람들이 체이닝을 효과적으로 사용할 수 있다는 것을 관찰했으며, 이를 통해 더 투명하고 제어 가능한 방식으로 더 복잡한 작업을 완료할 수 있었습니다. 그러나 사용자가 자체 LLM 체인을 작성하는 방법을 지원하는지 여전히 열린 문제입니다. 디자이너와 개발자가 자체 프로토타입에 체이닝을 적용하려면 각 개별 LLM 단계 내에서만 프롬프트를 지시하는 것뿐만 아니라 전체 작업 분해를 설계해야 합니다. 이러한 프로세스는 대상 지향적인 도구가 필요하며, 이는 엔드 유저 프로그래밍과 유사합니다 [4, 5].



이 연구에서는 LLM 체인 작성의 사용자 경험을 조사합니다. 형성적 연구를 통해 LLM의 극도로 다양한 가능성에서 나타나는 세 가지 독특한 도전에 대해 추려냅니다: (1) LLM 기능을 완전히 활용하는 데 필요한 오버헤드, (2) 프롬프팅 시 체인에 오류를 부수게 만드는 경향, (3) 블랙박스 및 불안정한 LLM 생성으로 인한 연쇄적인 오류. 이러한 도전에 대응하여 우리는 PromptChainer를 제안합니다. 이는 LLM의 능력에 대한 정신적 모델을 구축하는 데 도움이 되는 체인 작성 인터페이스로서 임의의 LLM 데이터 형식을 처리하고 각 LLM 단계에 대한 "함수 서명"을 정의하며 연쇄적인 오류를 디버깅하는 데 도움이 됩니다. 네 명의 디자이너와 개발자를 대상으로 케이스 스터디를 수행했으며, 그들이 각자의 현실적인 응용 프로그램 아이디어(예: 챗봇, 글쓰기 어시스턴트 등)에 대한 체인을 제안하고 구축하는 과정을 조사했습니다. 우리의 질적 분석에서는 사용자가 체인을 구축하고 디버깅하는 방식에 대한 패턴이 나타났습니다: (1) 사용자는 LLM 한계뿐만 아니라 프로토 타입을 확장하기 위해 체인을 구축합니다; (2) 일부 사용자는 한 번에 한 단계씩 체인을 구성했으며, 다른 사용자는 모든 단계에 대한 추상적인 자리 표시자를 먼저 그려서 채우기 전에 구체화했습니다; (3) 여러 LLM 프롬프트 간의 상호 작용은 복잡할 수 있으며, 프롬프트의 지역 및 전역 디버깅이 모두 필요할 수 있습니다. 또한 몇 가지 추가적인 열린 도전 과제를 관찰하고, 미래 방향에 대한 논의로 마무리합니다: 첫째, 우리는 어떻게 하면 고도로 상호 의존하거나 논리적으로 복잡한 작업에 체인을 확장할 수 있을까요? 두 번째로, 사용자가 너무 많은 시간을 들이지 않고 여러 대안적인 체인을 빠르게 로우 파이 프로토 타입화할 수 있는 프롬프팅의 "달콤한 지점"을 어떻게 찾을 수 있을까요?








2. BACKGROUND: LARGE LANGUAGE MODELS, PROMPTING AND CHAINING


생성 언어 모델은 주어진 입력을 타당한 출력으로 계속해서 만들어낼 수 있도록 설계되었습니다(예: "나는 ~에 갔다"라는 프롬프트가 주어지면 "커피숍"으로 자동 완성될 수 있음). 그러나 인터넷에서 수십억 개의 샘플로 사전 훈련된 경우, 최근의 대규모 언어 모델(LLMs)은 사용자가 작성한 프롬프트를 통해 코드 생성, 질문 응답, 창의적 글쓰기 등과 같은 사용자 정의된 사용 사례를 지원하도록 실시간으로 조정될 수 있습니다 [3, 15]. 
원하는 기능을 호출하려면 사용자는 작업에 적합한 프롬프트를 작성해야 합니다 [1, 11, 12]. 

프롬프팅을 위한 가장 일반적인 패턴은 제로샷(zero-shot) 또는 퓨샷(few-shot) 프롬프트입니다. 제로샷 프롬프트는 작업에서 어떤 일이 일어나야 하는지를 직접적으로 설명합니다. 예를 들어, Figure 4에서 "문장 '안녕, 어떻게 지내?'은 음악에 관한 것인가?"와 같은 프롬프트를 사용하여 분류를 실행할 수 있습니다.
 반면에 퓨샷 프롬프트는 LLM에게 따라야 할 패턴을 알려주기 위해 원하는 입력과 출력의 예제를 주입함으로써 작동합니다: "[대화] 내가 좋아하는 음악 틀어줘. [클래스] is_music [대화] 안녕, 어떻게 지내? [클래스]". 이 프롬프트를 주면 LLM은 "not_music"과 같은 응답을 할 수 있습니다(Figure 4의 전체 프롬프트).

단일 LLM은 특정한 기계 학습 기능을 프로토타입화하는 데 도움이 되지만 [8], 그들의 내재적인 제한 사항(다단계 추론 능력 부족 등)으로 인해 복잡한 응용 프로그램의 프로토타입화에는 적합하지 않습니다. 이에 대응하여 우리는 이전에 여러 LLM 프롬프트를 연결하는 "체이닝" 개념을 제안하고 체인 사용의 유틸리티를 시연했습니다 [17]. 우리는 그들의 연구를 따라가 사용자가 프로토타입을 위한 효과적인 체인을 어떻게 작성할 수 있는지 탐구합니다.







3 PROMPTCHAINER: INTERFACE REQUIREMENT ANALYSIS & DESIGN


3.1 Requirement Analysis 


PromptChainer의 디자인을 안내하기 위해 3개월 동안 두 명의 소프트웨어 엔지니어와 세 명의 디자이너로 구성된 팀과 협력하여 형성적인 연구를 수행했습니다. 이 형성적인 연구에는 어떠한 지원 없이 LLM 체인을 작성한 경험에 대한 세션뿐만 아니라 초기 프로토 타입에서 관심 있는 체인을 제안하고 구축한 반복적인 디자인 세션도 포함되었습니다(파일럿 스터디의 체인은 부록 A에 있음). 우리는 관찰을 다음과 같은 작성 도전과제로 요약합니다:


C.1 LLM의 다양성과 데이터 변환의 필요성: 
LLM의 다양성은 사용자가 그들의 능력에 대한 정신적 모델을 개발해야 함을 의미합니다. 또한 LLM은 임의의 문자열 형식으로 출력을 생성하므로 상류 LLM 단계의 출력을 하류 단계의 입력과 호환되도록 변환하는 것이 쉽지 않습니다.

C.2 LLM 함수 서명의 불안정성: 
LLM은 안정적인 함수 서명이 없으며, 즉, 그들의 출력의 의미적 유형이 LLM 프롬프트와 쉽게 변할 수 있습니다. 이로 인해 지역 체인 반복이 복잡해집니다. 예를 들어 사용자가 프롬프트를 편집하면서 LLM 단계가 짧은 구문 대신 번호가 매겨진 목록을 출력하도록 의도치 않게 만든다면, 이는 다음 단계에 입력 오류를 도입하여 전체 체인을 망가뜨릴 수 있습니다.

C.3 연쇄적인 오류 가능성: 
LLM의 블랙박스 성격은 단일 단계에서 최적이 아니거나 심지어 안전하지 않은 출력이 LLM 체인 전반에 걸쳐 연쇄적인 오류를 유발할 가능성이 있음을 의미합니다(전통적인 기계 학습 파이프라인에서 유사한 관찰에 대해서는 [14] 참조).





3.2 Interface Design 


도전에 대응하여 Figure 1에 나타난 인터페이스를 디자인했습니다. 여기에는 체인 구조를 작성하는 Chain View(Figure 1A), 체인의 개별 단계(노드)를 작성하는 Node View(Figure 1B), 그리고 체인 디버깅을 지원하는 기능이 있습니다.

Chain View는 체인을 구축하고 보는 시각적 패널입니다. Figure 1A에서와 같이 각 사각형은 노드를 나타내며, 이는 체인에서의 개별 단계를 나타내며 이들 노드 간의 연결 또는 하나의 노드 출력이 다음 노드의 입력으로 사용되는 방식을 나타내는 엣지가 있습니다.

*노드 시각화. Figure 4(그림 2 "②"의 확대된 노드)에 나와 있듯이 각 노드는 하나 이상의 명명된 입력(𝑎2) 및 출력(𝑎3)을 가질 수 있습니다. 이는 노드를 연결하는 데 사용됩니다. 기존의 여러 노드-엣지 기반 시각 프로그래밍 플랫폼2에서 영감을 받아 노드 미리보기를 제공하여 체이닝 투명성을 높입니다. 노드에 오류가 포함되어 있는지를 강조하는 상태 아이콘(Figure 4 𝑎1)과 함께 인라인 및 상세 데이터 뷰(𝑎3 및 𝑎4)도 제공합니다.

*노드 유형. Figure 3에 요약된 것처럼 우리는 다양한 사용자 요구를 충족하기 위해 여러 유형의 노드를 정의합니다. 그 핵심에는 두 가지 유형의 LLM 노드가 있습니다: 일반 LLM 노드 및 LLM 분류기 노드(도식 및 예제는 Figure 3에서 확인할 수 있습니다). 사용자는 자연어 프롬프트를 제공하고 해당 프롬프트를 입력으로 사용하여 LLM을 호출하고 LLM 출력을 적절하게 사용하여 이러한 노드를 구현할 수 있습니다. PromptChainer는 또한 일반적인 데이터 변환(C.1 in Section 3.1) 및 평가(C.3) 요구를 해결하는 도우미 노드를 제공하거나 사용자가 자체 사용자 지정 JavaScript(JS) 노드를 구현할 수 있게 합니다. 마지막으로 AI를 통합한 응용 프로그램을 프로토타입으로 지원하기 위해 PromptChainer는 외부 세계와 데이터를 교환하기 위한 통신 노드를 제공합니다(예: 외부 API 호출).
예시 갤러리. LLM의 다양성 도전(C.1)에 대응하기 위해 PromptChainer는 자주 구성되는 (하위)체인의 예시를 제공하여 사용자가 어떤 능력이 유용할지에 대한 정신적 모델을 개발하는 데 도움을 줍니다. 이러한 예시는 또한 사용자의 프롬프트가 미리 정의된 처리 노드와 더 호환되도록 하는 일련의 프롬프트 패턴으로 향하는 연약한 유도로 작용합니다. 예를 들어, Figure 2 "④"는 "1) Garth Brooks 2) George Strait..."와 같은 번호가 매겨진 목록을 반환하는 아이디에이션 예시에서 파생되었으며, 이는 제공된 "⑤" 숫자별로 분할 노드로 구문 분석이 가능합니다.






Node View는 사용자가 개별 노드를 검토, 구현 및 테스트할 수 있도록 합니다(Figure 1B).
노드를 선택하면 패널이 노드 유형에 따라 변경됩니다. PromptChainer는 각 노드의 LLM 프롬프트를 기반으로 노드의 입력 이름을 자동으로 구문 분석합니다(또는 JavaScript 도우미 노드의 경우 함수 서명을 기반으로 함). 

예를 들어 Figure 4에서 입력 핸들 𝑎1 "user"는 해당 프롬프트 템플릿의 볼드 처리된 플레이스홀더 문자열 [user]과 동기화되어 있습니다. 즉, 𝑎1의 입력은 프롬프트의 𝑏1을 채우기 위해 사용될 것입니다. 사용자가 𝑏1을 예를 들어 [[sentence]]로 변경하면, 𝑎1은 "sentence"로 이름이 바뀌어 이전 버전의 핸들이 없어지게 됩니다. 이러한 방식으로 PromptChainer는 사용자의 지역 편집과 일관성 있게 전역 체인을 자동으로 업데이트하여 로컬 편집에 대응합니다(C.2 설명).

대화식 디버깅 기능. 연쇄적인 오류 도전(C.3)에 대응하기 위해 PromptChainer는 다양한 레벨에서 체인 디버깅을 지원합니다. 
 먼저 각 노드를 단위 테스트하기 위해 사용자는 제공된 테스트 블록(Figure 4𝑐1)을 사용하여 각 노드를 테스트할 수 있습니다. 이는 나머지 체인과 독립적인 예제로 각 노드를 테스트하는 데 사용됩니다. 
 둘째로 종단 간 평가를 수행하려면 사용자가 전체 체인을 실행하고 각 노드당 출력을 로깅할 수 있도록하여 최종 체인 출력을 쉽게 검색할 수 있게 합니다(Figure 4𝑐2). 
 세 번째로 전역 오류를 지역 원인에 매핑하는 데 도움을 주기 위해 PromptChainer는 중단점 디버깅을 지원하며(Figure 4𝑐3), 사용자가 노드의 출력을 다음 노드에 공급되기 전에 직접 편집할 수 있습니다. 중간 노드 출력을 수정함으로써 사용자는 이전 오류와 독립적으로 하류 노드의 일부를 테스트할 수 있습니다.



4 USER FEEDBACK SESSIONS


우리는 사용자가 어떤 종류의 체인을 구축하고자 하는지, PromptChainer가 그들의 요구를 얼마나 지원하는지, 그리고 사용자가 직면한 추가적인 도전 과제가 무엇인지를 이해하기 위해 초기 연구를 수행했습니다.


4.1 연구 디자인

체인 작성은 단일 프롬프트를 넘어 여러 프롬프트를 연결하는 것이기 때문에 연구에는 연속된 프롬프트 작성 경험이 적어도 약간 있는 4명의 참가자(3명의 디자이너, Google 내의 1명의 개발자)를 모집했습니다. 

P1과 P2는 이전에 프롬프트를 작성한 경험이 있었고, P3는 일부 LLM 데모를 본 적이 있었습니다. 우리는 이러한 참가자들에게 다양한 제품 팀에서의 관심과 경험을 우선시하기 위해 개인적으로 연락했습니다. 연구 세션 이전에 참가자들은 30분 동안 준비에 시간을 할애했습니다. 이 동안에 참가자들은 인터페이스 기능에 대한 10분 튜토리얼을 시청했습니다.

 또한 여러 번의 LLM 실행이 필요한 작업을 상상하고 각 단계의 LLM 호출을 그리며 해당 프롬프트를 초안으로 작성하도록 요청했습니다. 이렇게 함으로써 연구는 초기 프롬프트 작성이 아니라 프롬프트를 연결하는 작업에 중점을 둘 수 있었습니다. 1시간 동안의 실제 연구에서 참가자들은 자신의 프롬프트를 로드하고 생각을 소리내어 발화하면서 상상한 체인을 집필했습니다. 

PromptChainer가 반복을 얼마나 지원할 수 있는지를 관찰하기 위해 참가자들에게 체인의 결함을 설명하고 수정하도록 요청했습니다. 참가자들의 작업 완료 세션을 전체적으로 관찰하고 기록하였으며, 나중에 그들의 의견을 품질적으로 분석하기 위해 주석을 찍었습니다. 참가자들은 총 90분 정도의 시간을 소비하였으며, 이에 대한 보상으로 75달러의 기프트 크레딧을 받았습니다.


Underlying LLM(기저 LLM).  우리의 모든 실험(파일럿 스터디 포함)은 LaMDA [16]라는 동일한 Underlying  LLM을 기반으로 합니다. 이는 1370억 개의 매개변수를 가진 범용 언어 모델로, 크기와 능력 면에서 GPT-3 모델과 대략적으로 동등합니다. 이 모델은 텍스트 데이터 1.5조 단어 이상을 사용하여 자기 회귀적으로 훈련되었으며 디코더 전용 트랜스포머 구조를 사용합니다. 다양한 작업에서 GPT-3와 비교 가능한 성능을 보이며 프롬프트를 따르는 능력에서도 유사한 행동을 합니다.



4.2 연구 결과

우리는 아래에 나열된 세 가지 질문에 답하기 위해 우리의 연구를 분석했습니다.

Q: 사용자들은 어떤 종류의 체인을 구축하고 싶어했나요?

A: 사용자들은 다양한 작업을 제안했는데, 일부는 분기 로직을 사용하고 일부는 콘텐츠를 반복하는 것과 관련이 있었습니다. 그들은 체인을 사용하여 단일 프롬프트의 한계뿐만 아니라 자신의 프로토타입을 확장하기 위해서도 사용했습니다.


체이닝 패턴(Chaining patterns).

모든 참가자가 연구 세션 동안 원하는 체인을 성공적으로 작성했으며, 이들 체인은 평균 5.5 ± 0.9 개의 노드를 포함하고 있습니다. Figure 5에 나와 있듯이 참가자들은 음악 챗봇, 광고 생성기, 글쓰기 어시스턴트 등 다양한 작업에 대한 체인을 작성했습니다. 그들의 체인 구조는 서로 다른 고수준 패턴을 반영합니다. (1) P1과 P2는 의사 결정 트리와 유사한 병렬 논리 브랜치를 갖는 체인을 작성했습니다 [7]. 예를 들어 P2의 체인은 다양한 제품 리뷰 속성에 대한 전문 설명을 생성하기 위한 것이었습니다. 먼저 "④"로 속성이 "고급", "할인", 또는 "일반"인지를 분류하고 이것이 하류 노드(전문 LLM 설명 생성기)를 결정했습니다. (2) P3와 P4는 내용을 점진적으로 반복하는 체인을 작성했습니다. 이러한 체인은 일반적으로 분할 정복 전략 [9]을 취합니다. 예를 들어 P4는 먼저 "⑩"에서 이야기 개요 목록을 생성한 다음 "⑫"에서 각 지점당 단락을 생성하고 최종적으로 이를 "⑬"에서 다시 병합하여 이야기를 쓰기로 했습니다.

체이닝 관계(Chaining rationales).

 우리는 참가자들이 주로 LLM의 한계를 극복하기 위해 체인을 작성할 것으로 예상했었지만 흥미롭게도 참가자들은 또한 프로토타입을 보다 일반화하기 위해 체이닝 단계를 삽입했습니다. 예를 들어 P3는 "여름 휴가 활동"을 위한 개념화 노드를 직접 작성할 수 있음에도 불구하고 보다 일반적인 개념화 도구 "⑥"와 여름 활동 분류기 "⑦"를 결합하여 "다른 시간이나 변수로 분류기를 전환하여 다양성과 유연성을 위해" 사용할 수 있게 했습니다. 또한 P4는 중간 제어를 원하는 욕구를 언급했습니다. 가장 좋아하는 것이 항상 상위 1위 LLM 생성이 아니라고 인식하자, 그는 능동적인 개입을 위한 체인을 작성했습니다. 그는 먼저 "⑩"에서 세 가지 후보 이야기 주제를 초과 생성한 다음 이 중 하나를 선택하고 "⑪"에서 이를 다음 단락 확장을 위해 세부적으로 다듬었습니다.







Q: PromptChainer는 사용자가 체인을 반복적으로 작성하고 개선하는 데 얼마나 지원하나요?

A: PromptChainer는 다양한 체인 구축 전략을 지원하고 다중 수준의 디버깅을 가능하게 했습니다.


체인 구축(Chain construction).

 참가자들은 다양한 체인 구축 전략을 적용했습니다. P1은 상향식 접근 방식을 채택하여, 프롬프트를 채우기 전에 먼저 빈 자리에 플레이스홀더 노드를 연결하여 상상 속의 작업 분해를 보여주었습니다. 반면에 다른 세 참가자들은 각각의 노드를 하나씩 작업한 후 다음 노드로 넘어갔습니다. P2는 각 노드를 주의 깊게 실행하고 테스트했는 반면, 다른 참가자들은 "러프 드래프트"를 만들어 기본 프롬프트로 시작하고 프롬프트의 세부적인 정제를 초안 체인이 완료된 후에 미루었습니다 (P3: "아마도 이것으로 진행해야겠다. 나중에 LLM 프롬프트를 미세 조정하고 싶어졌다."). 이러한 다양한 체인 구축 전략은 PromptChainer가 체인 프로토타이핑을 위한 다양한 경로를 지원할 수 있지만, 공통 사용자 경향은 한 번에 하나의 노드를 처리하는 것일 수 있다는 점을 나타냅니다.

노드 유틸리티를 더 자세히 파악하기 위해 우리는 사용자 연구 체인과 파일럿 사용자의 노드 분포를 분석했습니다 (총 8개). 사전 정의된 도우미가 대부분의 체이닝 필요를 커버할 수 있었습니다. 참가자들은 커스터마이즈된 JS 노드(4개)보다 세 배 많은 사전 정의된 도우미(총 13개)를 사용했습니다. 하나의 작성자는 모든 LLM 노드를 이전에 식별한 기본 LLM 작업에 따라 다시 정리했고, 27개의 LLM 노드 중 7개는 입력을 분류하는 데 사용되었고, 13개는 LLM에서 정보를 가져오는 데 사용되었으며, 7개는 입력을 다시 구성하는 데 사용되었습니다. 이러한 활용의 다양성은 PromptChainer의 예제 갤러리에서 비롯된 것일 수 있습니다. 예를 들어 P4는 프롬프팅에 덜 익숙하더라도 간단한 기본 예제를 복제하여 자체 LLM 분류기를 성공적으로 생성했습니다.


체인 디버깅(Chain debugging). 

모든 참가자는 체인 구축을 완료한 후 체인을 끝에서 끝까지 실행하며 ("초기 디버깅 전략"으로 P1 및 P4), 일반적으로 체인 실패를 특정 LLM 노드에 속한다고 생각했습니다 (P1: "데이터 미리 보기에서 예상치 못한 출력을 정확하게 지목하기 쉬움") 그리고 지역 디버깅을 수행했습니다. P1은 브레이크포인트 기능을 평가했습니다 (Figure 4𝐶3), 노드 중 하나를 디버깅하기 위해 체인을 해체할 필요가 없었기 때문에. 반면에 P3는 Description Generator "⑨"를 디버깅할 때 독립적인 테스트 블록 (Figure 4𝑐1)을 활용했습니다. 이는 이전 노드에서 오는 여러 입력에서 발생하는 비용이 큰 실행을 피하기 위한 것이었습니다.


놀랍게도 대부분의 참가자들은 연구 이전에 프롬프트 엔지니어링을 하는 동안 상당한 시간을 보낸 상태에서 인터페이스에서 사전에 구축된 프롬프트에 몇 가지 중요한 수정을 가했습니다. 

노드 간의 상호 작용 효과를 관찰할 수 있어서 각 지역 노드에 대한 이해와 기대치에 영향을 미친 것으로 추측됩니다. 

예를 들어 P4는 이야기 생성 체인을 구성할 때 생성된 이야기에 "The End"를 최종으로 추가하고 싶었습니다. 먼저 이야기 개요 ("Story Spine")에서 항상 "The End"를 최종 불릿 포인트로 생성하려고 했지만, 이렇게하면 단락 생성기 "⑫"가 "The End The End The End"를 반복하는 단락을 생성하게 됨을 깨달았습니다. 따라서 그들은 "⑩"에서이 생성을 제거하고 대신 (연구 촉진자의 도움을 받아) 텍스트 "The End"를 추가하는 최종 JavaScript 도우미 노드 "⑬"를 만들었습니다. 이는 PromptChainer가 사용자가 오류를 발견하도록 도울 수 있음을 시사하며, 향후 연구에서는 대안적인 해결책을 통해 식별된 문제를 해결하는 데 사용자를 지원해야 합니다.





Q: 체인 작성에서 남아 있는 과제는 무엇인가요?

A: 상호 의존적인 하위 작업 간의 일관성 보장; 복잡한 논리를 갖는 체인 추적.


상호 의존하는 병렬 작업을 포함하는 체인은 일관성 감소로 이어질 수 있습니다. P4의 이야기 작성 체인은 개요의 각 지점에 대한 단락을 독립적으로 생성했기 때문에 최종 에세이는 일관성이 부족했습니다. 첫 몇 문장은 입력 설명을 따라갔지만 최종 문장에서는 Morris가 파리를 좋아한다는 힌트가 나왔습니다 ("그들 중 어느 것도 파리처럼 맛있지 않았다"). 비슷한 도전에 직면한 한 명의 연구 참가자는 다른 입력 노드를 만들어 이전 출력을 수동으로 추적했습니다. 미래에는 병렬 하위 작업 간의 상호 의존성을 고려하는 방법을 더 탐구하는 것이 유익할 수 있습니다 [15].


더 복잡한 분해를 포함하는 체인은 추적하기 어려울 수 있습니다. P1의 음악 챗봇 체인에서 추출기 노드 "②"는 입력당 후보 엔터티 목록을 생성합니다. 따라서 어떻게 엔터티가 분류기 "③"로 전달되어 원래 입력 노드 "①"와 매핑되는지 명확하지 않았습니다. 우리는 PromptChainer의 추적 기능을 향상시키기를 희망합니다. 예를 들어 향후 작업에서는 사용자가 하나 또는 모든 노드를 실행하는 대신 명시적으로 실행할 하위 집합을 선택할 수 있도록 사용자 지정 체인 그룹화를 가능하게 할 수 있습니다. 또한 실행 시각화 (예: Python Tutor4에서 영감을 받아)를 추가하여 원래 입력에서 최종 출력까지의 매핑을 강조할 수 있습니다.



4.3 토의 및 한계

참가자들에게 연구 이전에 원하는 하위 작업에 대한 몇 가지 LLM 프롬프트를 미리 생성하도록 요청한 것은 참가자들이 이미 만들어 놓은 프롬프트와 특정 체인 분해에 투자된 느낌을 가질 수 있게 만들었을 것입니다. 그러나 기존의 프로토타이핑 작업에서는 동시에 여러 대안을 고려하는 것(예: 병렬 프로토타이핑 [6])이 더 나은 결과로 이어질 수 있다는 연구 결과가 있습니다. 따라서 향후 연구에서는 어떻게 여러 가능한 체인을 저예산으로 프로토타이핑할 수 있는지(다시 말해, 각 프롬프트를 설계하는 데 너무 많은 시간을 투자하지 않고 전체 체인의 타당성을 신속하게 테스트할 수 있는 방법)을 탐구할 수 있을 것입니다. 예를 들어, PromptChainer는 참가자들에게 몇 가지 예제로 몇 번의 프롬프트를 시작하거나 아주 간단한 제로샷 프롬프트로 시작하도록 권장함으로써 초기 프롬프트 설계에 초기 투자를 줄일 수 있을 것입니다.

연구 시간 제약 때문에 사용자들이 자연스럽게 분해하기 쉬운 작업을 선택할 수도 있었습니다. 향후에는 더 크고 복잡한 작업에 대한 작업 분해 전략을 탐구하는 것이 유익할 것입니다. 예를 들어, PromptChainer는 포괄적인 프롬프팅 노력이 성공적이지 않은 경우 더 많은 노드로 체인의 노드를 더 분해하도록 사용자를 장려하는 데 도움을 줄 수 있을 것입니다.




5 CONCLUSION


우리는 LLM 체인 작성에 대한 세 가지 독특한 도전 과제를 식별했는데, 이는 LLM의 매우 다양하고 개방적인 능력에 기인합니다. 우리는 PromptChainer를 설계하고, 이 도구가 사용자들이 중간 LLM 출력을 변환하고 LLM 단계가 상호 작용하는 경우 체인을 디버깅하는 데 도움이 되었다는 결과를 얻었습니다. 또한 우리의 연구는 더 복잡한 체인을 지원하고 "초보자용" 체인 구축을 명시적으로 지원하는 방향과 관련하여 흥미로운 결과를 나타냈습니다. 이는 사용자가 프롬프트 설계에 너무 많은 시간을 들이지 않고 체인 구조를 간단히 스케치할 수 있도록 하는 방향으로 나아갈 수 있습니다.


[논문 원문]

PromptChainer: Chaining Large Language Model Prompts through Visual Programming

Tongshuang Wu, Ellen Jiang, Aaron Donsbach, Jeff Gray, Alejandra Molina, Michael Terry, and Carrie J Cai. 2022. PromptChainer: Chaining Large Language Model Prompts through Visual Programming. In Extended Abstracts of the 2022 CHI Conference on Human Factors in Computing Systems (CHI EA '22). Association for Computing Machinery, New York, NY, USA, Article 359, 1–10.

 - https://doi.org/10.1145/3491101.3519729

 - https://arxiv.org/pdf/2203.06566.pdf






REFERENCES 

[1] Gregor Betz, Kyle Richardson, and Christian Voigt. 2021. Thinking Aloud: Dynamic Context Generation Improves Zero-Shot Reasoning Performance of GPT-2. ArXiv preprint abs/2103.13033 (2021). https://arxiv.org/abs/2103.13033 


[2] Rishi Bommasani, Drew A. Hudson, Ehsan Adeli, Russ Altman, Simran Arora, Sydney von Arx, Michael S. Bernstein, Jeannette Bohg, Antoine Bosselut, Emma Brunskill, Erik Brynjolfsson, Shyamal Buch, Dallas Card, Rodrigo Castellon, Niladri Chatterji, Annie Chen, Kathleen Creel, Jared Quincy Davis, Dora Demszky, Chris Donahue, Moussa Doumbouya, Esin Durmus, Stefano Ermon, John Etchemendy, Kawin Ethayarajh, Li Fei-Fei, Chelsea Finn, Trevor Gale, Lauren Gillespie, Karan Goel, Noah Goodman, Shelby Grossman, Neel Guha, Tatsunori Hashimoto, Peter Henderson, John Hewitt, Daniel E. Ho, Jenny Hong, Kyle Hsu, Jing Huang, Thomas Icard, Saahil Jain, Dan Jurafsky, Pratyusha Kalluri, Siddharth Karamcheti, Geoff Keeling, Fereshte Khani, Omar Khattab, Pang Wei Kohd, Mark Krass, Ranjay Krishna, Rohith Kuditipudi, Ananya Kumar, Faisal Ladhak, Mina Lee, Tony Lee, Jure Leskovec, Isabelle Levent, Xiang Lisa Li, Xuechen Li, Tengyu Ma, Ali Malik, Christopher D. Manning, Suvir Mirchandani, Eric Mitchell, Zanele Munyikwa, Suraj Nair, Avanika Narayan, Deepak Narayanan, Ben Newman, Allen Nie, Juan Carlos Niebles, Hamed Nilforoshan, Julian Nyarko, Giray Ogut, Laurel Orr, Isabel Papadimitriou, Joon Sung Park, Chris Piech, Eva Portelance, Christopher Potts, Aditi Raghunathan, Rob Reich, Hongyu Ren, Frieda Rong, Yusuf Roohani, Camilo Ruiz, Jack Ryan, Christopher Ré, Dorsa Sadigh, Shiori Sagawa, Keshav Santhanam, Andy Shih, Krishnan Srinivasan, Alex Tamkin, Rohan Taori, Armin W. Thomas, Florian Tramèr, Rose E. Wang, William Wang, Bohan Wu, Jiajun Wu, Yuhuai Wu, Sang Michael Xie, Michihiro Yasunaga, Jiaxuan You, Matei Zaharia, Michael Zhang, Tianyi Zhang, Xikun Zhang, Yuhui Zhang, Lucia Zheng, Kaitlyn Zhou, and Percy Liang. 2021. On the Opportunities and Risks of Foundation Models. arXiv:2108.07258 [cs.LG] 

[3] Tom B. Brown, Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared Kaplan, Prafulla Dhariwal, Arvind Neelakantan, Pranav Shyam, Girish Sastry, Amanda Askell, Sandhini Agarwal, Ariel Herbert-Voss, Gretchen Krueger, Tom Henighan, Rewon Child, Aditya Ramesh, Daniel M. Ziegler, Jeffrey Wu, Clemens Winter, Christopher Hesse, Mark Chen, Eric Sigler, Mateusz Litwin, Scott Gray, Benjamin Chess, Jack Clark, Christopher Berner, Sam McCandlish, Alec Radford, Ilya Sutskever, and Dario Amodei. 2020. Language Models are Few-Shot Learners. In Advances in Neural Information Processing Systems 33: Annual Conference on Neural Information Processing Systems 2020, NeurIPS 2020, December 6-12, 2020, virtual, Hugo Larochelle, Marc’Aurelio Ranzato, Raia Hadsell, Maria-Florina Balcan, and Hsuan-Tien Lin (Eds.). https://proceedings.neurips.cc/paper/2020/ hash/1457c0d6bfcb4967418bfb8ac142f64a-Abstract.html 

[4] Margaret Burnett. 2010. End-user software engineering and why it matters. Journal of Organizational and End User Computing (JOEUC) 22, 1 (2010), 1–22. [5] Margaret M. Burnett, Curtis R. Cook, and Gregg Rothermel. 2004. End-user software engineering. Commun. ACM 47 (2004), 53 – 58. 

[6] Steven P Dow, Alana Glassco, Jonathan Kass, Melissa Schwarz, Daniel L Schwartz, and Scott R Klemmer. 2010. Parallel prototyping leads to better design results, more divergence, and increased self-efficacy. ACM Transactions on ComputerHuman Interaction (TOCHI) 17, 4 (2010), 1–24. 

[7] Baocheng Geng, Qunwei Li, and Pramod K Varshney. 2018. Decision tree design for classification in crowdsourcing systems. In 2018 52nd Asilomar Conference on Signals, Systems, and Computers. IEEE, 859–863.

 [8] Ellen Jiang, Kristen Olson, Edwin Toh, Alejandra Molina, Aaron Donsbach, Michael Terry, and Carrie J. Cai. 2022. Prompt-based Prototyping with Large Language Models. In Extended Abstracts of the 2022 CHI Conference on Human Factors in Computing Systems. 

[9] Aniket Kittur, Boris Smus, Susheel Khamkar, and Robert E. Kraut. 2011. CrowdForge: Crowdsourcing Complex Work. In Proceedings of the 24th Annual ACM Symposium on User Interface Software and Technology (Santa Barbara, California, USA) (UIST ’11). Association for Computing Machinery, New York, NY, USA, 43–52. https://doi.org/10.1145/2047196.2047202 

[10] Opher Lieber, Or Sharir, Barak Lenz, and Yoav Shoham. 2021. Jurassic-1: Technical Details And Evaluation. Technical Report. AI21 Labs. 

[11] Jiachang Liu, Dinghan Shen, Yizhe Zhang, Bill Dolan, Lawrence Carin, and Weizhu Chen. 2021. What Makes Good In-Context Examples for GPT-3? ArXiv preprint abs/2101.06804 (2021). https://arxiv.org/abs/2101.06804 

[12] Yao Lu, Max Bartolo, Alastair Moore, Sebastian Riedel, and Pontus Stenetorp. 2021. Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity. ArXiv preprint abs/2104.08786 (2021). https: //arxiv.org/abs/2104.08786 

[13] Swaroop Mishra, Daniel Khashabi, Chitta Baral, and Hannaneh Hajishirzi. 2021. Cross-Task Generalization via Natural Language Crowdsourcing Instructions. ArXiv preprint abs/2104.08773 (2021). https://arxiv.org/abs/2104.08773 

[14] D. Sculley, Gary Holt, Daniel Golovin, Eugene Davydov, Todd Phillips, Dietmar Ebner, Vinay Chaudhary, and Michael Young. 2014. Machine Learning: The High Interest Credit Card of Technical Debt. In SE4ML: Software Engineering for Machine Learning (NIPS 2014 Workshop)


[15] Ben Swanson, Kory Mathewson, Ben Pietrzak, Sherol Chen, and Monica Dinalescu. 2021. Story Centaur: Large Language Model Few Shot Learning as a Creative Writing Tool. In Proceedings of the 16th Conference of the European Chapter of the Association for Computational Linguistics: System Demonstrations. Association for Computational Linguistics, Online, 244–256. https: //aclanthology.org/2021.eacl-demos.29

[16] Romal Thoppilan, Daniel De Freitas, Jamie Hall, Noam Shazeer, Apoorv Kulshreshtha, Heng-Tze Cheng, Alicia Jin, Taylor Bos, Leslie Baker, Yu Du, et al. 2022. LaMDA: Language Models for Dialog Applications. ArXiv preprint abs/2201.08239 (2022). https://arxiv.org/abs/2201.08239 

[17] Tongshuang Wu, Michael Terry, and Carrie J Cai. 2022. AI Chains: Transparent and Controllable Human-AI Interaction by Chaining Large Language ModPrompts. In Proceedings of the 2022 CHI Conference on Human Factors in Computing Systems (New Orleans, LA, USA) (CHI ’21). Association for Computing Machinery, New York, NY, USA. https://doi.org/10.1145/3491102.3517582 

[18] Qian Yang, Aaron Steinfeld, Carolyn Rosé, and John Zimmerman. 2020. ReExamining Whether, Why, and How Human-AI Interaction Is Uniquely Difficult to Design. Association for Computing Machinery, New York, NY, USA, 1–13. https://doi.org/10.1145/3313831.3376301



댓글

이 블로그의 인기 게시물

SSL/TLS 인증서 오류를 해결- 리눅스명령모음 - SSL certificate problem

(truffle 환경 설정) 스마트 계약 배포 와 truffle deploy 오류 해결 - Error: Could not find artifacts for SimpleStorage from any sources

자기주권 신원 (SSI Self-Sovereign Identity) 인증의 발전 그리고 정보 민주화 (Information Democratization)