URL 형식
AISCouncil는 봇 구성을 URL 프래그먼트(# 뒤 부분)에 직접 인코딩합니다. 이것은 봇 공유가 링크를 공유하는 것만큼 간단함을 의미합니다 -- 서버 없음, 데이터베이스 없음, 계정 필요 없음. URL이 곧 봇입니다.
봇 URL 작동 방식
봇을 공유하면 앱은 전체 봇 구성 -- 이름, 제공업체, 모델, 시스템 프롬프트, 온도 및 기타 모든 설정 -- 을 가져와 URL 프래그먼트에 있는 컴팩트한 문자열로 압축합니다.
https://aiscouncil.net/#B{base80_payload}
브라우저는 프래그먼트를 어떤 서버에도 보내지 않습니다 (이것은 HTTP 사양의 일부). 따라서 구성은 완전히 클라이언트 측에 유지됩니다.
URL 구조
봇 URL에는 세 부분이 있습니다:
| 부분 | 예시 | 목적 |
|---|---|---|
| 기본 URL | https://aiscouncil.net/ | 앱 자체 |
# | # | 프래그먼트 구분자 (서버로 전송되지 않음) |
| VLQ 접두사 + 페이로드 | BeLT1Qx9k... | 버전 바이트 + 압축된 구성 |
VLQ 버전 접두사
프래그먼트의 첫 번째 문자는 VLQ(가변 길이 수량) 인코딩을 사용하여 인코딩 버전을 식별합니다:
| 접두사 | 버전 | 콘텐츠 유형 |
|---|---|---|
A | 0 | 에디터 콘텐츠 (aiscouncil.net/s/에서 사용) |
B | 1 | 봇 구성 |
C | 2 | PDL 페이지 사양 |
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 접두사
단계별:
- 봇 구성 객체가 JSON으로 직렬화됨
- JSON 문자열이 UTF-8 바이트로 인코딩됨
- 바이트가 deflate-raw로 압축됨 (네이티브
CompressionStream) - 압축된 바이트가 Base80 문자로 인코딩됨
- VLQ 버전 접두사(
B)가 앞에 추가됨
디코딩은 프로세스를 정확히 역순으로 수행합니다.
봇 구성 스키마
구성은 압축된 크기를 최소화하기 위해 짧은 단일 문자 키를 사용합니다:
| 키 | 유형 | 설명 | 기본값 |
|---|---|---|---|
n | string | 봇 표시 이름 | "New Bot" |
p | string | 제공업체 ID (anthropic, openai, xai, gemini, openrouter, ollama 등) | 필수 |
m | string | 모델 ID (예: claude-sonnet-4-20250514, gpt-4o) | 필수 |
s | string | 시스템 프롬프트 | "" |
t | number | 온도 (0-2) | 0.7 |
x | integer | 최대 출력 토큰 | 4096 |
re | string | 추론 노력 (low, medium, high, max 또는 숫자 예산) | — |
tp | number | Top P (0-1) | 1 |
fp | number | 빈도 페널티 (0-2) | 0 |
pp | number | 존재 페널티 (0-2) | 0 |
se | integer | 시드 (재현 가능한 출력용) | — |
st | array | 정지 시퀀스 | — |
rf | string | 응답 형식 (text 또는 json) | "text" |
auth | integer | 액세스 제어: 1 = 공개 (로그인 불필요) | — |
icon | string | 봇 아이콘 (이모지) | — |
d | string | 봇 설명 | — |
color | string | 봇 강조 색상 (16진수) | "#7c3aed" |
k | string | 봇별 API 키 (로컬 저장, URL에는 없음) | — |
c | object | Council 구성 (다중 모델 봇용) | — |
pf | string | 프로필 참조 ID | — |
cl | integer | 컨텍스트 길이 (메시지 기록 제한) | — |
sm | boolean | 스트리밍 활성화 | true |
at | boolean | 대화 자동 제목 | false |
mr | boolean | 마크다운 렌더링 활성화 | true |
stc | boolean | 토큰 수 표시 | false |
URL 길이를 최소화하기 위해 기본값이 아닌 값만 구성에 포함됩니다.
URL에 없는 것
API 키는 URL에 절대 포함되지 않습니다. k(봇별 API 키) 필드는 URL 인코딩 중에 제거됩니다. 키는 브라우저의 localStorage에만 저장되며 LLM 제공업체의 API 엔드포인트로만 전송됩니다.
다음은 공유 URL에서 제외됩니다:
- API 키 -- 받는 사람이 직접 제공해야 함
- 채팅 기록 -- 봇 구성만 공유됨
- 메모리 항목 -- 봇별 지속 메모리는 로컬 유지
- 사용량 통계 -- 추적 데이터는 기기 로컬
에디터 URL
aiscouncil.net/s/의 웹 에디터는 다른 버전 접두사로 동일한 인코딩 시스템을 사용합니다:
https://aiscouncil.net/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.net/#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 파일로 공유 (내보내기 통해)
홈페이지 동작
aiscouncil.net을 직접 로드할 때(URL에 해시 없음) 앱은 봇 구성을 URL로 인코딩하지 않습니다. URL 인코딩은 페이지가 공유 봇 URL에서 로드된 경우에만 활성화됩니다(즉, URL에 이미 #B... 프래그먼트가 포함된 경우). 이것은 홈페이지 URL을 깔끔하게 유지합니다.