Skip to main content

SnippetChecker API実行版

SnippetCheckerとは

SnippetCheckerとは、大規模言語モデル(LLM)が生成した断片的なソースコード(スニペット)を、実行前にチェックするためのパッケージです。

SnippetChecker API実行版は、フリーAPI版のSnippetCheckerで、商用非商用を問わず、自由に利用することが出来ます。

ここにあるパッケージは、APIを利用するためのクライアントです。APIそのものは株式会社令和AIによって提供されています。

サービス提供ポリシー

必ずサービス提供ポリシーを読んでから利用してください。クライアントおよびAPIの機能は、すべて「ASIS」で提供されています。株式会社令和AIは該当APIの利用に伴う一切の責任を負いません。

なぜLLMが出力したコードをそのまま実行してはいけないのでしょうか?

ソースコードの生成能力に長けているLLMを使うと、人間の指示を機械が理解可能なソースコードに落とし込むことが出来ます。

そして、そのコードを実行するようにプログラムを作成すれば、人間の自然言語による指示に従う機能を作ることが出来ます。

しかし、LLMが生成するコードは**「本質的に安全ではない」**ため、それをそのまま実行してはいけません。

これは、単にコードが間違っている場合がある、という以上の、セキュリティリスクに関するものです。

例えば、重要なシステムファイルを上書きするようなコードを生成するように、悪意のあるユーザーがLLMに指示を与えるかもしれません。

プログラマーが指定したプロンプト指示を‘上書’きして、悪意のあるコードを出力させる**「脱獄(ジェイルブレイク)」**というテクニックが知られているため、一般に公開するサービスや製品にLLMによる制御を組み込むには、相応のセキュリティ対策が必要になります。

なぜDocker等のコンテナを使用するだけでは不十分なのでしょうか?

コンテナ技術による仮想化は、詳細が不明なソースコードを実行する際に、安全性を担保するためのサンドボックスとして利用されることがあります。

しかしコンテナ化は、コンテナの外側にあるコンピューター環境にアクセス出来なくなるだけで、不適切な制御コードを生成させたり、ハードウェアに危険な行動を取らせたりという‘攻撃’を防御することは出来ません。

多くのコンテナ技術は、あくまで仮想化されたコンピューター環境を提供するだけであり、その中で動くコードの実行結果が、ハードウェア制御などの用途において安全であるかは、別の技術を使って確認する必要があります。

部分コード(スニペット)による制御の例

AIテック&実験サイト

SnippetChecker API実行版の利用準備

AIが生成したコードを利用するためには、以下の3つが必須となります。

  • LLMに入力するプロンプトを事前にチェックする機構
  • LLMが出力したコードを実行前にチェックする機構
  • チェック済みのコードを安全に実行するサンドボックス

3つの要素のうち、1つでも欠けると、AIの生成したコードを安全に実行することは出来ません。

SnippetCheckerは、そのうちのコードの実行前チェックのみを行うパッケージです。

その他の2つは別の手段で実装する必要があります。具体的な手法については、こちらにあるサンプルを参照してください。

インストール

「pip install」でインストールできます。

$ pip install snippetchecker-api

又は

$ pip install git+https://github.com/reiwa-ai/snippetchecker-api.git

正しくインストールされると、サービス提供ポリシーへのリンクが表示されます。

アンインストール

完全に環境から削除するには、パッケージのアンインストールと「~/.snippetchecker」を削除します。

$ pip uninstall snippetchecker-api
$ rm ~/.snippetchecker

SnippetCheckerクラスの作成

>>> from snippetchecker.api import SnippetChecker, SnippetType, LoopType, LoopStructure
>>> c = SnippetChecker()

エラーが出る場合は「~/.snippetchecker」を削除してパッケージを再インストールしてください。

スニペットの判定

SnippetChecker API実行版では、スニペットの種類の判定、コード中で定義されているクラスやパッケージ・関数・変数の列挙、ループの入れ子構造のチェック、コードの実行前チェックを行うことが出来ます。

>>> assign_code = "new_enemy_hp = enemy_hp - my_attack"

>>> short_code = """for angle in range(180):
    camera.move(angle)
    time.sleep(60/180)"""

>>> long_code = """import cv2

# Haar Cascadesを使用して顔を検出する
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

while True:
    for angle in [0, 45, 90, 135, 180]:
        camera.move(angle)

        # 画像を取得
        img = cv2.imread('image.png')
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

        # 顔の検出
        faces = face_cascade.detectMultiScale(gray, 1.1, 4)

        # 道路を監視している角度(0度または45度)で人の姿が検出された場合、
        # カメラをその角度に固定して集中的に撮影する
        if angle in [0, 45] and len(faces) > 0:
            time.sleep(60)  # 1分間その角度で撮影
            break  # その後、再び全周監視ルーチンに戻る

        time.sleep(10)  # 他の角度では10秒間撮影"""

