Native Record Field Assembly - kimjooyoon/meta-ontology-go GitHub Wiki

기둝의 각 ν•„λ“œμ— 후보식을 심고 μ‘°λ¦½ν•˜κΈ°

Gooo 본문의 기둝 μƒμ„±μž μ•ˆμ— ν•„λ“œλ³„ 후보식을 적을 수 μžˆμŠ΅λ‹ˆλ‹€. 제λͺ©Β·μƒνƒœΒ·μ‚¬μœ κ°€ μžˆλŠ” μž‘μ€ μŸλ°˜μ„ μƒκ°ν•˜λ©΄ λ©λ‹ˆλ‹€. 각 μžλ¦¬μ— λ“€μ–΄κ°ˆ λΆ€ν’ˆμ„ μ„ μ–Έν•˜κ³ , μž‘μ€ λͺ¨λΈμ€ 쑰합을 μ‹œλ„ν•  μˆœμ„œλ₯Ό μ œμ•ˆν•©λ‹ˆλ‹€. κΈ°λŒ€κ°’κ³Ό 비ꡐ해 μ–΄λŠ μžλ¦¬κ°€ μ±„μ›Œμ‘ŒλŠ”μ§€ κΈ°λ‘ν•œ λ’€, κ³ λ₯Έ 본문을 Go둜 μƒμ„±ν•˜κ³  μ‹€μ œλ‘œ μ‹€ν–‰ν•©λ‹ˆλ‹€.

ν˜„μž¬ 단계

개발 PR #1225λŠ” ν•„μˆ˜ CI 6κ°œμ™€ ν•΄λ‹Ή μ†ŒμŠ€μ˜ κ²°κ³Ό 확인 ν›„ λ³‘ν•©ν–ˆμŠ΅λ‹ˆλ‹€. 배포 PR #1226도 전체 CIλ₯Ό 톡과해 main f6da667e둜 λ³‘ν•©ν•˜κ³  두 μ‹€ν–‰κΈ°λ₯Ό Go1.27.1Β·SDK0.2.21둜 μ„€μΉ˜ν–ˆμŠ΅λ‹ˆλ‹€. 컴파일러 μž‘μ„±λ²•κ³Ό 곡개 μ‹€ν—˜ PR #11은 22개 CI μž‘μ—…μ„ 톡과해 λ³‘ν•©ν–ˆκ³ , 전체 μ˜ˆμ œμ™€ 원본 κ²°κ³Όκ°€ μžˆμŠ΅λ‹ˆλ‹€. μ„€μΉ˜λ³Έμ˜ μƒˆ 30개 관츑도 ν›„λ³΄μ˜ μ†ŒμŠ€Β·μƒμ„± Go·선택·완전성 수치λ₯Ό μœ μ§€ν–ˆμŠ΅λ‹ˆλ‹€. λΆ€λΆ„ 결과의 남은 ν•„λ“œ μš”μ•½κ³Ό μ–‘μžν™” λͺ¨λΈ λΉ„κ΅λŠ” 후속 연ꡬ PR #12μ—μ„œ ν™•μΈν•©λ‹ˆλ‹€. 이 연ꡬ PR도 22개 μž‘μ—…μ„ λͺ¨λ‘ 톡과해 연ꡬ main ad007f6b둜 λ³‘ν•©ν–ˆμŠ΅λ‹ˆλ‹€. μ„€μΉ˜ν•œ 컴파일러의 Linux 생성·저μž₯ μž¬μ‹€ν–‰ 32개 기둝을 λ”°λ‘œ λ‚΄λ €λ°›μ•„ μ‹€μ œ κ°’κ³Ό ν•„λ“œ 수λ₯Ό κ²€μ‚°ν–ˆμŠ΅λ‹ˆλ‹€. 그쀑 μ €μž₯ μž¬μ‹€ν–‰ 16κ°œλŠ” μΆ”κ°€ 좔둠이 λͺ¨λ‘ 0λ²ˆμž…λ‹ˆλ‹€.

선택지λ₯Ό μ λŠ” 방법

choice "title" field_value at "0" alternative "input0.title" intent "μ›λž˜ 제λͺ©μ„ μ‚¬μš©ν•œλ‹€. Keep the original title."
choice "state" field_value at "1" alternative "\"ready\"" intent "μƒνƒœλ₯Ό ready둜 λ§Œλ“ λ‹€."
choice "reason" field_value at "2" alternative "input0.reason + \":accepted\"" intent "κΈ°μ‘΄ μ‚¬μœ μ— ν‘œμ‹μ„ 뢙인닀."

