dspy.CodeAct
dspy.CodeAct
이 페이지는 DSPy의 CodeAct 모듈을 다뤄요. 다만 이 모듈은 곧 제거될 예정(Deprecated)이라, 새로 만들 프로그램에서는 RLM을 쓰는 걸 권장해요. 그럼에도 어떻게 동작하는지가 궁금하다면, 코드 생성과 도구 실행을 결합해 문제를 푸는 핵심 아이디어를 아래에서 가볍게 훑어볼 수 있어요.
출처: 문서
본문
!!! warning "Deprecated"
`CodeAct`는 deprecated이며 DSPy 3.5에서 제거될 예정이에요. [`RLM`](RLM.md)이 권장 대체품이에요.
CodeAct
CodeAct는 코드 생성과 도구 실행을 결합해 문제를 해결하는 DSPy 모듈이에요. 제공된 도구와 Python 표준 라이브러리를 사용하는 Python 코드 조각을 생성해 작업을 수행해요.
기본 사용법
CodeAct를 사용하는 간단한 예제예요:
import dspy
from dspy.predict import CodeAct
# Define a simple tool function
def factorial(n: int) -> int:
"""Calculate the factorial of a number."""
if n == 1:
return 1
return n * factorial(n-1)
# Create a CodeAct instance
act = CodeAct("n->factorial_result", tools=[factorial])
# Use the CodeAct instance
result = act(n=5)
print(result) # Will calculate factorial(5) = 120
동작 방식
CodeAct는 반복적인 방식으로 동작해요:
- 입력 파라미터와 사용 가능한 도구를 받아
- 이 도구들을 사용하는 Python 코드 조각을 생성하고
- Python 샌드박스로 코드를 실행하며
- 출력을 수집해 작업이 완료됐는지 확인하고
- 수집된 정보를 바탕으로 원래 질문에 답해요
⚠️ 제한 사항
도구로 순수 함수(pure functions)만 받아요 (호출 가능 객체는 안 돼요)
다음 예제는 호출 가능 객체(callable object)를 사용해서 동작하지 않아요.
# ❌ NG
class Add():
def __call__(self, a: int, b: int):
return a + b
dspy.CodeAct("question -> answer", tools=[Add()])
외부 라이브러리는 사용할 수 없어요
다음 예제는 외부 라이브러리 numpy를 사용해서 동작하지 않아요.
# ❌ NG
import numpy as np
def exp(i: int):
return np.exp(i)
dspy.CodeAct("question -> answer", tools=[exp])
모든 의존 함수를 CodeAct에 넘겨야 해요
CodeAct에 넘기지 않은 다른 함수나 클래스에 의존하는 함수는 사용할 수 없어요. 다음 예제는 도구 함수가 CodeAct에 넘기지 않은 Profile이나 secret_function 같은 다른 함수/클래스에 의존하기 때문에 동작하지 않아요.
# ❌ NG
from pydantic import BaseModel
class Profile(BaseModel):
name: str
age: int
def age(profile: Profile):
return
def parent_function():
print("Hi!")
def child_function():
parent_function()
dspy.CodeAct("question -> answer", tools=[age, child_function])
반면 다음 예제는 필요한 모든 도구 함수가 CodeAct에 전달되므로 동작해요:
# ✅ OK
def parent_function():
print("Hi!")
def child_function():
parent_function()
dspy.CodeAct("question -> answer", tools=[parent_function, child_function])