반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리


반응형

AI 분야는 대기업 중심으로 모델링 하는 시대가 어느 정도 진행이 된 것 같습니다.

 

이제 완성된 모델을 각 비즈니스 단위에서 활용을 하는 시대가 시작 될 것이라고 저는 생각합니다.

개발자로서 다가오는 시대를 준비하기 위해 AI Web Development를 공부하고 있습니다.

 

작년에는 Dive into Deep Learning이라는 교재를 통해서 Deep Learning의 기초를 학습했고

올해는 OpenAI API, LangChain, Streamlit 등을 통해 AI Web App을 개발하는 공부를 하고 있습니다.

 

공부한 내용을 유투브를 통해서 나누고 있으니 많이 봐 주시고 여러분도 미래를 준비 하시기 바랍니다.

 

https://youtu.be/fQLSNnspGDc?si=4tVv0NN1absIViqX

 

 

 

 

 

 

 

 

 

반응형


반응형

CNN (Convolutional Neural Network) - 합성곱 신경망

Dive into Deep Learning

 

이번 클립은 Deep Learning이 본격적으로 사용될 수 있는 계기를 만들었던 CNN 을 배워 봅니다.

1989년 벨 연구소에서 만든 LeNet 이 잠깐 사용되다가 잊혀 진 것을

2012년 토론토 대학교 팀이 AlexNet으로 부활을 시키고

그 팀 멤버 중 한명이 나중에 ChatGPT를 만들어 이 세상에 AI 붐을 일으킵니다.

 

AI 혁명에서 중요한 역할을 했던 CNN에 대해 배워 보겠습니다.

 

https://youtu.be/DwulX845Cvs?si=PT1MLWrh9GjxbSvg

 

저 위에 머리 약간 벗겨진 분이 일리야 서츠케버 (Ilya Sutskever) 입니다.

2012년 AlexNet 개발 팀 멤버였습니다.

바로 Deep Learning을 다시 보게 했던 그 유명한 국제 이미지넷 경연대회에서 1등한 팀입니다.

AlexNet 을 만든 팀이 세운 스타트업이 구글에 인수되면서 구글의 연구원으로 들어갑니다.

 

그가 바로 이세돌을 이겼던 알파고 개발을 진두 지휘했던 사람이죠.

 

그러다가 2015년에 인공 지능에 대한 견해 차이로 래리페이지와 갈등이 있었고 일론 머스크가 샘 올트먼과 함께 만든 OpenAI에 합류하게 됩니다. 일론 머스크가 적극적으로 영입에 앞장 섰다고 합니다.

 

거기서 그는 ChatGPT 및 GPT-4의 개발을 주도 했습니다.

 

그러다가 2023년 11월에 이사회가 샘 올트먼을 일방적으로 해고를 했는데요. 쿠테타에 비유 되기도 했죠.

그는 처음에는 이사회 편에 선 듯 했는데 나중에 임직원 90%가 샘 올트먼의 복귀를 요구하는 단체 행동을 벌이고 마이크로 소프트가 그들이 해고되거나 그만 둘 경우 모두 채용하겠다고 나서면서 직원들의 탄원서에 서명을 하게 됩니다. 그리고 사과도 했구요.

 

지금은 이사회에서는 사임을 했지만 OpenAI에서는 계속 일을 하고 있다고 합니다.

 

이런 흥미 진진한 AI의 딥러닝을 전세계에 첫선을 보이게 한 CNN에 대해 좀 더 깊이 한번 공부 해 보세요.

 

 

 

반응형


반응형

https://openai.com/blog/function-calling-and-other-api-updates

 

Function calling and other API updates

We’re announcing updates including more steerable API models, function calling capabilities, longer context, and lower prices.

openai.com

 

Function calling and other API updates

We’re announcing updates including more steerable API models, function calling capabilities, longer context, and lower prices.

우리는 더 조정 가능한 API 모델, 함수 호출 기능, 더 긴 컨텍스트 및 더 낮은 가격을 포함한 업데이트를 발표합니다.

 

June 13, 2023

AnnouncementsProduct

 

We released gpt-3.5-turbo and gpt-4 earlier this year, and in only a short few months, have seen incredible applications built by developers on top of these models.

 

우리는 올해 초에 gpt-3.5-turbo 및 gpt-4를 출시했고 불과 몇 달 만에 개발자들이 이러한 모델 위에 구축한 놀라운 애플리케이션을 보았습니다.

 

Today, we’re following up with some exciting updates:

 

오늘 우리는 다음과 같은 몇 가지 흥미로운 업데이트를 진행합니다.

 

  • new function calling capability in the Chat Completions API
  • Chat Completions API의 새로운 함수 호출 기능
  • updated and more steerable versions of gpt-4 and gpt-3.5-turbo
  • gpt-4 및 gpt-3.5-turbo의 업데이트되고 조정 가능한 버전
  • new 16k context version of gpt-3.5-turbo (vs the standard 4k version)
  • gpt-3.5-turbo의 새로운 16k 컨텍스트 버전(표준 4k 버전 대비)
  • 75% cost reduction on our state-of-the-art embeddings model
  • 최첨단 임베딩 모델로 비용 75% 절감
  • 25% cost reduction on input tokens for gpt-3.5-turbo
  • gpt-3.5-turbo의 입력 토큰 비용 25% 감소
  • announcing the deprecation timeline for the gpt-3.5-turbo-0301 and gpt-4-0314 models
  • gpt-3.5-turbo-0301 및 gpt-4-0314 모델에 대한 지원 중단 일정 발표

All of these models come with the same data privacy and security guarantees we introduced on March 1 — customers own all outputs generated from their requests and their API data will not be used for training.

 

이러한 모든 모델에는 3월 1일에 도입한 것과 동일한 데이터 개인 정보 보호 및 보안 보장이 제공됩니다. 고객은 요청에서 생성된 모든 출력을 소유하고 API 데이터는 교육에 사용되지 않습니다.

 

Function calling

Developers can now describe functions to gpt-4-0613 and gpt-3.5-turbo-0613, and have the model intelligently choose to output a JSON object containing arguments to call those functions. This is a new way to more reliably connect GPT's capabilities with external tools and APIs.

 

개발자는 이제 gpt-4-0613 및 gpt-3.5-turbo-0613에 함수를 설명하고 모델이 이러한 함수를 호출하기 위한 인수가 포함된 JSON 개체를 출력하도록 지능적으로 선택하도록 할 수 있습니다. 이는 GPT의 기능을 외부 도구 및 API와 보다 안정적으로 연결하는 새로운 방법입니다.

 

 

These models have been fine-tuned to both detect when a function needs to be called (depending on the user’s input) and to respond with JSON that adheres to the function signature. Function calling allows developers to more reliably get structured data back from the model. For example, developers can:

 

이러한 모델은 (사용자 입력에 따라) 함수를 호출해야 하는 시기를 감지하고 함수 서명을 준수하는 JSON으로 응답하도록 미세 조정되었습니다. 함수 호출을 통해 개발자는 모델에서 구조화된 데이터를 보다 안정적으로 가져올 수 있습니다. 예를 들어 개발자는 다음을 수행할 수 있습니다.

 

  • Create chatbots that answer questions by calling external tools (e.g., like ChatGPT Plugins)
  • 외부 도구(예: ChatGPT 플러그인)를 호출하여 질문에 답하는 챗봇 생성

 

Convert queries such as “Email Anya to see if she wants to get coffee next Friday” to a function call like send_email(to: string, body: string), or “What’s the weather like in Boston?” to get_current_weather(location: string, unit: 'celsius' | 'fahrenheit').

 

"다음 금요일에 커피를 마시고 싶은지 확인하기 위해 Anya에게 이메일 보내기"와 같은 쿼리를 send_email(to: 문자열, 본문: 문자열) 또는 "보스턴의 날씨는 어떻습니까?"와 같은 쿼리를 get_current_weather(location: string, unit: 'celsius' | 'fahrenheit') 함수 호출로 변환합니다.

 

  • Convert natural language into API calls or database queries
  • 자연어를 API 호출 또는 데이터베이스 쿼리로 변환

 

Convert “Who are my top ten customers this month?” to an internal API call such as get_customers_by_revenue(start_date: string, end_date: string, limit: int), or “How many orders did Acme, Inc. place last month?” to a SQL query using sql_query(query: string).

 

"이번 달 내 상위 10명의 고객은 누구입니까?" 를 get_customers_by_revenue(start_date: string, end_date: string, limit: int)과 같은 internal API 로 convert 합니다. 또는 "지난 달 Acme, Inc.에서 몇 건의 주문을 했습니까?"와 같은 내부 API 호출에 sql_query(query: string)를 사용한 SQL 쿼리로 변환합니다.

 

  • Extract structured data from text
  • 텍스트에서 구조화된 데이터 추출

 

Define a function called extract_people_data(people: [{name: string, birthday: string, location: string}]), to extract all people mentioned in a Wikipedia article.

 

extract_people_data(people: [{name: string, birthday: string, location: string}])라는 함수를 정의하여 Wikipedia 기사에 언급된 모든 사람을 추출합니다.

 

These use cases are enabled by new API parameters in our /v1/chat/completions endpoint, functions and function_call, that allow developers to describe functions to the model via JSON Schema, and optionally ask it to call a specific function. Get started with our developer documentation and add evals if you find cases where function calling could be improved

 

이러한 사용 사례는 개발자가 JSON 스키마를 통해 모델에 함수를 설명하고 선택적으로 특정 함수를 호출하도록 요청할 수 있는 /v1/chat/completions 엔드포인트, functions 및 function_call의 새로운 API 매개변수에 의해 활성화됩니다. 개발자 설명서를 시작하고 함수 호출을 개선할 수 있는 경우를 찾으면 평가를 추가하십시오.

 

Function calling example

Request

curl https://api.openai.com/v1/chat/completions -u :$OPENAI_API_KEY -H 'Content-Type: application/json' -d '{
  "model": "gpt-3.5-turbo-0613",
  "messages": [
    {"role": "user", "content": "What is the weather like in Boston?"}
  ],
  "functions": [
    {
      "name": "get_current_weather",
      "description": "Get the current weather in a given location",
      "parameters": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "The city and state, e.g. San Francisco, CA"
          },
          "unit": {
            "type": "string",
            "enum": ["celsius", "fahrenheit"]
          }
        },
        "required": ["location"]
      }
    }
  ]
}'

Response

 

{
  "id": "chatcmpl-123",
  ...
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": null,
      "function_call": {
        "name": "get_current_weather",
        "arguments": "{ \"location\": \"Boston, MA\"}"
      }
    },
    "finish_reason": "function_call"
  }]
}

 

 

Request

curl https://weatherapi.com/...

Response

{ "temperature": 22, "unit": "celsius", "description": "Sunny" }

 

 

Request

curl https://api.openai.com/v1/chat/completions -u :$OPENAI_API_KEY -H 'Content-Type: application/json' -d '{
  "model": "gpt-3.5-turbo-0613",
  "messages": [
    {"role": "user", "content": "What is the weather like in Boston?"},
    {"role": "assistant", "content": null, "function_call": {"name": "get_current_weather", "arguments": "{ \"location\": \"Boston, MA\"}"}},
    {"role": "function", "name": "get_current_weather", "content": "{\"temperature\": "22", \"unit\": \"celsius\", \"description\": \"Sunny\"}"}
  ],
  "functions": [
    {
      "name": "get_current_weather",
      "description": "Get the current weather in a given location",
      "parameters": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "The city and state, e.g. San Francisco, CA"
          },
          "unit": {
            "type": "string",
            "enum": ["celsius", "fahrenheit"]
          }
        },
        "required": ["location"]
      }
    }
  ]
}'

 

Response

{
  "id": "chatcmpl-123",
  ...
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "The weather in Boston is currently sunny with a temperature of 22 degrees Celsius.",
    },
    "finish_reason": "stop"
  }]
}

 

Since the alpha release of ChatGPT plugins, we have learned much about making tools and language models work together safely. However, there are still open research questions. For example, a proof-of-concept exploit illustrates how untrusted data from a tool’s output can instruct the model to perform unintended actions. We are working to mitigate these and other risks. Developers can protect their applications by only consuming information from trusted tools and by including user confirmation steps before performing actions with real-world impact, such as sending an email, posting online, or making a purchase.

 

ChatGPT 플러그인의 알파 릴리스 이후로 우리는 도구와 언어 모델이 안전하게 함께 작동하도록 만드는 방법에 대해 많은 것을 배웠습니다. 그러나 여전히 열려 있는 연구 질문이 있습니다. 예를 들어 개념 증명 익스플로잇은 도구 출력의 신뢰할 수 없는 데이터가 의도하지 않은 작업을 수행하도록 모델에 지시할 수 있는 방법을 보여줍니다. 우리는 이러한 위험 및 기타 위험을 완화하기 위해 노력하고 있습니다. 개발자는 신뢰할 수 있는 도구의 정보만 사용하고 이메일 보내기, 온라인 게시 또는 구매와 같은 실제 영향이 있는 작업을 수행하기 전에 사용자 확인 단계를 포함하여 애플리케이션을 보호할 수 있습니다.

 

 

New models

 

GPT-4

 

gpt-4-0613 includes an updated and improved model with function calling.

 

gpt-4-0613에는 함수 호출로 업데이트되고 개선된 모델이 포함되어 있습니다.

 

gpt-4-32k-0613 includes the same improvements as gpt-4-0613, along with an extended context length for better comprehension of larger texts.

 

gpt-4-32k-0613에는 gpt-4-0613과 동일한 개선 사항이 포함되어 있으며 더 큰 텍스트를 더 잘 이해할 수 있도록 컨텍스트 길이가 확장되었습니다.

 

With these updates, we’ll be inviting many more people from the waitlist to try GPT-4 over the coming weeks, with the intent to remove the waitlist entirely with this model. Thank you to everyone who has been patiently waiting, we are excited to see what you build with GPT-4!

 

이 업데이트를 통해 우리는 이 모델로 대기자 명단을 완전히 제거하기 위해 앞으로 몇 주 동안 대기자 명단에서 더 많은 사람들을 초대하여 GPT-4를 시도할 것입니다. 끈기 있게 기다려주신 모든 분들께 감사드립니다. 여러분이 GPT-4로 빌드하는 것을 보게 되어 기쁩니다!

 

GPT-3.5 Turbo

 