이 μ„Έ 쀄은 ν™œλ™μ˜ assembling 블둝 μ•ˆμ— λ‘‘λ‹ˆλ‹€. atλŠ” κΈ°μ€€ λ³Έλ¬Έμ—μ„œ 기둝 μƒμ„±μžμ˜ ν•„λ“œ 값이 λ“±μž₯ν•˜λŠ” μˆœμ„œμž…λ‹ˆλ‹€. κΈ°μ‘΄ 식과 alternative 쀑 ν•˜λ‚˜λ₯Ό κ³ λ₯Ό 수 있고, μ‹€μ œ ν•„λ“œ νƒ€μž…κ³Ό κ·Έ μœ„μΉ˜μ˜ λ³€μˆ˜ λ²”μœ„λ₯Ό ν™•μΈν•©λ‹ˆλ‹€. ν•œκΈ€Β·μ˜μ–΄ μ˜λ„λŠ” ν•„λ“œ ID, 두 후보식과 ν•¨κ»˜ λͺ¨λΈ λ¬Έλ§₯으둜 μ „λ‹¬λ©λ‹ˆλ‹€.

value_caseλŠ” μœ„μΉ˜μˆœ μž…λ ₯ λ°°μ—΄κ³Ό μ™„μ „ν•œ κΈ°λŒ€ 기둝을 JSON으둜 λ°›μŠ΅λ‹ˆλ‹€. κΈ°λ‘Β·μ°Έκ±°μ§“Β·μ •μˆ˜Β·ν…μŠ€νŠΈλ₯Ό μ„žμ€ μž…λ ₯을 μ„ μ–Έν•  수 μžˆμŠ΅λ‹ˆλ‹€. 기둝 ν•„λ“œλŠ” ν˜„μž¬ ν•„μˆ˜ λ¬Έμžμ—΄μ΄λ©°, λ³Έλ¬Έμ—λŠ” 쑰건식과 μ§€μ—­κ°’ 전체 ꡐ체λ₯Ό ν•¨κ»˜ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 전체 μ˜ˆμ œμ—λŠ” Select(Candidate, Boolean)의 κ²°κ³Όλ₯Ό Label(Candidate)에 μ „λ‹¬ν•˜λŠ” bind도 λ“€μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

λΆ€λΆ„ 완전성을 읽기

제λͺ©Β·μƒνƒœΒ·μ‚¬μœ λ₯Ό ν¬ν•¨ν•œ 선택 사둀 5κ°œκ°€ κΈ°λŒ€ ν•„λ“œ 15개λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. μ‹œλ„ μ˜ˆμ‚°μ„ 늘리며 자체 λͺ¨λΈκ³Ό κ²°μ •λ‘  경둜λ₯Ό 각각 μ„Έ λ²ˆμ”© μ‹€ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

ν—ˆμš© μ‹œλ„ 선택 ν•„λ“œ 선택 사둀 μ‹€μ œ μ‹€ν–‰μ˜ 기둝 좜λ ₯ ν•„λ“œ μ‹€μ œ μ‹€ν–‰μ˜ 이름 μžˆλŠ” 좜λ ₯
1 6/15, 40% 2/5 9/21 6/14
2 9/15, 60% 2/5 13/21 6/14
4 12/15, 80% 2/5 17/21 6/14
8 15/15, 100% 5/5 21/21 14/14

두 λ°©μ‹μ˜ μΆ©μ‘± μˆ˜λŠ” κ°™μ•˜μŠ΅λ‹ˆλ‹€. 4회 μ˜ˆμ‚°μ—μ„œλŠ” μ„œλ‘œ λ‹€λ₯Έ ν•„λ“œλ₯Ό 채웠고, 8νšŒμ—μ„œλŠ” 같은 μ™„μ„±λœ 본문을 μƒμ„±ν–ˆμŠ΅λ‹ˆλ‹€. 전체 μ‚¬λ‘€λŠ” λ§ˆμ§€λ§‰ ν•„λ“œκ°€ μ±„μ›Œμ§ˆ λ•ŒκΉŒμ§€ 2/5μ§€λ§Œ, ν•„λ“œ μ§€ν‘œλŠ” κ·Έ μ‚¬μ΄μ˜ 진전을 λ³΄μ—¬μ€λ‹ˆλ‹€.

μ‹€μ œ 싀행은 사둀 7개λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 그쀑 5κ°œλŠ” 선택 사둀와 겹치고, 2κ°œλŠ” ν…μŠ€νŠΈμ˜ μ€„λ°”κΏˆΒ·λ”°μ˜΄ν‘œμ™€ 기둝을 κ·ΈλŒ€λ‘œ λ‘λŠ” 경둜λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. 선택 ν•΄μ„κΈ°μ˜ κΈ°λŒ€κ°’κ³Ό μ‹€μ œ 컴파일된 ν”„λ‘œκ·Έλž¨μ˜ κΈ°λŒ€κ°’μ„ λ”°λ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€. 이 λΆ„λͺ¨λŠ” μ œκ³΅ν•œ 예제의 λ²”μœ„μ΄λ©°, λ‹€μ–‘ν•œ λ³Έλ¬Έ λͺ¨μ–‘에 λŒ€ν•œ ν•™μŠ΅μ€ λ‹€μŒ λ‹¨κ³„μž…λ‹ˆλ‹€.

