본문으로 건너뛰기

URL 형식

AISCouncil는 봇 구성을 URL 프래그먼트(# 뒤 부분)에 직접 인코딩합니다. 이것은 봇 공유가 링크를 공유하는 것만큼 간단함을 의미합니다 -- 서버 없음, 데이터베이스 없음, 계정 필요 없음. URL이 곧 봇입니다.

봇 URL 작동 방식​

봇을 공유하면 앱은 전체 봇 구성 -- 이름, 제공업체, 모델, 시스템 프롬프트, 온도 및 기타 모든 설정 -- 을 가져와 URL 프래그먼트에 있는 컴팩트한 문자열로 압축합니다.

https://aiscouncil.com/#B{base80_payload}

브라우저는 프래그먼트를 어떤 서버에도 보내지 않습니다 (이것은 HTTP 사양의 일부). 따라서 구성은 완전히 클라이언트 측에 유지됩니다.

URL 구조​

봇 URL에는 세 부분이 있습니다:

부분예시목적
기본 URLhttps://aiscouncil.com/앱 자체
##프래그먼트 구분자 (서버로 전송되지 않음)
VLQ 접두사 + 페이로드BeLT1Qx9k...버전 바이트 + 압축된 구성

VLQ 버전 접두사​

프래그먼트의 첫 번째 문자는 VLQ(가변 길이 수량) 인코딩을 사용하여 인코딩 버전을 식별합니다:

접두사버전콘텐츠 유형
A0에디터 콘텐츠 (aiscouncil.com/s/에서 사용)
B1봇 구성
C2PDL 페이지 사양

B 접두사는 앱에 "이것은 코덱 버전 1로 인코딩된 봇 구성"을 알려줍니다. 향후 버전은 기존 URL을 깨지 않고 새 형식을 추가할 수 있습니다.

Base80 인코딩​

버전 접두사 후 페이로드는 사용자 정의 Base80 알파벳을 사용하여 인코딩됩니다. 이 알파벳은 퍼센트 인코딩 없이 URL 프래그먼트에서 안전한 문자만 사용하면서 URL 밀도를 최대화하도록 선택되었습니다:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~$&'()*+,;=:@/?

Base80은 64자 대신 80자를 사용하여 URL 프래그먼트에 대해 Base64보다 효율적이며 문자당 더 많은 데이터를 패킹합니다.

압축​

Base80 인코딩 전에 봇 구성 JSON은 deflate-raw로 압축됩니다 (브라우저의 네이티브 CompressionStream API 사용). 이것은 일반적으로 봇 구성을 원래 크기의 30-60%로 줄입니다. 압축은 무손실이며 압축 해제는 브라우저의 네이티브 DecompressionStream을 사용합니다.

인코딩 파이프라인​

봇 구성 (JSON) --> UTF-8 바이트 --> Deflate-raw 압축 --> Base80 인코딩 --> VLQ 접두사

단계별:

  1. 봇 구성 객체가 JSON으로 직렬화됨
  2. JSON 문자열이 UTF-8 바이트로 인코딩됨
  3. 바이트가 deflate-raw로 압축됨 (네이티브 CompressionStream)
  4. 압축된 바이트가 Base80 문자로 인코딩됨
  5. VLQ 버전 접두사(B)가 앞에 추가됨

디코딩은 프로세스를 정확히 역순으로 수행합니다.

봇 구성 스키마​

구성은 압축된 크기를 최소화하기 위해 짧은 단일 문자 키를 사용합니다:

키유형설명기본값
nstring봇 표시 이름"New Bot"
pstring제공업체 ID (anthropic, openai, xai, gemini, openrouter, ollama 등)필수
mstring모델 ID (예: claude-sonnet-4-20250514, gpt-4o)필수
sstring시스템 프롬프트""
tnumber온도 (0-2)0.7
xinteger최대 출력 토큰4096
restring추론 노력 (low, medium, high, max 또는 숫자 예산)—
tpnumberTop P (0-1)1
fpnumber빈도 페널티 (0-2)0
ppnumber존재 페널티 (0-2)0
seinteger시드 (재현 가능한 출력용)—
starray정지 시퀀스—
rfstring응답 형식 (text 또는 json)"text"
authinteger액세스 제어: 1 = 공개 (로그인 불필요)—
iconstring봇 아이콘 (이모지)—
dstring봇 설명—
colorstring봇 강조 색상 (16진수)"#7c3aed"
kstring봇별 API 키 (로컬 저장, URL에는 없음)—
cobjectCouncil 구성 (다중 모델 봇용)—
pfstring프로필 참조 ID—
clinteger컨텍스트 길이 (메시지 기록 제한)—
smboolean스트리밍 활성화true
atboolean대화 자동 제목false
mrboolean마크다운 렌더링 활성화true
stcboolean토큰 수 표시false

URL 길이를 최소화하기 위해 기본값이 아닌 값만 구성에 포함됩니다.

URL에 없는 것​

보안 보장

API 키는 URL에 절대 포함되지 않습니다. k(봇별 API 키) 필드는 URL 인코딩 중에 제거됩니다. 키는 브라우저의 localStorage에만 저장되며 LLM 제공업체의 API 엔드포인트로만 전송됩니다.

다음은 공유 URL에서 제외됩니다:

  • API 키 -- 받는 사람이 직접 제공해야 함
  • 채팅 기록 -- 봇 구성만 공유됨
  • 메모리 항목 -- 봇별 지속 메모리는 로컬 유지
  • 사용량 통계 -- 추적 데이터는 기기 로컬

에디터 URL​

aiscouncil.com/s/의 웹 에디터는 다른 버전 접두사로 동일한 인코딩 시스템을 사용합니다:

https://aiscouncil.com/s/#A{base80_payload}

A 접두사는 버전 0(에디터 콘텐츠)을 나타냅니다. 페이로드는 봇 구성이 아닌 압축된 문서 콘텐츠를 포함합니다.

프로그래밍 방식 인코딩 및 디코딩​

브라우저 콘솔에서 AIS.Codec 모듈을 사용하여 봇 구성을 프로그래밍 방식으로 인코딩 및 디코딩할 수 있습니다:

URL 디코딩​

// URL 해시에서 디코딩
const hash = location.hash.slice(1); // '#' 제거
const config = await AIS.Codec.decodeBotConfig(hash);
console.log(config);
// { n: "My Bot", p: "anthropic", m: "claude-sonnet-4-20250514", s: "You are helpful.", t: 0.7, x: 4096 }

구성 인코딩​

const config = {
n: "Research Assistant",
p: "anthropic",
m: "claude-sonnet-4-20250514",
s: "You are a thorough research assistant. Cite sources.",
t: 0.3,
x: 8192,
};
const hash = await AIS.Codec.encodeBotConfig(config);
const url = location.origin + "/#" + hash;
console.log(url);
// https://aiscouncil.com/#BeLT1Qx9k...

스키마 검사​

console.log(AIS.Codec.CONFIG_SCHEMA);
// 봇 구성에 대한 JSON Schema 정의 반환

URL 길이 제한​

브라우저 제한

대부분의 최신 브라우저는 최소 2,000자의 URL 길이를 지원하며 많은 경우 8,000자 이상을 지원합니다. 그러나 일부 중개자(이메일 클라이언트, 소셜 미디어 플랫폼, URL 단축기)는 긴 URL을 자를 수 있습니다.

실제 제한은 시스템 프롬프트 길이에 따라 다릅니다:

시스템 프롬프트 길이대략적인 URL 길이호환성
< 500자~300-500자모든 곳에서 안전
500-2,000자~500-1,200자브라우저 및 대부분의 플랫폼에서 안전
2,000-5,000자~1,200-2,500자브라우저에서 작동, 이메일/SMS에서 실패 가능
> 5,000자2,500자 이상브라우저 전용, 다른 곳에서 잘릴 수 있음

시스템 프롬프트가 매우 긴 경우 다음을 고려하세요:

  • 프롬프트 단축 또는 요약
  • 프래그먼트를 보존하는 URL 단축기 사용
  • 대신 봇 구성을 JSON 파일로 공유 (내보내기 통해)

홈페이지 동작​

홈페이지에서 URL 인코딩 없음

aiscouncil.com을 직접 로드할 때(URL에 해시 없음) 앱은 봇 구성을 URL로 인코딩하지 않습니다. URL 인코딩은 페이지가 공유 봇 URL에서 로드된 경우에만 활성화됩니다(즉, URL에 이미 #B... 프래그먼트가 포함된 경우). 이것은 홈페이지 URL을 깔끔하게 유지합니다.