Gort는 처음부터 챗탑용으로 설계된 챗봇 프레임워크입니다.
Gort는 팀과 협업하는 장소인 채팅 창에 명령줄의 강력한 기능을 제공합니다. 개방형 명령 번들 지원을 통해 개발자는 자신이 선택한 언어로 기능을 구현할 수 있으며, 강력한 액세스 제어를 통해 가장 민감한 작업에서도 자신 있게 협업할 수 있습니다. 확장성과 적응성에 초점을 맞추면 팀의 가시성을 잃지 않고 예상치 못한 상황에 신속하게 대응할 수 있습니다.
공식 문서는 The Gort Guide에서 찾을 수 있습니다.
Gort는 처음에는 Operable의 Cog를 Go로 재구현한 것으로 생각되었으며 Cog에서 많은 영감을 받았지만 Gort는 대체로 자신만의 길을 가고 있습니다.
초기 설계 논의 중에 우리는 Cog의 많은 기능이 아무리 혁신적이라도 거의 사용되지 않았으며 코드베이스를 확장하고 유지 관리하기가 어려워졌다는 사실을 발견했습니다. 게다가 구현 언어인 Elixir에는 숙련된 개발자가 상대적으로 적었습니다. Cog Slack 작업 공간에서 수개월 동안 논의된 솔루션은 Go에서 Cog를 처음부터 다시 작성하여 덜 사용되는 일부 기능을 제거하고 프로세스의 복잡성을 줄이는 것이었습니다.
이는 우리에게 Cog가 무엇을 의미하는지 고려하고 재정의할 수 있는 기회를 제공했습니다. 의미가 있는 기능을 선택하고 그렇지 않은 기능을 폐기합니다. 이러한 방식으로 Gort는 충실한 재구현이라기보다는 Cog의 "영적 후계자"로 더 잘 설명될 수 있습니다.
Gort의 디자인 철학은 이미 익숙한 도구를 사용하여 원하는 언어로 명령을 작성할 수 있도록 하고 이를 사용할 수 있는 사람과 방법을 엄격하게 제어할 수 있도록 함으로써 유연성과 보안을 강조합니다.
더 구체적으로:
이들 각각에 대해서는 아래에서 더 자세히 설명합니다.
사용자는 주로 명령 문자(기본적으로 !
)로 실행되는 명령을 통해 Gort와 상호 작용하지만 개념적으로는 명령줄에 입력된 명령과 동일합니다.
예를 들어 echo
명령을 사용하는 방법은 다음과 같습니다.
표시된 대로 성공적인 명령의 출력은 Gort에 의해 다시 전달됩니다.
명령에 대한 자세한 내용은 Gort 가이드에서 확인할 수 있습니다.
Gort 명령은 컨테이너 이미지로 빌드됩니다. 즉, 익숙한 언어로 빌드할 수 있습니다.
게다가 실행 파일이 명령줄에 입력된 것처럼 모든 채팅 입력을 정확하게 수신하기 때문에 원하는 명령줄 해석기를 사용할 수 있습니다. 명령은 Bash 스크립트로 구현하거나 curl
같은 기존 명령을 사용하여 구현할 수도 있습니다!
명령 작성에 대한 자세한 내용은 Gort 가이드에서 확인할 수 있습니다.
Gort에서는 하나 이상의 관련 명령 세트를 "명령 번들"로 설치할 수 있습니다.
번들은 YAML로 표시되어 각 명령에 사용할 실행 파일과 각 명령을 실행할 수 있는 사용자를 지정합니다.
매우 간단한 번들 파일이 아래에 나와 있습니다.
---
gort_bundle_version : 1
name : echo
version : 0.0.1
image : ubuntu:20.04
author : Matt Titmus <[email protected]>
homepage : https://guide.getgort.io
description : A test bundle.
long_description : |-
This is an example bundle. It lets you echo text using the "echo"
command that's built into Ubuntu 20.04.
permissions :
- can_echo
commands :
echo :
description : " Echos back anything sent to it. "
executable : [ "/bin/echo" ]
rules :
- must have echo:can_echo
이는 명령( echo
라고도 함)과 can_echo
라는 권한을 정의하는 echo
라는 번들을 보여줍니다. 일단 설치되면 echo:can_echo
권한이 있는 모든 사용자가 Slack에서 실행할 수 있습니다.
번들에 대한 자세한 내용은 Gort 가이드에서 확인할 수 있습니다.
Gort에서 사용자는 하나 이상의 채팅 제공자의 사용자와 고유하게 매핑될 수 있습니다. Gort 사용자는 하나 이상의 그룹 의 구성원이 될 수 있으며, 이는 부여된 권한 모음으로 간주될 수 있는 역할 을 무제한으로 가질 수 있습니다. 예를 들어 사용자 dave
developers
라는 그룹에 속할 수 있습니다. 이 그룹에는 production_deploy
라는 권한을 포함하여 여러 권한이 포함된 deployers
역할이 연결될 수 있습니다.
권한 및 규칙에 대한 자세한 내용은 Gort 가이드에서 확인할 수 있습니다.
누가 그것을 사용할 수 있는지 정의하는 각 명령에 대해 정교한 규칙 시스템을 적용할 수 있습니다. 이는 매우 세분화될 수 있으며 특정 플래그 또는 매개변수의 값을 기반으로 권한 결정을 내릴 수도 있습니다.
규칙은 번들 수준에서 할당되며 매우 복잡할 수 있습니다. 아래에는 deploy
라는 번들의 하위 집합이 있습니다.
name : deploy
version : 0.0.1
permissions :
- production_deploy
commands :
deploy :
description : " Deploys to the chosen environment. "
executable : [ "/bin/deploy" ]
rules :
- with arg[0] == "production" must have deploy:production_deploy
보시다시피 위의 예에는 deploy
라고도 하는 하나의 명령이 포함되어 있습니다. 하나의 규칙은 "production"을 매개변수로 전달하는 모든 사용자가 ( deploy
번들에서) production_deploy
권한을 가지고 있어야 한다고 주장합니다.
권한 및 규칙에 대한 자세한 내용은 Gort 가이드에서 확인할 수 있습니다.
Gort는 시스템 메시지는 물론 명령 출력 및 오류 메시지를 포함하여 사용자에게 전송되는 모든 정보의 표시를 제어할 수 있는 정교한 템플릿 시스템을 제공합니다.
또한 템플릿은 구성의 애플리케이션 수준에서 정의되거나 개별 번들 구성의 번들 또는 명령 수준에서도 정의될 수 있습니다.
Gort 템플릿은 Go의 템플릿 구문을 사용하여 채팅에 구애받지 않는 방식으로 출력 형식을 지정합니다. 예를 들어 매우 간단한 명령 템플릿은 다음과 유사할 수 있습니다.
{{ text | monospace true }}{{ .Response.Out }}{{ endtext }}
이 템플릿은 명령의 응답( .Response.Out
)을 다음과 같은 고정폭 텍스트로 내보냅니다.
약간 더 복잡한 템플릿인 명령 오류 템플릿 (실제로는 기본값)이 아래에 나와 있습니다.
{{ header | color "#FF0000" | title .Response.Title }}
{{ text }}The pipeline failed planning the invocation:{{ endtext }}
{{ text | monospace true }}{{ .Request.Bundle.Name }}:{{ .Request.Command.Name }} {{ .Request.Parameters }}{{ endtext }}
{{ text }}The specific error was:{{ endtext }}
{{ text | monospace true }}{{ .Response.Out }}{{ endtext }}
여기에는 색상과 제목이 포함된 헤더와 고정 폭 텍스트와 표준 텍스트가 번갈아 표시되는 내용이 포함되어 있습니다. 이 경우 다음과 같은 명령 오류 형식이 지정됩니다.
.Response
에 대한 몇 가지 참조가 있음을 알 수 있습니다. 이는 하나의 명령 요청, 실행 및 응답에 대한 모든 데이터 및 메타데이터를 사용할 수 있게 만드는 모든 템플릿에서 액세스할 수 있는 데이터 구조인 응답 봉투 에 대한 참조입니다.
감사 로깅에 대한 자세한 내용은 Gort 가이드에서 확인할 수 있습니다.
Gort는 최고의 채팅 제공업체로서 Slack과 Discord를 모두 지원합니다.
지원되는 각 채팅 제공업체에는 구성에 전용 섹션이 있습니다. 이들 각각은 목록이므로 동일한 Gort 컨트롤러에서 Slack 및 Discord와 상호 작용할 수 있을 뿐만 아니라 원할 경우 각각의 여러 인스턴스와 상호 작용할 수도 있습니다!
Gort 빠른 시작에 제공된 지침에 따라 봇 사용자를 생성한 후 관리자는 표시된 대로 Gort 사용자를 생성하고(아직 생성하지 않은 경우) 해당 Gort 사용자를 채팅 제공자 사용자 ID에 매핑하기만 하면 됩니다. 아래에:
$ gort user create mtitmus --email [email protected] --name " Matt Titmus " --password REDACTED
User " mtitmus " created.
$ gort user list
USER NAME FULL NAME EMAIL
admin Gort Administrator gort@localhost
mtitmus Matt Titmus [email protected]
$ gort user map mtitmus Slack U012P123456
User " mtitmus " mapped to " Slack:U012P123456 " .
$ gort user info mtitmus
Name mtitmus
Full Name Matt Titmus
Email [email protected]
Groups < undefined >
ADAPTER ID MAPPING
Slack U012P123456
그러면 매핑된 채팅 사용자가 입력한 모든 명령은 해당 Gort 사용자와 연결됩니다!
모든 명령 활동은 높은 카디널리티 로그 이벤트(아래 표시)로 내보내지고 Gort의 데이터베이스에 유지 관리되는 감사 로그에 기록됩니다.
Slack에서 !bundle list
명령을 실행하는 사용자를 예로 들어 보겠습니다.
그러면 다음과 유사한 로그 출력이 생성됩니다.
INFO [49594] Triggering command adapter.name=Gort bundle.default=false bundle.name=gort bundle.version=0.0.1
command.executable="[/bin/gort bundle]" command.name=bundle
command.params=list gort.user.name=admin provider.channel.id=C1238A01234
provider.channel.name=gort-dev [email protected]
provider.user.id=U012P123456 trace.id=476b3089c8ce0d38a2915a3b58fde032
보시다시피 이 풍부한 이벤트에는 다음이 포함됩니다.
이 예제에서는 가독성을 위해 "사람이 읽을 수 있는" 형식을 사용합니다. 프로덕션 모드에서 Gort는 JSON으로 인코딩된 로그 이벤트를 생성합니다.
감사 로깅에 대한 자세한 내용은 Gort 가이드에서 확인할 수 있습니다.
자세한 내용은 Gort 가이드의 빠른 시작 가이드를 참조하세요.
gort
바이너리는 컨트롤러 관리 CLI 역할도 합니다.
gort
클라이언트는 일반적으로 홈 디렉터리의 .gort
디렉터리에 있는 profile
파일에 있는 YAML 형식의 구성 파일을 사용합니다. gort
가 Gort 컨트롤러의 REST API와 상호 작용할 수 있도록 연결 자격 증명을 저장할 수 있는 곳입니다.
.gort/profile
파일의 예는 다음과 같습니다.
defaults :
profile : gort
gort :
url : https://gort.mycompany.com:4000
password : " seekrit#password "
user : me
preprod :
url : https://gort.preprod.mycompany.com:4000
password : " anotherseekrit#password "
user : me
주석은 #
문자로 시작됩니다. 비밀번호에 #
가 포함되어 있으면 위 그림과 같이 전체 비밀번호를 따옴표로 묶습니다.
이 파일에는 각각 다른 이름을 사용하여 여러 "프로필"을 저장할 수 있습니다(여기서는 gort
및 preprod
있습니다). 기본값( defaults
섹션에서)으로 표시된 것은 gort
에서 사용됩니다. 그러나 --profile=$PROFILE
옵션을 gort
에 전달하여 다른 자격 증명 세트를 사용할 수 있습니다.
이 파일에 수동으로 프로필을 추가할 수 있지만 gort profile create
명령을 사용하여 도움을 줄 수도 있습니다.
gort
실행 파일에는 여러 명령과 하위 명령이 포함되어 있습니다. --help
옵션을 전달하면 모든 항목에 대한 도움말을 사용할 수 있습니다. gort --help
로 시작하고 거기서부터 진행하세요.
Gort는 활발한 개발이 진행되고 있는 상태입니다. 다양한 마일스톤이 달성된 날짜는 다음과 같습니다. 현재와 미래의 이정표의 수와 초점은 변경될 수 있습니다.