watsonx Code Assistantをハックする！？

![AIProg.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/23c39e0a-597b-2491-7337-11ec7cad6038.jpeg)

# はじめに

どうやら人類はAIの進化の過程の中で遂にプログラム・コードを書かなくなるらしい。。。

https://xtech.nikkei.com/atcl/nxt/column/18/00682/121700173/

確かに、GitHubからは**GitHub Copilot**の次のサービスである**GitHub Spark**が発表され、自然言語でAIと対話することで、プログラム・コードを書くことなくマイクロアプリの作成が可能である、とアナウンスされています。

また、こちらの記事で紹介したStackBlitz社が開発した**bolt.new**は、自然言語でAIと対話することで、フルスタックなアプリケーション開発が可能である事を紹介しました。

https://qiita.com/yanagih/items/7e7433ec3d53ba5612d0

では、もう人間はプログラムを書く必要がないのか？
現実に目を向けると、現時点はその過渡期であるし、まだまだ思い通りのコードをAIに書かせるには課題が多いと私自身は感じています。

とはいえ、個人的な意見になりますが、プログラムを書く楽しさを知っている人にとっては、『プログラム開発をどこまで効率化できるのか』を試しながら楽しんじゃえばいいと思いますし、プログラム言語の習得に挫折した経験をお持ちの方にとっては、『今こそ、再チャレンジする機会』とさえ感じます。

ということで、今あるAIツールを使って、プログラミングを楽しんじゃいましょう:grinning:

# watsonx Code Assistantを楽しんでみる

**watsonx Code Assistant**を初めて聞く、という方にはこちらの記事が参考になると思います。

https://qiita.com/r-nakayamasan/items/c35b62e1096c1dcd7b15

https://qiita.com/c_u/items/c5d8e702297f92c9ad70

# watsonx Code Assistantをハックする
こちらの記事

https://qiita.com/yanagih/items/63fd0ff497bb22fc50bd

にて、[watsonx Code Assistantをずーっと無料で使い続ける方法](https://qiita.com/yanagih/items/63fd0ff497bb22fc50bd)をご紹介しました。

記事は、オンラインマニュアルに記載されている内容を図を使いながらステップ・バイ・ステップで誰でも使える状態を目指したものであり、使用するモデルはIBMが提供するIBM Graniteモデルでした。

今回は、IBMが提供するモデルに限定せず、オープン・ソース・モデルを利用する方法をご紹介いたします。
オンライン・マニュアルには『オープン・ソース・モデルも利用可能』との**記載はない**ので、サポート対象外かもしれませんが、**試してみたら使えた**:interrobang:ということで、『ハックする』と少し大袈裟な表現を使いました。

## 手順1: ollama環境の準備

### [Ollamaのインストーラー](https://ollama.com/download)をダウンロード
私は、homebrewを使って導入しました
```shells:コピペ用
brew install ollama
```
### Ollamaの起動
ターミナルやコマンドプロンプトから
```shells:コピペ用
ollama serve
```

### オープン・ソース・モデルのダウンロード

メタ社の**llama3.3:70b**を使ってみます。
このモデルはパラメータ数が**70b**でありながら、1つ前の**llama3.2 405b**を超える性能を持つと言われているメタ社の最新モデルです。

https://ollama.com/library/llama3.3:70b

別ターミナルやコマンドプロンプトから
```shells:コピペ用
ollama run llama3.3
```

:::note info
初めて使用する場合は、指定したモデルがダウンロードされます。2回目以降はダウンロードが省略され、メモリにロードされます。
:::

『ollama serve』側の画面に、llama3.3のロード状況が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/b18efe91-683b-15c3-715f-fd19bedab566.png)
**Llama 3.1**と表示されるのが気になりますが、バージョンは**2024-12**であり、パラメータ数は**70b**と表示されています。

念の為、別ターミナルやコマンドプロンプトから
```shells:コピペ用
ollama ls
```
と実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/6d1dd15f-dd62-ef50-4666-2747921a5cfe.png)

**llama3.3:latest**が1つしかダウンロードされていない事とllama3.3のパラメータ数は**70b**のみなので、**llama3.3**で間違いないと思います。

エンドポイントの情報が表示され、使える状態になりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/7ca98032-088c-d918-b077-8797ae8aa476.png)