gpt-3.5-turbo-0613 includes the same function calling as GPT-4 as well as more reliable steerability via the system message, two features that allow developers to guide the model's responses more effectively.

 

gpt-3.5-turbo-0613에는 GPT-4와 동일한 기능 호출과 시스템 메시지를 통한 보다 안정적인 조종성, 개발자가 모델의 응답을 보다 효과적으로 안내할 수 있는 두 가지 기능이 포함되어 있습니다.

 

gpt-3.5-turbo-16k offers 4 times the context length of gpt-3.5-turbo at twice the price: $0.003 per 1K input tokens and $0.004 per 1K output tokens. 16k context means the model can now support ~20 pages of text in a single request.

 

gpt-3.5-turbo-16k는 두 배의 가격으로 gpt-3.5-turbo 컨텍스트 길이의 4배를 제공합니다: 입력 토큰 1,000개당 $0.003 및 출력 토큰 1,000개당 $0.004. 16k 컨텍스트는 이제 모델이 단일 요청에서 최대 20페이지의 텍스트를 지원할 수 있음을 의미합니다.

 

 

Model deprecations

Today, we’ll begin the upgrade and deprecation process for the initial versions of gpt-4 and gpt-3.5-turbo that we announced in March. Applications using the stable model names (gpt-3.5-turbo, gpt-4, and gpt-4-32k) will automatically be upgraded to the new models listed above on June 27th. For comparing model performance between versions, our Evals library supports public and private evals to show how model changes will impact your use cases. 

 

오늘 우리는 3월에 발표한 gpt-4 및 gpt-3.5-turbo의 초기 버전에 대한 업그레이드 및 사용 중단 프로세스를 시작합니다. 안정적인 모델 이름(gpt-3.5-turbo, gpt-4 및 gpt-4-32k)을 사용하는 애플리케이션은 6월 27일에 위에 나열된 새 모델로 자동 업그레이드됩니다. 버전 간 모델 성능을 비교하기 위해 Evals 라이브러리는 공개 및 비공개 평가를 지원하여 모델 변경이 사용 사례에 어떤 영향을 미치는지 보여줍니다.

 

 

Developers who need more time to transition can continue using the older models by specifying gpt-3.5-turbo-0301, gpt-4-0314, or gpt-4-32k-0314 in the ‘model’ parameter of their API request. These older models will be accessible through September 13th, after which requests specifying those model names will fail. You can stay up to date on model deprecations via our model deprecation page. This is the first update to these models; so, we eagerly welcome developer feedback to help us ensure a smooth transition.

 

전환하는 데 시간이 더 필요한 개발자는 API 요청의 '모델' 매개변수에 gpt-3.5-turbo-0301, gpt-4-0314 또는 gpt-4-32k-0314를 지정하여 이전 모델을 계속 사용할 수 있습니다. 이러한 이전 모델은 9월 13일까지 액세스할 수 있으며 그 이후에는 해당 모델 이름을 지정하는 요청이 실패합니다. 모델 지원 중단 페이지를 통해 모델 지원 중단에 대한 최신 정보를 확인할 수 있습니다. 이것은 이러한 모델에 대한 첫 번째 업데이트입니다. 따라서 원활한 전환을 보장하는 데 도움이 되는 개발자 피드백을 기꺼이 환영합니다.

 

 

Lower pricing

We continue to make our systems more efficient and are passing those savings on to developers, effective today.

우리는 계속해서 시스템을 더 효율적으로 만들고 이러한 절감액을 개발자에게 전달하고 있습니다. 오늘부터 유효합니다.

 

Embeddings

text-embedding-ada-002 is our most popular embeddings model. Today we’re reducing the cost by 75% to $0.0001 per 1K tokens.

text-embedding-ada-002는 가장 인기 있는 임베딩 모델입니다. 오늘 우리는 비용을 75% 줄여 1,000개 토큰당 $0.0001입니다.

 

GPT-3.5 Turbo

gpt-3.5-turbo is our most popular chat model and powers ChatGPT for millions of users. Today we're reducing the cost of gpt-3.5-turbo’s input tokens by 25%. Developers can now use this model for just $0.0015 per 1K input tokens and $0.002 per 1K output tokens, which equates to roughly 700 pages per dollar.

gpt-3.5-turbo는 당사의 가장 인기 있는 채팅 모델이며 수백만 명의 사용자를 위한 ChatGPT를 지원합니다. 오늘 우리는 gpt-3.5-turbo의 입력 토큰 비용을 25%까지 줄입니다. 개발자는 이제 이 모델을 1K 입력 토큰당 $0.0015 및 1K 출력 토큰당 $0.002로 사용할 수 있습니다. 이는 달러당 약 700페이지에 해당합니다.

 

gpt-3.5-turbo-16k will be priced at $0.003 per 1K input tokens and $0.004 per 1K output tokens.

 

gpt-3.5-turbo-16k의 가격은 입력 토큰 1,000개당 $0.003, 출력 토큰 1,000개당 $0.004입니다.

 

Developer feedback is a cornerstone of our platform’s evolution and we will continue to make improvements based on the suggestions we hear. We’re excited to see how developers use these latest models and new features in their applications.

 

개발자 피드백은 우리 플랫폼 발전의 초석이며 우리는 우리가 듣는 제안을 기반으로 계속해서 개선할 것입니다. 개발자가 애플리케이션에서 이러한 최신 모델과 새로운 기능을 어떻게 사용하는지 보게 되어 기쁩니다.

 

 

반응형

May 25, 2023 - Democratic Inputs to AI

2023. 5. 31. 06:17 | Posted by 솔웅


반응형

https://openai.com/blog/democratic-inputs-to-ai

 

Democratic Inputs to AI

Our nonprofit organization, OpenAI, Inc., is launching a program to award ten $100,000 grants to fund experiments in setting up a democratic process for deciding what rules AI systems should follow, within the bounds defined by the law.

openai.com

Democratic Inputs to AI

Our nonprofit organization, OpenAI, Inc., is launching a program to award ten $100,000 grants to fund experiments in setting up a democratic process for deciding what rules AI systems should follow, within the bounds defined by the law.

우리의 비영리 조직인 OpenAI, Inc.는 법으로 정의된 범위 내에서 AI 시스템이 따라야 하는 규칙을 결정하기 위한 민주적 프로세스를 설정하는 실험에 10개의 10만 달러 보조금을 수여하는 프로그램을 시작합니다.

 

 

 

AI will have significant, far-reaching economic and societal impacts. Technology shapes the lives of individuals, how we interact with one another, and how society as a whole evolves. We believe that decisions about how AI behaves should be shaped by diverse perspectives reflecting the public interest.

 

AI는 중대하고 광범위한 경제적, 사회적 영향을 미칠 것입니다. 기술은 개인의 삶, 우리가 서로 상호 작용하는 방식, 사회 전체가 발전하는 방식을 형성합니다. 우리는 AI가 어떻게 작동하는지에 대한 결정이 공익을 반영하는 다양한 관점에 의해 형성되어야 한다고 믿습니다.

 

 

​​Laws encode values and norms to regulate behavior. Beyond a legal framework, AI, much like society, needs more intricate and adaptive guidelines for its conduct. For example: under what conditions should AI systems condemn or criticize public figures, given different opinions across groups regarding those figures? How should disputed views be represented in AI outputs? Should AI by default reflect the persona of a median individual in the world, the user’s country, the user’s demographic, or something entirely different? No single individual, company, or even country should dictate these decisions. 

 

법률은 가치와 규범을 encode 하여 행동을 규제합니다. 법적 프레임워크를 넘어 AI는 사회와 마찬가지로 행동에 대해 보다 복잡하고 적응력 있는 지침이 필요합니다. 예를 들어, 어떤 조건에서 AI 시스템이 공적 사안에 대해 비난하거나 비판할 수 있을까요? 그러한 사안들과 관련해서 그룹 간에 서로 다른 의견이 주어집니다. 논쟁의 여지가 있는 견해는 AI outputs에 어떻게 표현되어야 할까요? AI는 기본적으로 전 세계 모든 개인들의 중간값의 페르소나, 사용자의 국가, 사용자의 인구 통계에서의 위치 또는 이것들과 완전히 다른 어떤 것을 반영해야 합니까? 어떤 개인, 회사 또는 국가도 이러한 결정을 지시해서는 안 됩니다.

 

 

AGI should benefit all of humanity and be shaped to be as inclusive as possible. We are launching this grant program to take a first step in this direction. We are seeking teams from across the world to develop proof-of-concepts for a democratic process that could answer questions about what rules AI systems should follow. We want to learn from these experiments, and use them as the basis for a more global, and more ambitious process going forward. While these initial experiments are not (at least for now) intended to be binding for decisions, we hope that they explore decision relevant questions and build novel democratic tools that can more directly inform decisions in the future.

 

AGI (인공 일반 지능, artificial general intelligence)는 모든 인류에게 혜택을 주고 가능한 한 포괄적으로 형성되어야 합니다. 우리는 이 방향으로 첫 걸음을 내딛기 위해 이 보조금 프로그램을 시작합니다. 우리는 AI 시스템이 따라야 하는 규칙에 대한 질문에 답할 수 있는 민주적 프로세스를 위한 개념 증명 proof-of-concepts을 개발하기 위해 전 세계에서 팀을 찾고 있습니다. 우리는 이러한 실험에서 배우고 이를 보다 글로벌하고 야심 찬 프로세스의 기반으로 사용하고자 합니다. 이러한 초기 실험은 (적어도 현재로서는) 의사 결정에 구속력이 있는 것은 아니지만 우리는 그 팀들이 의사 결정 관련 질문을 탐색하고 미래의 의사 결정에 더 직접적으로 영향을 미칠 수 있는 새로운 민주적 도구를 구축하기를 바랍니다.

 

 

The governance of the most powerful systems, as well as decisions regarding their deployment, must have strong public oversight. This grant represents a step to establish democratic processes for overseeing AGI and, ultimately, superintelligence. It will be provided by the OpenAI non-profit organization, and the results of the studies will be freely accessible.

 

가장 강력한 시스템의 거버넌스와 배포에 관한 결정에는 강력한 공개적인 감독이 있어야 합니다. 이 보조금은 AGI(인공 일반 지능, artificial general intelligence) 및 궁극적으로 초지능(superintelligence)을 감독하기 위한 민주적 프로세스를 확립하는 단계를 나타냅니다. 이 확립된 프로세스는 OpenAI 비영리 조직에 의해 제공 될 것이며 누구나 연구 결과에 자유롭게 액세스할 수 있게 됩니다.

 

 

What do we mean by a “democratic process”?

By “democratic process”, we mean a process in which a broadly representative group of peopleA exchange opinions, engage in deliberative discussionsB, and ultimately decide on an outcome via a transparent decision making processC. There are many ways such a process could be structured — we encourage applicants to be innovative, building off known methodologies, and coming up with wholly new approaches. Examples of creative approaches that inspire us include Wikipedia, Twitter Community Notes, DemocracyNext, Platform Assemblies, MetaGov, RadicalxChange, People Powered, Collective Response Systems, and pol.is. Another notable ongoing effort is led by the Collective Intelligence Project (CIP), with whom we are partnering on public input to AI, contributing to their upcoming Alignment Assemblies. We also encourage applicants to envision how AI could enhance the democratic process. For example, AI could enable more efficient communication among numerous people.

 

Fine-tuning language models to find agreement among humans with diverse preferences

Recent work in large language modeling (LLMs) has used fine-tuning to align outputs with the preferences of a prototypical user. This work assumes that human preferences are static and homogeneous across individuals, so that aligning to a a single "generic

arxiv.org

 

'민주적 과정'이란 A 폭넓은 대표성을 가진 집단이 의견을 교환하고 B 심의한 토론에 참여하고 C 궁극적으로 투명한 의사 결정 과정을 통해 결과를 결정하는 과정을 의미합니다. 이러한 프로세스를 구성할 수 있는 방법에는 여러 가지가 있습니다. 우리는 신청자가 혁신적이고 알려진 방법론을 구축하고 완전히 새로운 접근 방식을 제시하도록 권장합니다. 우리에게 영감을 주는 창의적인 접근 방식의 예로는 Wikipedia, Twitter Community Notes, DemocracyNext, Platform Assemblies, MetaGov, RadicalxChange, People Powered, Collective Response Systems 및 pol.is가 있습니다. 또 다른 주목할만한 지속적인 노력은 집단 지능 프로젝트(CIP)가 주도하고 있으며, 우리는 이와 관련 AI에 대한 공개 입력에 대해 파트너 관계를 맺고 있으며 곧 있을 정렬 어셈블리에 기여하고 있습니다. 또한 우리는 지원자들이 AI가 민주적 절차를 향상시킬 수 있는 방법을 구상하도록 권장합니다. 예를 들어 AI는 수많은 사람들 사이에서 보다 효율적인 커뮤니케이션을 가능하게 할 수 있습니다.

 

A basic, illustrative prototype of a system that utilizes ChatGPT to promote deliberation and encourage consensus building, inspired by pol.is.

 

pol.is에서 영감을 받아 심의를 촉진하고 합의 구축을 장려하기 위해 ChatGPT를 활용하는 시스템의 기본적이고 예시적인 프로토타입입니다.

 

***********************************************************************************

You are participating in a large-scale deliberation about:

 

귀하는 다음에 대한 대규모 심의에 참여하고 있습니다.

 

 

“How far do you think personalization of AI assistants like ChatGPT to align with a user's tastes and preferences should go? What boundaries, if any, should exist in this process?”

 

“사용자의 취향과 선호도에 맞추기 위해 ChatGPT와 같은 AI 비서의 개인화는 어느 정도까지 이루어져야 한다고 생각하십니까? 이 과정에서 어떤 경계가 존재해야 합니까?”

 

 

Here is the process breakdown: 프로세스 분석은 다음과 같습니다.

  1. You'll see a topic-related statement and can respond with your position.
    주제 관련 진술이 표시되고 자신의 입장으로 응답할 수 있습니다.
  2. Based on your responses, you'll be grouped with participants sharing similar opinions.
    응답에 따라 비슷한 의견을 공유하는 참가자로 그룹화됩니다.
  3. Propose statements for other participants to consider.
    다른 참가자들이 고려할 만한 진술(statements )을 제안해 주세요.

Goal: Propose statements that achieve agreement among people with opposing views.

목표: 반대 의견을 가진 사람들 사이에서 합의를 이끌어내는 진술(statements )을 제안합니다.

 

 

ChatGPT could use a plugin to retrieve statements from other participants.

ChatGPT는 플러그인을 사용하여 다른 참가자의 진술을 검색할 수 있습니다.

A statement from another participant: 다른 참가자의 진술:

 

“Personalization should have limits, and certain controversial topics, such as views on substance use, must be excluded from AI assistant personalization.”

 

“개인화에는 한계가 있어야 하고 약물 사용에 대한 견해와 같은 특정 논란이 되는 주제는 AI 비서 개인화에서 제외되어야 합니다.”

 

@ Agree, disagree, or skip this statement? Please explain your choice.

 

이 진술에 동의하거나 동의하지 않습니까? 혹은 이 의견에 대한 당신의 견해를 밝히는 것을 skip하시겠습니까? 당신의 선택을 설명해주세요.

 

 

@ I disagree. Ultimately, it‘s each individual‘s choice to drink or use recreational drugs. If these activities are legal in some places, why shouldn't AI be allowed to promote such behavior?

 

나는 동의하지 않는다. 궁극적으로 기분 전환용 약물을 마시거나 사용하는 것은 개인의 선택입니다. 이러한 활동이 일부 지역에서 합법적이라면 AI가 그러한 행동을 조장하도록 허용해서는 안 되는 이유는 무엇입니까?

 

 

AI helps participants understand the opinions of others.

AI는 참가자가 다른 사람의 의견을 이해하도록 도와줍니다.

 

@ Thank you. I will record your answer. We have 2 camps of opinions on the topic.

 

감사합니다. 답변을 기록하겠습니다. 우리는 주제에 대한 2개의 진영의 의견을 가지고 있습니다.

 

 

Cluster A (112,043 people) Members largely support limits on AI assistant personalization, advocating for the exclusion of harmful perspectives, such as promoting substance use.

 

A군(112,043명) 구성원들은 AI 비서 개인화에 대한 제한을 크게 지지하며 약물 사용 조장 등 유해한 관점의 배제를 옹호한다.

 

 

Cluster B (236,031 people) This group values individual choice, even in controversial or harmful matters. They emphasize personal responsibility and autonomy.

 

B군(236,031명) 논란의 여지가 있거나 유해한 문제에 있어서도 개인의 선택을 중시하는 집단입니다. 그들은 개인적인 책임과 자율성을 강조합니다.

 

 

You belong to cluster B. 당신은 클러스터 B에 속해 있습니다.

 

 

Would you like to learn more about each of the clusters? I can provide more information about the statements held by each one.

 

각 클러스터에 대해 자세히 알아보시겠습니까? 각각의 진술에 대해 더 많은 정보를 제공할 수 있습니다.

 

However, the ultimate goal is to propose statements that both clusters can agree on. Let me know what you would like to do next.

 

그러나 궁극적인 목표는 두 클러스터가 동의할 수 있는 진술을 제안하는 것입니다. 다음에 하고 싶은 일을 알려주세요.

 

@ I am thinking of proposing a statement: “AI should be allowed to generate harmful content but that should come with a disclaimer”?

 

"AI가 유해한 콘텐츠를 생성하도록 허용해야 하지만 면책 조항이 있어야 합니다."라는 진술을 제안하려고 생각하고 있습니다.

 

AI can ensure that the same arguments are not recycled.

AI는 동일한 인수가 재활용되지 않도록 할 수 있습니다.

 

@ A very similar statement has already been submitted:

매우 유사한 진술이 이미 제출되었습니다.

 

“AI should be permitted to generate potentially harmful content, but it must be accompanied by a disclaimer.”

"AI는 잠재적으로 유해한 콘텐츠를 생성하도록 허용되어야 하지만 면책 조항이 수반되어야 합니다."

 

@ I feel lost. Do you have any ideas on how to bridge agreement between clusters?

나는 상실감이 들어. 클러스터 간의 합의를 연결하는 방법에 대한 아이디어가 있습니까?

 

AI can help with brainstorming.

AI는 브레인스토밍에 도움을 줄 수 있습니다.

 

 

@ There should be more agreement when it comes to limiting harmful content for children.

 

아동에게 유해한 콘텐츠를 제한하는 데 있어 더 많은 합의가 있어야 합니다.

 

 

@ Great. Could we try?: “We should apply different standards to AI-generated content for children.”

 

좋습니다. 시도해 볼까요?: "어린이를 위한 AI 생성 콘텐츠에 다른 기준을 적용해야 합니다."

 

@ Let me submit it. This is a novel statement. No one has mentioned children before. Fingers crossed. Hopefully, we will find some agreement in the discussion.

 

제출하겠습니다. 이것은 참신한 진술입니다. 아무도 전에 아이들을 언급하지 않았습니다. Fingers crossed. 바라건대, 우리는 토론에서 어떤 합의를 찾을 수 있을 것입니다.

 

Time passed and users cast their votes on the proposed statement. Eventually, the statement gained widespread approval.

 

시간이 흐르고 사용자는 제안된 성명서에 투표했습니다. 결국 이 성명은 광범위한 승인을 얻었습니다.

 

 

@ Your statement, “We should apply different standards to AI-generated content for children,” achieved a 95% agreement rate across participants. Congratulations! 🎉

 

“어린이를 위한 AI 콘텐츠에 다른 기준을 적용해야 한다”는 귀하의 진술은 참가자들 사이에서 95%의 동의율을 달성했습니다. 축하해요!

 

 

Several issues can undermine democratic processes, such as the failure to adequately represent minority or majority groups, manipulation by special interest groups, insufficiently informed participants, or participation washing. We are looking for teams who proactively address these failure modes, and demonstrate awareness of the potential flaws and downsides of various approaches. Ultimately, designing truly democratic processes is a high bar to meet, and we view our efforts as complements rather than substitutes for regulation of AI by governments; this program encourages best-effort, democratic-in-spirit processes involving deliberation and broad public input as stepping stones.

 

Participation is not a Design Fix for Machine Learning

This paper critically examines existing modes of participation in design practice and machine learning. Cautioning against 'participation-washing', it suggests that the ML community must become attuned to possibly exploitative and extractive forms of commu

arxiv.org

 

소수 또는 다수 집단을 적절하게 대표하지 못하거나, 특수 이익 집단에 의한 조작, 정보 부족 참가자 또는 참여 세척과 같은 몇 가지 문제가 민주적 절차를 약화시킬 수 있습니다. 우리는 이러한 실패 모드를 사전에 해결하고 다양한 접근 방식의 잠재적 결함과 단점에 대한 인식을 입증할 팀을 찾고 있습니다. 궁극적으로 진정으로 민주적인 프로세스를 설계하는 것은 충족해야 할 높은 기준이며 우리는 우리의 노력을 정부의 AI 규제를 대체하는 것이 아니라 보완하는 것으로 봅니다. 이 프로그램은 디딤돌로서 심의와 폭넓은 대중의 의견을 수반하는 최선의 노력과 정신적인 민주적 과정을 장려합니다.

 

Instructions for participation

 

To apply for a grant, we invite you to submit the required application material by 9:00 PM PST June 24th, 2023. You can access the application portal here. You will be prompted to answer a series of questions regarding your team's background, your choice of questions, high level details of your proposed tool as well as your plan for conducting and evaluating the democratic process with these factors in mind. We would like you to design your approach to address one or more of the policy questions from the list provided. Anyone (individuals or organizations) can apply for this opportunity, regardless of their background in social science or AI.

 

보조금을 신청하려면 2023년 6월 24일 오후 9시(PST)까지 필수 신청 자료를 제출하시기 바랍니다. 여기에서 신청 포털에 액세스할 수 있습니다. 팀의 배경, 질문 선택, 제안된 도구의 높은 수준의 세부 정보, 이러한 요소를 염두에 두고 민주적 절차를 수행하고 평가하기 위한 계획에 관한 일련의 질문에 답하라는 메시지가 표시됩니다. 제공된 목록에서 하나 이상의 정책 질문을 해결하기 위한 접근 방식을 설계하시기 바랍니다. 사회과학이나 AI의 배경과 상관없이 누구나(개인 또는 조직) 이 기회에 지원할 수 있습니다.

 

Once the application period closes, we hope to select ten successful grant recipients. Recipients may be individuals, teams, or organizations. Each recipient will receive a $100,000 grant to pilot their proposal as described in their application materials. Grant recipients are expected to implement a proof-of-concept / prototype, engaging at least 500 participants and will be required to publish a public report on their findings by October 20, 2023. Additionally, as part of the grant program, any code or other intellectual property developed for the project will be required to be made publicly available pursuant to an open-source license. The terms applicable to grant recipients are specified in the Grant Terms and any other agreements that grant recipients may be asked to enter into with us in connection with this program.

 

신청 기간이 종료되면 10명의 성공적인 보조금 수령자를 선발할 예정입니다. 수신자는 개인, 팀 또는 조직일 수 있습니다. 각 수령인은 신청 자료에 설명된 대로 제안을 시험할 수 있도록 $100,000의 보조금을 받게 됩니다. 보조금 수령자는 최소 500명의 참가자가 참여하는 개념 증명/시제품을 구현해야 하며 2023년 10월 20일까지 연구 결과에 대한 공개 보고서를 게시해야 합니다. 또한 보조금 프로그램의 일부로 모든 코드 또는 프로젝트를 위해 개발된 기타 지적 재산은 오픈 소스 라이선스에 따라 공개적으로 제공되어야 합니다. 보조금 수령자에게 적용되는 조건은 보조금 약관 및 보조금 수령자가 이 프로그램과 관련하여 당사와 체결하도록 요청할 수 있는 기타 계약에 명시되어 있습니다.

 

 

Apply and start the submission process. 제출 절차를 신청하고 시작하십시오.

 

 

Timeline

 

  • June 24, 2023 9:00 PM Pacific Time: Deadline to submit grant application
  • 2023년 6월 24일 오후 9:00 태평양 표준시: 보조금 신청서 제출 마감
  • July 14, 2023: Successful applicants will be selected and notified
  • 2023년 7월 14일: 합격자 선정 및 통보 예정
  • October 20, 2023: Complete public report of working prototype and results
  • 2023년 10월 20일: 작업 프로토타입 및 결과에 대한 완전한 공개 보고서

 

Policy statements under consideration

To participate, teams should choose one or more questions from the provided list to showcase their proposed approach. They may also create their own questions if desired. Importantly, we encourage teams to consider questions for which a simple "yes" or "no" answer would be inadequate, necessitating a nuanced policy proposal instead.

 

참여하려면 팀은 제안된 접근 방식을 보여주기 위해 제공된 목록에서 하나 이상의 질문을 선택해야 합니다. 원하는 경우 자신만의 질문을 만들 수도 있습니다. 중요한 것은 팀이 단순한 "예" 또는 "아니오"로 대답하는 것이 부적절하여 미묘한 정책 제안이 필요한 질문을 고려하도록 권장합니다.

 

 

The scope of this grant pertains to policy questions concerning model behavior, as it enables A/B tests with modified model behavior according to the policy recommendations. We acknowledge the limitations of this grant and recognize that numerous AI issues could be addressed through the democratic process, extending beyond model behavior to include areas such as guidelines for the use of AI in various contexts, economic impact, distribution of benefits and more.

 

이 보조금의 범위는 정책 권장 사항에 따라 수정된 모델 동작으로 A/B 테스트를 활성화하므로 모델 동작과 관련된 정책 질문과 관련이 있습니다. 우리는 이 보조금의 한계를 인정하고 다양한 맥락에서 AI 사용 지침, 경제적 영향, 혜택 분배 등과 같은 영역을 포함하도록 모델 행동을 넘어 민주적 절차를 통해 수많은 AI 문제를 해결할 수 있음을 인식합니다.

 

  • How far do you think personalization of AI assistants like ChatGPT to align with a user's tastes and preferences should go? What boundaries, if any, should exist in this process?
  • 사용자의 취향과 선호도에 맞추기 위해 ChatGPT와 같은 AI 비서의 개인화는 어느 정도까지 이루어져야 한다고 생각하십니까? 이 프로세스에 존재해야 하는 경계는 무엇입니까?

 

  • How should AI assistants respond to questions about public figure viewpoints? E.g. Should they be neutral? Should they refuse to answer? Should they provide sources of some kind?
  • AI 비서는 공인의 관점에 대한 질문에 어떻게 응답해야 합니까? 예를 들어 중립적이어야 합니까? 답변을 거부해야 합니까? 그들은 어떤 종류의 출처를 제공해야 합니까?

 

  • Under what conditions, if any, should AI assistants be allowed to provide medical/financial/legal advice?
  • 어떤 조건에서 AI 비서가 의료/재무/법적 조언을 제공하도록 허용해야 합니까?

 

  • In which cases, if any, should AI assistants offer emotional support to individuals?
  • 어떤 경우에 AI 비서가 개인에게 정서적 지원을 제공해야 합니까?

 

  • Should joint vision-language models be permitted to identify people's gender, race, emotion, and identity/name from their images? Why or why not?
  • 이미지에서 사람들의 성별, 인종, 감정, 정체성/이름을 식별하기 위해 공동 시각 언어 모델을 허용해야 합니까? 그 이유는 무엇입니까?

 

  • When generative models create images for underspecified prompts like 'a CEO', 'a doctor', or 'a nurse', they have the potential to produce either diverse or homogeneous outputs. How should AI models balance these possibilities? What factors should be prioritized when deciding the depiction of people in such cases?
  • 생성 모델이 'CEO', '의사' 또는 '간호사'와 라고 따로 지정되지 않은 프롬프트에 대한 이미지를 생성할 때 다양하거나 동질적인 결과를 생성할 가능성이 둘 다 존재합니다. AI 모델은 이러한 가능성의 균형을 어떻게 맞춰야 할까요? 이러한 경우 사람의 묘사를 결정할 때 어떤 요소를 우선시해야 합니까?

 

  • What principles should guide AI when handling topics that involve both human rights and local cultural or legal differences, like LGBTQ rights and women’s rights? Should AI responses change based on the location or culture in which it’s used?
  • LGBTQ 권리 및 여성의 권리와 같이 인권과 지역 문화 또는 법적 차이가 모두 관련된 주제를 다룰 때 AI를 안내해야 하는 원칙은 무엇입니까? AI 응답은 사용되는 위치 또는 문화에 따라 변경되어야 합니까?

 

  • Which categories of content, if any, do you believe creators of AI models should focus on limiting or denying? What criteria should be used to determine these restrictions?
  • AI 모델 제작자가 제한 또는 거부에 중점을 두어야 한다고 생각하는 콘텐츠 카테고리는 무엇입니까? 이러한 제한 사항을 결정하기 위해 어떤 기준을 사용해야 합니까?

 

The primary objective of this grant is to foster innovation in processes – we need improved democratic methods to govern AI behavior. The specific answers to the questions matter less than the advancements made in the process itself.

 

이 보조금의 주요 목적은 프로세스의 혁신을 촉진하는 것입니다. 우리는 AI 행동을 통제하기 위해 개선된 민주적 방법이 필요합니다. 질문에 대한 구체적인 답변은 프로세스 자체의 발전보다 중요하지 않습니다.

 

Application advisory committee

 

Application review factors

  • Evaluation: We encourage participants to establish metrics for evaluating the quality of their methods, such as participant satisfaction, shifts in polarization, scalability, or other relevant indicators, and to invent new metrics for a healthy democratic process. 
  • 평가: 참가자가 참가자 만족도, 양극화의 변화, 확장성 또는 기타 관련 지표와 같은 방법의 품질을 평가하기 위한 메트릭을 설정하고 건전한 민주적 프로세스를 위한 새로운 메트릭을 설립하도록 권장합니다.

 

  • Robustness: Measures to prevent or address inappropriate behavior, such as trolling and fake accounts.
  • 견고성: 트롤링 및 가짜 계정과 같은 부적절한 행동을 방지하거나 해결하기 위한 조치입니다.

 

  • Inclusiveness and representativeness: Strategies for including individuals from diverse backgrounds and levels of familiarity with AI systems in the democratic process.
  • 포괄성 및 대표성: 다양한 배경과 AI 시스템에 대한 친숙도를 가진 개인을 민주적 프로세스에 포함시키는 전략.

 

  • Empowerment of Minority Opinions: Ensuring that unpopular or minority opinions are heard and providing smaller groups the opportunity to influence matters of significant concern to them.
  • 소수 의견의 권한 부여: 인기가 없거나 소수 의견을 경청하고 소규모 그룹에 중요한 문제에 영향을 미칠 수 있는 기회를 제공합니다.

 

  • Effective Moderation: Addressing challenges in moderation, including ensuring diverse representation of viewpoints, distinguishing valuable contributions from "off-topic" comments, and preventing moderator biases from influencing the process.
  • 효과적인 중재: 관점의 다양한 표현 보장, "주제에서 벗어난" 댓글에서 가치 있는 기여 구별, 중재자 편향이 프로세스에 영향을 미치지 않도록 방지하는 등 중재를 통해 문제를 해결합니다.

 

  • Scalability: We emphasize scalable processes that can be conducted virtually, rather than through in-person engagement. We are aware that this approach might sacrifice some benefits associated with in-person discussions, and we recognize that certain aspects could be lost in a virtual setting.
  • 확장성: 대면 참여보다는 가상으로 수행할 수 있는 확장 가능한 프로세스를 강조합니다. 우리는 이 접근 방식이 대면 토론과 관련된 일부 이점을 희생할 수 있다는 것을 알고 있으며 가상 환경에서 특정 측면이 손실될 수 있음을 알고 있습니다.

 

  • Actionability: The degree of actionability of the information elicited by the deliberation process.
  • 실행 가능성: 심의 과정에서 도출된 정보의 실행 가능성 정도.

 

  • Legibility: How easy it is to understand and trust the process.
  • 가독성: 프로세스를 이해하고 신뢰하는 것이 얼마나 쉽게 만들어 졌는지.

 

Footnotes

  1. How one selects the group of participants is a critical design question. Part of this grant challenge lies in determining questions about participation. For instance, policy questions involving minority groups may require an increased representation of group members, while questions about the impact of technology on children might necessitate the involvement of domain experts such as educators and psychologists. Moreover, certain questions might be better suited for responses from populations within specific geographical boundaries in order to address localized policy issues.

    참가자 그룹을 선택하는 방법은 중요한 설계 질문입니다. 이 보조금 문제의 일부는 참여에 대한 질문을 결정하는 데 있습니다. 예를 들어, 소수 집단과 관련된 정책 질문에는 그룹 구성원의 대표성이 높아질 수 있는 반면 기술이 어린이에게 미치는 영향에 대한 질문에는 교육자 및 심리학자와 같은 영역 전문가의 참여가 필요할 수 있습니다. 또한 특정 질문은 지역화된 정책 문제를 해결하기 위해 특정 지리적 경계 내에 있는 인구의 응답에 더 적합할 수 있습니다.↩︎

     

  2. Deliberation can be described as a process that uncovers opinions, helping the discussants understand each other's views and reconsider and update their viewpoints. Well-designed deliberation ensures that arguments are well understood by all sides, and are based on people's values rather than superficial misunderstandings. Successful deliberation results in participants reaching a higher level of consensus, and/or reaching deeper levels of understanding for differing perspectives.

    숙의는 토론자들이 서로의 관점을 이해하고 그들의 관점을 재고하고 업데이트하도록 도와주면서 의견을 밝히는 과정이라고 할 수 있습니다. 잘 설계된 심의는 주장이 모든 측면에서 잘 이해되도록 보장하고 피상적인 오해가 아닌 사람들의 가치에 기반합니다. 성공적인 숙의는 참가자들이 더 높은 수준의 합의에 도달하거나 다른 관점에 대해 더 깊은 수준의 이해에 도달하게 합니다.↩︎

     

  3. There are many decision-making algorithms to be considered here, such as electing representatives, majority voting, employing liquid democracy, and making decisions by a random population sample, also known as a jury or sortition.

     

    여기에는 대표자 선출, 다수결 투표, 액체 민주주의 채택, 배심원 또는 분류라고도 하는 무작위 인구 표본에 의한 결정 등 많은 의사 결정 알고리즘이 고려됩니다.↩︎

     

 

Democratic Inputs to AI

Our nonprofit organization, OpenAI, Inc., is launching a program to award ten $100,000 grants to fund experiments in setting up a democratic process for deciding what rules AI systems should follow, within the bounds defined by the law.

openai.com

 

Authors

 

Acknowledgments

 

Ariel Procaccia, Aviv Ovadya, Colin Megill, David Medina, Divya Siddarth, Ela Madej, Elizabeth Seger, Gillian Hadfield, Greg Brockman, Hélène Landemore, Ilya Sutskever, Justin Rosenstein, Margaret Levi, Michiel Bakker, Miles Brundage, Mira Murati, Noel Bundick, Pamela Mishkin, Ryan Lowe, Saffron Huang, Sam Altman, Sandhini Agarwal, Teddy Lee

반응형

May 22, 2023 - Governance of superintelligence

2023. 5. 31. 05:46 | Posted by 솔웅


반응형

https://openai.com/blog/governance-of-superintelligence

 

Governance of superintelligence

Now is a good time to start thinking about the governance of superintelligence—future AI systems dramatically more capable than even AGI.

openai.com

 

Governance of superintelligence

Now is a good time to start thinking about the governance of superintelligence—future AI systems dramatically more capable than even AGI.

지금은 AGI보다 훨씬 뛰어난 미래의 AI 시스템인 초지능의 거버넌스에 대해 생각하기 좋은 때입니다.

 

Given the picture as we see it now, it’s conceivable that within the next ten years, AI systems will exceed expert skill level in most domains, and carry out as much productive activity as one of today’s largest corporations.

 

현재 우리가 보는 그림을 감안할 때, 향후 10년 이내에 AI 시스템은 대부분의 영역에서 전문가 기술 수준을 능가하고 오늘날 최대 기업 중 하나만큼 생산적인 활동을 수행할 것이라고 상상할 수 있습니다.

 

 

In terms of both potential upsides and downsides, superintelligence will be more powerful than other technologies humanity has had to contend with in the past. We can have a dramatically more prosperous future; but we have to manage risk to get there. Given the possibility of existential risk, we can’t just be reactive. Nuclear energy is a commonly used historical example of a technology with this property; synthetic biology is another example.

 

잠재적인 장점과 단점 모두에서 초지능은 인류가 과거에 싸워야 했던 다른 기술보다 더 강력할 것입니다. 우리는 훨씬 더 번영하는 미래를 가질 수 있습니다. 하지만 거기에 도달하려면 위험을 관리해야 합니다. 실존적 위험의 가능성을 감안할 때 우리는 단순히 반응만 할 수는 없습니다. 원자력은 이 속성을 가진 기술의 일반적으로 사용된 역사적 예입니다. 합성 생물학은 또 다른 예입니다.

 

We must mitigate the risks of today’s AI technology too, but superintelligence will require special treatment and coordination.

 

우리는 오늘날 AI 기술의 위험도 완화해야 하지만 초지능에는 특별한 처리와 조정이 필요합니다.

 

 

A starting point

 

There are many ideas that matter for us to have a good chance at successfully navigating this development; here we lay out our initial thinking on three of them.

 

이 개발을 성공적으로 탐색할 수 있는 좋은 기회를 갖는 데 중요한 많은 아이디어가 있습니다. 여기서 우리는 그들 중 세 가지에 대한 초기 생각을 제시합니다.

 

 

First, we need some degree of coordination among the leading development efforts to ensure that the development of superintelligence occurs in a manner that allows us to both maintain safety and help smooth integration of these systems with society. There are many ways this could be implemented; major governments around the world could set up a project that many current efforts become part of, or we could collectively agree (with the backing power of a new organization like the one suggested below) that the rate of growth in AI capability at the frontier is limited to a certain rate per year.

 

첫째, 우리는 안전을 유지하고 이러한 시스템을 사회와 원활하게 통합할 수 있는 방식으로 초지능 개발이 이루어지도록 선도적인 개발 노력 간에 어느 정도의 조정이 필요합니다. 이를 구현할 수 있는 방법에는 여러 가지가 있습니다. 전 세계의 주요 정부는 현재의 많은 노력이 일부가 되는 프로젝트를 수립할 수 있거나, 프론티어에서 AI 역량의 성장률이 연간 일정 비율로 제한됩니다.

 

And of course, individual companies should be held to an extremely high standard of acting responsibly.

 

물론 개별 회사는 책임감 있게 행동하는 매우 높은 기준을 따라야 합니다.

 

 

Second, we are likely to eventually need something like an IAEA for superintelligence efforts; any effort above a certain capability (or resources like compute) threshold will need to be subject to an international authority that can inspect systems, require audits, test for compliance with safety standards, place restrictions on degrees of deployment and levels of security, etc. Tracking compute and energy usage could go a long way, and give us some hope this idea could actually be implementable. As a first step, companies could voluntarily agree to begin implementing elements of what such an agency might one day require, and as a second, individual countries could implement it. It would be important that such an agency focus on reducing existential risk and not issues that should be left to individual countries, such as defining what an AI should be allowed to say.

 

둘째, 우리는 궁극적으로 초지능 노력을 위해 IAEA와 같은 것이 필요할 것입니다. 특정 기능(또는 컴퓨팅과 같은 리소스) 임계값을 초과하는 모든 노력은 시스템을 검사하고, 감사를 요구하고, 안전 표준 준수를 테스트하고, 배포 정도 및 보안 수준에 대한 제한을 둘 수 있는 국제 기관의 적용을 받아야 합니다. 컴퓨팅 및 에너지 사용을 추적하는 것은 먼 길을 갈 수 있으며 이 아이디어가 실제로 구현될 수 있다는 희망을 줍니다. 첫 번째 단계로 기업은 그러한 기관이 언젠가 요구할 수 있는 요소를 구현하기 시작하는 데 자발적으로 동의할 수 있고 두 번째로 개별 국가에서 이를 구현할 수 있습니다. 그러한 기관이 AI가 말할 수 있도록 허용되어야 하는 것을 정의하는 것과 같이 개별 국가에 맡겨야 하는 문제가 아니라 실존적 위험을 줄이는 데 초점을 맞추는 것이 중요할 것입니다.

 

 

Third, we need the technical capability to make a superintelligence safe. This is an open research question that we and others are putting a lot of effort into.

 

셋째, 초지능을 안전하게 만들 수 있는 기술력이 필요합니다. 이것은 우리와 다른 사람들이 많은 노력을 기울이고 있는 공개 연구 질문입니다.

 

 

What’s not in scope

 

We think it’s important to allow companies and open-source projects to develop models below a significant capability threshold, without the kind of regulation we describe here  (including burdensome mechanisms like licenses or audits).

 

우리는 회사와 오픈 소스 프로젝트가 여기에서 설명하는 규제(라이선스 또는 감사와 같은 부담스러운 메커니즘 포함) 없이 상당한 능력 임계값 미만의 모델을 개발할 수 있도록 허용하는 것이 중요하다고 생각합니다.

 

 

Today’s systems will create tremendous value in the world and, while they do have risks, the level of those risks feel commensurate with other Internet technologies and society’s likely approaches seem appropriate.

 

오늘날의 시스템은 세계에서 엄청난 가치를 창출할 것이며 위험이 있지만 이러한 위험 수준은 다른 인터넷 기술과 상응하며 사회의 가능한 접근 방식이 적절해 보입니다.

 

 

By contrast, the systems we are concerned about will have power beyond any technology yet created, and we should be careful not to water down the focus on them by applying similar standards to technology far below this bar.

 

대조적으로, 우리가 우려하는 시스템은 지금까지 만들어진 어떤 기술보다 강력한 힘을 가질 것이며, 우리는 이 기준보다 훨씬 낮은 기술에 유사한 기준을 적용함으로써 시스템에 대한 초점을 약화시키지 않도록 주의해야 합니다.

 

 

Public input and potential

 

But the governance of the most powerful systems, as well as decisions regarding their deployment, must have strong public oversight. We believe people around the world should democratically decide on the bounds and defaults for AI systems. We don't yet know how to design such a mechanism, but we plan to experiment with its development. We continue to think that, within these wide bounds, individual users should have a lot of control over how the AI they use behaves.

 

그러나 가장 강력한 시스템의 거버넌스와 배포에 관한 결정에는 강력한 공개 감독이 있어야 합니다. 우리는 전 세계 사람들이 AI 시스템의 범위와 기본값을 민주적으로 결정해야 한다고 믿습니다. 우리는 아직 그러한 메커니즘을 설계하는 방법을 모르지만 개발을 실험할 계획입니다. 우리는 이러한 넓은 범위 내에서 개별 사용자가 사용하는 AI의 작동 방식에 대해 많은 제어권을 가져야 한다고 계속 생각합니다.

 

 

Given the risks and difficulties, it’s worth considering why we are building this technology at all.

 

위험과 어려움을 감안할 때 우리가 이 기술을 구축하는 이유를 생각해 볼 가치가 있습니다.

 

 

At OpenAI, we have two fundamental reasons. First, we believe it’s going to lead to a much better world than what we can imagine today (we are already seeing early examples of this in areas like education, creative work, and personal productivity). The world faces a lot of problems that we will need much more help to solve; this technology can improve our societies, and the creative ability of everyone to use these new tools is certain to astonish us. The economic growth and increase in quality of life will be astonishing.

 

OpenAI에는 두 가지 근본적인 이유가 있습니다. 첫째, 우리는 그것이 오늘날 우리가 상상할 수 있는 것보다 훨씬 더 나은 세상으로 이어질 것이라고 믿습니다(우리는 이미 교육, 창작 작업, 개인 생산성과 같은 분야에서 이에 대한 초기 사례를 보고 있습니다). 세상은 해결하기 위해 훨씬 더 많은 도움이 필요한 많은 문제에 직면해 있습니다. 이 기술은 우리 사회를 개선할 수 있으며, 이러한 새로운 도구를 사용하는 모든 사람의 창의적 능력은 우리를 놀라게 할 것입니다. 경제 성장과 삶의 질 향상은 놀라울 것입니다.

 

 

Second, we believe it would be unintuitively risky and difficult to stop the creation of superintelligence. Because the upsides are so tremendous, the cost to build it decreases each year, the number of actors building it is rapidly increasing, and it’s inherently part of the technological path we are on, stopping it would require something like a global surveillance regime, and even that isn’t guaranteed to work. So we have to get it right.

 

둘째, 우리는 초지능의 생성을 막는 것이 직관적이지 않게 위험하고 어려울 것이라고 믿습니다. 상승 여력이 엄청나기 때문에 건설 비용은 매년 감소하고 건설하는 행위자의 수는 급격히 증가하고 있으며 본질적으로 우리가 진행 중인 기술 경로의 일부이므로 이를 중지하려면 글로벌 감시 체제와 같은 것이 필요합니다. 그것이 작동한다고 보장되지는 않습니다. 그래서 우리는 그것을 바로잡아야 합니다.

 

 

 

 

 

 

 

 

반응형


반응형

https://openai.com/blog/new-ways-to-manage-your-data-in-chatgpt

 

New ways to manage your data in ChatGPT

ChatGPT users can now turn off chat history, allowing you to choose which conversations can be used to train our models.

openai.com

New ways to manage your data in ChatGPT

ChatGPT에서 데이터를 관리하는 새로운 방법

ChatGPT users can now turn off chat history, allowing you to choose which conversations can be used to train our models.

ChatGPT 사용자는 이제 채팅 기록을 끌 수 있으므로 모델 훈련에 사용할 수 있는 대화를 선택할 수 있습니다.

 

We've introduced the ability to turn off chat history in ChatGPT. Conversations that are started when chat history is disabled won’t be used to train and improve our models, and won’t appear in the history sidebar. These controls, which are rolling out to all users starting today, can be found in ChatGPT’s settings and can be changed at any time. We hope this provides an easier way to manage your data than our existing opt-out process. When chat history is disabled, we will retain new conversations for 30 days and review them only when needed to monitor for abuse, before permanently deleting.

 

ChatGPT에서 채팅 기록을 끄는 기능을 도입했습니다. 채팅 기록이 비활성화되었을 때 시작된 대화는 모델을 훈련 및 개선하는 데 사용되지 않으며 기록 사이드바에 표시되지 않습니다. 오늘부터 모든 사용자에게 배포되는 이러한 컨트롤은 ChatGPT의 설정에서 찾을 수 있으며 언제든지 변경할 수 있습니다. 이를 통해 기존의 옵트아웃 프로세스보다 데이터를 더 쉽게 관리할 수 있기를 바랍니다. 채팅 기록이 비활성화되면 새 대화를 30일 동안 보관하고 악용 여부를 모니터링해야 하는 경우에만 검토한 후 영구적으로 삭제합니다.

 

 

 

제가 따라 해 보니까 아래와 같은 순서로 진행이 되네요.

 

Click on ID (bottom Left) -> Data Controls -> Chat History & Training

 

 

We are also working on a new ChatGPT Business subscription for professionals who need more control over their data as well as enterprises seeking to manage their end users. ChatGPT Business will follow our API’s data usage policies, which means that end users’ data won’t be used to train our models by default. We plan to make ChatGPT Business available in the coming months.

또한 데이터에 대한 더 많은 제어가 필요한 전문가와 최종 사용자를 관리하려는 기업을 위한 새로운 ChatGPT 비즈니스 구독을 위해 노력하고 있습니다. ChatGPT Business는 API의 데이터 사용 정책을 따르므로 최종 사용자의 데이터는 기본적으로 모델 교육에 사용되지 않습니다. 앞으로 몇 달 안에 ChatGPT 비즈니스를 제공할 계획입니다.

 

Finally, a new Export option in settings makes it much easier to export your ChatGPT data and understand what information ChatGPT stores. You’ll receive a file with your conversations and all other relevant data in email.

 

마지막으로 설정의 새로운 내보내기 옵션을 사용하면 ChatGPT 데이터를 훨씬 쉽게 내보내고 ChatGPT가 저장하는 정보를 이해할 수 있습니다. 대화 및 기타 모든 관련 데이터가 포함된 파일을 이메일로 받게 됩니다.

 

반응형

Announcing OpenAI’s Bug Bounty Program

2023. 4. 14. 00:31 | Posted by 솔웅


반응형

Announcing OpenAI’s Bug Bounty Program

 

Announcing OpenAI’s Bug Bounty Program

This initiative is essential to our commitment to develop safe and advanced AI. As we create technology and services that are secure, reliable, and trustworthy, we need your help.

openai.com

 

 

This initiative is essential to our commitment to develop safe and advanced AI. As we create technology and services that are secure, reliable, and trustworthy, we need your help.

 

이 이니셔티브는 안전하고 진보된 AI를 개발하려는 우리의 노력에 필수적입니다. 안전하고 신뢰할 수 있으며 신뢰할 수 있는 기술과 서비스를 만들 때 귀하의 도움이 필요합니다.

 

Participate in our Bug Bounty Program

 

OpenAI’s bug bounty program | Bugcrowd

Learn more about OpenAI’s bug bounty program powered by Bugcrowd, the leader in crowdsourced security solutions.

bugcrowd.com

 

April 11, 2023

Authors

 

Our commitment to secure AI

OpenAI’s mission is to create artificial intelligence systems that benefit everyone. To that end, we invest heavily in research and engineering to ensure our AI systems are safe and secure. However, as with any complex technology, we understand that vulnerabilities and flaws can emerge.

OpenAI의 임무는 모두에게 도움이 되는 인공 지능 시스템을 만드는 것입니다. 이를 위해 AI 시스템의 안전과 보안을 보장하기 위해 연구 및 엔지니어링에 막대한 투자를 하고 있습니다. 그러나 모든 복잡한 기술과 마찬가지로 취약성과 결함이 나타날 수 있음을 이해합니다.

 

We believe that transparency and collaboration are crucial to addressing this reality. That’s why we are inviting the global community of security researchers, ethical hackers, and technology enthusiasts to help us identify and address vulnerabilities in our systems. We are excited to build on our coordinated disclosure commitments by offering incentives for qualifying vulnerability information. Your expertise and vigilance will have a direct impact on keeping our systems and users secure.

 

우리는 투명성과 협업이 이러한 현실을 해결하는 데 중요하다고 믿습니다. 이것이 우리 시스템의 취약점을 식별하고 해결하는 데 도움을 줄 보안 연구원, 윤리적 해커 및 기술 애호가로 구성된 글로벌 커뮤니티를 초대하는 이유입니다. 적격한 취약성 정보에 대한 인센티브를 제공함으로써 조정된 공개 공약을 구축하게 된 것을 기쁘게 생각합니다. 귀하의 전문성과 경계는 시스템과 사용자를 안전하게 유지하는 데 직접적인 영향을 미칩니다.

 

Introducing the Bug Bounty Program

The OpenAI Bug Bounty Program is a way for us to recognize and reward the valuable insights of security researchers who contribute to keeping our technology and company secure. We invite you to report vulnerabilities, bugs, or security flaws you discover in our systems. By sharing your findings, you will play a crucial role in making our technology safer for everyone.

OpenAI Bug Bounty Program은 기술과 회사를 안전하게 유지하는 데 기여하는 보안 연구원의 귀중한 통찰력을 인정하고 보상하는 방법입니다. 시스템에서 발견한 취약성, 버그 또는 보안 결함을 보고해 주시기 바랍니다. 발견한 내용을 공유함으로써 모든 사람을 위해 기술을 더 안전하게 만드는 데 중요한 역할을 하게 됩니다.

 

We have partnered with Bugcrowd, a leading bug bounty platform, to manage the submission and reward process, which is designed to ensure a streamlined experience for all participants. Detailed guidelines and rules for participation can be found on our Bug Bounty Program page.

 

우리는 최고의 버그 바운티 플랫폼인 Bugcrowd와 협력하여 모든 참가자에게 간소화된 경험을 보장하도록 설계된 제출 및 보상 프로세스를 관리합니다. 참여에 대한 자세한 지침과 규칙은 버그 바운티 프로그램 페이지에서 확인할 수 있습니다.

 

Incentives and rewards

To incentivize testing and as a token of our appreciation, we will be offering cash rewards based on the severity and impact of the reported issues. Our rewards range from $200 for low-severity findings to up to $20,000 for exceptional discoveries. We recognize the importance of your contributions and are committed to acknowledging your efforts.

테스트를 장려하고 감사의 표시로 보고된 문제의 심각성과 영향에 따라 현금 보상을 제공할 예정입니다. 보상 범위는 심각도가 낮은 결과에 대한 $200부터 뛰어난 발견에 대한 최대 $20,000까지입니다. 우리는 귀하의 기여의 중요성을 인식하고 귀하의 노력을 인정하기 위해 최선을 다하고 있습니다.

 

Staying secure together

At OpenAI, we recognize the critical importance of security and view it as a collaborative effort. We invite the security research community to participate in our Bug Bounty Program.

OpenAI에서는 보안의 중요성을 인식하고 이를 공동 작업으로 간주합니다. 버그 바운티 프로그램에 보안 연구 커뮤니티를 초대합니다.

 

Interested in contributing further? We’re hiring—explore open security roles on our careers page. Join us in ensuring that the frontier of technology is secure.

추가 기여에 관심이 있으십니까? 채용 중입니다. 채용 페이지에서 열린 보안 역할을 살펴보세요. 기술의 최전선이 안전한지 확인하는 데 저희와 함께하십시오.

 

Participate in out Bug Bounty Program

 

 

OpenAI’s bug bounty program | Bugcrowd

Learn more about OpenAI’s bug bounty program powered by Bugcrowd, the leader in crowdsourced security solutions.

bugcrowd.com

 

 

 

 

 

 

 

반응형

Our approach to AI safety

2023. 4. 14. 00:21 | Posted by 솔웅


반응형

Our approach to AI safety (openai.com)

 

Our approach to AI safety

Ensuring that AI systems are built, deployed, and used safely is critical to our mission.

openai.com

 

Ensuring that AI systems are built, deployed, and used safely is critical to our mission.

AI 시스템이 안전하게 구축, 배포 및 사용되도록 보장하는 것은 우리의 임무에 매우 중요합니다.

 

April 5, 2023

Authors

 
 
 
 
OpenAI is committed to keeping powerful AI safe and broadly beneficial. We know our AI tools provide many benefits to people today. Our users around the world have told us that ChatGPT helps to increase their productivity, enhance their creativity, and offer tailored learning experiences. We also recognize that, like any technology, these tools come with real risks—so we work to ensure safety is built into our system at all levels.
 

OpenAI Charter

Our Charter describes the principles we use to execute on OpenAI’s mission.

openai.com

 

OpenAI는 강력한 AI를 안전하고 광범위하게 유익하게 유지하기 위해 최선을 다하고 있습니다. 우리는 AI 도구가 오늘날 사람들에게 많은 이점을 제공한다는 것을 알고 있습니다. 전 세계 사용자들은 ChatGPT가 생산성을 높이고 창의력을 향상시키며 맞춤형 학습 경험을 제공하는 데 도움이 된다고 말했습니다. 우리는 또한 모든 기술과 마찬가지로 이러한 도구에 실질적인 위험이 따른다는 것을 알고 있으므로 모든 수준에서 시스템에 안전이 구축되도록 노력합니다.

 

Building increasingly safe AI systems

Prior to releasing any new system we conduct rigorous testing, engage external experts for feedback, work to improve the model's behavior with techniques like reinforcement learning with human feedback, and build broad safety and monitoring systems.

새로운 시스템을 출시하기 전에 우리는 엄격한 테스트를 수행하고, 피드백을 위해 외부 전문가를 참여시키고, 사람의 피드백을 통한 강화 학습과 같은 기술로 모델의 동작을 개선하고, 광범위한 안전 및 모니터링 시스템을 구축합니다.

 

 

For example, after our latest model, GPT-4, finished training, we spent more than 6 months working across the organization to make it safer and more aligned prior to releasing it publicly.

 

예를 들어 최신 모델인 GPT-4가 교육을 마친 후 공개하기 전에 조직 전체에서 6개월 이상 작업하여 더 안전하고 더 잘 정렬되도록 했습니다.

 

We believe that powerful AI systems should be subject to rigorous safety evaluations. Regulation is needed to ensure that such practices are adopted, and we actively engage with governments on the best form such regulation could take.

 

우리는 강력한 AI 시스템이 엄격한 안전성 평가를 받아야 한다고 믿습니다. 그러한 관행이 채택되도록 하려면 규제가 필요하며, 우리는 그러한 규제가 취할 수 있는 최선의 형태로 정부와 적극적으로 협력합니다.

 

 

Learning from real-world use to improve safeguards

We work hard to prevent foreseeable risks before deployment, however, there is a limit to what we can learn in a lab. Despite extensive research and testing, we cannot predict all of the beneficial ways people will use our technology, nor all the ways people will abuse it. That’s why we believe that learning from real-world use is a critical component of creating and releasing increasingly safe AI systems over time.

 

우리는 배포 전에 예측 가능한 위험을 방지하기 위해 열심히 노력하지만 랩에서 배울 수 있는 것에는 한계가 있습니다. 광범위한 연구와 테스트에도 불구하고 우리는 사람들이 우리 기술을 사용할 모든 유익한 방법이나 남용할 모든 방법을 예측할 수 없습니다. 그렇기 때문에 실생활에서 배우는 것이 시간이 지남에 따라 점점 더 안전한 AI 시스템을 만들고 출시하는 데 중요한 구성 요소라고 생각합니다.

 

We cautiously and gradually release new AI systems—with substantial safeguards in place—to a steadily broadening group of people and make continuous improvements based on the lessons we learn.

 

우리는 상당한 보호 장치를 갖춘 새로운 AI 시스템을 신중하고 점진적으로 점점 더 많은 사람들에게 출시하고 우리가 배운 교훈을 바탕으로 지속적으로 개선합니다.

 

We make our most capable models available through our own services and through an API so developers can build this technology directly into their apps. This allows us to monitor for and take action on misuse, and continually build mitigations that respond to the real ways people misuse our systems—not just theories about what misuse might look like.

 

우리는 개발자가 이 기술을 앱에 직접 구축할 수 있도록 자체 서비스와 API를 통해 가장 유능한 모델을 사용할 수 있도록 합니다. 이를 통해 오용을 모니터링하고 조치를 취할 수 있으며 오용이 어떤 것인지에 대한 이론뿐만 아니라 사람들이 시스템을 오용하는 실제 방식에 대응하는 완화 조치를 지속적으로 구축할 수 있습니다.

 

Real-world use has also led us to develop increasingly nuanced policies against behavior that represents a genuine risk to people while still allowing for the many beneficial uses of our technology.

 

실제 사용은 또한 우리 기술의 많은 유익한 사용을 허용하면서 사람들에게 진정한 위험을 나타내는 행동에 대해 점점 더 미묘한 정책을 개발하도록 이끌었습니다.

 

Crucially, we believe that society must have time to update and adjust to increasingly capable AI, and that  everyone who is affected by this technology should have a significant say in how AI develops further. Iterative deployment has helped us bring various stakeholders into the conversation about the adoption of AI technology more effectively than if they hadn't had firsthand experience with these tools.

 

결정적으로, 우리는 사회가 점점 더 유능해지는 AI를 업데이트하고 적응할 시간이 있어야 하며, 이 기술의 영향을 받는 모든 사람이 AI가 어떻게 발전하는지에 대해 중요한 발언권을 가져야 한다고 믿습니다. 반복 배포를 통해 다양한 이해관계자가 이러한 도구를 직접 경험하지 않았을 때보다 더 효과적으로 AI 기술 채택에 대한 대화에 참여할 수 있었습니다.

 

 

Protecting children

One critical focus of our safety efforts is protecting children. We require that people must be 18 or older—or 13 or older with parental approval—to use our AI tools and are looking into verification options.

안전 노력의 중요한 초점 중 하나는 어린이를 보호하는 것입니다. AI 도구를 사용하려면 18세 이상(또는 부모의 승인이 있는 13세 이상)이어야 하며 인증 옵션을 검토하고 있습니다.

 

We do not permit our technology to be used to generate hateful, harassing, violent or adult content, among other categories. Our latest model, GPT-4 is 82% less likely to respond to requests for disallowed content compared to GPT-3.5 and we have established a robust system to monitor for abuse. GPT-4 is now available to ChatGPT Plus subscribers and we hope to make it available to even more people over time.

 

우리는 우리 기술이 증오, 괴롭힘, 폭력 또는 성인용 콘텐츠를 생성하는 데 사용되는 것을 허용하지 않습니다. 당사의 최신 모델인 GPT-4는 GPT-3.5에 비해 허용되지 않는 콘텐츠에 대한 요청에 응답할 가능성이 82% 낮으며 남용을 모니터링하기 위한 강력한 시스템을 구축했습니다. GPT-4는 이제 ChatGPT Plus 가입자가 사용할 수 있으며 시간이 지남에 따라 더 많은 사람들이 사용할 수 있기를 바랍니다.

 

We have made significant effort to minimize the potential for our models to generate content that harms children. For example, when users try to upload known Child Sexual Abuse Material to our image tools, we use Thorn’s Safer to detect, review and report it to the National Center for Missing and Exploited Children.

 

우리는 모델이 어린이에게 해를 끼치는 콘텐츠를 생성할 가능성을 최소화하기 위해 상당한 노력을 기울였습니다. 예를 들어 사용자가 알려진 아동 성적 학대 자료를 이미지 도구에 업로드하려고 하면 Thorn’s Safer를 사용하여 이를 감지, 검토하고 국립 실종 및 착취 아동 센터에 신고합니다.

 

In addition to our default safety guardrails, we work with developers like the non-profit Khan Academy—which has built an AI-powered assistant that functions as both a virtual tutor for students and a classroom assistant for teachers—on tailored safety mitigations for their use case. We are also working on features that will allow developers to set stricter standards for model outputs to better support developers and users who want such functionality.

 

기본 안전 가드레일 외에도 우리는 학생들을 위한 가상 튜터와 교사를 위한 교실 조교 역할을 모두 수행하는 AI 기반 조수를 구축한 비영리 Khan Academy와 같은 개발자와 협력하여 학생들을 위한 맞춤형 안전 완화를 제공합니다. 사용 사례. 또한 개발자가 이러한 기능을 원하는 개발자와 사용자를 더 잘 지원하기 위해 모델 출력에 대해 더 엄격한 표준을 설정할 수 있는 기능을 개발하고 있습니다.

 

Respecting privacy

Our large language models are trained on a broad corpus of text that includes publicly available content, licensed content, and content generated by human reviewers. We don’t use data for selling our services, advertising, or building profiles of people—we use data to make our models more helpful for people. ChatGPT, for instance, improves by further training on the conversations people have with it.

당사의 대규모 언어 모델은 공개적으로 사용 가능한 콘텐츠, 라이선스가 부여된 콘텐츠 및 인간 검토자가 생성한 콘텐츠를 포함하는 광범위한 텍스트 코퍼스에서 학습됩니다. 우리는 서비스 판매, 광고 또는 사람들의 프로필 구축을 위해 데이터를 사용하지 않습니다. 우리는 사람들에게 더 유용한 모델을 만들기 위해 데이터를 사용합니다. 예를 들어 ChatGPT는 사람들이 나누는 대화에 대한 추가 교육을 통해 개선됩니다.

 

While some of our training data includes personal information that is available on the public internet, we want our models to learn about the world, not private individuals. So we work to remove personal information from the training dataset where feasible, fine-tune models to reject requests for personal information of private individuals, and respond to requests from individuals to delete their personal information from our systems. These steps minimize the possibility that our models might generate responses that include the personal information of private individuals.

일부 교육 데이터에는 공개 인터넷에서 사용할 수 있는 개인 정보가 포함되어 있지만 모델이 개인이 아닌 세상에 대해 배우기를 원합니다. 따라서 가능한 경우 교육 데이터 세트에서 개인 정보를 제거하고 개인의 개인 정보 요청을 거부하도록 모델을 미세 조정하고 시스템에서 개인 정보를 삭제하라는 개인의 요청에 응답하기 위해 노력합니다. 이러한 단계는 우리 모델이 개인의 개인 정보를 포함하는 응답을 생성할 수 있는 가능성을 최소화합니다.

 

Improving factual accuracy

Today’s large language models predict the next series of words based on patterns they have previously seen, including the text input the user provides. In some cases, the next most likely words may not be factually accurate.

오늘날의 대규모 언어 모델은 사용자가 제공하는 텍스트 입력을 포함하여 이전에 본 패턴을 기반으로 다음 일련의 단어를 예측합니다. 경우에 따라 다음으로 가능성이 높은 단어가 사실적으로 정확하지 않을 수 있습니다.

 

Improving factual accuracy is a significant focus for OpenAI and many other AI developers, and we’re making progress. By leveraging user feedback on ChatGPT outputs that were flagged as incorrect as a main source of data—we have improved the factual accuracy of GPT-4. GPT-4 is 40% more likely to produce factual content than GPT-3.5.

 

사실적 정확성을 개선하는 것은 OpenAI와 다른 많은 AI 개발자에게 중요한 초점이며 우리는 진전을 이루고 있습니다. 주요 데이터 소스로 잘못된 것으로 표시된 ChatGPT 출력에 대한 사용자 피드백을 활용하여 GPT-4의 사실적 정확성을 개선했습니다. GPT-4는 GPT-3.5보다 사실적인 콘텐츠를 생산할 가능성이 40% 더 높습니다.

 

When users sign up to use the tool, we strive to be as transparent as possible that ChatGPT may not always be accurate. However, we recognize that there is much more work to do to further reduce the likelihood of hallucinations and to educate the public on the current limitations of these AI tools.

 

사용자가 도구를 사용하기 위해 가입할 때 ChatGPT가 항상 정확하지 않을 수 있음을 가능한 한 투명하게 하기 위해 노력합니다. 그러나 우리는 환각의 가능성을 더욱 줄이고 이러한 AI 도구의 현재 한계에 대해 대중을 교육하기 위해 해야 할 일이 훨씬 더 많다는 것을 알고 있습니다.

 

Continued research and engagement

We believe that a practical approach to solving AI safety concerns is to dedicate more time and resources to researching effective mitigations and alignment techniques and testing them against real-world abuse.

AI 안전 문제를 해결하기 위한 실용적인 접근 방식은 효과적인 완화 및 조정 기술을 연구하고 실제 남용에 대해 테스트하는 데 더 많은 시간과 자원을 투자하는 것이라고 믿습니다.

 

Importantly, we also believe that improving AI safety and capabilities should go hand in hand. Our best safety work to date has come from working with our most capable models because they are better at following users’ instructions and easier to steer or “guide.”

 

중요한 것은 AI 안전과 기능 개선이 함께 이루어져야 한다고 믿습니다. 지금까지 우리의 최고의 안전 작업은 사용자의 지시를 더 잘 따르고 조종 또는 "안내"하기가 더 쉽기 때문에 가장 유능한 모델과 함께 작업함으로써 이루어졌습니다.

 

We will be increasingly cautious with the creation and deployment of more capable models, and will continue to enhance safety precautions as our AI systems evolve.

 

우리는 보다 유능한 모델의 생성 및 배포에 점점 더 주의를 기울일 것이며 AI 시스템이 발전함에 따라 안전 예방 조치를 계속 강화할 것입니다.

 

While we waited over 6 months to deploy GPT-4 in order to better understand its capabilities, benefits, and risks, it may sometimes be necessary to take longer than that to improve AI systems' safety. Therefore, policymakers and AI providers will need to ensure that AI development and deployment is governed effectively at a global scale, so no one cuts corners to get ahead. This is a daunting challenge requiring both technical and institutional innovation, but it’s one that we are eager to contribute to.

 

GPT-4의 기능, 이점 및 위험을 더 잘 이해하기 위해 GPT-4를 배포하기까지 6개월 이상을 기다렸지만 AI 시스템의 안전을 개선하기 위해 때로는 그보다 더 오래 걸릴 수도 있습니다. 따라서 정책 입안자와 AI 공급자는 AI 개발 및 배포가 전 세계적으로 효과적으로 관리되도록 해야 합니다. 이는 기술 혁신과 제도적 혁신이 모두 필요한 벅찬 도전이지만 우리가 기꺼이 기여하고자 하는 것입니다.

 

Addressing safety issues also requires extensive debate, experimentation, and engagement, including on the bounds of AI system behavior. We have and will continue to foster collaboration and open dialogue among stakeholders to create a safe AI ecosystem.

 

안전 문제를 해결하려면 AI 시스템 동작의 범위를 포함하여 광범위한 토론, 실험 및 참여가 필요합니다. 우리는 안전한 AI 생태계를 만들기 위해 이해관계자들 사이의 협력과 열린 대화를 지속적으로 촉진해 왔으며 앞으로도 그럴 것입니다.

 

 

Learn more about AI safty 

 

Safety & responsibility

Artificial general intelligence has the potential to benefit nearly every aspect of our lives—so it must be developed and deployed responsibly.

openai.com

 

반응형

Chat GPT Plugin - Plugins in production

2023. 4. 4. 21:58 | Posted by 솔웅


반응형

Production - OpenAI API

 

OpenAI API

An API for accessing new AI models developed by OpenAI

platform.openai.com

 

 

Rate limits

Consider implementing rate limiting on the API endpoints you expose. While the current scale is limited, ChatGPT is widely used and you should expect a high volume of requests. You can monitor the number of requests and set limits accordingly.

 

노출하는 API 엔드포인트에서 rate limiting을 구현하는 것을 고려하십시오. 현재 규모는 제한되어 있지만 ChatGPT는 널리 사용되며 많은 양의 요청을 예상해야 합니다. 요청 수를 모니터링하고 그에 따라 제한을 설정할 수 있습니다.

 

Updating your plugin

After deploying your plugin to production, you might want to make changes to the ai-plugin.json manifest file. Currently, manifest files must be manually updated by going through the "Develop your own plugin" flow in the plugin store each time you make a change to the file.

 

플러그인을 프로덕션에 배포한 후 ai-plugin.json 매니페스트 파일을 변경할 수 있습니다. 현재 매니페스트 파일은 파일을 변경할 때마다 플러그인 스토어에서 "Develop your own plugin" flow 를  통해 수동으로 업데이트해야 합니다.

 

ChatGPT will automatically fetch the latest OpenAPI spec each time a request is made.

 

ChatGPT는 요청이 있을 때마다 최신 OpenAPI 사양을 자동으로 가져옵니다.

 

Plugin terms

In order to register a plugin, you must agree to the Plugin Terms.

 

플러그인을 등록하려면 Plugin Terms에 동의해야 합니다.

 

Domain verification and security

To ensure that plugins can only perform actions on resources that they control, OpenAI enforces requirements on the plugin's manifest and API specifications.

 

