soulshack
v0.74
// ____ _ ____ _ _
// / ___| ___ _ _ | | / ___| | |__ __ _ ___ | | __
// ___ / _ | | | | | | ___ | '_ / _` | / __| | |/ /
// ___) | | (_) | | |_| | | | ___) | | | | | | (_| | | (__ | <
// |____/ ___/ __,_| |_| |____/ |_| |_| __,_| ___| |_|_
// . . . because real people are overrated
soulshack은 openai API 엔드포인트를 활용하여 인간과 유사한 응답을 생성하는 IRC 채팅 봇입니다.
go build .
docker build . -t soulshack:dev
soulshack --nick chatbot --server irc.freenode.net --port 6697 --channel ' #soulshack ' --ssl --apikey ****************
Soulshack은 명령줄 플래그, 환경 변수 또는 구성 파일을 사용하여 구성할 수 있습니다.
Usage:
soulshack --channel <channel> [--nick <nickname>] [--server <server>] [--port <port>] [--tls] [--apikey <key>] [flags]
Examples:
soulshack --nick chatbot --server irc.freenode.net --port 6697 --channel '#soulshack' --tls --apikey ****************
Flags:
-a, --addressed require bot be addressed by nick for response (default true)
-A, --admins strings comma-separated list of allowed hostmasks (e.g. alex!~alex@localhost, josh!~josh@localhost).
-t, --apitimeout duration timeout for each completion request (default 5m0s)
-c, --channel string irc channel to join
-C, --chunkdelay duration after this delay, bot will look to split the incoming buffer on sentence boundaries (default 15s)
-m, --chunkmax int maximum number of characters to send as a single message (default 350)
-b, --config string use the named configuration file
--greeting string prompt to be used when the bot joins the channel (default "hello.")
-h, --help help for soulshack
--maxtokens int maximum number of tokens to generate (default 512)
--model string model to be used for responses (default "gpt-4o")
-n, --nick string bot's nickname on the irc server (default "soulshack")
--apikey string openai api key
--apiurl string alternative base url to use instead of openai
-p, --port int irc server port (default 6667)
--prompt string initial system prompt (default "you are a helpful chatbot. do not use caps. do not use emoji.")
--saslnick string nick used for SASL
--saslpass string password for SASL plain
-s, --server string irc server address (default "localhost")
-S, --sessionduration duration duration for the chat session; message context will be cleared after this time (default 3m0s)
-H, --sessionhistory int maximum number of lines of context to keep per session (default 50)
--temperature float32 temperature for the completion (default 0.7)
-e, --tls enable TLS for the IRC connection
--tlsinsecure skip TLS certificate verification
--tools enable tool use (default false)
--toolsdir directory to load tools from (default "examples/tools")
--top_p float32 top P value for the completion (default 1)
-v, --verbose enable verbose logging of sessions and configuration
--version version for soulshack
모든 플래그는 접두사가 soulshack_
인 환경 변수를 통해 설정할 수도 있습니다. 예를 들어 --server
플래그의 경우 soulshack_server
.
구성 파일은 yaml 형식을 사용합니다. --config
플래그를 사용하여 로드할 수 있습니다. 구성 파일에는 플래그를 통해 설정할 수 있는 모든 설정이 포함될 수 있습니다.
새 구성 파일을 생성하려면 다음 단계를 따르세요.
marvin.yml
)으로 새 yml 파일을 만듭니다. nick : marvin
greeting : " explain the size of your brain compared to common household objects. "
prompt : " you are marvin the paranoid android. respond with a short text message: "
channel : " #marvinshouse "
server : localhost
soulshack --config /path/to/marvin.yml
/set
: 구성 매개변수 설정(예: /set nick newnick
)/get
: 구성 매개변수의 현재 값을 가져옵니다(예: /get nick
)./leave
: 봇이 채널을 떠나 나가도록 합니다./help
: 사용 가능한 명령에 대한 도움말 표시 실행 파일이나 스크립트를 tooldir 위치에 넣으세요. 등록하려면 다음 명령에 응답해야 합니다.
llm이 실행 json에 인생을 망칠 무언가를 주입할 수 없는지 확인하십시오. 봇이나 이를 사용하는 사람을 믿을 수 없기 때문입니다.
솔직히 말해서 쉘 스크립트에서는 이렇게 하면 안 됩니다. 일종의 지뢰밭입니다. 여기 쉘 스크립트가 있습니다
set -e
# Check if --schema argument is provided
if [[ " $1 " == " --schema " ]] ; then
# Output a JSON schema to describe the tool
# shellcheck disable=SC2016
cat << EOF
{
"name": "get_current_date_with_format",
"description": "provides the current time and date in the specified unix date command format",
"type": "object",
"properties": {
"format": {
"type": "string",
"description": "The format for the date. use unix date command format (e.g., +%Y-%m-%d %H:%M:%S). always include the leading + sign."
}
},
"required": ["format"],
"additionalProperties": false
}
EOF
exit 0
fi
if [[ " $1 " == " --execute " ]] ; then
# Ensure jq is available
if ! command -v jq & > /dev/null ; then
echo " Error: jq is not installed. " >&2
exit 1
fi
# Extract format field from JSON
format= $( jq -r ' .format ' <<< " $2 " )
# Sanitize the format string
if [[ " $format " =~ [^a-zA-Z0-9%+:/ - ] ]] ; then
echo " Error: Invalid characters in format string. " >&2
exit 1
fi
# Use -- to prevent option parsing
date_output= $( date -- " $format " )
echo " $date_output "
exit 0
fi
# if no arguments, show usage
# shellcheck disable=SC2140
echo " Usage: currentdate.sh [--schema | --execute '{ " format " : " +%Y-%m-%d %H:%M:%S " }'] "