AI Shell のアップデート - March 2025

# はじめに

AI Shell は、様々な AI エージェントに接続するのに役立つチャット ウインドウを作成するための CLI ツールです。

[前回の投稿](https://qiita.com/tetsuya-ooooo/items/9e3884e8785314eb7f95)から、2025 年 2 月 に「[v1.0.0-preview.2](https://github.com/PowerShell/AIShell/releases/tag/v1.0.0-preview.2)」、2025 年 3 月に「[v1.0.0-preview.3](https://github.com/PowerShell/AIShell/releases/tag/v1.0.0-preview.3)」がリリースされました。

この投稿では、これらのリリースからいくつかピックアップしてアップデート内容をチェックしていきます。

:::note
最新版にアップデートする場合は、以下のコマンドを実行しましょう。

```powershell
Invoke-Expression "& { $(Invoke-RestMethod 'https://aka.ms/install-aishell.ps1') }"
```
:::


# v1.0.0-preview.2

- リリースノート

https://github.com/PowerShell/AIShell/releases/tag/v1.0.0-preview.2

- アナウンス

https://devblogs.microsoft.com/powershell/ai-shell-preview-2/?WT.mc_id=AZ-MVP-5003113


## サードパーティの OpenAI 互換モデルに対する幅広いサポート

OpenAI エージェントで、次のモデルが追加でサポートされました。これらのモデルの多くは、「小規模言語モデル (SLM)」や「大規模言語モデル (LLM)」を **ローカルで実行する** ためのオープンソースツールです。

- [Ollama](https://ollama.com/blog/openai-compatibility)
- [LM Studio](https://lmstudio.ai/docs/api/openai-api)
- [Deepseek](https://api-docs.deepseek.com/)
- [LocalAI](https://localai.io/)
- [Google Gemini](https://ai.google.dev/gemini-api/docs/openai)
- [Grok](https://docs.x.ai/docs/overview#migrating-from-another-llm-provider)

これらのモデルは、エージェントの設定ファイルでエンドポイント、キー、モデル名を設定するだけで使用できます。(アナウンス記事に *openai.agent.json* の[構成例](https://devblogs.microsoft.com/powershell/ai-shell-preview-2/?WT.mc_id=AZ-MVP-5003113#broader-support-for-third-party-openai-compatibles-models)が記載されているので、ご参照ください。)

...ということは、ローカルで実行できるモデルを用いれば、AI Shell がオフラインでも利用できるようになりますね。


## Azure OpenAI インスタンスをより簡単にデプロイする方法

Azure OpenAI インスタンスをデプロイする Bicep テンプレートが追加されました。

https://learn.microsoft.com/ja-jp/powershell/utility-modules/aishell/developer/deploy-azure-openai?WT.mc_id=AZ-MVP-5003113&view=ps-modules


## Azure PowerShell のサポート強化

[Copilot in Azure エージェント](https://learn.microsoft.com/ja-jp/powershell/utility-modules/aishell/how-to/agent-azure?WT.mc_id=AZ-MVP-5003113&view=ps-modules)での Azure PowerShell のサポートについて、以下のような改善が施されました。

### ```Connect-AzAccount``` コマンドを使った Azure PowerShell 認証をサポート

```Connect-AzAccount``` コマンドで Azure に接続した後、AI Shell セッションを開始して Azure エージェントを選択すると、Copilot in Azure につながります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/3980382e-6448-415e-b7c9-7dbb4432832b.png)


### ```/replace``` コマンドが Azure PowerShell をサポート

Copilot in Azure エージェントに質問するとその質問を叶えるコマンドを応答してくれますが、その応答内のパラメーター値の置き換えをガイドしてくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/badcd8e7-416c-4a92-b85f-31c3325e0147.png)

案内どおりに ```/replace``` コマンドを実行すると、パラメーターをひとつずつ置き換えることができます。 ```Location``` パラメーターなどは候補から選ぶこともできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/a9ca5434-c9a3-4b77-8e34-d9bc70205c61.png)

パラメーターの入力が完了すると、このようにユーザーが実行したいコマンドが改めて返ってきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/a834f07d-4ddd-4403-a59e-be27ddf667cf.png)

:::note
```/replace``` コマンドは、Azure CLI でも同じようにサポートされています。
:::


## ネイティブ コマンドのエラー処理の改善

Windows のネイティブ コマンドから返されるエラーをより適切に解決できるようになりました。

たとえば、```dir``` コマンドで存在しないフォルダーの内容を表示してみます。はい、フォルダーが存在しないのでエラーとなりますよね。では、このエラーについてエージェントに解決策を求めてみます。

![20250403_02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/f810157d-6210-48ce-a321-256d677d037c.gif)

```fixit``` ([```Resolve-Error```](https://learn.microsoft.com/ja-jp/powershell/module/aishell/resolve-error?WT.mc_id=AZ-MVP-5003113&view=ps-modules) コマンドレットのエイリアス) を実行すると、AI Shell ペインにエラー内容が送信され、解決策を丁寧に教えてくれます。


## AI Shell を自動的に起動させるには

(これは *v1.0.0-preview.2* で追加された機能ではありませんが、) Windows ターミナルを起動した時に AI Shell セッションを自動的に開始するには、PowerShell プロファイル [^1] を追加します。

[^1]:[PowerShell プロファイル](https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?WT.mc_id=AZ-MVP-5003113)は、PowerShell 起動時に実行されるスクリプト。

PowerShell プロファイルのパスは、```$PROFILE``` 変数で確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/a28f9b88-9687-4a7a-b1e7-0831d926a6eb.png)

:::note warn
PowerShell プロファイルは既定では用意されていないため、```$PROFILE``` 変数のパスに該当するファイルが存在しないかもしれません。そのような場合は、自分で用意しましょう。
:::

そして、メモ帳などのテキストエディターで、次のスクリプトを記述して、```$PROFILE``` 変数で示されたファイルパスに保存します。[^2]

```powershell:Microsoft.PowerShell_profile.ps1
if ($PSVersionTable.PSVersion -ge ([version]'7.4.6') -and
    (Get-Process -Id $pid).Parent.Name -eq 'WindowsTerminal') {
    Start-AIShell
}
```

:::note
Microsoft.PowerShell_profile.ps1 のスクリプトの処理内容
次のすべての条件を満たされている場合、[```Start-AIShell```](https://learn.microsoft.com/ja-jp/powershell/module/aishell/start-aishell?WT.mc_id=AZ-MVP-5003113&view=ps-modules) コマンドを実行します。

- 現在の PowerShell のバージョンが **7.4.6 以上** であること
- 現在のプロセスの親プロセスの名前が **WindowsTerminal** であること
:::

[^2]:特別な理由がなければ「UTF-8 with BOM」で保存しておきましょう。

Windows ターミナルの起動時に「PowerShell」タブを開きたいので、Windows ターミナルの設定を開き、[既定のプロファイル] から「PowerShell」を選択して [保存] します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/7d2520a6-5608-4db0-a9dc-7c8bbe9d6081.png)

これで、Windows ターミナルを起動すると、自動的に AI Shell セッションが開始されます。

![20250403.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/ddc7b18d-d137-45ef-8900-9e42ba3275a1.gif)


# v1.0.0-preview.3

- リリースノート

https://github.com/PowerShell/AIShell/releases/tag/v1.0.0-preview.3

## インストールする AI Shell のバージョンを指定

バージョンを指定してインストールするには、次のように ```install-aishell.ps1``` をダウンロードして、ローカル上で実行したらできました。

```powershell
# スクリプトをダウンロード
Invoke-RestMethod -Uri 'https://aka.ms/install-aishell.ps1' -OutFile 'install-aishell.ps1'

# ダウンロードしたスクリプトをバージョンを指定して実行
.\install-aishell.ps1 -Version 'v1.0.0-preview.3'
```

なお、```Version``` パラメーターで指定するバージョンは、タグの名前を指定します。
以下のページをご参照ください。

https://github.com/PowerShell/AIShell/tags


# さいごに

どれも魅力的な内容で、とてもワクワクしました。:blush:
今後のアップデートに期待しましょう！ :rocket: