로컬 PC에서 클라우드 비용 없이 코딩 AI 비서 만들기: OpenClaw Telegram Qwen2.5 Coder 완벽 구축 가이드 (2026)

OpenClaw Telegram Qwen2.5 Coder 아키텍처 다이어그램
OpenClaw Telegram Qwen2.5 Coder 아키텍처 다이어그램

OpenClaw Telegram Qwen2.5 Coder(LM Studio)를 결합하면 완전 오프라인 + 무제한 + 프라이버시 100%인 코딩 AI 에이전트를 만들 수 있습니다.

텔레그램에 “hello.py 만들어줘” 또는 “src/utils 폴더에 날짜 헬퍼 함수 작성해줘”라고만 말하면, Qwen2.5 Coder 14B가 코드를 생성하고 로컬 파일시스템에 바로 저장합니다.
클라우드 API 비용도 없고, 코드가 외부로 유출되지 않으며, 속도도 매우 빠릅니다.

在本帖中,我们将使用 OpenClaw 스타일로 설계된 실제 동작하는 시스템 전체를 단계별로 구축하는 방법을 공개합니다.
첨부된 전체 소스코드와 상세 주석까지 포함했습니다.

왜 이 조합인가?

  • OpenClaw: 유연한 에이전트 프레임워크 + Telegram 채널 지원
  • Telegram: 가장 편한 입력 인터페이스 (모바일/데스크톱 어디서나)
  • LM Studio + Qwen2.5 Coder: 로컬에서 최고 수준의 코딩 성능 (14B 파라미터, 코드 특화)
  • 완전 로컬: 인터넷 없이도 동작, 데이터 유출 제로, 무제한 사용

시스템 아키텍처

텔레그램 메시지
    ↓
Python 봇 (python-telegram-bot)
    ↓
LM Studio API (localhost:1234/v1)
    └─ Qwen2.5 Coder 14B (mlx 양자화)
    ↓
~/lmstudio-workspace/ (실제 파일 생성)

1단계: LM Studio 설치 및 Qwen2.5 Coder 모델 준비

  1. LM Studio 공식 사이트에서 다운로드 및 설치
  2. 검색창에 qwen2.5-coder 입력 → Qwen2.5 Coder 14B Instruct (MLX) 下载
  3. 모델 로드 후 좌측 메뉴 Local Server → Β Start Server
  4. http://localhost:1234 접속 확인

서버 동작 확인 명령어

# 터미널에서 아래의 명령어 실행
curl http://localhost:1234/v1/models

2단계: Telegram 봇 생성

  1. Telegram에서 @BotFather 搜索
  2. /newbot 입력
  3. 봇 이름과 username 설정 (_bot으로 끝나야 함)
  4. 생성된 토큰 복사

3단계: 프로젝트 파일 생성

프로젝트 폴더를 만들고 아래 파일들을 생성하세요.

전체 구조

telegram-lmstudio-bot/
├── bot.py
├── lm_client.py
├── executor.py
├── run.py
├── requirements.txt
├── .env
└── README.md

bot.py (텔레그램 핸들러)

"""
텔레그램 봇 → LM Studio (Qwen2.5 Coder) → 로컬 파일시스템
OpenClaw 스타일의 간결하고 강력한 코딩 에이전트
"""

import logging
import os
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, filters, ContextTypes
from lm_client import ask_qwen
from executor import execute_actions

logging.basicConfig(
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
    level=logging.INFO
)
logger = logging.getLogger(__name__)

# 보안: 특정 유저만 허용 (비워두면 모두 허용)
ALLOWED_USER_IDS: list[int] = []  

WORKSPACE = os.path.expanduser("~/lmstudio-workspace")
os.makedirs(WORKSPACE, exist_ok=True)

def is_allowed(user_id: int) -> bool:
    if not ALLOWED_USER_IDS:
        return True
    return user_id in ALLOWED_USER_IDS

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text(
        "안녕하세요! OpenClaw 스타일 LM Studio Qwen2.5 Coder 봇입니다.\n\n"
        "자연어로 명령을 내려주세요. 예시:\n"
        "• `hello.py 파일 만들어줘`\n"
        "• `src/utils 폴더 만들고 date_helper.py 작성해줘`\n"
        "• `피보나치 수열 코드 만들어줘`\n\n"
        f"작업 폴더: `{WORKSPACE}`",
        parse_mode="Markdown"
    )

async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
    user_id = update.effective_user.id
    if not is_allowed(user_id):
        await update.message.reply_text("접근 권한이 없습니다.")
        return

    user_input = update.message.text
    logger.info(f"[{user_id}] 입력: {user_input}")

    status_msg = await update.message.reply_text("⏳ Qwen2.5 Coder에게 요청 중...")

    try:
        actions = await ask_qwen(user_input, WORKSPACE)
        if not actions:
            await status_msg.edit_text("❌ 유효한 응답을 받지 못했습니다.")
            return

        await status_msg.edit_text(f"🔧 {len(actions)}개 작업 실행 중...")
        results = execute_actions(actions, WORKSPACE)
        summary = format_results(results)
        await status_msg.edit_text(summary, parse_mode="Markdown")

    except Exception as e:
        logger.exception("오류 발생")
        await status_msg.edit_text(f"❌ 오류: {str(e)}")

