Skip to content

kufu-ai/slack-copilot

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

概要

ナレッジ管理に特化したSlackで動作するChatGPTです。

Assistants API streaming でSlack Copilotを作った

Features

  • Assistant APIを利用したslack専用チャットbot
  • スレッドやcanvas、アップロードしたファイルを文脈として自動入力
  • notion github google driveなどナレッジの検索が可能
  • APIクレジットを無駄遣いしないように練習モードを搭載
  • ユーザの発言を学習することで、より自然な発言を行うことが可能

アーキテクチャ

アーキテクチャ

動作フロー

Events API

sequenceDiagram
    participant Slack
    participant Callback as handler<br/>(Lambda)
    participant Assistant as Processor<br/>(Lambda)
    participant DynamoDB
    participant OpenAI as OpenAI<br/>AssistantsAPI

    Slack->>Callback: メッセージ
    Callback-->>Assistant: SNS経由で呼び出し (非同期)
    Callback->>Slack: status: 200 (3秒以内)
    Assistant->>DynamoDB: スレッドID取得
    opt スレッドIDが存在しない場合
        Assistant->>OpenAI: 新規スレッド生成
        Assistant->>DynamoDB: スレッドID保存
    end
    Assistant->>OpenAI: スレッドが実行中か確認
    opt スレッドが実行中の場合
        Assistant-->>Slack: エラーメッセージ返却
    end
    opt ファイルがある場合
        Assistant->>Slack: ファイルダウンロード (SlackAPI)
        Assistant->>OpenAI: ファイルアップロード
    end
    Assistant->>OpenAI: スレッドにメッセージ追加
    Assistant->>DynamoDB: アシスタントの設定を取得
		Assistant ->> OpenAI: アシスタントの設定を更新
    Assistant->>OpenAI: スレッドを実行 (Run)
    loop StreamingAPIを使ってメッセージを非同期で受信する
        opt 回答の生成結果が通知される場合
		        OpenAI -->> Assistant: 生成された文字列を通知
            Assistant-->>Slack: メッセージを送信または編集
        end
        opt function_callが必要な場合
		        OpenAI -->> Assistant: 関数名と引数を通知
            Assistant-->>OpenAI: 関数の実行結果を返却
        end
        opt ファイルの生成結果が通知される場合
		        Assistant -->> OpenAI: ファイルのリクエスト
		        OpenAI -->> Assistant: ファイルをダウンロード
            Assistant-->>Slack: ファイルを送信
				end
        opt 生成結果を受信する場合<br>(compleated,failed, cancelled, expired)
            Assistant-->>Slack: 結果を返却
        end
    end

ショートカットコマンド

sequenceDiagram
    participant Slack as Slack
    participant Assistant as handler<br/>(Lambda)
    participant DynamoDB as DynamoDB

    Slack->>Assistant: ショートカットを起動する
    Assistant -->> Slack: モーダルを表示
    Slack ->> Assistant: モーダル経由でアシスタント名を受け取る
    Assistant ->> Assistant: アシスタント名から設定を取得
    Assistant->>DynamoDB: 設定を保存

Demo

1. CSVファイルの分析

2. Notion検索

3. Github検索

4. アシスタントの変更

5. インシデント対応

6. Unfurl

セットアップ

cp env.sample .envrc
direnv allow
npm install -g serverless
serverless plugin install -n serverless-api-gateway-throttling
serverless plugin install -n serverless-prune-plugin
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
sls deploy

APIs

関連

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 98.1%
  • Dockerfile 1.2%
  • Other 0.7%