RAIL (Remote Agent Invocation Layer) 프로토콜 - 프로젝트 아키텍처
어떤 애플리케이션이든 AI 제어가 가능하게 만드는 단 한 줄의 코드
1. RAIL이란 무엇인가?
RAIL은 모든 애플리케이션(C#, C++, Python, Node.js)을 모든 LLM(GPT, Claude, Gemini)에 연결하는 **범용 브리지 (universal bridge)**입니다. 애플리케이션을 새로 작성할 필요 없이, 단 한 줄의 코드만 추가하면 AI가 귀하의 메서드를 직접 호출할 수 있습니다.
2. 프로젝트 개요
| 프로젝트 | 목적 | 언어 |
|---|
| RailOrchestrator | 메인 AI 애플리케이션 (UI + LLM 라우팅) | C# / WPF |
| ... | | |
3. 프로젝트 상세 정보
RailOrchestrator
두뇌 (The Brain) - 사용자가 상호작용하는 메인 애플리케이션입니다.
- WPF 데스크톱 애플리케이션 (.NET 9)
- LLM (Gemini, OpenAI, Anthropic, Claude) 연결
- 다단계 추론을 위한 ReAct 에이전트 루프 (agent loop)
- 클라이언트 연결을 위한 Named Pipe 서버 호스팅
- 에셋 (Chips) 및 도구 라우팅 관리
주요 파일:
Services/Host/HostService.cs - Named Pipe 서버
Services/LLMService.cs - LLM API 통합
Services/ReAct/ReActOrchestrator.cs - 에이전트 루프
RailBridge.Native
브리지 (The Bridge) - 언어 간 통신을 가능하게 하는 네이티브 DLL입니다.
- C-ABI 호환성을 위해 Native AOT로 컴파일됨
- 모든 언어에서 호출 가능한 함수 노출:
- IPC를 위해 Named Pipes 사용
대상: Python, C++, Node.js, Rust, Go
RailSDK.Universal
** .NET SDK** - C# 애플리케이션을 위한 클라이언트 라이브러리입니다.
- .NET Standard 2.0 (.NET Framework 4.6.1+와 호환)
- 간단한 API:
RailEngine.Ignite(this)
- 리플렉션 (reflection)을 통한 메서드 자동 검색
- 통신을 위해
RailBridge.dll 로드
사용법:
RailSDK (RailFactory.Core)
툴킷 (The Toolkit) - 어셈블리 스캐닝 (assembly scanning) 및 매니페스트 생성.
포함 내용:
RuntimeRegistry - .NET / Native 바이너리 감지
AssemblyScanner - DLL에서 메서드 추출
CompositeManifest - 멀티 모듈 매니페스트 (manifest) 형식
DependencyAnalyzer - 프로젝트 의존성 분석
SolutionScanner - 전체 .sln 솔루션 스캔
사용처: RailStudio, RailOrchestrator
RailSDK-Cpp
C++ SDK - C++ 애플리케이션의 연결을 지원합니다.
- CMake 기반 빌드 시스템
LoadLibrary를 통한 RailBridge.dll 로드
- 콜백 (Callback) 기반 명령 실행
- x64 및 x86 빌드 모두 지원
빌드 (Build):
build_x64.bat # 64비트
build_x86.bat # 32비트 (레거시 앱)
사용법 (Usage):
Rail::ignite("MyApp", manifestJson, onCommand);
RailSDK-Python
Python SDK - Python 스크립트의 연결을 지원합니다.
ctypes를 사용하여 RailBridge.dll 로드
- 데코레이터 (Decorator) 기반 메서드 등록
- 다른 SDK와 일치하는 단순한 API
사용법 (Usage):
from rail import RailEngine
engine = RailEngine()
...
RailSDK-Node (테스트되지 않음)
Node.js SDK - TypeScript/JavaScript 애플리케이션의 연결을 지원합니다.
- 네이티브 브리지 (native bridge) 액세스를 위해
ffi-napi 사용
- TypeScript 타입 포함
- 프로미스 (Promise) 기반 API
사용법 (Usage):
import { RailEngine } from 'rail-sdk';
engine.ignite([new MyService()]);
RailStudio
시각적 도구 (Visual Tool) - 애플리케이션을 스캔하고 분석합니다.
- EXE/DLL을 분석기로 전송
rail.manifest.json 자동 생성
- 의존성 시각화
- 솔루션 전체 스캔
사용 사례: Rail 통합을 위한 레거시 앱 준비
ConvertedProjectExample
SDK 통합을 보여주는 예제 애플리케이션입니다.
| 예제 | 설명 |
|---|
AgentTest | 고객 데이터베이스가 포함된 간단한 WPF 앱 |
WorkflowDemo | 워크플로 자동화 예제 |
매니페스트 (Manifest) 여기에서 이 예제 애플리케이션을 위해 이미 생성된 모든 "rail.manifest.json"이 포함된 Manifest 폴더를 찾을 수 있습니다.
4. 개발자를 위한 SDK 요구 사항
애플리케이션을 AI 제어 가능 (AI-controllable) 상태로 전환할 때, 정확히 필요한 사항은 다음과 같습니다:
언어별 요구 사항
| 언어 | 추가할 항목 | 자동 포함 항목 | 비고 |
|---|
| C# (.NET) | RailSDK.Universal.dll | RailBridge.dll (자동 복사됨) | 참조 하나로 모든 기능 포함 |
| ... | | | |
C# 개발자: 참조 하나로 모든 것을 해결
RailSDK.Universal을 추가하면, 네이티브 브릿지 (native bridge)가 출력 디렉터리로 자동 복사됩니다:
📁 bin/Debug/net8.0/
├── YourApp.exe
├── RailSDK.Universal.dll ← 이 참조를 추가합니다
...
추가 방법:
<PackageReference Include="RailSDK.Universal" Version="2.0.0" />
C++ 개발자: 두 가지 옵션
C++은 코드베이스에 따라 **두 가지 통합 모드 (integration modes)**를 제공합니다:
옵션 A: RTTR을 사용하는 현대적 C++ (자동 리플렉션 (Automatic Reflection))
새로운 애플리케이션 또는 C++17을 지원하는 코드베이스의 경우:
RTTR_REGISTRATION {
rttr::registration::class_<OrderManager>("OrderManager")
...
필요한 파일:
📁 YourApp/
├── YourApp.exe
├── rail_sdk.dll ← C++ 래퍼 (RTTR 포함)
...
옵션 B: 커스텀 디스패처 (Custom Dispatcher)를 사용하는 레거시 C++ (수동 라우팅 (Manual Routing))
C++17 또는 RTTR을 사용할 수 없는 레거시 애플리케이션 (예: 게임, 오래된 코드베이스)의 경우:
필요한 파일:
📁 YourApp/
├── YourApp.exe
├── rail_sdk.dll ← C++ 래퍼 (RTTR 미포함)
...
실제 사례: Notepad++와 Doom은 코드베이스가 RTTR을 지원할 수 없었기 때문에 옵션 B (커스텀 디스패처)를 사용하여 통합되었습니다.
Python/Node.js 개발자
📁 YourProject/
├── main.py (또는 index.ts)
├── RailBridge.dll ← 수동으로 복사
...
ctypes/ffi 호출을 대신 처리해 주는 래퍼 (wrapper) 패키지를 설치하세요.
5. 프로젝트가 연결되는 방식
<p align="center">
<img src="https://raw.githubusercontent.com/RAIL-Suite/RAIL/HEAD/Docs/Architecture_overview.jpg" alt="아키텍처 개요" width="800"/>
</p>
아키텍처 워크플로우 (Architecture Workflow)
<p align="center">
<img src="https://raw.githubusercontent.com/RAIL-Suite/RAIL/HEAD/Docs/Architecture_workflow.png" alt="아키텍처 워크플로우" width="800"/>
</p>
┌─────────────────────────────────────────────────────────────┐
│ RailOrchestrator │
│ (메인 AI 애플리케이션) │
...
의존성 흐름 (Dependency Flow):
RailOrchestrator
└── uses → RailSDK (RailFactory.Core) for manifest parsing
...
6. 사용 예시 (Usage Examples)
예시 1: C# 앱을 AI 제어 가능하게 만들기
public class CustomerService
{
...
예시 2: C++ 애플리케이션 제어하기
const char* OnCommand(const char* json) {
auto cmd = ParseJson(json);
...
예시 3: Python 스크립트 통합
class DataProcessor:
def analyze_data(self, file_path: str) -> dict:
return {"rows": 1000, "status": "processed"}
...
예시 4: AI에게 실행 요청하기
앱을 연결한 후, 자연어로 질문합니다:
빠른 시작 (Quick Start)
- RailOrchestrator 실행 - 메인 AI 인터페이스
- 앱 연결 - SDK를 추가하고
Ignite()를 호출합니다.
- AI에게 요청 - 자연어 명령이 코드를 실행합니다.
<p align="center">
<b>RAIL 프로토콜</b> - 레거시 애플리케이션과 AI 연결 (Bridging Legacy Applications and AI)
</p>