rsai
예측 불가능한 모델을 위한 예측 가능한 개발. 컴파일러가 혼란을 처리하게 하세요.
경고: rsai는 불안정한 API를 가진 프리릴리스(pre-release) 소프트웨어입니다. 버전 간에 호환성 파괴 변경(Breaking changes)이 발생할 수 있습니다. 프로덕션 애플리케이션에서는 버전을 고정(Pin versions)하세요.
rsai는 타입이 지정된 (typed) LLM 생성 및 자동 도구 호출(automatic tool calling)을 위한 의견이 강한(opinionated) Rust 클라이언트입니다. 스트리밍이나 첫 토큰까지의 시간보다 완전한 유효성 검사(validation)와 타입 안전성(type safety)을 선호합니다: 호출자는 부분 응답이 아닌, 유효한 값 또는 오류를 받게 됩니다.
지원되는 제공업체 (Supported Providers)
| Provider | API | Default API key variable | Notes |
|---|
| OpenAI | Responses API | OPENAI_API_KEY | 구조화된 출력(Structured output) 및 자동 도구 호출. |
| ... | | | |
요구 사항 (Requirements)
rsai는 Rust 1.97 이상을 요구합니다.
[dependencies]
rsai = "0.5"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
...
제공업체에 대한 환경 변수를 설정하거나, ApiKey::Custom을 통해 키를 전달하세요.
빠른 시작 (Quick Start)
use rsai::{ApiKey, ChatRole, Message, Provider, completion_schema, llm};
#[completion_schema]
...
구조화된 생성 (Structured Generation)
#[completion_schema]는 Deserialize와 JsonSchema를 파생(derives)하며, 알 수 없는 응답 필드를 거부하고 타입이 지정된 완료 구문 분석(typed completion parsing)을 가능하게 합니다. Struct와 Enum 모두 지원됩니다. 객체 루트가 필요한 제공업체의 경우 비-객체 스키마는 자동으로 래핑(wrapped)됩니다.
use rsai::completion_schema;
#[completion_schema]
...
텍스트 생성 (Text Generation)
타입이 지정된 JSON 응답이 불필요할 때는 TextResponse를 사용하세요.
use rsai::{ApiKey, ChatRole, Message, Provider, TextResponse, llm};
#[tokio::main]
...
함수 호출 (Function Calling)
함수에 #[tool]로 주석을 달고, 모든 비-컨텍스트 매개변수를 문서화하며, toolset!으로 이를 수집하고, 결과 도구 세트(toolset)를 요청에 첨부하세요. 도구 인수는 실행 전에 스키마 검증(schema-validated)됩니다.
use rsai::{ApiKey, ChatRole, Message, Provider, TextResponse, llm, tool, toolset};
#[tool]
...
공유 컨텍스트를 가진 도구(Tools With Shared Context)
컨텍스트 인식 도구(Context-aware tools)는 Ctx<&T>를 통해 의존성을 받습니다. 포함하는 컨텍스트는 AsRef<T>를 구현해야 합니다. 중복된 도구 이름이 거부되기 때문에, 컨텍스트 인식 도구 세트를 최종화하는 과정은 오류가 발생할 수 있습니다(fallible).
use rsai::{Ctx, tool, toolset};
struct Database;
...
생성 및 HTTP 구성(Generation and HTTP Configuration)
빌더는 다음을 지원합니다:
.max_tokens(...)
.temperature(...) 및 .top_p(...)
.timeout(...) 또는 .http_client_config(...)
- 도구 루프 제한, 동시성(concurrency), 타임아웃을 위한
.tool_calling_config(...)
- 원본 JSON 검사를 위한
.inspect_request(...) 및 .inspect_response(...)
완전한 제공업체(provider), 구조화된 생성(structured generation), 함수 호출(function calling), 공유 컨텍스트, 트레이싱(tracing), 검사(inspection), 그리고 구성 예제는 examples/를 참조하세요.
cargo run --example text-generation
cargo run --example function-calling
cargo run --example gemini
...
설계 철학(Design Philosophy)
이 라이브러리는 의도적으로 스트리밍(streaming)을 지원하지 않습니다. 이는 첫 토큰까지의 시간보다 타입 안전성(type safety)과 완전한 검증(complete validation)을 우선시하기 때문입니다. 스트리밍, 다양한 제공업체(disparate providers), 그리고 더 광범위한 대화 기능이 필요한 범용 클라이언트의 경우 Rig를 고려해 보세요.
라이선스(License)
MIT 라이선스에 따라 라이선스가 부여됩니다.