Pythoness: 델포이의 아폴론 신탁의 여사제.
Emery Berger의 Pythoness, Kyle Gwilt 및 Stephen Freund의 확장
Pythoness는 자연어 설명 및 테스트에서 Python 코드를 자동으로 생성합니다.
참고 Pythoness가 작동하려면 LLM에 연결되어야 합니다. 다음은 Pythoness를 OpenAI 계정과 연결하는 방법에 대한 예입니다. 다른 LLM의 경우 해당 문서를 참조하세요.
OpenAI 계정. 이 기능이 작동하려면 귀하의 계정에 잔액이 있어야 합니다 (잔액 확인). 크레딧을 구매한 적이 없다면 최소 $1(API 계정이 2023년 8월 13일 이전에 생성된 경우) 또는 $0.50(최신 API 계정이 있는 경우) 크레딧을 구매해야 합니다. 여기서 열쇠를 받으세요.
API 키가 있으면
OPENAI_API_KEY
라는 환경 변수로 설정하세요.export OPENAI_API_KEY= < your-api-key >
Pythoness를 설치하는 가장 쉬운 방법은 pip를 사용하는 것입니다.
python3 -m pip install pythoness
Pythoness를 사용하려면 pythoness
모듈을 가져온 다음 @pythoness.spec
데코레이터를 사용하여 원하는 기능을 지정하면 됩니다.
import pythoness
@ pythoness . spec ( "Compute the nth number in the Fibonacci series." )
def myfib ( n : int ) -> int :
""
이 코드는 피보나치 수열의 n번째 숫자를 계산하는 myfib
라는 Python 함수를 내부적으로 생성합니다. 실제로 함수를 실행하려면 다른 Python 함수처럼 호출하면 됩니다.
for i in range ( 20 ):
print ( myfib ( i ))
Pythoness는 자연어를 Python으로 번역한 결과를 캐시하므로 동일한 디렉터리에서 후속 실행이 훨씬 빠르게 실행됩니다(Pythoness는 이러한 번역을 저장하는 pythoness-cache.db
라는 데이터베이스를 생성합니다).
모든 로깅 메시지를 끄려면 PYNS_QUIET
환경 변수를 사용하십시오.
env PYNS_QUIET=1 python3 myfib.py
몇 가지 테스트를 제공하여 Pythoness를 안내할 수 있습니다. Pythoness는 테스트를 사용하여 Python 코드를 생성하고 유효성을 검사합니다. 테스트는 모두 True
로 평가되어야 하는 Python 코드나 함수를 포함하는 문자열 목록일 뿐입니다.
@ pythoness . spec ( "Compute the nth number in the Fibonacci series." ,
tests = [ "myfib(1) == 1" , "myfib(2) == 1" ])
def myfib ( n : int ) -> int :
""
속성 기반 테스트를 통해 Pythoness를 안내할 수도 있습니다. 이를 수행하려면 프로그램에서 표시할 속성을 설명하십시오. Pythoness는 생성된 함수가 지정된 속성을 충족하는지 확인하기 위해 여러 번 테스트를 수행하는 속성 기반 테스터(가설)를 실행합니다. 이 접근 방식은 위에서 설명한 단위 테스트보다 훨씬 강력합니다.
@ pythoness . spec ( "Compute the nth number in the Fibonacci series." , tests = [({ 'n' : 'integers(1,20)' }, "myfib(n+2) == myfib(n+1)+myfib(n)" )])
def myfib ( n : int ) -> int :
""
내장된 단위 테스트 프레임워크의 TestCases는 테스트를 위한 최종 옵션이며 Pythoness TestCases 또는 TestCases 모듈을 제공하여 사용할 수 있습니다.
@ pythoness . spec ( "Compute the nth number in the Fibonacci series." , tests = [ testmodule . TestFib ])
def myfib ( n : int ) -> int :
""
Pythoness가 생성할 코드와 관련된 함수 및 클래스를 제공하여 Pythoness를 추가로 안내할 수 있습니다. 제공된 함수와 클래스의 독스트링을 사용하여 해당 목적을 이해합니다. Pythoness는 이러한 방식으로 자체적으로 생성되는 함수를 사용할 수 있습니다. 여기서 독스트링은 spec
에 지정됩니다.
related_objs
는 함수, 클래스 또는 특수 문자열을 포함할 수 있는 목록입니다.
'cls'
'*'
@ pythoness . spec ( "Encodes a string using a single-shift Caesar cipher" )
def encode ( s : str ) -> str :
""
@ pythoness . spec ( "Decodes a string given to encode()" , related_objs = [ encode ])
def decode ( s : str ) -> str :
""
클래스 작업 시 Python의 __slots__
기능을 사용하는 것이 가장 좋습니다. Pythoness는 그것 없이도 작동할 수 있지만 Pythoness의 일관성은 높아집니다.
Pythoness를 사용하여 파일의 사양을 생성된 함수로 직접 바꿀 수 있습니다. `replace=True'만 추가하면 됩니다.
@ pythoness . spec ( "Compute the nth number in the Fibonacci series." ,
tests = [ "myfib(1) == 1" , "myfib(2) == 1" ],
replace = True )
def myfib ( n : int ) -> int :
""
예를 들어 Pythoness는 다음 코드를 생성했습니다.
def myfib(n: int) -> int:
"""
Compute the nth number in the Fibonacci series.
:param n: The position of the desired number in the Fibonacci series
:type n: int
:return: The nth number in the Fibonacci series
:rtype: int
"""
if n <= 0:
raise ValueError("n must be a positive integer")
elif n == 1 or n == 2:
return 1
else:
fib1, fib2 = 1, 1
for _ in range(3, n + 1):
fib1, fib2 = fib2, fib1 + fib2
return fib2
'PYNS_REPLACE' 환경 변수를 사용하여 생성된 모든 함수를 바꿀 수도 있습니다.
env ' PYNS_REPLACE ' =1
Pythoness는 동작을 제어하는 몇 가지 다른 방법을 제공합니다. 이것들은 모두 spec
에 대한 인수입니다. 제공된 값은 기본값을 나타냅니다.
max_retries=3
: 실패로 인한 최대 재시도 횟수를 제어합니다(예: 제공된 테스트 중 하나에 실패한 함수).
model='gpt-4o'
: 쿼리할 LLM 모델을 제어합니다.
timeout_seconds=0
: 단일 Pythoness 시도가 시간 초과되는 데 걸리는 시간을 설정합니다. 기본적으로 시간 초과가 없습니다.
verbose=False
: Pythoness가 코드를 생성하고 검증할 때 세부 정보를 출력하도록 하려면 이를 True
로 설정합니다. 개발자와 진행 상황을 확인하는 데 주로 유용합니다. 'PYNS_VERBOSE' 환경 변수를 사용하여 모든 기능에 대해 한 번에 설정할 수 있습니다.
regenerate=False
: 함수를 저장하고 재사용하는 대신 함수가 호출될 때마다 새 코드를 생성하려면 이를 True
로 설정합니다.
output=False
: 함수가 처음 호출될 때 Pythoness가 생성된 코드를 출력하도록 하려면 이를 True
로 설정합니다.