smartfunc: 간단한 데코레이터와 docstring으로 LLM 호출 함수를 만들어주는 프로젝트

smartfunc 소개

Python 함수에 간단한 데코레이터와 docstring만 붙이면, OpenAI나 Claude 같은 LLM 백엔드를 자동으로 호출해주는 smartfunc 프로젝트를 소개합니다. 복잡한 프롬프트 엔지니어링이나 API 호출 코드를 직접 짜지 않아도 되는 라이브러리입니다. smartfunc의 목적은 복잡한 설정 없이 빠르게 LLM을 함수형 API로 활용하는 것이며, 특히 빠른 프로토타이핑과 간단한 프롬프트 실험에 적합합니다.

smartfunc는 docstring을 활용해서 자연스럽게 LLM 프롬프트를 구성하고, 함수처럼 호출할 수 있게 해주는 Python 라이브러리입니다. @backend("gpt-4") 같은 데코레이터만 붙이면, docstring이 그대로 프롬프트로 변환되어 LLM 호출로 이어지는 구조입니다. 내부적으로는 Simon Willison가 개발한 llm 라이브러리를 감싸고 있으며, Jinja2 템플릿 엔진을 통해 동적으로 프롬프트를 구성합니다.

비슷한 역할을 하는 라이브러리인 instructor, ell, marvin 등과 비교했을 때, smartfunc의 특징은 다음과 같습니다:

  • instructor보다 더 간단하며,
  • ell, marvin보다 더 직접적이고 vendor 자유도가 높고,
  • 프롬프트 엔지니어링을 단순화하여 빠르게 테스트할 수 있는 구조입니다.

복잡한 파라미터 검증이나 멀티턴 대화 같은 고급 기능은 없지만, 대신 LLM을 최대한 빠르게 연결해서 결과를 실험하고 싶은 사용자에게 적합합니다.

smartfunc의 주요 특징

  • docstring 기반 프롬프트: 함수의 설명만 써주면 그것이 곧 LLM에게 전달될 프롬프트가 됩니다.
  • Jinja2 템플릿 지원: {{ variable }} 형식으로 변수 삽입 가능.
  • llm 라이브러리 백엔드 연동: 다양한 LLM 공급자 지원.
  • Pydantic 기반 응답 스키마: 반환값을 BaseModel로 정의할 수 있어 안정성 향상.
  • Async 지원: 병렬 요청, 마이크로배칭 가능.
  • Debug 모드: 어떤 프롬프트가 실제로 사용되었는지 로그 확인 가능.

사용법

설치 방법

uv pip install smartfunc

기본 사용

from smartfunc import backend

@backend("gpt-4")
def generate_summary(text: str):
    """Generate a summary of the following text: {{ text }}"""
    pass

응답 스키마 지정

from smartfunc import backend
from pydantic import BaseModel

class Summary(BaseModel):
    summary: str
    pros: list[str]
    cons: list[str]

@backend("gpt-4o-mini")
def generate_poke_desc(text: str) -> Summary:
    """Describe the following pokemon: {{ text }}"""
    pass

비동기 호출

from smartfunc import async_backend

@async_backend("gpt-4o-mini")
async def generate_poke_desc(text: str) -> Summary:
    """Describe the following pokemon: {{ text }}"""
    pass

프롬프트 엔지니어링

@backend("gpt-4o-mini")
def generate_poke_desc(text: str) -> Summary:
    """Describe the following pokemon: {{ text }}"""
    return " ... but make it sound as if you are a 10 year old child"

Debug 모드

@async_backend("gpt-4o-mini", debug=True)

위와 같이 실행하면 프롬프트, 응답, 템플릿 등을 모두 확인할 수 있어 실험 시에 좋습니다.

라이선스

smartfunc 프로젝트는 MIT License로 공개 및 배포되고 있습니다.

:github: smartfunc GitHub 저장소

:github: llm 라이브러리 GitHub 저장소




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck:

1개의 좋아요