スニペットの種類の判定

おおまかなスニペットの種類の判定を行うには、「determine_snippet_type()」を使います。

>>> c.determine_snippet_type(assign_code)
<SnippetType.LINE_ASSIGN: 2>

>>> c.determine_snippet_type(short_code)
<SnippetType.CODE_SNIPPET: 1>

>>> c.determine_snippet_type(long_code)
<SnippetType.CODE_SNIPPET: 1>

呼び出されている関数の列挙

スニペット内で呼び出されている関数の名前を列挙するには、「enumerate_functions_called()」を使います。

>>> c.enumerate_functions_called(assign_code)
[]

>>> c.enumerate_functions_called(short_code)
['range', 'time.sleep', 'camera.move']

>>> c.enumerate_functions_called(long_code)
['time.sleep', 'cv2.CascadeClassifier', 'cv2.cvtColor', 'cv2.imread', 'camera.move', 'len', 'face_cascade.detectMultiScale']

ループ構造のチェック

スニペット内にあるループの入れ子構造をチェックするには、「find_loop_in_snippet()」を使います。

>>> c.find_loop_in_snippet(assign_code)
[]

>>> c.find_loop_in_snippet(short_code)
[<LoopType.CONSTANT_LOOP: 2>]

>>> c.find_loop_in_snippet(long_code)
[LoopStructure(loop=<LoopType.GENERAL_LOOP: 3>, body=[<LoopType.CONSTANT_LOOP: 2>])]

スニペットの実行前チェック

スニペットの実行前チェックには、「check_formal_assign()」「check_formal_snippet()」を使います。

>>> c.check_formal_assign(assign_code,
                        target_name='new_enemy_hp',
                        safe_function=[])
True

>>> c.check_formal_snippet(short_code,
                         safe_function=['range', 'camera.move', 'time.sleep'],
                         safe_objects=['camera'],
                         safe_modules=['time'])
True

>>> c.check_formal_snippet(long_code,
                         safe_function=['cv2.CascadeClassifier', 'camera.move',
                                        'cv2.imread', 'cv2.cvtColor', 
                                        '*.detectMultiScale', 'len', 'time.sleep'],
                         safe_objects=['camera'],
                         safe_modules=['time','cv2'])
True

これらの関数は、あらゆるPythonコードを確実にチェックするものではありません。

使用を許可するパッケージや関数名は、コード上における名前のチェックなので、実際の実行時に呼び出されるインスタンスの実態を保証しません。そのため、実際のパイプラインにおいては、LLM入力プロンプトの事前チェックと、コード実行のためのサンドボックスが別途必要になります。

お問い合わせ

本パッケージに関するメッセージは、

contact@reiwa-ai.biz

までお問い合わせください。

Metadata

Release files for snippetchecker-api 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for snippetchecker-api 0.1.0
File Size Uploaded
snippetchecker-api-0.1.0.tar.gz 15.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for snippetchecker-api 0.1.0
File Interpreter ABI Platform
snippetchecker_api-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 28.2 kB

Release files / snippetchecker-api-0.1.0.tar.gz

Download URL snippetchecker-api-0.1.0.tar.gz
Size 15.3 kB
Tags Source
SHA-256 checksum
How to use checksums
1546f81d201cc8a2debc9d5e5b52f1ce68ebe423360baa41481ecda07490e8ce
BLAKE2b-256 checksum
How to use checksums
f0801e990d23500a4a5a2cc28d6f3337c619c1114e7bdac320d08483085879d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.8.0 colorama/0.4.4 importlib-metadata/4.6.4 keyring/23.5.0 pkginfo/1.8.2 readme-renderer/34.0 requests-toolbelt/0.9.1 requests/2.25.1 rfc3986/1.5.0 tqdm/4.57.0 urllib3/1.26.5 CPython/3.10.6

Release files / snippetchecker_api-0.1.0-py3-none-any.whl

Download URL snippetchecker_api-0.1.0-py3-none-any.whl
Size 12.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2aafe1dfe1cf471abcdb6ab0869b2e3667f81eb23c32cdde386e23a78cea6c75
BLAKE2b-256 checksum
How to use checksums
d019766596b78fec62dee9da1f004de51059b90fe4035a86468375d49546ad27
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.8.0 colorama/0.4.4 importlib-metadata/4.6.4 keyring/23.5.0 pkginfo/1.8.2 readme-renderer/34.0 requests-toolbelt/0.9.1 requests/2.25.1 rfc3986/1.5.0 tqdm/4.57.0 urllib3/1.26.5 CPython/3.10.6

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page