# ... (format_results 함수 생략, 아래 전체 코드 참조)

lm_client.py (LM Studio 통신 핵심)

"""
LM Studio API 클라이언트
Qwen2.5 Coder에게 자연어 명령 → JSON 액션 변환 요청
OpenClaw 스타일의 강력한 SYSTEM_PROMPT 사용
"""

import json
import logging
import httpx

logger = logging.getLogger(__name__)

LM_STUDIO_BASE_URL = "http://localhost:1234/v1"
MODEL_ID = "qwen2.5-coder-14b-instruct-mlx"

SYSTEM_PROMPT = """당신은 파일 시스템 작업을 수행하는 AI 에이전트입니다.
사용자의 자연어 명령을 분석하여 수행할 작업 목록을 JSON으로만 반환하세요.

반환 형식 (JSON 배열만, 설명 없이):
[
  {"action": "create_folder", "path": "상대경로/폴더명"},
  {"action": "create_file", "path": "상대경로/파일명.py", "content": "완전한 코드"},
  {"action": "append_file", "path": "...", "content": "..."}
]

규칙:
- path는 항상 상대경로 (절대경로 금지)
- 필요한 폴더는 create_folder 먼저
- 코드 파일은 실제 동작하는 완전한 코드로 작성
- JSON 외 다른 텍스트 절대 출력 금지
"""

executor.py (안전한 파일 실행기)

"""
액션 실행기
경로 트래버설 공격 방지 + 부모 폴더 자동 생성
"""

import logging
import os

logger = logging.getLogger(__name__)

def safe_path(workspace: str, relative_path: str) -> str | None:
    """경로 탈출 방지 핵심 함수"""
    abs_workspace = os.path.realpath(workspace)
    abs_target = os.path.realpath(os.path.join(abs_workspace, relative_path))
    if not abs_target.startswith(abs_workspace):
        logger.warning(f"경로 탈출 시도 차단: {relative_path}")
        return None
    return abs_target

def execute_actions(actions: list[dict], workspace: str) -> list[dict]:
    results = []
    for action in actions:
        # ... (create_folder, create_file, append_file 처리)
        # 상세 코드는 첨부 파일 참조
    return results

전체 소스코드는 첨부 파일로 제공되며, 위 코드들은 핵심 부분에 상세 주석을 추가한 버전입니다.

4단계: 설치 및 실행

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

cp .env.example .env
# .env에 TELEGRAM_BOT_TOKEN 입력

python run.py

5단계: 실제 사용 예시

텔레그램에서 다음과 같이 입력해주세요.

src/utils 폴더 만들고 date_helper.py 작성해줘. 오늘 날짜를 YYYY-MM-DD 형식으로 반환하는 함수 포함

→ 봇이 자동으로 폴더 생성 + 완전한 Python 파일 저장

트러블슈팅 (커뮤니티에서 자주 나오는 문제)

Q. JSON 파싱 실패
→ Β parse_actions 함수가 마크다운 코드블록과 불완전한 JSON을 자동 정리합니다.
온도(temperature=0.1)를 낮추면 더 안정적입니다.

Q. 경로가 생성되지 않음
safe_path 함수가 경로 탈출을 차단합니다. 상대경로만 사용하세요.

Q. LM Studio 응답이 느림
Qwen2.5 Coder 14B는 8K/32K context 인스턴스를 선택할 수 있습니다.
MLX 양자화 모델을 사용하면 Mac에서 매우 빠릅니다.

Q. 봇이 죽음
termux-wake-lock 스타일로 시스템이 절전 모드에 들어가지 않도록 설정하거나, pm2systemd로 데몬화하세요.

OpenClaw와의 통합 방법

이 봇은 OpenClaw의 철학을 그대로 따릅니다.
OpenClaw에서 이미 Telegram 채널을 사용 중이라면

  1. OpenClaw onboarding에서 OpenAI 호환 프로바이더 선택
  2. Base URL을 http://localhost:1234/v1로 설정
  3. Model을 qwen2.5-coder-14b-instruct-mlx로 지정
  4. 위 SYSTEM_PROMPT를 Skills 또는 Custom Prompt로 적용

더 강력한 에이전트가 필요하다면 OpenClaw의 기존 도구 시스템과 결합하세요.

结论

OpenClaw Telegram Qwen2.5 Coder(LM Studio) 조합은 현재 가장 실용적인 로컬 코딩 AI 에이전트

클라우드 비용 없이, 데이터 유출 없이, 언제 어디서나 자연어로 코드를 생성할 수 있습니다.

지금 바로 만들어서 사용해보세요!

공식 출처 및 참고 자료

  • LM Studio 공식 사이트 및 문서
  • Qwen2.5 Coder 모델 (LM Studio 허브)
  • python-telegram-bot 공식 문서
  • OpenClaw 공식 문서 및 철학

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注