## 手順3: VS Codeの拡張機能をインストールする

Visual Studio Codeにwatsonx Code Assistantの拡張機能をインストールします。

まずはこちらをクリック

https://marketplace.visualstudio.com/items?itemName=IBM.wca-core

watsonx Code Assistantの拡張機能が表示されますので、[Install]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/b013636e-a5b8-3351-3a64-0116eeae7986.png)

Visual Studio Codeが起動し、拡張機能のインストール画面が表示されますので、[Install]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/f6c99a1a-ebad-b4a6-e426-9461172fa11b.png)

このような表示に変わります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/fa637920-2928-24c9-146a-a555efd16069.png)

拡張機能のインストールは以上です。

## 手順4: 設定画面でllama3.3:latestモデルを指定する
VS Codeを起動して、設定画面(Settings)を表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/b42db185-7173-e02c-36ec-1e93b520f0b9.png)

図にある通り、2箇所(③と④)に、『llama3.3:latest』を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/48bd11b2-f859-f535-bdde-31020e10efb7.png)
必要な設定は以上です。

それではいよいよwatsonx Code Assistantを使ってみます。

下図のように、Visual Code Studioの左側のアイコンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/35c83eb1-8054-24f3-a24b-47e52e0ad574.png)

『Welcome, let's get started!』が開きますので、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/8f161da5-0ade-608a-7845-d4475af0ef5f.png)


[Run with Ollama Service]をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/b9f4d697-f8af-680b-bc02-b89126939ac9.png)

[Reload]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/8a127f5e-57f7-ec6d-1eca-71b682f72fff.png)

**「Hi, how can I help you today?」** と表示されたら**成功**です:sunny:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/5510754d-46b9-dfd6-c11d-55e8cdf70087.png)

# レッツ・トライ

## いざ、実行！

それでは早速、リクエストしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/3606f4ac-85c4-01fd-2f25-6a7df32016ca.png)

```shells:コピペ用
引数で渡された２つの整数の最小公倍数を求めるpythonコードを生成してください。
```
**llama3.3:latest**(70b)は私の非力なMacにはかなり重く、回答には1分4秒かかりましたが、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/a6731f17-75eb-ef93-2555-1f46b6041abe.png)

日本語での依頼に対して、日本語で回答を生成してくれました！
また、丁寧にもmathライブラリを使用する場合と使用しない場合の2つのコードを生成してくれました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/f37b327e-2579-5221-3a1c-3845be6f5ed4.png)

おおお、だいぶ便利になったかも:relaxed:

## 生成されたコード

### mathライブラリを使用するコード
```python:コピペ用
import math

def lcm(a, b):
    """
    2つの整数の最小公倍数を計算します。
    
    Parameters:
    a (int): 最初の整数
    b (int): 2番目の整数
    
    Returns:
    int: 2つの整数の最小公倍数
    """
    return abs(a*b) // math.gcd(a, b)

# 例：
print(lcm(6, 8))  # Output: 24
print(lcm(12, 15))  # Output: 60

```

### mathライブラリを使用しないコード
```python:コピペ用
def lcm(a, b):
    """
    2つの整数の最小公倍数を計算します。
    
    Parameters:
    a (int): 最初の整数
    b (int): 2番目の整数
    
    Returns:
    int: 2つの整数の最小公倍数
    """
    def gcd(a, b):
        while b:
            a, b = b, a % b
        return a

    return abs(a*b) // gcd(a, b)

# 例：
print(lcm(6, 8))  # Output: 24
print(lcm(12, 15))  # Output: 60

```
# おわりに

**watsonx Code Assistant**を**llama3.3:latest**(70b)で使う手順を紹介しました。
**ollama**に対応している軽いモデルも使えると思いますので、興味のある人はいろんなモデルを試してみてください。


# 参考

https://xtech.nikkei.com/atcl/nxt/column/18/00682/121700173/

https://qiita.com/yanagih/items/7e7433ec3d53ba5612d0

https://qiita.com/r-nakayamasan/items/c35b62e1096c1dcd7b15

https://qiita.com/c_u/items/c5d8e702297f92c9ad70

https://qiita.com/yanagih/items/63fd0ff497bb22fc50bd

https://ollama.com/library/llama3.3:70b