API 사용법임베딩
임베딩
POST /v1/embeddings — 문장을 벡터로 바꿉니다.
호출하기
문장을 숫자 배열(벡터)로 바꿉니다. 검색·유사 문서 찾기·중복 판별처럼 “비슷한 정도”를 계산해야 하는 곳에 씁니다. OpenAI 임베딩 엔드포인트와 같은 형식이라 baseURL 만 바꾸면 됩니다.
curl https://ai.cubion.kr/v1/embeddings \
-H "Authorization: Bearer $GATEWAY_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"text-embedding-3-small","input":"검색할 문장"}'import os
from openai import OpenAI
ai = OpenAI(base_url="https://ai.cubion.kr/v1", api_key=os.environ["GATEWAY_KEY"])
r = ai.embeddings.create(
model="text-embedding-3-small",
input="검색할 문장",
)
vector = r.data[0].embedding # list[float]import OpenAI from "openai";
const ai = new OpenAI({ baseURL: "https://ai.cubion.kr/v1", apiKey: process.env.GATEWAY_KEY });
const r = await ai.embeddings.create({
model: "text-embedding-3-small",
input: "검색할 문장",
});
const vector = r.data[0].embedding; // number[]모델은 text-embedding-3-small 입니다. 이 키로 쓸 수 있는 임베딩 모델은 모델 목록 에서 확인하세요 — 목록에 없는 모델을 부르면 403 model_not_allowed 입니다.
응답
응답은 OpenAI 와 같은 모양입니다. 벡터는 data[0].embedding 에 들어 있는 숫자 배열이고,usage 에는 이번 호출에 쓰인 토큰 수가 옵니다.
응답
{
"object": "list",
"model": "text-embedding-3-small",
"data": [
{ "object": "embedding", "index": 0, "embedding": [0.0023, -0.0117, 0.0091, ...] }
],
"usage": { "prompt_tokens": 8, "total_tokens": 8 }
}여러 문장 한 번에
input 에 배열을 넣으면 한 번의 호출로 여러 문장을 처리합니다. 문장마다 따로 부르는 것보다 왕복이 줄어 훨씬 빠릅니다.
curl https://ai.cubion.kr/v1/embeddings \
-H "Authorization: Bearer $GATEWAY_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"text-embedding-3-small","input":["첫 번째 문장","두 번째 문장"]}'r = ai.embeddings.create(
model="text-embedding-3-small",
input=["첫 번째 문장", "두 번째 문장"],
)
vectors = [d.embedding for d in r.data] # 보낸 순서 그대로const r = await ai.embeddings.create({
model: "text-embedding-3-small",
input: ["첫 번째 문장", "두 번째 문장"],
});
const vectors = r.data.map((d) => d.embedding); // 보낸 순서 그대로data 는 보낸 순서대로 돌아오고, 각 항목의 index 로도 어느 입력의 결과인지 확인할 수 있습니다.
알아 둘 점
- 요금은 보낸 토큰 수로 계산됩니다. 같은 문장을 반복해 임베딩하지 말고 결과를 저장해 두세요 — 문서는 한 번만 임베딩하고, 매번 새로 만드는 건 검색어 쪽뿐이면 충분합니다.
- 벡터를 비교하려면 같은 모델로 만든 것끼리여야 합니다. 모델을 바꾸면 저장해 둔 벡터도 다시 만들어야 합니다.
- 호출이 막혔을 때의 상태 코드와 본문 형태는 오류 처리 에 정리해 두었습니다.