λͺ¨λΈκ³Ό μ—°κ²° ν•΄μ œ

body-codegen --path-model λ˜λŠ” body-compose --model둜 κΈ°μ‘΄ 자체 μ†Œν˜• λͺ¨λΈμ„ μ—°κ²°ν•©λ‹ˆλ‹€. μ˜΅μ…˜μ„ λΉΌλ©΄ μ‘°ν•© 번호 μˆœμ„œλ‘œ κ²°μ •λ‘ μ μœΌλ‘œ μ§„ν–‰ν•©λ‹ˆλ‹€. body-contextλŠ” μΆ”κ°€ μΆ”λ‘ μ΄λ‚˜ 후보 μ‹€ν–‰ 없이 μ •ν™•ν•œ λ¬Έλ§₯을 λ³΄μ—¬μ€λ‹ˆλ‹€. μ„ νƒν•œ Goooμ—λŠ” κΈ°μ€€ λ³Έλ¬Έκ³Ό pickedλ₯Ό 남기고, body-realize와 μ €μž₯ν•œ 쑰립 μž¬μ‹€ν–‰μ€ μΆ”κ°€ μΆ”λ‘  없이 같은 값을 ν™•μΈν•©λ‹ˆλ‹€.

ν˜„μž¬ λͺ¨λΈμ€ μ •μˆ˜ 선택에 ν•™μŠ΅ν•œ κΈ°μ‘΄ κ°€μ€‘μΉ˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. ν•„λ“œ 선택을 μœ„ν•œ 별도 μ΄λ¦„μ˜ μˆœμ„œ λ¬Έλ§₯을 κ΅¬μ„±ν–ˆκ³ , 선택 사둀와 κΈ°λŒ€ 좜λ ₯은 λͺ¨λΈ μž…λ ₯μ—μ„œ μ œμ™Έν–ˆμŠ΅λ‹ˆλ‹€. μƒˆ 생성은 초기 μˆœμœ„λ₯Ό ν•œ 번 λ°›μœΌλ©°, ν•„λ“œ ν”„λ‘œν•„μ˜ μ‹€νŒ¨ 사둀 μž¬μ„ νƒμ€ 후속 μž‘μ—…μž…λ‹ˆλ‹€. κΈ°μ‘΄ μ •μˆ˜ μ‘°λ¦½μ—λŠ” λ³„λ„μ˜ μ‹€νŒ¨ λ¬Έλ§₯ μž¬μ„ νƒμ΄ μžˆμŠ΅λ‹ˆλ‹€.

μ™„μ „ν•œ λ¬Έλ§₯이 λͺ¨λΈ 크기 μ œν•œμ„ λ„˜κ±°λ‚˜ 선택지 μˆ˜κ°€ λ§žμ§€ μ•ŠμœΌλ©΄ κ·Έ 이유λ₯Ό κΈ°λ‘ν•˜κ³  μΆ”κ°€ μΆ”λ‘  0회의 κ²°μ •λ‘  경둜둜 μ§„ν–‰ν•©λ‹ˆλ‹€. μš”μ²­λ³„ μž‘μ—… 곡간을 μ¨μ„œ λΆˆλ³€ κ°€μ€‘μΉ˜λŠ” μ—¬λŸ¬ μš”μ²­μ΄ κ³΅μœ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μž‘μ—…μžλŠ” 기둝 본문을 λ³‘λ ¬λ‘œ μƒμ„±ν•˜κ³ , 기둝 κ·Έλž˜ν”„μ˜ μ‹€μ œ 싀행은 body-composeλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

μ‹€μ œ λΉ„μš©κ³Ό λ‹€μŒ ν•™μŠ΅

