Python関連のことを調べてみた

Python関連のことを調べてみた

ローカルLLM(Gemma 2 2B)で「Structured Outputs(構造化出力)」っぽいことGuardrails AIで実現する

## 概要
Guardrails AI[^guardrails]を用いてローカルLLMの出力を検査&Parseする方法をまとめた記事.

### Structured Outputs(構造化出力)[^structured-outputs]とは
モデルが常に指定されたJSONスキーマに従った応答を生成することを保証する機能でありOpenAIのAPIで提供されている機能

:::note alert
本記事はStructured OutputsっぽいことをローカルLLMで実現する手法を紹介しています. 出力を100%保証するものではありません
:::

:::note warn
Guardrails AIを用いることで期待しない出力の検出や出力のParseが簡単に行えます.
:::
## sample
[Hikakkun/local-llm-structured-output(Github)](https://github.com/Hikakkun/local-llm-structured-output)
## Guardrails AI[^guardrails]とは
ローカルのLLMか

元記事を表示

なんか難しいStable Diffusionをpythonなら簡単に

近年、画像生成AIの流行により、多くの方がStable Diffusionに興味を持つようになりました。しかし、他の画像生成ツールと比べると、Stable Diffusionはセットアップが少し複雑です。そこで今回は、Pythonを使用して簡単にStable Diffusionを使った画像生成を行う方法をご紹介します。

## 準備

Stable Diffusionのような画像生成モデルを使うためには、まず必要なライブラリをインストールし、モデルのファイルをダウンロードする必要があります。以下の手順で進めていきましょう。

### 1. 必要なPythonライブラリのインストール

まずは、Pythonのライブラリ「diffusers」を使用します。これにより、Stable DiffusionをPythonで簡単に扱うことができます。

次のコマンドで`diffusers`をインストールしましょう。

“`bash
pip install diffusers
“`

### 2. Pythonスクリプトの作成

次に、画像生成を行うためのPythonスクリプトを作成します。以下の

元記事を表示

python 3.13+pywin32でExcelを操作してみる

# 目的
python 3.13,0 がリリースされて動作確認ということで
[pywin32でExcelを操作してみる](https://qiita.com/tabizou/items/8e8b03e9b5415e3319c9)
を実行してみたらサンプルコードの xlc.xlLeft が参照不可をいうエラーメッセージが発生
これを解決するためには、パッケージの追加後の処理の項目にあるように
以下を実行する必要がある

PS C:\> python Python313\Lib\site-packages\win32com\client\makepy.py

既存のメモを修正するか迷ったのだけど、修正版を書くことにする
pywin32+Excelの調べものついでに少しだけ触って気がついたことをメモっておく

## 気が付いたこと
軽く検索したときに
“`python
import win32com.client
xl = win32com.client.Dispatch(“Excel.Application”)
“`
を見て以下を連想したんだけど
“`vb
Di

元記事を表示

ABC375回答メモ

# 0.はじめに
 3連休ですが、仕事的に昼夜関係なく木曜日辺りから
 火曜日かそれ以降まで断続的に業務が続いている合間での参戦。
 そんな中なのに難易度が高く、ABしか回答できませんでした。
 CD辺りを復習したいところですが時間がとれなさそうなのでまたいつか・・・。

# 1.A – Seats
 Aからちょっと複雑な問題。
 文字列の3文字目から最後の文字までチェックをループ。
 チェック対象文字が#で1文字前が.2文字前が#の場合に
 回答用変数ansに1を加算していき最後にansを出力して終了。
 3文字目からのループとすることで、2文字以下の時はループを始まらない
 ようにしたのが工夫ポイントでした。

 https://atcoder.jp/contests/abc375/submissions/58673879

# 2.B – Traveling Takahashi Problem
 B問題にしては難しい問題。まぁもうこのレベルまで難易度が上がっただけかもですが。
 とはいっても、距離を求める公式までかいてるので後は単純に
 前の点からの距離を求めて足していくだけ

元記事を表示

Flyweightパターンでメモリ使用量を最適化:文字列の効率的な管理

## はじめに

ソフトウェア開発において、メモリの効率的な使用は常に重要な課題です。特に、大量のオブジェクトを扱う場合や、リソースの制約が厳しい環境で開発を行う場合、メモリ使用量の最適化は不可欠です。Flyweightパターンは、このような状況で非常に有効なデザインパターンの一つです。

この記事では、Flyweightパターンの概要、使用理由、適用シーン、メリット、デメリットについて解説し、Pythonを使用した実装例を紹介します。

## Flyweightパターンとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/050bf7d4-6ffc-15fb-a9b7-88c7a019c260.png)

Flyweightパターンは、共有可能な細粒度のオブジェクトを効率よく共有するためのデザインパターンです。このパターンは、同じ内容を持つ多数のオブジェクトが存在する場合に、それらを1つのオブジェクトとして共有することで、メモリ使用量を削減します。

## なぜFlyw

元記事を表示

PyTorch Dataset と DataLoader の使い方

# PyTorch Dataset と DataLoader の使い方

PyTorchを使うと、データセットの処理や学習データのバッチ処理が非常に簡単になります。その中心的な要素として、`Dataset` と `DataLoader` があります。このチュートリアルでは、これらの基本的な使い方について段階的に説明していきます。

## 目次
1. PyTorchの`Dataset`クラスを使ってデータを準備する
2. `DataLoader`を使ってデータをバッチ処理する
3. サンプルコードを使って実際にデータをロードする
4. `Tensor`データを扱う場合の例

## Step 1: PyTorchの`Dataset`クラスを使ってデータを準備する

`Dataset`クラスは、データを効率的に処理するための基本的な構造を提供します。PyTorchの`Dataset`クラスを継承して、カスタムデータセットを作成します。

以下のコードでは、簡単なカスタムデータセットを作成します。このデータセットは、入力データとラベルを受け取り、それらを効率的にアクセスできるようにし

元記事を表示

ベクトル空間上での進化「進化する、エンコードされた命令」のゲーム。目標コードに到達。

### ロマン ショートストーリー1「進化するコード」
東京の静かなオフィス街にある小さなビルの一室で、健一はパソコンの画面に集中していた。彼は最近AIに関する新しいアイデアに取り憑かれていた。健一はアセンブリ言語の基本命令4つだけを使ってプログラムを自動生成し、それを進化させて問題解決に導くという、一風変わったプロジェクトに取り組んでいた。

「MOV、ADD、CMP、JMPだけで何ができるか…」

彼はキーボードを叩きながら考えた。このプロジェクトの根本的な問いは、たった4つの命令からどこまで有用なコードを進化させることができるかというものだった。無限に広がる可能性を持つ組み合わせの中から、遺伝的アルゴリズムで「最適なプログラム」を見つけ出す。あたかも生命が進化して目的を達成していくように。

健一の机には、コーヒーの空き缶が並んでいた。数時間前に書き始めたプログラムが、彼の仮想空間でひたすら自己改善を繰り返している。そのシステムでは、ランダムに生成された小さなプログラムたちが、まるで小さな生命体のように競い合い、進化していく。

「目標値は42。あと少しだ…」

彼は自分の目標

元記事を表示

【VScode】Python単体テストのカバレッジ表示が簡単にできるようになったよ

# はじめに

3年ほど前にVScode上でのPython単体テストのカバレッジ可視化に関する以下の記事を書きました。

https://qiita.com/moshi/items/21a6ff0a20cd840f71ea

↑記事の投稿時はVScodeで単体テストカバレッジを可視化するために新しく拡張機能をインストールしたり、設定ファイルを手動で編集する作業が必要でした。しかし、2024年10月にリリースされたVScodeのPython拡張機能([v2024.16.0](https://github.com/microsoft/vscode-python/releases/tag/v2024.16.0))から、カバレッジ可視化機能がネイティブサポートされるようになりました。

VScode上のPython開発プロジェクトでとても分かりやすくpytest単体テストのカバレッジ可視化ができるようになったので紹介します。

![vscode_coverage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1

元記事を表示

Swarm Basic フォルダの解説:多機能エージェントシステムの基礎

## はじめに

Swarmは、OpenAIが開発した実験的なマルチエージェントオーケストレーションフレームワークです。このフレームワークは、複数のAIエージェントを効率的に連携させ、複雑なタスクを実行するための軽量で柔軟なソリューションを提供します。

この記事では、Swarmの基本的な機能を示す「basic」フォルダ内の例を詳しく解説します。これらの例を通じて、Swarmの主要な機能とその実用的な応用について理解を深めていきましょう。

Pythonの並列処理ライブラリ「Ray」のメモ

# 前置き
Pythonの並列処理といえば、`threading`や`multiprocessing`、`concurrent`が代表的だが、常々**前置き**が多いのがネックであった。
慣れてしまえば気にならないのだろうが、そう頻繁に使うものでもないので、慣れるまで使うことは少ない。
使うことが少ないので、必要になれば毎回使い方を検索するハメになる。
面倒で仕方がない。

そんな中出会ったのが「Ray」というライブラリ。
並列処理をサポートするライブラリだが、これがまぁ使いやすい。
1. 使うcpuのコア数を決めて
2. 並列化したい関数を`@ray.remote`でデコレートして
3. `ray.get(func.remote(params))`するだけ

たったこれだけで記述できるのが素晴らしい。
皆も使って素晴らしさを体感しよう。

# Rayの使い方
前述の通り、これだけ
“`
1. 使うcpuの数を決めて
2. 並列化したい関数を @ray.remote でデコレートして
3. ray.get(func.remote(params)) するだけ
“`

## インストー

元記事を表示

ディレクリーツリーの可視化

“`python
import os
import streamlit as st

def save_file_list_to_txt(folder_path, output_path=”file_list.txt”):
“””指定されたフォルダのファイルリストを.txtに保存”””
try:
with open(output_path, “w”) as f:
for dirpath, dirnames, filenames in os.walk(folder_path):
depth = dirpath.replace(folder_path, “”).count(os.sep)
indent = ” ” * depth
f.write(f”{indent}└── {os.path.basename(dirpath)}/\n”)
for filename in filenames:

元記事を表示

ABC375をPythonで(A~D)

パナソニックグループ プログラミングコンテスト2024(AtCoder Beginner Contest 375)の解答等の速報的まとめ

https://atcoder.jp/contests/abc375

# A問題
https://atcoder.jp/contests/abc375/tasks/abc375_a

先頭から順番に条件を満たしているか確かめる
“`python:A
n = int(input())
s = input()

ans = 0
for i in range(n – 2):
if s[i:i+3] == “#.#”:
ans += 1

print(ans)
“`
# B問題
https://atcoder.jp/contests/abc375/tasks/abc375_b

スタートとゴールが$(0, 0)$であることに気を付けて距離を足し合わせる
“`python:B
def diff(a, b, c, d):
return ((a – c) ** 2 + (b – d) ** 2) ** 0.5

n =

元記事を表示

灰色コーダーによるABC375振り返り

# 灰色コーダーによるABC375振り返り
よし釣れたこのタイトル使えるの二回だけだったw
なぜかというとac-predictorを見てたら入茶してました
今度入茶記事書きます
さて本題書くか

# A

https://atcoder.jp/contests/abc375/tasks/abc375_a

愚直に全探索した
“`python
N = int(input())
S = input()
r = 0
for i in range(N – 2):
if S[i] == “#” and S[i + 2] == “#” and S[i + 1] == “.”:
r += 1

print(r)
“`
解説URL

https://atcoder.jp/contests/abc375/editorial/11138

# B

https://atcoder.jp/contests/abc375/tasks/abc375_b

そのまんまユークリッド距離を測った
前の数を変数に保存してやると最初の0,0もカバーできる
ジャッジが遅くて笑った
“`pyth

元記事を表示

ABC375振り返り

[前回の振り返り](https://qiita.com/comet725/items/5c69129a9aecc7561517)

今日はABC開催日だったので参加結果を振り返る

https://atcoder.jp/contests/abc375

今週はA,B,Dの3完(1ペナ)

# A

それぞれで条件を満たすかチェック

## ソースコード

“`python:main.py
import sys
def rI(): return int(sys.stdin.readline().rstrip())
def rLI(): return list(map(int,sys.stdin.readline().rstrip().split()))
def rI1(): return (int(sys.stdin.readline().rstrip())-1)
def rLI1(): return list(map(lambda a:int(a)-1,sys.stdin.readline().rstrip().split()))
def rS(): return sys.stdi

元記事を表示

Pythonで三次元散布図を作る方法について

散布図を書くときどんなツールを使っていますか?
2次元の散布図であればExcelを使って、一瞬で作れますよね。
例えば、時間を第一軸に設定して、センサーの値を第二軸に設定する。そうすると、センサーの値が、経過時間と相関性があるのかを一目で確認することができます。

では、もう一軸追加して、センサーを二つに増やした場合どうなるでしょうか?その場合、2次元の散布図で表現するためには、3つの散布図を作成する必要があります。
・第一軸:時間、第二軸:センサ1の値
・第一軸:時間、第二軸:センサ2の値
・第一軸:センサ1の値、第二軸:センサ2の値
このようにそれぞれの相関性を確認すれば、関係性は見えてきます。
ただ、3つも散布図を書くのは面倒ですし、そもそもわかりにくいですよね?

そんな時に便利なのが、3次元散布図です。
その名の通り、二次元に一次元追加した散布図です。具体的には、奥行方向に軸が追加されます。三次元になることで、3つのパラメータを1つの散布図で表現することが可能になります。

具体的にどうやって作るかについてこちらの記事で紹介しています。
コピペでできるようにコードも公開してい

元記事を表示

Autogenを使用した要件定義の作成(Streamlit使用)

# はじめに
最近Microsoftが開発しているAutogenを利用したPOCをしているのですが、その中でSequential Chatsを利用して要件定義を作成するサンプルを作成したので、ここで紹介します。

# 必要なもの
– Streamlit (Webアプリケーションフレームワーク)
– Autogen (pip intstall pyautogen でインストールしてください)
– LLM (今回の例ではLM Studioを使用していますが、OllamaやOpenAIでも利用可能です)
– Model: mistral-nemo-instruct-2407(LM Studio)

# コード例
Streamlitで以下のような感じでコードを作成しています。

“`python
import autogen
from autogen import AssistantAgent, UserProxyAgent
import streamlit as st

class TrackableAssistantAgent(AssistantAgent):
def _proc

元記事を表示

PyTorchでCIFAR10画像認識モデルの実験してみる

# はじめに
PyTorchを使っていろんなパターンのCIFAR10画像認識モデルの実験をし、モデルの構築法や各種手法を学んだので、備忘録として書いておく。

https://github.com/doora1202/CIFAR10

一部のコードの解説をしていきます。
# 目次
1.CIFAR10の仕様確認
2.正規化
3.実験
4.最後に
# 1.CIFAR10の仕様確認
CIFAR10のダウンロードを行います。その際にテンソルへ変換しています。
“`python
from torchvision import datasets, transforms
data_path = “./data”
cifar10 = datasets.CIFAR10(data_path, train=True, download=True, transform=transforms.ToTensor())
cifar10_val = datasets.CIFAR10(data_path, train=False, download=True, transform=transforms.ToTenso

元記事を表示

AI屋さんの LLMに200万トークン全文入力と「ずんだもん」と私 実践編

AI屋さんの LLMに200万トークン全文入力と「ずんだもん」と私 実践編

LLMとvoicevoxとstreamlitとdockerとcloud runで
LLMに200万トークン全文入力 追加学習ずみの専門分野特化のLLMの作り方

まずは、ずんだもん先生のための voicevox サーバーを建てましょう
中身は、pythonの fastAPI で出来ています。

いくつか方法がありますが、簡単です。
dockerコマンド一発です。

docker run -d -p 50021:50021 voicevox/voicevox_engine

イメージ図

![スクリーンショット 2024-10-12 20.15.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237930/87643bdf-fb05-104a-eebd-c172fd5162eb.png)

すると、ローカルにサーバーが完成します。
動作確認でポートを開きます。

http://localhost:50021/doc

元記事を表示

[Python] JSONファイルに日本語をそのまま出力したい

# 背景と課題
“`python
with open(‘test.json’, ‘w’, encoding=’utf-8′) as json_file:
json.dump(“あいうえお”, json_file)
“`
上記のように日本語のテキストをJSONファイルに出力したのち、JSONファイルを開くと下記のように出力された。

“\u3042\u3044\u3046\u3048\u304a”

このように、\uから始まる形式を「**Unicode Escape Sequence**」(以降、UESと呼ぶ)というらしい

# 対応策
– json.dumpの引数にensure_ascii=Falseを設定する
“`python
with open(‘test.json’, ‘w’, encoding=’utf-8′) as json_file:
json.dump(“あいうえお”, json_file, ensure_ascii=False)
“`

元記事を表示

OTHERカテゴリの最新記事