GROWIにAI機能が追加されたので早速使ってみた

[オープンソースのWikiであるGROWI](https://growi.org/ja/)は日々着実に開発を行っています。そして、[v7.1では目玉機能として、AI機能が追加されました](https://docs.growi.org/ja/admin-guide/upgrading/71x.html)！

![FireShot Capture 154 - _ - GROWI - localhost.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/98493535-aa93-87c2-5756-aaedfd94ff06.jpeg)

本記事では、そのAI機能の使い方について解説します。

## GROWIにおけるAI機能について

GROWIは社内Wikiとして、企業やコミュニティ、研究室などで利用されています。そこには多くのナレッジが蓄積されています。GROWIではElasticsearchを組み込んでおり、検索結果については一定の評価をもらっています。

その検索結果をベースとして、AIを利用することで、より直感的な回答を得られるのがAI機能になります。 ~~ElasticをRAGとして~~ OpenAI API の Assistants APIを利用しており、 Wiki内にあるコンテンツ（パブリックなもの）をベースに、ユーザーの質問に対して回答を得られます。

## 使い方

GROWIを利用する場合、一番簡単なのはDocker Composeを使うことです。

```
https://github.com/weseek/growi-docker-compose
```

### Dockerfileの修正

私が試した際（2024/11/08現在）だと、 `error setting certificate file: /etc/ssl/certs/ca-certificates.crt` というエラーが出ました。解決するため、 Dockerfile にて `ca-certificates` を追加しました。

```Dockerfile
# 変更後
RUN apt-get update && apt-get install -y --no-install-recommends curl ca-certificates \
    && curl -sL https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
        | tar -xz -C /usr/local/bin
```

### docker-compose.ymlの修正

AI機能を利用する際の設定です。 `app` に対して環境変数を追加します。

```yaml
environment:
  - AI_ENABLED=true # AI機能を有効にする
  - OPENAI_SERVICE_TYPE=openai # サービスタイプを指定する
  - OPENAI_API_KEY=xxxxx # APIキーを指定する
```

OPENAI_SERVICE_TYPEは、 `openai` ~~か `azure-openai`~~ を指定します。利用するAIサービスのAPIキーを取得して、 `OPENAI_API_KEY` に設定してください。

AI機能の環境変数は以下の通りです。必要に応じて設定を変更してください。

| キー | 型 | デフォルト値 |
| --- | --- | --- |
| AI_ENABLED | BOOLEAN | false |
| OPENAI_SERVICE_TYPE | STRING | null |
| OPENAI_API_KEY | STRING | null (isSecret: true) |
| OPENAI_SEARCH_ASSISTANT_INSTRUCTIONS | STRING | null |
| OPENAI_CHAT_ASSISTANT_INSTRUCTIONS | STRING | 略。[こちらにて確認してください](https://github.com/weseek/growi/blob/7225caf8ae9ab74a65a185024e9859141fd5f8bf/apps/app/src/server/service/config-loader.ts#L780) |
| OPENAI_ASSISTANT_NAME_SUFFIX | STRING | null |
| OPENAI_THREAD_DELETION_CRON_EXPRESSION | STRING | '0 * * * *' (毎時) |
| OPENAI_THREAD_DELETION_CRON_MAX_MINUTES_UNTIL_REQUEST | NUMBER | 60 |
| OPENAI_THREAD_DELETION_BARCH_SIZE | NUMBER | 100 |
| OPENAI_THREAD_DELETION_API_CALL_INTERVAL | NUMBER | 36000 (msec) |
| OPENAI_VECTOR_STORE_FILE_DELETION_CRON_EXPRESSION | STRING | '0 * * * *' (毎時) |
| OPENAI_VECTOR_STORE_FILE_DELETION_CRON_MAX_MINUTES_UNTIL_REQUEST | NUMBER | 60 |
| OPENAI_VECTOR_STORE_FILE_DELETION_BARCH_SIZE | NUMBER | 100 |
| OPENAI_VECTOR_STORE_FILE_DELETION_API_CALL_INTERVAL | NUMBER | 36000 (msec) |

## AI機能の利用法

設定ができていれば、Wikiページ上部にAIアイコンが表示されます。これをクリックすると、フローティングでAIアシスタントが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/c030e64a-f059-4ee4-69fb-3d11e8b39070.png)


後は質問をすれば、答えが返ってきます。

![FireShot Capture 155 - _ - GROWI - localhost.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/c0b4aa11-21db-e72f-5d64-3aaa461caf22.jpeg)


## 注意点

現在のモデルは `gpt-4o` 固定になります（[7.1.2にてデフォルトがgpt-4o-miniになりました](https://qiita.com/goofmint/items/532398f98095d53126b9)）。質問の仕方によってはトークンの制限に引っかかる可能性があります。その場合は質問の仕方を工夫してもらうか、Tierの引き上げを検討してください。

現在はテキストで返ってくるのみです。引用元がページへのリンクになると、さらに便利になりますね（今後に期待） → [7.1.2で追加されました](https://qiita.com/goofmint/items/532398f98095d53126b9)！

## まとめ

AI機能はまだβ版になりますので、ぜひ試してみてもらってフィードバックをください！社内ナレッジのAI化で、生産性は大きく向上するでしょう。ぜひGROWIを導入して、知識の体系化につなげてください。

[OSS開発wikiツールのGROWI \| 快適な情報共有を、全ての人へ](https://growi.org/ja/)