이번 Edge 업데이트에서, GPT-5 옵션이 추가되었습니다.
사용해보니, 꽤 좋은 것 같습니다.
최초의 질문에 대한 응답 후, 스스로 그 다음 요구사항을 만들어내고,
그것도 만들어드릴까요?
라는 식으로 답변을 마무리합니다.
그러면, 제 대답은
진행시켜
“진행시켜” 서너 번이면, 라이브러리 수준의 코드를 만들어 주더군요.
참고로, 아래는 제가 코드 도움을 받을 때 사용하는 방법입니다.
요구 사항을 아래와 같이 기술(describe)하는 것보다,
Linq.Where의 predicate 을 직렬화 혹은 DB 에 저장할 수 있는 자료구조로 만들어줘
구체적인 뼈대 코드를 적고, 복잡한 구현을 빈칸으로 두면 매우 정확하고 오류 없는 코드를 생성해 냅니다.
class Filter<T>
{
public int Id { get; set; } // PK
public string Name { get; set; }
[JsonInclude]
public string? CriteriaString { get; private set; }
public Func<T, bool> Criteria => ToFilter(CriteriaString);
[JsonConstructor]
protected Filter() : this(default!, default!) { } // Ef core
protected Filter(string name, string criteriaString) =>
(Name, CriteriaString) = (name, criteriaString);
public static Filter<T> New(string name, Expression<Func<T, bool>> criteria)
{
var criteriaString = ToCriteriaString(criteria);
return new Filter<T>(name, criteriaString);
}
static string ToCriteriaString(Expression<Func<T, bool>> expression)
{
throw new NotImplementedException();
}
static Func<T, bool> ToFilter(string? criteriaString)
{
throw new NotImplementedException();
}
public void SetCriteria(Expression<Func<T, bool>> criteria)
{
throw new NotImplementedException();
}
}
코드가 완성되었다면, 추가 기능을 아래와 같이 요구합니다.
static class FilterExtesions
{
public static IEnumerable<Filter<T>> Collisions<T>(this IEnumerable<Filter<T>> exists, params Filter<T>[] filters)
{
throw new NotImplementedException();
// exam.
// when exists are:
// filter1: w => w.Age > 10
// filter2: w => w.Grade.Id == 1
// colliding filters and returns:
// w => w.Age < 10 => filter1
// w => w.Age == 0 => filter1
// w => w.Grade.Id != 10 => filter2
// w => w.Grade.Id == 4 => filter2
}
}
뼈대 코드의 식별자를 통해 요구 사항을 유추하고,
- 요구 사항과 뼈대 코드가 의미론적으로 맞는지?
- 맞지 않다면, 스스로 컨텍스트를 한정하여 요구 사항 재정의
- 예제 case 가 있는 경우, 그것을 검증하는 코드 생성
등을 하더군요.
특히, 컨텍스트를 점점 확장해서, "그것도 할 수 있는데, 진행할까요"라면서, 폭주의 시동을 겁니다.
이 폭주는 무한하지 않은 것 같습니다.
컨텍스트의 확장이 특정 단계에 접어 들어 더 이상 고려 사항이 없다고 판단되면, 다른 컨텍스트나 케이스를 건드는 것 같았습니다.
이는 기존의 코파일럿에게는 보이지 않던 특징입니다.
기존에는 뭔가 컨텍스트가 부유하는 듯, 이리 저리 왔다갔다하는 것처럼 느껴졌는데, GPT-5 는 중심 컨텍스트를 잘 부여잡고 있는 듯 보였습니다.
참고로, 깃허브 코파일럿은 어떤 주의 사항을 주더라도, 저도 모르게 혹은 너무 많은 변경으로 제가 놓치는 부분이 있는 것 같아, 다소 위험(?)하다고 생각되어 잘 안쓰게 되었습니다.
이에 반해 Edge 코파일럿은 프로젝트와 격리된 환경이기 때문에 그런 우려가 적고, 더군다나 (언제까지일 지 모르겠지만) 무제한 무료라서 맘편하게 사용하게 되더군요.