開発者向けAI検索エンジン「Phind」を触ってみたので紹介する

じわじわ浸透しつつある**LLM、生成AI、AI検索エンジンを利用した業務支援**。
もっぱら定番なのは、最近Windowsに標準搭載された[Copilot](https://copilot.microsoft.com/)で、私の会社ではシェア率100%と思われる。

実際、今や生成AIなしには仕事ができないほど、その影響は絶大。近頃もっぱらの雑談相手である。

Copilotでも十分実用には足りているのだが、この度[Phind](https://www.phind.com/)というサービスと出会い、利用してみたのでご紹介。

## Phindとは
[Phind](https://www.phind.com/)は、**より開発者向けにファインチューニングされたLLM、及びそれを利用したAI検索エンジンサービス**。

以下[About](https://www.phind.com/about)から引用

> Phind is an intelligent answer engine for developers. Focused on helping you solve challenging problems, it uses generative AI to give you the answer you're looking for in seconds instead of hours. Connected to the internet and, optionally, to your codebase, Phind always maintains the right context.
> --日本語訳--
> Phindは、開発者のためのインテリジェントな回答エンジンです。困難な問題の解決を支援することに重点を置き、生成AIを使用して、数時間ではなく数秒で探している答えを返します。インターネットに接続され、オプションであなたのコードベースにも接続できるPhindは、常に正しいコンテキストを維持します。

Metaがリリースしたコーディング支援LLM 「Conde Llama」をベースにチューニングが施された**Phind-CodeLlama-34B**（以下 Phind-34B）が、本サービスの基幹。
なお使用するLLMは選択可能で、他に「Phind-70B」、「GPT-4」を利用することも出来る（ただし、有料版）。

あとどうやら、コーディング領域においては[GPT-4を上回るらしい](https://gigazine.net/news/20231102-phind-gpt-4/)。

## Phindのいいところ
### アカウント作成が不要、かつ基本利用料が無料
上で少し触れたが、`Phind-34B`を利用する場合は利用料が無料。
さらに、見たところ**回答生成数に制限がない**。
（まあ、Copilotも実質制限ないけど）
Copilotと比較しても、かなり大きなアドバンテージ。

### 回答の生成速度が速い
少し触ってみただけな上に体感の話にはなるが、Copilot、あるいはGPT-4に比べて、回答の生成速度が速い。
また後述するが、回答の生成に先んじて**AIが参考として使用したソースの一覧が提示される**。
回答の生成を待つことなく、概ねの回答の方針を得ることが出来るのはかなりUXがよい。

### ソースの提示が素晴らしい
以下がPhindのUIである。

![Pasted image 20240304165928.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777804/98e2165d-695a-359c-fbfc-545acd25aae0.png)

注目したいのは、右カラムの「SOURCES」。
AIが「何を根拠として」その回答の生成に至ったかを一覧形式で確認することができる。

我々がCopilotを業務支援として利用する場合、結局何らかの形で「ウラ取り」をしないといけない。
ただCopilot（というかGPT-4？）はたまにリファレンスを省略するキライがある。

一方のPhindは、実際回答内に表れているかそうでないかは問わず、回答に関連性のあるソースを提示する。
この点は、業務支援として利用するうえで大変心強い。

## 回答をURLリンクで共有できる
これも、なかなか助かる機能。
実際に出力された回答をURLで共有することが出来る。

共有されたURLから表示されるページは、実際に出力されたものと全く同じもの。もちろん、**SOURCESも同一**。
AIの回答をチーム等へ共有する際、いちいち手で情報をまとめ直さなくとも、そのままURLを貼って済むのはかなりQOL高し。

ちなみに以下は、社内勉強会で「RIGHT JOINって使い道あるの？」という話題が挙がったのでPhindに聞いてみたもの。URLを踏んでもらえばわかるが、実際の回答が完全にキャッシュされており、**さらに会話を続けることも可能**。

https://www.phind.com/search?cache=p9p9uyu1fy0rwfaiydtsi94k

一方、URLで保存されているページにどれほどの永続性があるかは未検証なので、ドキュメント等長く残るもので利用する場合、そのまま使うのは非推奨。

## では実際に使ってみる
上ですでにやっているが、Phindの利用の具体例を挙げる。

**生成AIにIRIS ObjectScriptについて聞いてみよう！** のコーナーです。

> IRIS ObjectScriptとは、RDBMであるIRIS（旧 Caché）を操作するための、MUMPSを前身とするプログラミング言語。要は、マイナーなやつ 

今回はテーマとして「電子カルテ」を挙げ、以下のようなプロンプトを発行した。

```
ObjectScriptを使用し、「電子カルテ」を示すクラスを例示してください
```

結果は以下の通りである。

![Pasted image 20240304165942.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777804/eb1fec52-dca1-ca84-a0c7-c6fa327582e6.png)


```objectscript
Class ElectronicMedicalRecord Extends %Persistent
{
    // 患者のID
    Property PatientID As %String;
    
    // 患者の名前
    Property PatientName As %String;
    
    // 患者の年齢
    Property PatientAge As %Integer;
    
    // 診察日
    Property ConsultationDate As %Date;
    
    // 診察内容
    Property ConsultationContent As %String;
    
    // 診察結果
    Property ConsultationResult As %String;
    
    // 診察医師の名前
    Property DoctorName As %String;
    
    // 電子カルテを保存するメソッド
    Method SaveRecord() As %Status
    {
        // オブジェクトを保存
        Quit $$$OK
    }
    
    // 電子カルテを取得するメソッド
    Method GetRecord() As %Status
    {
        // オブジェクトを取得
        Quit $$$OK
    }
}
```

コードについては普通に無難なものが出力されているようだが、個人的に感心したのはSOURCESの1番目に提示されているソース。
コードだけでなく、「電子カルテ」という**ドメインに対する根拠も提示してくれている**。
GPT-4も裏ではこういうソースを参照しているのだろうが、それを開発者へ示してくれるのはかなり心強く感じる。

## 日本語での受け答え
現在ではかなり改善されているらしいが、日本語での回答生成に若干の不安定さがあるようだ。
少なくとも、ここ数日利用してみた感じでは、不自然な日本語があるようには見えない。
ただし、複雑な回答を求めると、英語で返されることもあるにはあるらしい。

## 余談
:::note alert
（20240305 追記）
以下の余談は、私がPhindに対し`IgnoringSearchResult`を指示していたから発生した現象です。
以下のボタンで切り替えられます。何かの拍子に触ってしまっていたようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777804/755aa559-85c2-4648-5aa7-32bb4e534832.png)

それはそれとして出力は面白かったので残しておきます。
:::
一応雑談もできます。けど、**かなりアホ**。

![Pasted image 20240304172931.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777804/44c43307-50d4-fc3f-4403-68a679fe7e7d.png)

```
ペペロンチーノは、イタリアの伝統的なペペロニアスリーチ（ペペロニアノ・スリーチ）を基にしたもので、その特徴的な風味と香りを持つためには、以下の具材が必要です。

### 主な具材

- **ペペロニアスリーチ**：ペペロニアスリーチは、ペペロンチーノにおける重要な具材です。ペペロニアスリーチは、酢、塩、お酒、干しペペロニオニオ、カプサイシアム、ガラムミン、クルメン、マジェンティノ、ニュートム、クエンターン、ブラックペッパー、オレガノ、サフロンの香料を含む独特の磨かれた粉です。ペペロンチーノの風味と香りは、このスパイスミックスによって得られます。

- **チーズ**：ペペロンチーノの代名詞とも言われるチーズは、ペペロニアスリーチと一緒に使用されます。チーズは、ペペロンチーノのクリーミーな風味と濃厚な味を強調します。

- **肉類**：ペペロンチーノのベースには、通常、牛肉や豚肉が使用されます。肉類は、ペペロンチーノの濃厚な風味と柔らかさを提供します。

### その他の具材

- **干しペペロニオニオ**：ペペロンチーノの風味を作り出すために不可欠な香料です。干しペペロニオニオは、ペペロンチーノの特徴的なピーナットのような風味を加えます。

- **ガラムミン**：ペペロンチーノの風味をより濃厚にするために使用されます。ガラムミンは、ペペロンチーノのクリーミーな風味を強調します。

- **クルメン**：ペペロンチーノに風味を加えるための香料です。クルメンは、ペペロンチーノのクリーミーな風味を強調します。

### 作り方

1. **ペペロニアスリーチの準備**：ペペロニアスリーチを準備します。これは、ペペロニアスリーチの粉を酢、塩、お酒、干しペペロニオニオ、カプサイシアム、ガラムミン、クルメン、マジェンティノ、ニュートム、クエンターン、ブラックペッパー、オレガノ、サフロンと一緒に磨いて作ります。

2. **肉類の準備**：牛肉や豚肉を用意し、炭火で焼いて柔らかくします。

3. **チーズの準備**：チーズを準備し、ペペロニアスリーチと一緒に混ぜます。

4. **ペペロンチーノの作り方**：炭火で焼いた肉類にチーズとペペロニアスリーチを加え、具材を混ぜながら焼きます。ペペロンチーノの風味と香りを得るために、長時間焼いて濃厚にします。

ペペロンチーノを作る際には、具材のバランスを重視し、ペペロニアスリーチを中心に、その他の具材を適切に混ぜ合わせることが重要です。また、焼き方や焼いた時間も、ペペロンチーノの風味と香りを最大限に引き出すために調整する必要があります。
```

なんだペペロニアスリーチて（404）。
**干しペペロニオニオって何**（404）。

### ちなみに
Copilot（GPT-4）はこんな感じ。
```
ペペロンチーノはシンプルながらも美味しいパスタ料理で、基本的な具材は以下の通りです：

- **オリーブオイル**
- **にんにく**
- **赤唐辛子**

これらの基本的な具材に加えて、以下のような具材を追加すると、風味が増して美味しくなります：

1. **アンチョビ**：塩味と深みを加えます。
2. **パセリ**：フレッシュな風味と色彩を加えます。
3. **ベーコンまたはパンチェッタ**：肉感と旨味を加えます。

これらの具材を加えることで、シンプルながらも味わい深いペペロンチーノが作れます。お好みに合わせて具材を調整してみてください。楽しい料理を！
```

GPT-4のほうが必要最低限で、より自然な回答って感じ。
流石にこの辺りは汎用に振ってるGPT-4に敵うはずもなく。

しかし、この結果はむしろ、**Phindがエンジニア向けに良くファインチューニングされている証左**と言えるやもしれない。
（機能が削ぎ落とされた**特務仕様機**って、良いですよね）