문서 / AI 연결과 게이트웨이
AI 연결과 게이트웨이
OpenRouter API 키를 연결하고 채팅, 임베딩, 이미지 생성 기능을 사용하는 방법을 알아봅니다.
프로젝트에 OpenRouter 키 연결하기
- OpenRouter 키 준비
OpenRouter 공식 홈페이지에서 사용할 API 키를 발급받으세요. 모델 찾아보기에서 채팅, 임베딩, 이미지 생성 중 원하는 작업을 지원하는 모델을 고르고 모델 ID를 확인하세요.
- 프로젝트의 AI 연결 탭 열기
프로젝트를 선택한 뒤 AI 연결 탭에 API 키를 입력하고 저장하세요. 프로젝트 소유자와 편집자는 키를 등록하거나 교체하고, 연결을 해제할 수 있습니다.
- 서버 코드에서 호출
키를 저장하면 서버 코드에서
env.OPENROUTER_API_KEY와env.AI_GATEWAY를 사용할 수 있습니다. 게이트웨이 주소를 따로 입력하지 않아도 됩니다.
AI 요청에는 직접 등록한 OpenRouter 키를 사용합니다. 키는 프로젝트 Worker의 Secret에 저장되며, 저장한 값은 화면에서 다시 확인할 수 없습니다. 키를 바꾸려면 새 키를 저장하고, 삭제하려면 연결을 해제하세요. 키를 브라우저 코드나 Git, 로그에 넣거나 에이전트와의 대화에 붙여 넣지 마세요.
run(model, input, options)
env.AI_GATEWAY.run()은 프로젝트의 서버 코드에서 호출하세요. 아래 예제는 Hono 서버의 요청 핸들러 안에서 사용하는 코드입니다. 앱 이용자의 로그인과 권한을 먼저 확인한 뒤 호출하세요. 예제의 env는 Hono의 c.env를 가리킵니다.
const response = await env.AI_GATEWAY.run(model, input, { apiKey, task });- model · 필수
- 사용할 OpenRouter 모델의 ID입니다. 예제의 모델 ID를 원하는 작업을 지원하는 실제 모델 ID로 바꾸세요.
- input · 필수
- 모델에 보낼 내용을 담는 객체입니다. 채팅 메시지는
messages, 임베딩할 텍스트는input, 이미지 설명은prompt에 넣으세요. - options.apiKey · 필수
- 프로젝트에 저장한 키를
env.OPENROUTER_API_KEY로 전달하세요. - options.task · 필수
chat,embeddings,image중 하나를 지정하세요. 생략하거나 다른 값을 넣으면 OpenRouter로 요청을 보내기 전에 400 오류를 반환합니다.- 반환값
Response객체를 반환합니다. 스트리밍 응답은 그대로 반환하세요. JSON 응답을 읽을 때는response.ok로 성공 여부를 확인한 뒤response.json()을 호출하세요.
채팅과 스트리밍
채팅을 지원하는 모델을 고르고, messages에 대화 내용을 넣으세요. stream: true로 설정하면 답변을 SSE 스트림으로 받을 수 있습니다. 이때는 response.json()으로 읽지 말고 응답을 그대로 반환하세요.
const env = c.env;
const response = await env.AI_GATEWAY.run(
"<CHAT_MODEL_ID>",
{
messages: [{ role: "user", content: "Hello" }],
stream: true,
},
{ apiKey: env.OPENROUTER_API_KEY, task: "chat" },
);
return response;텍스트 임베딩
임베딩 모델을 고르고, input에 텍스트 한 개 또는 텍스트 배열을 넣으세요. 요청이 성공하면 JSON 응답의 data[].embedding에서 벡터를 확인할 수 있습니다. 벡터와 원문을 저장하거나 검색에 활용하는 부분은 앱에서 구현하세요.
const env = c.env;
const response = await env.AI_GATEWAY.run(
"<EMBEDDING_MODEL_ID>",
{ input: ["Hello", "World"] },
{ apiKey: env.OPENROUTER_API_KEY, task: "embeddings" },
);
return response;이미지 생성
OpenRouter Image API를 지원하는 모델을 고르고, prompt에 만들고 싶은 이미지를 설명하세요. 아래 예제는 이미지 한 장을 요청합니다. 생성이 완료되면 JSON 응답의 data[].b64_json에서 Base64로 인코딩된 이미지를 확인할 수 있습니다. 응답에 media_type이 포함되어 있으면 이미지 형식도 확인할 수 있습니다. 모델마다 사용할 수 있는 옵션은 OpenRouter 이미지 생성 문서에서 확인하세요.
const env = c.env;
const response = await env.AI_GATEWAY.run(
"<IMAGE_MODEL_ID>",
{ prompt: "A cat sitting by a sunny window", n: 1 },
{ apiKey: env.OPENROUTER_API_KEY, task: "image" },
);
return response;오류 처리와 호출 권한 확인하기
task를 생략하거나 지원하지 않는 값을 넣으면 400 오류가 발생합니다. 모델 ID가 비어 있거나 문자열이 아닌 경우, 입력값이 객체가 아닌 경우에도 400 오류가 발생합니다.- API 키가 없거나 형식이 올바르지 않으면 401 오류가 발생합니다. OpenRouter가 오류를 반환한 경우에는 해당 HTTP 상태 코드를 유지하며, 응답에
upstream_status와 간단한 오류 메시지가 포함됩니다. - OpenRouter에 연결하지 못하면 502 오류가 발생합니다. 바인딩을 호출하는 과정에서 예외가 발생할 수도 있으므로 앱의 오류 처리 코드에서도 이에 대비하세요.
- API 키는 서버에서만 사용하세요. 앱에서도 AI를 호출하는 이용자의 로그인과 권한을 확인하고, 필요한 호출 제한을 설정하세요. 프로젝트의 AI 연결 관리 기능은 앱 이용자의 호출 권한까지 확인해 주지 않습니다.
- 키나 프롬프트, AI 응답 원문을 로그에 남기지 마세요. HTTP 요청이 성공했더라도 스트리밍 도중 오류가 발생할 수 있습니다. 앱에서 스트림을 읽을 때 오류 메시지도 확인하세요.
앱 로그인·권한 가이드와 프로젝트 AI 연결 화면을 함께 확인하세요.