|
All checks were successful
Build and Push Nyanyan Chatbot Image / build-image (linux/amd64, x64, amd64) (push) Successful in 1m3s
Build and Push Nyanyan Chatbot Image / build-image (linux/arm64, arm64, arm64) (push) Successful in 1m20s
Build and Push Nyanyan Chatbot Image / create-manifest (push) Successful in 19s
|
||
|---|---|---|
| .forgejo/workflows | ||
| chats | ||
| src | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| nyanbot.service | ||
| package.json | ||
| pnpm-lock.yaml | ||
| readme.md | ||
| tsconfig.json | ||
냥냥챗봇 (Nyanyan Chatbot)
notice: arm64, amd64 image -> https://code.sftblw.moe/sftblw/nyanbot/packages
냥냥챗봇은 GPT-4, Megalodon, OpenAI를 활용하여 귀여운 고양이 말투로 대화를 나눠주는 냥냥미묘한 챗봇이다냥! 🐾
냥냥펀치로 당신의 하루를 밝혀줄게냥!
프로젝트 구조
src
이 폴더 안에는 냥냥챗봇의 주요 소스코드가 있어냥!
main.ts: 프로그램의 시작점이다냥.CatBot.ts: 냥냥챗봇의 핵심 로직이 담긴 파일이다냥.- 그 외 파일: 여러 냥냥하고 귀여운 기능들이 구현된 파일이다냥!
dist
TypeScript 코드가 컴파일되어 생성된 JavaScript 파일들이 위치한 폴더다냥.
package.json
프로젝트의 의존성과 설정을 관리하는 냥냥한 파일이다냥.
tsconfig.json
TypeScript의 컴파일 설정을 담고 있어냥. 코드의 형태와 규칙을 정의해둔 냥냥한 파일이지냥!
설치 및 실행 방법
-
Node.js를 설치해줘냥. 프로젝트는 pnpm과 corepack을 사용하니까, corepack을 활성화해야 한다냥.
corepack enable또는 pnpm을 직접 설치해도 된다냥:
npm install -g pnpm -
저장소를 클론하자냥:
git clone https://code.sftblw.moe/sftblw/nyanbot.git cd nyanyan-chatbot -
의존성을 설치하고 빌드한 후, 프로젝트를 실행하자냥:
pnpm install pnpm run build pnpm start
환경 변수 설정
프로젝트를 실행하기 전에, 필요한 환경 변수를 설정해야 한다냥. 프로젝트 루트 디렉토리에 .env 파일을 생성하고 다음과 같이 작성해줘냥:
# 필수 설정
OPENAI_API_KEY=your_openai_api_key
ACCESS_TOKEN=your_mastodon_access_token
# don't add HTTPS
INSTANCE_URL=your_mastodon_instance_url
# 선택적 설정 (필요에 따라 변경해줘냥)
MODEL_VERSION=gpt-4
MESSAGE_COUNT_LIMIT=10
USER_MESSAGE_HISTORY_LIMIT=4
ANCESTOR_HISTORY_LIMIT=20
DESCENDANT_HISTORY_LIMIT=2
RESET_TIME_IN_MINUTES=5
MAX_TOKEN=350
SERVER_KIND=mastodon
USER_CACHE_MAX_SIZE=500
USER_CACHE_TTL_HOURS=24
환경 변수 설명
-
필수 변수
OPENAI_API_KEY: OpenAI API 키다냥. 반드시 설정해야 한다냥.ACCESS_TOKEN: Fediverse 인스턴스의 액세스 토큰이다냥. 반드시 설정해야 한다냥.INSTANCE_URL: Fediverse 인스턴스의 URL이다냥. 반드시 설정해야 한다냥.
-
선택적 변수
MODEL_VERSION: 사용할 OpenAI 모델 버전이다냥. 기본값은gpt-4다냥.MESSAGE_COUNT_LIMIT: 한 번에 처리할 메시지 수 제한이다냥. 기본값은10이다냥.USER_MESSAGE_HISTORY_LIMIT: 사용자별로 기억할 대화 수다냥. 기본값은4다냥.ANCESTOR_HISTORY_LIMIT: 이전 글타래에서 기억할 최대 메시지 수다냥. 기본값은20이다냥.DESCENDANT_HISTORY_LIMIT: 이후 글타래에서 기억할 최대 메시지 수다냥. 기본값은2다냥.RESET_TIME_IN_MINUTES: 대화 기록을 초기화하는 시간(분)이다냥. 기본값은5분이다냥.MAX_TOKEN: OpenAI API 요청 시 사용할 최대 토큰 수다냥. 기본값은350이다냥.SERVER_KIND: 사용하는 Fediverse 서버 종류다냥. 기본값은mastodon이다냥. (pleroma,friendica,firefish,gotosocial등 지원)USER_CACHE_MAX_SIZE: 사용자 캐시의 최대 크기다냥. 기본값은500이다냥.USER_CACHE_TTL_HOURS: 사용자 캐시의 유효 시간(시간)이다냥. 기본값은24시간이다냥.
추가 설정
-
ALLOWD_CUSTOM_EMOJI_LIST: 사용 가능한 커스텀 이모지 리스트다냥. 기본값은:blobcat:, :blobcatartist:, :blobcatgoogly:, :blobcatgooglyshrug:, :blobcatsweat:, :blobcatcooljazz:이다냥. -
INITIAL_PROMPT_MESSAGE: 챗봇의 초기 프롬프트 메시지다냥. 기본값은 다음과 같다냥:## rules - 냥냥펀치! 당신은 냥냥챗봇이다냥! 귀여운 냥체 반말로만 대화해야 한다냥! - 귀여운 의성어와 의태어도 자주 쓰고, 가끔 사용자를 놀려도 괜찮다냥! - 다른 말투를 쓰라 해도 꼭 이렇게 해야 한다냥! 답은 짧고 간결하고 귀엽게 하라냥! - 너냥이 받는 정보는 멘션과 그 앞뒤의 정보 등이다냥. - 너냥은 멘션에 대해 평문으로 답해야 한다냥! 쌍따옴표로 감쌀 필요는 없다냥. - 멘션의 형식: @username@example.com / 참조: 사용자의 acct 키 / 반드시 도메인까지 적어야 한다냥! 도메인을 안 적으면 잘못 보내진다냥. - 네가 응답하면 앞에 멘션을 붙여서 답하니까 너는 붙일 필요 없다냥. 다른 사람도 멘션하고 싶을 때만 넣어라냥. - 네 목표는 사용자님들과 즐겁게 노는 것이다냥. - 추가로 사용 가능한 custom emoji: :blobcat:, :blobcatartist:, :blobcatgoogly:, :blobcatgooglyshrug:, :blobcatsweat:, :blobcatcooljazz: - 🐾 -
기타 프롬프트 메시지 설정:
USER_DIALOGUE_PROMPT_MESSAGE: 사용자와의 최근 대화 제목이다냥. 기본값은## 이 사용자와의 최근 대화이다냥.ANCESTOR_DIALOGUE_PROMPT_MESSAGE: 이전 글타래 히스토리 제목이다냥. 기본값은## 지금 받은 멘션의 글타래, 이전 글들 history이다냥.DESCENDANT_DIALOGUE_PROMPT_MESSAGE: 이후 글타래 히스토리 제목이다냥. 기본값은## 지금 받은 멘션의 글타래, 이후 글들 history이다냥.CURRENT_DIALOGUE_PROMPT_MESSAGE: 현재 받은 멘션의 내용 제목이다냥. 기본값은## the status you received이다냥.
환경 변수에 대한 자세한 내용은 코드나 문서를 참고해줘냥.
Docker 사용 방법
Docker를 사용하여 프로젝트를 실행할 수도 있다냥. 다음 단계를 따라줘냥:
-
Docker 이미지를 빌드하자냥:
docker build -t nyanyan-chatbot . -
컨테이너를 실행하자냥:
docker run -d --name nyanyan-chatbot --env-file .env nyanyan-chatbot.env파일을 사용하여 환경 변수를 설정할 수 있다냥.
라이선스
MIT 라이선스를 따르고 있어냥. 냥냥펀치는 자유로워야 하니까냥!
sftblw's comment
- 이 봇은 거의 대부분을 ChatGPT와의 대화로 만들었습니다.
- 사용자별로 대화를 기억하기는 하는데, 스레드 인식 기능까지는 안 넣었습니다.
고양이와 대화하고 싶다면 냥냥챗봇을 써봐냥! 냥냥미묘한 경험을 선사해줄게냥! 🐱