주요 콘텐츠로 건너뛰기
버전: 1.0.0

API 참조

소개

각 GaiaNet 노드는 OpenAI 호환 API 서버입니다. GaiaNet 노드 API를 기반으로 애플리케이션을 빌드할 수 있습니다. 사용자 다른 AI 에이전트 프레임워크에서 OpenAI API 구성을 GaiaNet 노드 API로 대체할 수도 있습니다.

모든 API 요청을 전송하는 기본 URL은 다음과 같습니다. https://node_id.gaianet.network/v1.

엔드포인트

잡담

그리고 채팅/완성 엔드포인트는 시스템 프롬프트와 사용자 쿼리를 기반으로 LLM 응답을 반환합니다.

비스트리밍

기본적으로 API는 HTTP 응답에 전체 응답을 포함하여 응답합니다.

요청

curl -X POST https://node_id.gaianet.network/v1/chat/completions \
-H 'accept:application/json' \
-H 'Content-Type: application/json' \
-d '{"messages":[{"role":"system", "content": "You are a helpful assistant."}, {"role":"user", "content": "What is the capital of France?"}], "model": "model_name"}'

응답:

{"id":"chatcmpl-bcfeebe0-5372-42c0-ac92-0615213e1c97","object":"chat.completion","created":1716380086,"model":"Llama-3-8B-Instruct-262k-Q5_K_M","choices":[{"index":0,"message":{"role":"assistant","content":"Paris."},"finish_reason":"stop"}],"usage":{"prompt_tokens":61,"completion_tokens":4,"total_tokens":65}}%  

스트리밍

추가 "stream":true 를 요청에 추가하여 LLM이 응답을 생성할 때 API가 부분 응답을 다시 보내도록 할 수 있습니다.

요청:

curl -X POST https://node_id.gaianet.network/v1/chat/completions \
-H 'accept:application/json' \
-H 'Content-Type: application/json' \
-d '{"messages":[{"role":"system", "content": "You are a helpful assistant."}, {"role":"user", "content": "What is the capital of France?"}], "model": "model_name", "stream":true}'

응답:

data: {"id":"chatcmpl-73a1f57d-185e-42c2-b8a6-ba0bae58f3b4","choices":[{"index":0,"delta":{"role":"assistant","content":"I"},"logprobs":null,"finish_reason":null}],"created":1716381054,"model":"Llama-3-8B-Instruct-262k-Q5_K_M","system_fingerprint":"fp_44709d6fcb","object":"chat.completion.chunk"}

data: {"id":"chatcmpl-73a1f57d-185e-42c2-b8a6-ba0bae58f3b4","choices":[{"index":0,"delta":{"role":"assistant","content":" am"},"logprobs":null,"finish_reason":null}],"created":1716381054,"model":"Llama-3-8B-Instruct-262k-Q5_K_M","system_fingerprint":"fp_44709d6fcb","object":"chat.completion.chunk"}

data: {"id":"chatcmpl-73a1f57d-185e-42c2-b8a6-ba0bae58f3b4","choices":[{"index":0,"delta":{"role":"assistant","content":" a"},"logprobs":null,"finish_reason":null}],"created":1716381054,"model":"Llama-3-8B-Instruct-262k-Q5_K_M","system_fingerprint":"fp_44709d6fcb","object":"chat.completion.chunk"}

...

data: {"id":"chatcmpl-73a1f57d-185e-42c2-b8a6-ba0bae58f3b4","choices":[{"index":0,"delta":{"role":"assistant","content":" an"},"logprobs":null,"finish_reason":null}],"created":1716381055,"model":"Llama-3-8B-Instruct-262k-Q5_K_M","system_fingerprint":"fp_44709d6fcb","object":"chat.completion.chunk"}

data: {"id":"chatcmpl-73a1f57d-185e-42c2-b8a6-ba0bae58f3b4","choices":[{"index":0,"delta":{"role":"assistant","content":" AI"},"logprobs":null,"finish_reason":null}],"created":1716381055,"model":"Llama-3-8B-Instruct-262k-Q5_K_M","system_fingerprint":"fp_44709d6fcb","object":"chat.completion.chunk"}

data: {"id":"chatcmpl-73a1f57d-185e-42c2-b8a6-ba0bae58f3b4","choices":[{"index":0,"delta":{"role":"assistant","content":"."},"logprobs":null,"finish_reason":null}],"created":1716381055,"model":"Llama-3-8B-Instruct-262k-Q5_K_M","system_fingerprint":"fp_44709d6fcb","object":"chat.completion.chunk"}

data: [DONE]

요청 본문