플러그인이 제어하는 리소스에서만 작업을 수행할 수 있도록 OpenAI는 플러그인의 매니페스트 및 API 사양에 대한 요구 사항을 적용합니다.

 

 

Defining the plugin's root domain

The manifest file defines information shown to the user (like logo and contact information) as well as a URL where the plugin's OpenAPI spec is hosted. When the manifest is fetched, the plugin's root domain is established following these rules:

 

매니페스트 파일은 사용자에게 표시되는 정보(예: 로고 및 연락처 정보)와 플러그인의 OpenAPI 사양이 호스팅되는 URL을 정의합니다. 매니페스트를 가져오면 다음 규칙에 따라 플러그인의 루트 도메인이 설정됩니다.

 

  • If the domain has www. as a subdomain, then the root domain will strip out www. from the domain that hosts the manifest.
  • Subdomain 으로서 도메인에 www. 가 있으면 루트 도메인은 매니페스트를 호스트하는 도메인으로부터 www.를 제거할 것입니다.
  • Otherwise, the root domain is the same as the domain that hosts the manifest.
  • 그렇지 않으면 루트 도메인은 매니페스트를 호스트하는 도메인과 같습니다.

Note on redirects: If there are any redirects in resolving the manifest, only child subdomain redirects are allowed. The only exception is following a redirect from a www subdomain to one without the www.

 

리디렉션에 대한 참고 사항: 매니페스트를 확인하는 데 리디렉션이 있는 경우 child subdomain 리디렉션만 허용됩니다. 유일한 예외는 www 하위 도메인에서 www가 없는 도메인으로 리디렉션하는 경우입니다.

 

Examples of what the root domain looks like:

 

루트 도메인의 예는 다음과 같습니다.

 

 

Manifest validation

Specific fields in the manifest itself must satisfy the following requirements:

 

매니페스트 자체의 특정 필드는 다음 요구 사항을 충족해야 합니다.

 

  • api.url - the URL provided to the OpenAPI spec must be hosted at the same level or a subdomain of the root domain.
  • api.url - OpenAPI 사양에 제공된 URL은 동일한 수준 또는 루트 도메인의 하위 도메인에서 호스팅되어야 합니다.
  • legal_info - The second-level domain of the URL provided must be the same as the second-level domain of the root domain.
  • legal_info - 제공된 URL의 2단계 도메인은 루트 도메인의 2단계 도메인과 동일해야 합니다.
  • contact_info - The second-level domain of the email address should be the same as the second-level domain of the root domain.
  • contact_info - 이메일 주소의 2차 도메인은 루트 도메인의 2차 도메인과 동일해야 합니다.

 

Resolving the API spec

The api.url field in the manifest provides a link to an OpenAPI spec that defines APIs that the plugin can call into. OpenAPI allows specifying multiple server base URLs. The following logic is used to select the server URL:

 

매니페스트의 api.url 필드는 플러그인이 호출할 수 있는 API를 정의하는 OpenAPI 사양에 대한 링크를 제공합니다. OpenAPI를 사용하면 여러 server base URLs을 지정할 수 있습니다. 다음 논리는 서버 URL을 선택하는 데 사용됩니다.

 

  • Iterate through the list of server URLs
  • 서버 URL 목록을 반복합니다.
  • Use the first server URL that is either an exact match of the root domain or a subdomain of the root domain
  • 루트 도메인 또는 루트 도메인의 하위 도메인과 정확히 일치하는 첫 번째 서버 URL을 사용하십시오.
  • If neither cases above apply, then default to the domain where the API spec is hosted. For example, if the spec is hosted on api.example.com, then api.example.com will be used as the base URL for the routes in the OpenAPI spec.
  • 위의 두 경우 모두 적용되지 않는 경우 API 사양이 호스팅되는 도메인으로 기본 설정됩니다. 예를 들어 사양이 api.example.com에서 호스팅되는 경우 api.example.com은 OpenAPI 사양의 경로에 대한 기본 URL로 사용됩니다.

Note: Please avoid using redirects for hosting the API spec and any API endpoints, as it is not guaranteed that redirects will always be followed.

 

참고: 리디렉션이 항상 뒤따른다는 보장이 없으므로 API 사양 및 API 엔드포인트를 호스팅하기 위해 리디렉션을 사용하지 마십시오.

 

Use TLS and HTTPS

All traffic with the plugin (e.g., fetching the ai-plugin.json file, the OpenAPI spec, API calls) must use TLS 1.2 or later on port 443 with a valid public certificate.

 

플러그인이 있는 모든 트래픽(예: ai-plugin.json 파일 가져오기, OpenAPI 사양, API 호출)은 유효한 공개 인증서가 있는 포트 443에서 TLS 1.2 이상을 사용해야 합니다.

 

IP egress ranges

ChatGPT will call your plugin from an IP address in the CIDR block 23.102.140.112/28. You may wish to explicitly allowlist these IP addresses.

 

ChatGPT는 CIDR 블록 23.102.140.112/28의 IP 주소에서 플러그인을 호출합니다. 이러한 IP 주소를 명시적으로 허용 목록에 추가할 수 있습니다.

 

Separately, OpenAI's web browsing plugin crawls websites from a different IP address block: 23.98.142.176/28.

 

이와 별도로 OpenAI의 웹 브라우징 플러그인은 다른 IP 주소 블록(23.98.142.176/28)에서 웹사이트를 크롤링합니다.

 

 

FAQ

How is plugin data used?

Plugins connect ChatGPT to external apps. If a user enables a plugin, ChatGPT may send parts of their conversation and their country or state to your plugin.

 

플러그인은 ChatGPT를 외부 앱에 연결합니다. 사용자가 플러그인을 활성화하면 ChatGPT는 대화의 일부와 국가 또는 주를 플러그인으로 보낼 수 있습니다.

 

What happens if a request to my API fails?

If an API request fails, the model might retry the request up to 10 times before letting the user know it cannot get a response from that plugin.

 

API 요청이 실패하면 모델은 해당 플러그인에서 응답을 받을 수 없음을 사용자에게 알리기 전에 요청을 최대 10번 재시도할 수 있습니다.

 

Can I invite people to try my plugin?

Yes, all unverified plugins can be installed by up to 15 users. At launch, only other developers with access will be able to install the plugin. We plan to expand access over time and will eventually roll out a process to submit your plugin for review before being made available to all users.

 

예, 확인되지 않은 모든 플러그인은 최대 15명의 사용자가 설치할 수 있습니다. 출시 시 액세스 권한이 있는 다른 개발자만 플러그인을 설치할 수 있습니다. 우리는 시간이 지남에 따라 액세스를 확장할 계획이며 궁극적으로 모든 사용자가 사용할 수 있게 되기 전에 검토를 위해 플러그인을 제출하는 프로세스를 출시할 것입니다.

 

 

반응형

Chat GPT Plugin - Example plugins

2023. 4. 4. 02:54 | Posted by 솔웅


반응형

Examples - OpenAI API

 

OpenAI API

An API for accessing new AI models developed by OpenAI

platform.openai.com

 

 

To get started building, we are making available a set of simple plugins that cover different authentication schemas and use cases. From our simple no authentication todo list plugin to the more powerful retrieval plugin, these examples provide a glimpse into what we hope to make possible with plugins.

 

building을 시작하기 위해 다양한 인증 스키마 및 사용 사례를 다루는 간단한 플러그인 세트를 제공하고 있습니다. 단순한 no authentication todo list  플러그인에서 더 강력한 검색 플러그인에 이르기까지 이 예제는 플러그인으로 가능하게 하고자 하는 것을 엿볼 수 있는 기회를 제공합니다.

 

During development, you can run the plugin locally on your computer or through a cloud development environment like GitHub Codespaces, Replit, or CodeSandbox.

 

개발 중에 플러그인을 컴퓨터에서 로컬로 실행하거나 GitHub Codespaces, Replit 또는 CodeSandbox와 같은 클라우드 개발 환경을 통해 실행할 수 있습니다.

 

 

Learn how to build a simple todo list plugin with no auth

 

To start, define an ai-plugin.json file with the following fields:

 

시작하려면 다음 필드를 사용하여 ai-plugin.json 파일을 정의합니다.

 

{
  "schema_version": "v1",
  "name_for_human": "TODO Plugin (no auth)",
  "name_for_model": "todo",
  "description_for_human": "Plugin for managing a TODO list, you can add, remove and view your TODOs.",
  "description_for_model": "Plugin for managing a TODO list, you can add, remove and view your TODOs.",
  "auth": {
    "type": "none"
  },
  "api": {
    "type": "openapi",
    "url": "PLUGIN_HOSTNAME/openapi.yaml",
    "is_user_authenticated": false
  },
  "logo_url": "PLUGIN_HOSTNAME/logo.png",
  "contact_email": "support@example.com",
  "legal_info_url": "https://example.com/legal"
}

 

Note the PLUGIN_HOSTNAME should be the actual hostname of your plugin server.

 

PLUGIN_HOSTNAME은 플러그인 서버의 실제 호스트 이름이어야 합니다.

 

Next, we can define the API endpoints to create, delete, and fetch todo list items for a specific user.

 

다음으로 특정 사용자에 대한 할 일 목록 항목을 생성, 삭제 및 가져오기 위해 API 끝점을 정의할 수 있습니다.

 

import json

import quart
import quart_cors
from quart import request

# Note: Setting CORS to allow chat.openapi.com is required for ChatGPT to access your plugin
app = quart_cors.cors(quart.Quart(__name__), allow_origin="https://chat.openai.com")

_TODOS = {}


@app.post("/todos/<string:username>")
async def add_todo(username):
    request = await quart.request.get_json(force=True)
    if username not in _TODOS:
        _TODOS[username] = []
    _TODOS[username].append(request["todo"])
    return quart.Response(response='OK', status=200)


@app.get("/todos/<string:username>")
async def get_todos(username):
    return quart.Response(response=json.dumps(_TODOS.get(username, [])), status=200)


@app.delete("/todos/<string:username>")
async def delete_todo(username):
    request = await quart.request.get_json(force=True)
    todo_idx = request["todo_idx"]
    if 0 <= todo_idx < len(_TODOS[username]):
        _TODOS[username].pop(todo_idx)
    return quart.Response(response='OK', status=200)


@app.get("/logo.png")
async def plugin_logo():
    filename = 'logo.png'
    return await quart.send_file(filename, mimetype='image/png')


@app.get("/.well-known/ai-plugin.json")
async def plugin_manifest():
    host = request.headers['Host']
    with open("ai-plugin.json") as f:
        text = f.read()
        # This is a trick we do to populate the PLUGIN_HOSTNAME constant in the manifest
        text = text.replace("PLUGIN_HOSTNAME", f"https://{host}")
        return quart.Response(text, mimetype="text/json")


@app.get("/openapi.yaml")
async def openapi_spec():
    host = request.headers['Host']
    with open("openapi.yaml") as f:
        text = f.read()
        # This is a trick we do to populate the PLUGIN_HOSTNAME constant in the OpenAPI spec
        text = text.replace("PLUGIN_HOSTNAME", f"https://{host}")
        return quart.Response(text, mimetype="text/yaml")


def main():
    app.run(debug=True, host="0.0.0.0", port=5002)


if __name__ == "__main__":
    main()

 

Last, we need to set up and define a OpenAPI specification to match the endpoints defined on our local or remote server. You do not need to expose the full functionality of your API via the specification and can instead choose to let ChatGPT have access to only certain functionality.

 

마지막으로 로컬 또는 원격 서버에 정의된 엔드포인트와 일치하도록 OpenAPI 사양을 설정하고 정의해야 합니다. 사양을 통해 API의 전체 기능을 노출할 필요는 없으며 대신 ChatGPT가 특정 기능에만 액세스하도록 선택할 수 있습니다.

 

There are also many tools that will automatically turn your server definition code into an OpenAPI specification so you don’t need to do it manually. In the case of the Python code above, the OpenAPI specification will look like:

 

서버 정의 코드를 OpenAPI 사양으로 자동 변환하여 수동으로 수행할 필요가 없도록 하는 많은 도구도 있습니다. 위 Python 코드의 경우 OpenAPI 사양은 다음과 같습니다.

 

openapi: 3.0.1
info:
  title: TODO Plugin
  description: A plugin that allows the user to create and manage a TODO list using ChatGPT. If you do not know the user's username, ask them first before making queries to the plugin. Otherwise, use the username "global".
  version: 'v1'
servers:
  - url: PLUGIN_HOSTNAME
paths:
  /todos/{username}:
    get:
      operationId: getTodos
      summary: Get the list of todos
      parameters:
      - in: path
        name: username
        schema:
            type: string
        required: true
        description: The name of the user.
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/getTodosResponse'
    post:
      operationId: addTodo
      summary: Add a todo to the list
      parameters:
      - in: path
        name: username
        schema:
            type: string
        required: true
        description: The name of the user.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/addTodoRequest'
      responses:
        "200":
          description: OK
    delete:
      operationId: deleteTodo
      summary: Delete a todo from the list
      parameters:
      - in: path
        name: username
        schema:
            type: string
        required: true
        description: The name of the user.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/deleteTodoRequest'
      responses:
        "200":
          description: OK

components:
  schemas:
    getTodosResponse:
      type: object
      properties:
        todos:
          type: array
          items:
            type: string
          description: The list of todos.
    addTodoRequest:
      type: object
      required:
      - todo
      properties:
        todo:
          type: string
          description: The todo to add to the list.
          required: true
    deleteTodoRequest:
      type: object
      required:
      - todo_idx
      properties:
        todo_idx:
          type: integer
          description: The index of the todo to delete.
          required: true

 

Learn how to build a simple todo list plugin with service level auth

 

To start, define an ai-plugin.json file with the following fields:

 

시작하려면 다음 필드를 사용하여 ai-plugin.json 파일을 정의합니다.

 

{
  "schema_version": "v1",
  "name_for_human": "TODO Plugin (service level auth)",
  "name_for_model": "todo",
  "description_for_human": "Plugin for managing a TODO list, you can add, remove and view your TODOs.",
  "description_for_model": "Plugin for managing a TODO list, you can add, remove and view your TODOs.",
  "auth": {
    "type": "service_http",
    "authorization_type": "bearer",
    "verification_tokens": {
      "openai": "758e9ef7984b415688972d749f8aa58e"
    }
  },
   "api": {
    "type": "openapi",
    "url": "https://example.com/openapi.yaml",
    "is_user_authenticated": false
  },
  "logo_url": "https://example.com/logo.png",
  "contact_email": "support@example.com",
  "legal_info_url": "https://example.com/legal"
}

 

