dspy.COPRO

dspy.COPRO

dspy.COPRO는 프롬프트 지시문(instruction)을 반복적으로 개선하는 옵티마이저로, 여러 지시문을 생성하고 평가하며 최고의 지시문을 찾습니다.

출처: 문서

본문

dspy.COPRO(
    prompt_model=None,
    metric=None,
    breadth=10,
    depth=3,
    init_temperature=1.4,
    track_stats=False,
    **_kwargs,
)
  • Bases: Teleprompter

소스 코드는 dspy/teleprompt/copro_optimizer.py에 있습니다.

def __init__(
    self,
    prompt_model=None,
    metric=None,
    breadth=10,
    depth=3,
    init_temperature=1.4,
    track_stats=False,
    **_kwargs,
):
    if breadth <= 1:
        raise ValueError("Breadth must be greater than 1")
    self.metric = metric
    self.breadth = breadth
    self.depth = depth
    self.init_temperature = init_temperature
    self.prompt_model = prompt_model
    self.track_stats = track_stats

Methods

compile(student, *, trainset, eval_kwargs=None)

student 프로그램의 signature를 최적화합니다. student는 zero-shot일 수도 있고 이미 최적화되어 데모가 선택된 상태(demos != [])일 수도 있습니다.

  • parameters: student — 최적화할 프로그램(그대로 수정됩니다). trainset — Example의 iterable. eval_kwargs — 선택적, dict, 기본값 None(추가 kwargs 없음). metric을 위한 Evaluate에 들어갈 추가 키워드.
  • Returns: student의 최적화된 버전.

소스 코드는 dspy/teleprompt/copro_optimizer.py에 있습니다.

COPRO는 zero-shot 지시문 하나로 시작해, 각 깊이(depth)에서 지시문 후보를 생성하고 평가합니다. 최상위 후보를 바탕으로 더 나은 지시문을 반복 생성하며, 최종적으로 가장 좋은 성능을 낸 지시문을 채택합니다.

def compile(self, student, *, trainset, eval_kwargs=None):
    """
    optimizes `signature` of `student` program - note that it may be zero-shot or already pre-optimized (demos already chosen - `demos != []`)

    parameters:
    student: program to optimize and left modified.
    trainset: iterable of `Example`s
    eval_kwargs: optional, dict, defaults to None (no extra kwargs)
       Additional keywords to go into `Evaluate` for the metric.

    Returns optimized version of `student`.
    """
    eval_kwargs = eval_kwargs or {}
    module = student.deepcopy()
    evaluate = Evaluate(devset=trainset, metric=self.metric, **eval_kwargs)
    total_calls = 0
    results_best = {
        id(p): {"depth": [], "max": [], "average": [], "min": [], "std": []} for p in module.predictors()
    }
    results_latest = {
        id(p): {"depth": [], "max": [], "average": [], "min": [], "std": []} for p in module.predictors()
    }

    candidates = {}
    evaluated_candidates = defaultdict(dict)

    # Seed the prompt optimizer zero shot with just the instruction, generate BREADTH new prompts
    ...

get_params() -> dict[str, Any]

텔레프롬프터의 파라미터를 반환합니다.

더 알아보기 (Learn more)