필드유형필수설명기본값
메시지목록필수대화에 대한 메시지 목록입니다.
1 . 시스템 메시지(사용하는 대형 언어 모드에 따라 다름)
* 콘텐츠 의 시스템 메시지가 필요합니다.
* "역할":"시스템" 필수
2. 사용자 메시지(필수)
* 콘텐츠 가 필요합니다.
* "role":"user" 필수
N/A"messages": ["role": "system","content": "You are a helpful assistant."},{"role": "user",
"content": "Hello!"}]
모델문자열필수사용한 채팅 모델N/ALlama-3-8B-262k-Q5_K_M
top_p번호선택 사항온도를 이용한 샘플링의 대안입니다. 0.8과 같이 값이 높을수록 출력은 더 무작위적이고, 0.2와 같이 값이 낮을수록 더 집중적이고 결정론적입니다.10에서 1 사이의 숫자입니다.
온도번호선택 사항0.8과 같이 값이 높을수록 출력은 더 무작위적이고, 0.2와 같이 값이 낮을수록 더 집중적이고 결정적입니다.10에서 2 사이의 숫자입니다.
presence_penalty번호선택 사항양수 값은 새로운 토큰이 지금까지 텍스트에 등장했는지 여부에 따라 새로운 토큰에 불이익을 주므로 모델이 새로운 주제에 대해 이야기할 가능성이 높아집니다.02.0에서 2.0 사이의 숫자입니다.
스트림부울선택 사항답안 스트리밍 출력 만들기FALSE"stream":true
주파수_페널티번호선택 사항양수 값은 지금까지 텍스트에서 기존 빈도에 따라 새 토큰에 불이익을 주어 모델이 같은 줄을 그대로 반복할 가능성을 낮춥니다.02.0에서 2.0 사이의 숫자입니다.

응답 본문

필드유형스트리밍 또는 비스트리밍설명기본값
id문자열둘 다채팅 완료를 위한 고유 식별자입니다.무작위로 생성됨chatcmpl-73a1f57d-185e-42c2-b8a6-ba0bae58f3b4
객체문자열둘 다개체 유형chat.completion.chunk 를 스트리밍 모드로 전환합니다.
chat.completion 를 비스트리밍 모드로 설정합니다.
chat.completion.chunk 를 스트리밍 모드로 전환합니다.
chat.completion 를 비스트리밍 모드로 설정합니다.
선택 사항배열둘 다채팅 완료 선택 목록입니다."choices":[{"index":0,"message":{"role":"assistant","content":"Paris."},"finish_reason":"stop"}]
생성정수둘 다채팅 완료가 생성된 때의 유닉스 타임스탬프(초 단위)입니다.N/A1716380086
모델문자열둘 다채팅 완료에 사용되는 모델입니다.사용하는 모델에 따라 다릅니다.Llama-3-8B-Instruct-Q5_K_M
사용법객체둘 다완료 토큰, 프롬프트 토큰 및 총 토큰을 포함한 완료 요청에 대한 사용 통계입니다.N/A"usage":{"prompt_tokens":61,"completion_tokens":4,"total_tokens":65}

포함

그리고 임베딩 엔드포인트는 사용자 쿼리 또는 파일 청크에 대한 임베딩을 계산합니다.

요청

curl -X POST https://node_id.gaianet.network/v1/embeddings \
-H 'accept:application/json' \
-H 'Content-Type: application/json' \
-d '{"model": "nomic-embed-text-v1.5.f16", "input":["Paris, city and capital of France, ..., for Paris has retained its importance as a centre for education and intellectual pursuits.", "Paris’s site at a crossroads ..., drawing to itself much of the talent and vitality of the provinces."]}'

응답:

{
"object": "list",
"data": [
{
"index": 0,
"object": "embedding",
"embedding": [
0.1428378969,
-0.0447309874,
0.007660218049,
...
-0.0128974719,
-0.03543198109,
0.03974733502,
0.00946635101,
-0.01531364303
]
},
{
"index": 1,
"object": "embedding",
"embedding": [
0.0697753951,
-0.0001159032545,
0.02073983476,
...
0.03565846011,
-0.04550019652,
0.02691745944,
0.02498772368,
-0.003226313973
]
}
],
"model": "nomic-embed-text-v1.5.f16",
"usage": {
"prompt_tokens": 491,
"completion_tokens": 0,
"total_tokens": 491
}
}

검색

그리고 검색 엔드포인트는 사용자의 쿼리에 따라 노드의 벡터 컬렉션에서 텍스트를 검색할 수 있습니다.

요청:

curl -X POST https://node_id.gaianet.network/v1/retrieve \
-H 'accept:application/json' \
-H 'Content-Type: application/json' \
-d '{"messages":[{"role":"system", "content": "You are a helpful assistant."}, {"role":"user", "content": "What is the location of Paris?"}], "model":"nomic-embed-text-v1.5.f16"}'

응답:

{
"points": [
{
"source": "\"Paris is located in northern central France, in a north-bending arc of the river Seine whose crest includes two islands, the Île Saint-Louis and the larger Île de la Cité, which form the oldest part of the city. The river's mouth on the English Channel is about 233 mi downstream from the city. The city is spread widely on both banks of the river. Overall, the city is relatively flat, and the lowest point is 35 m above sea level. Paris has several prominent hills, the highest of which is Montmartre at 130 m.\\n\"",
"score": 0.74011195
},
{
"source": "\"The Paris region is the most active water transport area in France, with most of the cargo handled by Ports of Paris in facilities located around Paris. The rivers Loire, Rhine, Rhône, Me\\n\"",
"score": 0.63990676
},
{
"source": "\"Paris\\nCountry\\tFrance\\nRegion\\nÎle-de-France\\r\\nDepartment\\nParis\\nIntercommunality\\nMétropole du Grand Paris\\nSubdivisions\\n20 arrondissements\\nGovernment\\n • Mayor (2020–2026)\\tAnne Hidalgo (PS)\\r\\nArea\\n1\\t105.4 km2 (40.7 sq mi)\\n • Urban\\n (2020)\\t2,853.5 km2 (1,101.7 sq mi)\\n • Metro\\n (2020)\\t18,940.7 km2 (7,313.0 sq mi)\\nPopulation\\n (2023)\\n2,102,650\\n • Rank\\t9th in Europe\\n1st in France\\r\\n • Density\\t20,000/km2 (52,000/sq mi)\\n • Urban\\n (2019)\\n10,858,852\\n • Urban density\\t3,800/km2 (9,900/sq mi)\\n • Metro\\n (Jan. 2017)\\n13,024,518\\n • Metro density\\t690/km2 (1,800/sq mi)\\nDemonym(s)\\nParisian(s) (en) Parisien(s) (masc.), Parisienne(s) (fem.) (fr), Parigot(s) (masc.), \\\"Parigote(s)\\\" (fem.) (fr, colloquial)\\nTime zone\\nUTC+01:00 (CET)\\r\\n • Summer (DST)\\nUTC+02:00 (CEST)\\r\\nINSEE/Postal code\\t75056 /75001-75020, 75116\\r\\nElevation\\t28–131 m (92–430 ft)\\n(avg. 78 m or 256 ft)\\nWebsite\\twww.paris.fr\\r\\n1 French Land Register data, which excludes lakes, ponds, glaciers > 1 km2 (0.386 sq mi or 247 acres) and river estuaries.\\n\"",
"score": 0.62259054
},
{
"source": "\" in Paris\\n\"",
"score": 0.6152092
},
{
"source": "\"The Parisii, a sub-tribe of the Celtic Senones, inhabited the Paris area from around the middle of the 3rd century BC. One of the area's major north–south trade routes crossed the Seine on the île de la Cité, which gradually became an important trading centre. The Parisii traded with many river towns (some as far away as the Iberian Peninsula) and minted their own coins.\\n\"",
"score": 0.5720232
}
],
"limit": 5,
"score_threshold": 0.4
}

모델 가져오기

그리고 모델 엔드포인트는 노드에서 사용 가능한 채팅 및 임베딩 모델을 제공합니다.

요청:

curl -X POST https://node_id.gaianet.network/v1/models

응답:

{"object":"list","data":[{"id":"Llama-3-8B-Instruct-262k-Q5_K_M","created":1716383261,"object":"model","owned_by":"Not specified"},{"id":"nomic-embed-text-v1.5.f16","created":1716383261,"object":"model","owned_by":"Not specified"}]}%   

노드 정보 가져오기

그리고 정보 엔드포인트는 노드에 대한 자세한 정보를 제공합니다.

요청:

curl -X POST https://node_id.gaianet.network/v1/info

응답:

{
"version": "0.5.0",
"plugin_version": "b2694 (commit 0d56246f)",
"port": "8080",
"models": [
{
"name": "Llama-2-7b-chat-hf-Q5_K_M",
"type": "chat",
"prompt_template": "Llama2Chat",
"n_predict": 1024,
"n_gpu_layers": 100,
"ctx_size": 4096,
"batch_size": 512,
"temperature": 1.0,
"top_p": 1.0,
"repeat_penalty": 1.1,
"presence_penalty": 0.0,
"frequency_penalty": 0.0
},
{
"name": "all-MiniLM-L6-v2-ggml-model-f16",
"type": "embedding",
"prompt_template": "Llama2Chat",
"n_predict": 1024,
"n_gpu_layers": 100,
"ctx_size": 384,
"batch_size": 512,
"temperature": 1.0,
"top_p": 1.0,
"repeat_penalty": 1.1,
"presence_penalty": 0.0,
"frequency_penalty": 0.0
}
],
"qdrant_config": {
"url": "http://localhost:6333",
"collection_name": "default",
"limit": 5,
"score_threshold": 0.4
}
}

상태 코드

HTTP 응답 코드설명이유솔루션
404찾을 수 없음엔드포인트 URL이 잘못되었습니다.엔드포인트 URL을 확인하세요.
500내부 서버 오류모델을 찾을 수 없습니다.모델명을 확인해 주세요.
400잘못된 요청