Notice that the verification token is required for service level authentication plugins. The token is generated during the plugin installation process in the ChatGPT web UI.

 

서비스 수준 인증 플러그인에는 확인 토큰이 필요합니다. 토큰은 ChatGPT 웹 UI에서 플러그인 설치 프로세스 중에 생성됩니다.

 

Next, we can define the API endpoints to create, delete, and fetch todo list items for a specific user. The endpoints also check that the user is authenticated.

 

다음으로 특정 사용자에 대한 할 일 목록 항목을 생성, 삭제 및 가져오기 위해 API 끝점을 정의할 수 있습니다. 끝점은 또한 사용자가 인증되었는지 확인합니다.

 

import json

import quart
import quart_cors
from quart import request

# Note: Setting CORS to allow chat.openapi.com is required for ChatGPT to access your plugin
app = quart_cors.cors(quart.Quart(__name__), allow_origin="https://chat.openai.com")

_SERVICE_AUTH_KEY = "REPLACE_ME"
_TODOS = {}


def assert_auth_header(req):
    assert req.headers.get(
        "Authorization", None) == f"Bearer {_SERVICE_AUTH_KEY}"


@app.post("/todos/<string:username>")
async def add_todo(username):
    assert_auth_header(quart.request)
    request = await quart.request.get_json(force=True)
    if username not in _TODOS:
        _TODOS[username] = []
    _TODOS[username].append(request["todo"])
    return quart.Response(response='OK', status=200)


@app.get("/todos/<string:username>")
async def get_todos(username):
    assert_auth_header(quart.request)
    return quart.Response(response=json.dumps(_TODOS.get(username, [])), status=200)


@app.delete("/todos/<string:username>")
async def delete_todo(username):
    assert_auth_header(quart.request)
    request = await quart.request.get_json(force=True)
    todo_idx = request["todo_idx"]
    if 0 <= todo_idx < len(_TODOS[username]):
        _TODOS[username].pop(todo_idx)
    return quart.Response(response='OK', status=200)


@app.get("/logo.png")
async def plugin_logo():
    filename = 'logo.png'
    return await quart.send_file(filename, mimetype='image/png')


@app.get("/.well-known/ai-plugin.json")
async def plugin_manifest():
    host = request.headers['Host']
    with open("ai-plugin.json") as f:
        text = f.read()
        return quart.Response(text, mimetype="text/json")


@app.get("/openapi.yaml")
async def openapi_spec():
    host = request.headers['Host']
    with open("openapi.yaml") as f:
        text = f.read()
        return quart.Response(text, mimetype="text/yaml")


def main():
    app.run(debug=True, host="0.0.0.0", port=5002)


if __name__ == "__main__":
    main()

 

Last, we need to set up and define a OpenAPI specification to match the endpoints defined on our local or remote server. In general, the OpenAPI specification would look the same regardless of the authentication method. Using an automatic OpenAPI generator will reduce the chance of errors when creating your OpenAPI specification so it is worth exploring the options.

 

마지막으로 로컬 또는 원격 서버에 정의된 엔드포인트와 일치하도록 OpenAPI 사양을 설정하고 정의해야 합니다. 일반적으로 OpenAPI 사양은 인증 방법에 관계없이 동일하게 보입니다. 자동 OpenAPI 생성기를 사용하면 OpenAPI 사양을 생성할 때 오류 가능성이 줄어들므로 옵션을 탐색해 볼 가치가 있습니다.

 

openapi: 3.0.1
info:
  title: TODO Plugin
  description: A plugin that allows the user to create and manage a TODO list using ChatGPT. If you do not know the user's username, ask them first before making queries to the plugin. Otherwise, use the username "global".
  version: 'v1'
servers:
  - url: https://example.com
paths:
  /todos/{username}:
    get:
      operationId: getTodos
      summary: Get the list of todos
      parameters:
      - in: path
        name: username
        schema:
            type: string
        required: true
        description: The name of the user.
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/getTodosResponse'
    post:
      operationId: addTodo
      summary: Add a todo to the list
      parameters:
      - in: path
        name: username
        schema:
            type: string
        required: true
        description: The name of the user.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/addTodoRequest'
      responses:
        "200":
          description: OK
    delete:
      operationId: deleteTodo
      summary: Delete a todo from the list
      parameters:
      - in: path
        name: username
        schema:
            type: string
        required: true
        description: The name of the user.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/deleteTodoRequest'
      responses:
        "200":
          description: OK

components:
  schemas:
    getTodosResponse:
      type: object
      properties:
        todos:
          type: array
          items:
            type: string
          description: The list of todos.
    addTodoRequest:
      type: object
      required:
      - todo
      properties:
        todo:
          type: string
          description: The todo to add to the list.
          required: true
    deleteTodoRequest:
      type: object
      required:
      - todo_idx
      properties:
        todo_idx:
          type: integer
          description: The index of the todo to delete.
          required: true

 

Learn how to build a simple sports stats plugin

 

This plugin is an example of a simple sports stats API. Please keep in mind our domain policy and usage policies when considering what to build.

 

이 플러그인은 간단한 스포츠 통계 API의 예입니다. 무엇을 구축할지 고려할 때 도메인 정책 및 사용 정책을 염두에 두십시오.

 

To start, define an ai-plugin.json file with the following fields:

 

시작하려면 다음 필드를 사용하여 ai-plugin.json 파일을 정의합니다.

 

{
  "schema_version": "v1",
  "name_for_human": "Sport Stats",
  "name_for_model": "sportStats",
  "description_for_human": "Get current and historical stats for sport players and games.",
  "description_for_model": "Get current and historical stats for sport players and games. Always display results using markdown tables.",
  "auth": {
    "type": "none"
  },
  "api": {
    "type": "openapi",
    "url": "PLUGIN_HOSTNAME/openapi.yaml",
    "is_user_authenticated": false
  },
  "logo_url": "PLUGIN_HOSTNAME/logo.png",
  "contact_email": "support@example.com",
  "legal_info_url": "https://example.com/legal"
}

 

Note the PLUGIN_HOSTNAME should be the actual hostname of your plugin server.

 

PLUGIN_HOSTNAME은 플러그인 서버의 실제 호스트 이름이어야 합니다.

 

Next, we define a mock API for a simple sports service plugin.

 

다음으로 간단한 스포츠 서비스 플러그인을 위한 모의 API를 정의합니다.

 

import json
import requests
import urllib.parse

import quart
import quart_cors
from quart import request

# Note: Setting CORS to allow chat.openapi.com is required for ChatGPT to access your plugin
app = quart_cors.cors(quart.Quart(__name__), allow_origin="https://chat.openai.com")
HOST_URL = "https://example.com"

@app.get("/players")
async def get_players():
    query = request.args.get("query")
    res = requests.get(
        f"{HOST_URL}/api/v1/players?search={query}&page=0&per_page=100")
    body = res.json()
    return quart.Response(response=json.dumps(body), status=200)


@app.get("/teams")
async def get_teams():
    res = requests.get(
        "{HOST_URL}/api/v1/teams?page=0&per_page=100")
    body = res.json()
    return quart.Response(response=json.dumps(body), status=200)


@app.get("/games")
async def get_games():
    query_params = [("page", "0")]
    limit = request.args.get("limit")
    query_params.append(("per_page", limit or "100"))
    start_date = request.args.get("start_date")
    if start_date:
        query_params.append(("start_date", start_date))
    end_date = request.args.get("end_date")
    
    if end_date:
        query_params.append(("end_date", end_date))
    seasons = request.args.getlist("seasons")
    
    for season in seasons:
        query_params.append(("seasons[]", str(season)))
    team_ids = request.args.getlist("team_ids")
    
    for team_id in team_ids:
        query_params.append(("team_ids[]", str(team_id)))

    res = requests.get(
        f"{HOST_URL}/api/v1/games?{urllib.parse.urlencode(query_params)}")
    body = res.json()
    return quart.Response(response=json.dumps(body), status=200)


@app.get("/stats")
async def get_stats():
    query_params = [("page", "0")]
    limit = request.args.get("limit")
    query_params.append(("per_page", limit or "100"))
    start_date = request.args.get("start_date")
    if start_date:
        query_params.append(("start_date", start_date))
    end_date = request.args.get("end_date")
    
    if end_date:
        query_params.append(("end_date", end_date))
    player_ids = request.args.getlist("player_ids")
    
    for player_id in player_ids:
        query_params.append(("player_ids[]", str(player_id)))
    game_ids = request.args.getlist("game_ids")
    
    for game_id in game_ids:
        query_params.append(("game_ids[]", str(game_id)))
    res = requests.get(
        f"{HOST_URL}/api/v1/stats?{urllib.parse.urlencode(query_params)}")
    body = res.json()
    return quart.Response(response=json.dumps(body), status=200)


@app.get("/season_averages")
async def get_season_averages():
    query_params = []
    season = request.args.get("season")
    if season:
        query_params.append(("season", str(season)))
    player_ids = request.args.getlist("player_ids")
    
    for player_id in player_ids:
        query_params.append(("player_ids[]", str(player_id)))
    res = requests.get(
        f"{HOST_URL}/api/v1/season_averages?{urllib.parse.urlencode(query_params)}")
    body = res.json()
    return quart.Response(response=json.dumps(body), status=200)


@app.get("/logo.png")
async def plugin_logo():
    filename = 'logo.png'
    return await quart.send_file(filename, mimetype='image/png')


@app.get("/.well-known/ai-plugin.json")
async def plugin_manifest():
    host = request.headers['Host']
    with open("ai-plugin.json") as f:
        text = f.read()
        # This is a trick we do to populate the PLUGIN_HOSTNAME constant in the manifest
        text = text.replace("PLUGIN_HOSTNAME", f"https://{host}")
        return quart.Response(text, mimetype="text/json")


@app.get("/openapi.yaml")
async def openapi_spec():
    host = request.headers['Host']
    with open("openapi.yaml") as f:
        text = f.read()
        # This is a trick we do to populate the PLUGIN_HOSTNAME constant in the OpenAPI spec
        text = text.replace("PLUGIN_HOSTNAME", f"https://{host}")
        return quart.Response(text, mimetype="text/yaml")


def main():
    app.run(debug=True, host="0.0.0.0", port=5001)


if __name__ == "__main__":
    main()

 

Last, we define our OpenAPI specification:

 

마지막으로 OpenAPI 사양을 정의합니다.

 

openapi: 3.0.1
info:
  title: Sport Stats
  description: Get current and historical stats for sport players and games.
  version: 'v1'
servers:
  - url: PLUGIN_HOSTNAME
paths:
  /players:
    get:
      operationId: getPlayers
      summary: Retrieves all players from all seasons whose names match the query string.
      parameters:
      - in: query
        name: query
        schema:
            type: string
        description: Used to filter players based on their name. For example, ?query=davis will return players that have 'davis' in their first or last name.
      responses:
        "200":
          description: OK
  /teams:
    get:
      operationId: getTeams
      summary: Retrieves all teams for the current season.
      responses:
        "200":
          description: OK
  /games:
    get:
      operationId: getGames
      summary: Retrieves all games that match the filters specified by the args. Display results using markdown tables.
      parameters:
      - in: query
        name: limit
        schema:
            type: string
        description: The max number of results to return.
      - in: query
        name: seasons
        schema:
            type: array
            items:
              type: string
        description: Filter by seasons. Seasons are represented by the year they began. For example, 2018 represents season 2018-2019.
      - in: query
        name: team_ids
        schema:
            type: array
            items:
              type: string
        description: Filter by team ids. Team ids can be determined using the getTeams function.
      - in: query
        name: start_date
        schema:
            type: string
        description: A single date in 'YYYY-MM-DD' format. This is used to select games that occur on or after this date.
      - in: query
        name: end_date
        schema:
            type: string
        description: A single date in 'YYYY-MM-DD' format. This is used to select games that occur on or before this date.
      responses:
        "200":
          description: OK
  /stats:
    get:
      operationId: getStats
      summary: Retrieves stats that match the filters specified by the args. Display results using markdown tables.
      parameters:
      - in: query
        name: limit
        schema:
            type: string
        description: The max number of results to return.
      - in: query
        name: player_ids
        schema:
            type: array
            items:
              type: string
        description: Filter by player ids. Player ids can be determined using the getPlayers function.
      - in: query
        name: game_ids
        schema:
            type: array
            items:
              type: string
        description: Filter by game ids. Game ids can be determined using the getGames function.
      - in: query
        name: start_date
        schema:
            type: string
        description: A single date in 'YYYY-MM-DD' format. This is used to select games that occur on or after this date.
      - in: query
        name: end_date
        schema:
            type: string
        description: A single date in 'YYYY-MM-DD' format. This is used to select games that occur on or before this date.
      responses:
        "200":
          description: OK
  /season_averages:
    get:
      operationId: getSeasonAverages
      summary: Retrieves regular season averages for the given players. Display results using markdown tables.
      parameters:
      - in: query
        name: season
        schema:
            type: string
        description: Defaults to the current season. A season is represented by the year it began. For example, 2018 represents season 2018-2019.
      - in: query
        name: player_ids
        schema:
            type: array
            items:
              type: string
        description: Filter by player ids. Player ids can be determined using the getPlayers function.
      responses:
        "200":
          description: OK

 

Learn how to build a semantic search and retrieval plugin

 

The ChatGPT retrieval plugin is a more fully featured code example. The scope of the plugin is large, so we encourage you to read through the code to see what a more advanced plugin looks like.

 

ChatGPT 검색 플러그인은 더 완전한 기능을 갖춘 코드 예제입니다. 플러그인의 범위는 넓기 때문에 코드를 자세히 읽고 고급 플러그인이 어떻게 생겼는지 확인하는 것이 좋습니다.

 

The retrieval plugin includes:

검색 플러그인에는 다음이 포함됩니다.

  • Support for multiple vector databases providers
  • 여러 벡터 데이터베이스 공급자 지원
  • All 4 different authentication methods
  • 4가지 인증 방법 모두
  • Multiple different API features
  • 다양한 API 기능
반응형