μ„€μΉ˜λ³Έμ˜ μƒˆ 전체 μ˜ˆμ‚° μΈ‘μ •μ—μ„œ μΆ”λ‘  쀑앙값은31.625Β΅sμ˜€μŠ΅λ‹ˆλ‹€. κ·Έλž˜ν”„ 생성은 λͺ¨λΈ9.890msΒ·κ²°μ •λ‘ 9.337ms, λͺ…λ Ή μ „μ²΄λŠ”323.462msΒ·324.194ms, μ΅œλŒ€ ν”„λ‘œμ„ΈμŠ€ λ©”λͺ¨λ¦¬λŠ”82.94MiBΒ·82.42MiB, μ‚¬μš©μžΒ·μ‹œμŠ€ν…œ CPU μ‹œκ°„ 합은 각각0.24μ΄ˆμ˜€μŠ΅λ‹ˆλ‹€. ν•œ 본문의 각 쑰건을 μ„Έ λ²ˆμ”© λ°˜λ³΅ν•œ κ°’μž…λ‹ˆλ‹€. μ›λž˜ 후보와 μ„€μΉ˜λ³Έ κ΄€μΈ‘μ˜ μ†ŒμŠ€Β·Go μ§€λ¬Έ 및 μœ ν•œ μΆ©μ‘± μˆ˜λŠ” 30개 λͺ¨λ‘ κ°™μ•˜μŠ΅λ‹ˆλ‹€.

Go μš”μ•½ λ„κ΅¬λŠ” 4회 μ˜ˆμ‚°μ˜ κ²°κ³Όλ₯Ό 선택 ν•„λ“œ12/15, μ‹€μ œ 좜λ ₯6/14, μ‹€μ œ 기둝 ν•„λ“œ17/21둜 κ΅¬λΆ„ν•˜κ³ , 남은 state의 μ‹€μ œ κ°’κ³Ό κΈ°λŒ€κ°’μ„ λ³΄μ—¬μ€λ‹ˆλ‹€. μ•žμ„  단일 묢음의 μ €μž₯ μž¬μ‹€ν–‰μ€ μΆ”κ°€ 좔둠을 μƒλž΅ν•˜κ³  Goλ₯Ό λ‹€μ‹œ λΉŒλ“œν–ˆμŠ΅λ‹ˆλ‹€. 후속 κ·Έλž˜ν”„ μž¬μ‚¬μš©μ„ κ°œλ°œν•΄ 첫 μ‹€ν–‰μ—μ„œ λΉŒλ“œν•œ ν”„λ‘œκ·Έλž¨μ„ 반볡 μž…λ ₯에 μ‚¬μš©ν•©λ‹ˆλ‹€. μž…λ ₯κ³Ό κΈ°λŒ€κ°’μ€ 맀번 μƒˆλ‘œ μ‹€ν–‰ν•΄ κ΄€μΈ‘ν•©λ‹ˆλ‹€.

κΉ¨λ—ν•œ 개발 ν›„λ³΄μ˜ 전체 μ˜ˆμ‚° μΈ‘μ •μ—μ„œ λͺ¨λΈ μΆ”λ‘  쀑앙값은 29Β΅sμ˜€μŠ΅λ‹ˆλ‹€. κ·Έλž˜ν”„ 생성은 λͺ¨λΈ 9.57msΒ·κ²°μ •λ‘  9.60ms, λͺ…λ Ή μ „μ²΄λŠ” 349msΒ·342msμ˜€μŠ΅λ‹ˆλ‹€. μ΅œλŒ€ ν”„λ‘œμ„ΈμŠ€ λ©”λͺ¨λ¦¬λŠ” μ•½ 82MiB, μ‚¬μš©μžΒ·μ‹œμŠ€ν…œ CPU μ‹œκ°„ 합은 μ•½ 0.26μ΄ˆμ˜€μŠ΅λ‹ˆλ‹€. Go λΉŒλ“œμ™€ μžμ‹ 싀행을 ν¬ν•¨ν•œ 값이며, 호슀트 전체 CPU μ‚¬μš©λ₯  μ¦κ°€λŠ” μΈ‘μ •ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 이번 λ³Έλ¬Έμ—μ„œ λͺ¨λΈμ€ 후보 수λ₯Ό 쀄이지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒ ν•™μŠ΅μ€ λ‹€μ–‘ν•œ ν•„λ“œ ν‘œν˜„κ³Ό μž‘μ€ ν•œμ˜ μ˜λ„, μ‹€μ œ ν•„λ“œ κ°œμ„ λŸ‰μ„ μ—°κ²°ν•˜λŠ” 것을 λͺ©ν‘œλ‘œ ν•©λ‹ˆλ‹€. 같은 μ˜ˆμ‚°μ—μ„œ μ–Όλ§ˆλ‚˜ 더 μ±„μš°λŠ”μ§€μ™€ 후보 검사 수, μΆ”λ‘  μ‹œκ°„, κ°€μ€‘μΉ˜ λ©”λͺ¨λ¦¬λ₯Ό ν•¨κ»˜ λΉ„κ΅ν•©λ‹ˆλ‹€.

곡개 λͺ¨λΈμ˜ ν›„λ³΄Β·μ„€μΉ˜ κ΄€μΈ‘ Β· μ•žμ„  기둝 κ°’ 전달 Β· 졜근 연ꡬ와 λ‹€μŒ μž‘μ—