원래 웹사이트에서 (무료로) 사용하던 것처럼 GPT-4o-mini를 API 호출을 통해 사용하고 싶었습니다.
이것은 DuckDuckGo의 AI 채팅 기능을 이용해 구현되었습니다. 이전에는 DuckDuckGo Python 라이브러리(chat() 함수 사용)를 사용하여 이 기능을 구현했지만, 의존성 제한 문제로 인해 제거되었습니다. 이제는 HTTP 요청을 통해 직접 채팅 상호작용을 처리합니다.
참고: 저는 이것이 Continue.dev VSCode 확장 프로그램, Ollama Open Web UI 및 Aider와 함께 작동하는 것을 알고 있지만, 다른 어떤 것에서도 테스트하지 않았으므로 사용 환경에 따라 다를 수 있습니다 (YMMV).
제가 이 API를 만드는 과정에서 DuckDuckGo의 AI 채팅과 상호작용하면서 한 가지 제한 사항을 발견했습니다:
- 이미지를 전송할 수 없음 (아직 해결하지 못했으며, 아마도 영원히 어려울 것입니다)
자주 업데이트될 것이라고 기대하지 마세요. 이것이 작동을 멈출 때까지 사용할 예정입니다.
aider-demo.1.mp4
continue-vscode-demo.1.mp4
ollama-webui-demo.1.mp4
음성 생성 기능과 함께 이 API를 사용하려면 다음 설정 가이드를 따르세요.
음성 생성 기능 없이 현재 상태 그대로 이 API를 사용하려면 다음 설정 가이드를 따르세요.
curl -X GET http://127.0.0.1:1337/v1/models
현재는 다음을 사용할 수 있습니다:
- GPT4o Mini
- Claude 3 Haiku
- Mixtral 8x7b
- Llama 70b Instruct Turbo
여기서 "content":
은 메시지를 넣는 곳입니다.
curl -X POST "http://localhost:1337/v1/chat/completions" \
-H "Content-Type: application/json" \
-d '{
...
응답을 스트리밍으로 받고 싶다면 stream: true를, 모든 응답을 한 번에 받고 싶다면 stream: false를 사용하세요. 다만, 가독성을 위해서는 stream:false가 강력히 권장됩니다.
대화를 계속하고 싶은 경우 생성된 conversation_id를 기록해 둘 수 있습니다. 예를 들어:
초기 메시지를 보냅니다 (가독성을 위해 stream:false 사용):
curl -X POST "http://localhost:1337/v1/chat/completions" \
-H "Content-Type: application/json" \
-d '{
...
다음과를 받습니다:
응답을 받은 후에는 대화_id를 끝에 붙여서 후속 질문을 보낼 수 있습니다:
curl -X POST "http://localhost:1337/v1/chat/completions" \
-H "Content-Type: application/json" \
-d '{
...
curl -X DELETE http://127.0.0.1:1337/v1/conversations/1cecdf45-df73-431b-884b-6d233b5511c7
선택적 TTS(Text-to-Speech) 엔드포인트를 사용하는 경우, TikTok의 TTS를 사용하며 설정 시 session_id가 필요합니다. 이 엔드포인트는 OpenAI의 Speech API와 유사한 방식으로 사용할 수 있습니다. 이는 Open Web UI와 같이 자체 LLM 웹 UI를 호스팅하고 그 메시지를 음성으로 듣고 싶거나, AI 비서(AI assistant)를 개발하거나 프로토타이핑하려는 경우 유용합니다.
curl -X GET http://127.0.0.1:1337/v1/audio/speech/voices
LLM과 상호 작용하여 생성된 음성 응답을 얻으려면 다음을 수행할 수 있습니다:
curl -X POST "http://localhost:1337/v1/chat/completions" \
-H "Content-Type: application/json" \
-d '{
...
stream:false로만 가능합니다.
전체 음성 목록은 여기(placeholder)에서 찾을 수 있습니다.
| jq -r '.choices[0].message.audio.data' | base64 -d > speech.mp3
(완료된 응답의 오디오 데이터를 디코딩하여 mp3 파일을 제공합니다.)
TTS를 얻기 위해 LLM을 사용할 필요는 없으며, 자체 텍스트 입력으로부터 음성을 생성할 수도 있습니다.
curl -X POST "http://localhost:1337/v1/audio/speech" \
-H "Content-Type: application/json" \
-d '{
...