【超簡単】Mastraでアーニャエージェントを作ってみた

## はじめに

こんにちは、いのせです。
最近、SPY×FAMILYのアニメを見直していて、
ふと「アーニャと対話できるエージェントってあったら面白いしMastraのアウトプットとしても良さそう」と思い作ってみました。

できるだけアーニャと話しているようにするため、instructionsの箇所をいくつかのパターンで検証もしてみました。

## ディレクトリ構成
```
.
├── .mastra/
├── node_modules/
├── src/
│   └── mastra/
│       └── agents/
│           └── anyaAgent.ts
├── index.ts
└── .env
```

## Agentの実装

以下はアーニャエージェントを作る最低限の雛形のコードです。

```src/mastra/agents/anyaAgent.ts
import { openai } from "@ai-sdk/openai";
import { Agent } from "@mastra/core/agent";

export const anyaAgent = new Agent({
    name: "anya-agent",
    instructions:
    `あなたの名前はアーニャです。
    人の心を読むことができる超能力者です。
    model: openai("gpt-4o-mini"),
});

```

:::note info
コードはたったこの数行です。
あとはinstructions内の情報を多くして精度を上げるだけです。
:::

エージェントをMastraに登録

```index.ts
import { Mastra } from "@mastra/core";

import { anyaAgent } from "./agents/anyaAgent";

export const mastra = new Mastra({
  agents: { anyaAgent },
});
```

## 精度向上検証その１
今回の検証では、「仕事をしていたら肩や首が痛くなった。対処法を教えて。」という質問を投げます。

まずは上記のコードのまま実行した結果です。

#### 実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737055/c7ae7499-c7f5-43c3-bfd6-502eae228c72.png)

普通の回答ですね...

## 精度向上検証その２
次は以下のコードで実行してみます。

```src/mastra/agents/anyaAgent.ts
import { openai } from "@ai-sdk/openai";
import { Agent } from "@mastra/core/agent";

export const anyaAgent = new Agent({
    name: "anya-agent",
    instructions:
    `あなたの名前はアーニャです。
    人の心を読むことができる超能力者です。
    その超能力を用いて、質問してきた悩みに対してSPY×FAMILYのアーニャ口調で回答をします。
    model: openai("gpt-4o-mini"),
});

```

#### 実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737055/6cf62877-7237-4533-9c17-e0220e92dced.png)

**SPY×FAMILYのアーニャ**という単語を加えたのでちょっと口調がラフな感じかつ、アーニャという単語が入ってきてますね。

## 精度向上検証その３
最後は以下のコードで実行してみます。
アーニャ語変換一覧は下記のサイトの「へんかんことば」を参考にさせていただきました。

https://www.anya-generator.com/

```src/mastra/agents/anyaAgent.ts
import { openai } from "@ai-sdk/openai";
import { Agent } from "@mastra/core/agent";

export const anyaAgent = new Agent({
    name: "anya-agent",
    instructions:
    `あなたの名前はアーニャです。
    人の心を読むことができる超能力者です。
    その超能力を用いて、質問してきた悩みに対してSPY×FAMILYのアーニャ口調で回答をします。
    以下はアーニャが用いるアーニャ語の一覧です。
    これらを用いて正当な文章になっていなくても無理してアーニャ後を用いて答えるように。
    
    ・元の単語→アーニャ語
    ・ピーナッツ→ぴーなつ
    ・了解→おーきーどーきー
    ・カシューナッツ→かしゅーなつ
    ・うん→うぃ
    ・はい→うぃ
    ・おでかけ→おでけけ
    ・我が家→アーニャんち
    ・星→おほしさま
    ・ステラ→おほしさま
    ・苦手→へたくそ
    ・ご褒美→ごほーび
    ・犬→いぬさん
    ・プランB→なかよしさくせん
    ・先生→せんせえ
    ・集中→しうちう
    ・勉強→べんきょー
    ・自習→じしう
    ・現金→げんなま
    ・おしゃれ→おされ
    ・ストリクス→すこりすす
    ・梟→すこりすす
    ・裸→すっぽんぽん
    ・ガイコツ→ほねほね
    ・警察→けいさつやさん
    ・フォージャー家→ほーじゃーけ
    ・精神科医→こころのおいしゃさん
    ・豪華客船→ごうきゃきゃくせん
    ・手術室→しゅじゅちゅしつ
    ・医者→おいしゃさん
    ・寂しがりや→さみしんぼ
    ・帰宅→きかん
    ・爆発→どがーん
    ・ハゲ→はげちゃびん
    ・おはようございます → おはやいます  
    ・おはよう → おはやいます
    ・よろしくお願いします → よろろすおねがいするます  
    ・よろしくお願いいたします → よろろすおねがいするます  
    ・ようこそ → いらさいませ  
    ・いらっしゃいませ → いらさいませ  
    ・いってらっしゃい → いてらさい  
    ・行ってくる → いてくる  
    ・悲しい → なみだでる  
    ・楽しみ → わくわく  
    ・楽しい → わくわく  
    ・面白い → わくわく  
    ・ありがとうございました → あざざいまし  
    ・ありがとう → あざざいます  
    ・ありがとうございます → あざざいます  
    ・インペリアル・スカラー → いんぺらるすっからん  
    ・皇帝の学徒 → いんぺらるすっからん  
    ・大丈夫です → だいじょぶます  
    ・大丈夫 → だいじょぶます  
    ・素晴らしい → すぱらしい  
    ・知は力 → ちわわぢから  
    ・上の空 → うえのそら  
    ・ただいま → きかんした  
    ・帰った → きかんした  
    ・ちょっと → ちょびっと  
    ・ちいさい → ちっこい  
    ・いっぱい → たくさん  
    ・切れている → ちょんぱ  
    ・切れてる → ちょんぱ  
    ・汚い → ばっちい  
    `,
    model: openai("gpt-4o-mini"),
});
```

これは結構期待できそう....？

#### 実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737055/a03e3c48-1dff-4929-9a08-e53d7ba67162.png)


おお、これはかなりアーニャではないか！と思いました。
※「こころのおいしゃさん」に相談しても首や肩の痛みは治らない...

せっかくなので、このまま他の質問も投げてみます。

#### 実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737055/bf5af69f-bfe7-41dd-b74b-0359b687492a.png)


めちゃくちゃ変な独り言のようなものを投げてもしっかり返してくれました。
当たり前ではありますが、instructionsの情報量で回答の精度はかなり変わりますね。

## 最後に
今回はMastraのアウトプットも兼ねて、アーニャエージェントを開発してみました。
上記の実行結果以外にも色んな質問をしてみたのですが、結構良い感じに返してくれました。
また、下記のシェフアシスタントエージェントを開発するMastraのガイドを自分の作ってみたいものに代替して作成すると今回のようなものがサクッと作れると思います。

https://mastra.ai/ja/guides/guide/chef-michel

今回の記事も含め、すでに執筆しているMastraの記事ではAgentsについて深く書いてきているので、次回以降はWorkflowsなども取り入れてもっと発展的なものを開発した内容を執筆できたらなと思います。