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

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

LangchainでAgentExecutorを実行した際のOpenAICallbackHandlerによるトークン数が記録されない問題の解決方法

## はじめに

Langchainを用いてエージェントを実行する際、トークン数を記録するために`OpenAICallbackHandler`及び`get_openai_callback`を使用することが一般的です。しかし、特定のバージョン(例:langchain==0.1.11以前)では、トークン数が正しく記録されない問題が発生していました。本記事では、その問題の原因と解決方法について解説します。

## 問題の背景

特定の状況下で、`AgentExecutor`を使用してエージェントを実行すると、トークン数が記録されない問題が発生していました。これは特に`RunnableAgent.plan`で`runnable.stream`が実行される場合に顕著でした。

参考:問題の詳細

– `AzureChatOpenAI`は`langchain_core.language_models.chat_model.BaseChatModel`を継承しています。
– `BaseChatModel`は`Runnable`を継承しており

元記事を表示

VSCodeでpytestが急に実行できなくなった

結論から言えば、使っているpytestがv6と古かったのでv8にアップデートすることで解決しました。

# 何があったか

いつも通りpytestをVSCode上から動かそうとしたら、以下のようなエラーメッセージが出て実行できなくなった。

“`shell
2024-07-12 14:47:16.135 [error] Traceback (most recent call last):
File “/Users/[username]/.anyenv/envs/pyenv/versions/3.8.0/lib/python3.8/runpy.py”, line 192, in _run_module_as_main

2024-07-12 14:47:16.176 [error] return _run_code(code, main_globals, None,
File “/Users/[username]/.anyenv/envs/pyenv/versions/3.8.0/lib/python3.8/runpy.py”, line 85, in _run_cod

元記事を表示

over … ?

djrから送信

元記事を表示

TestTitle

djrから送信

元記事を表示

チャットに投稿したとき → Token Title

djrから送信

元記事を表示

なんでだろう

djrから送信

元記事を表示

解説記事: Modbus RTUを用いたIAI RCONコントローラのPythonプログラミング

こんにちは、今回はPythonを使用してIAI RCONコントローラをModbus RTUで制御する方法について解説します。具体的には、`minimalmodbus`ライブラリを使用して、RCONコントローラに接続し、サーボのオン/オフ、アラームのリセット、原点復帰、ポジション番号への移動を行うプログラムを作成します。また、指定されたポジション番号への移動を繰り返し行い、`q`キーが押されたときにループを停止する機能も追加します。

## コントロールするロボット
![rcp4-main.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/21c3f87f-2acb-96bc-ab94-1f49477344f8.jpeg)

## 使用するライブラリ
– `minimalmodbus`: Modbus RTUプロトコルを簡単に扱うためのライブラリです。
– `serial`: シリアル通信を扱うライブラリです。
– `time`: 時間関連の操作を行う標準ライブラリです。
– `keyboar

元記事を表示

ちょっと変わったハートの関数

**例えばこのような形のちょっと変わったハートのつくり方を紹介します!!**

## 王道のハート
ハートの関数はこちらにたくさん紹介されていました。

https://mathworld.wolfram.com/HeartCurve.html

一番バランスの良いハートは、このような三角関数の組み合わせでつくることができます!
“`python
x = 16 * np.sin(t)**3
y = 13 * np.cos(t) – 5 * np.cos(2 * t) – 2 * np.cos(3 * t) – np.cos(4 * t)
“`
ツイキャス大手配信者のコメント欄をワードクラウドで可視化してみた

# 1. 何がしたいの?

私はよくツイキャス配信をみますが、大手配信者のコメント欄の内容の薄さというか、特に男性ASMR配信者が雑談する時に肯定の「うん」「w」みたいなシャワーコメントしか流れないのがあまり好きじゃないです。というのも、個人的な意見ですが配信は双方向コミュニティーで面白くなっていくものなのに肯定だけで満足できるリスナーが嫌です。大手で多数の人のための配信だから仕方ないかもしれませんが….

というわけで、個人的には「どれぐらい肯定コメントがあるのか=つまらない」だと勝手に考えているのでワードクラウドでコメント欄を可視化することで、配信の質が一目瞭然になるのではないかと考えました。

(※特定の個人配信者を攻撃する意図はないです… あくまで、個人的に面白い配信かどうかを見分けるツールが作りたいだけです)

# 2. 動作環境と使用ライブラリ
Pythonを用いて典型的なWordCloud+janomeの構成でいきます。参考になったnote記事は最後に貼ってあります。

– Mac OS Ventura 13.5
– 使用言語 Python 3.10.0
– ワー

元記事を表示

Pythonを使用してWord文書に行番号を追加または削除する方法

Word文書の行番号機能は、詳細な文書編集や解析に非常に役立ちます。行番号を追加すると、文書の可読性と特定の行を引用する際の効率が大幅に向上し、読者に明確な指針を提供し、不要な混乱や誤解を避けることができます。しかし、文書の編集が完了し、公開や出版フォーマットに変換する際には、行番号が不要になることもあり、読書体験を妨げることさえあります。このような場合、行番号を削除する必要があります。

Pythonを使用してWord文書の行番号を簡単に管理することで、作業効率を向上させるだけでなく、文書の専門性と整然さを保つことができ、さまざまなシナリオに対応できます。本記事では、**Pythonを使用してWord文書に行番号を自動的に追加または削除する方法**について説明し、文書処理作業を簡便にします。

– **[PythonでWord文書に行番号を追加する方法](#pythonでword文書に行番号を追加する方法)**
– **[PythonでWord文書の行番号を削除する方法](#pythonでword文書の行番号を削除する方法)**

本記事で使用する方法には、[Spire.Doc fo

元記事を表示

Mambaforgeからmambaをインストール

condaの代替で,conda-forgeを対象とした,速いと評判のmambaをMambaforgeからインストールしました.WSL2のUbuntu 22.04,九州大学スパコン玄界,東京大学スパコンWisteria-Oで検証済みです.
最初にMinicondaやAnacondaがインストールされている場合はそれをdeactivateし,`.bashrc`等に関連の追記がある場合は削除(コメントアウト)しておきます.

“`bash
cd ~/Downloads
curl -L -O “https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh”
bash Mambaforge-$(uname)-$(uname -m).sh
“`

質問にはすべてデフォルトで答えました.
以下を **.bashrc** に追記します.
“`bash
source “$HOME/mambaforge/etc/profile.d/conda.sh”
sourc

元記事を表示

Git コマンドを自力で再現する

## はじめに

こんにちは!株式会社 BTM の坂本です!

私も含め、エンジニアの皆さんなら毎日使っている技術がありますよね?

そう、Git です。

毎日使っている Git くんが何をしているか知っていますか?
毎日 Git くんに感謝していますか?
バージョン管理してくれるのが当たり前だと思っていませんか?

今回は Git の内部構造について調査しました。
Git くんが機嫌を損ねてコマンドが実行できなくなった場合に備えて対処法を学びましょう。

今回の環境は以下になります。

– Git 2.25.1
– Python 3.11.5

:::note alert
本記事内で.git内のファイル直接変更していますが、実際のプロジェクトで直接操作はしないでください。
:::

## Git オブジェクトとは

Git では Git オブジェクトというものを使ってバージョンを管理しています。[^1]

今回は以下の Git オブジェクトについて、それぞれの概要と実際の中身を見ていきましょう。

– Blob オブジェクト
– Tree オブジェクト
– Commit オブジェク

元記事を表示

MicroPythonにおけるスレッドと非同期処理について

今回はMicroPythonにおける_threadとasyncioについて説明していきます.

スレッドと非同期処理の違いがあります。

どちらも並行処理を行うことが可能です。しかしその用途には注意が必要です。

# スレッド (Threads)
スレッドは、プロセス内で独立して実行される一連の命令です。マルチスレッドプログラムでは、複数のスレッドが同時に実行されることがあります。各スレッドは共有メモリ空間を持っているため、データの共有が容易ですが、その分同期の問題が発生しやすくなります。

特徴:

共有メモリ: 同一プロセス内のスレッドはメモリ空間を共有します。
同期問題: データの競合を避けるためにロックなどの同期機構が必要です。
並行実行: 複数のスレッドが並行して実行されます。
利点:

マルチコアCPUの利用によるパフォーマンス向上。
同一プロセス内でのスレッド間通信が高速。
欠点:

データ競合やデッドロックなどの同期問題が発生しやすい。
スレッドの管理コスト(コンテキストスイッチ)がかかる。

# 非同期処理 (Asynchronous Programming)
非同

元記事を表示

Pillowで図形のアニメーション作成

[Pillow](https://pypi.org/project/pillow
)と[Matplotlib](https://matplotlib.org)を使ってアニメーションをやってみました。
作成する図形はマンデルブロ集合というフラクタル図形にしました。

VSCodeのJupyter Notebookでアニメーション表示することができます。
適当なコードですみませんが、多少コメントを付けて貼ります。

:::note warn
アニメーション&フラクタル図形の計算で処理が重めです。N(画素数)とframes(フレーム数)を減らすと軽くなります。
:::

“`python
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
from IPython import display
from matplotlib import rcParams
from matplotlib.animation import ArtistAnimation

rcParams[‘animation.

元記事を表示

Flask-SQLAlchemy で ER 図を出力する

## はじめに

ある Flask プロジェクトで、データベース (Flask-SQLAlchemy) の ER 図を作成しようとしたところ、設定準備に意外と手間をかけさせられたため、同じ境遇の方や未来の自分の参考になればと思い忘備録を残した。

## 前提

– python: 3.12.0
– flask: 3.0.2
– flask-sqlalchemy: 3.1.1

## 設定

### グラフ描画ライブラリの追加

https://github.com/graphp/graphviz

“`sh
brew install graphviz
“`

### graphviz の python インターフェースパッケージの追加

https://github.com/pygraphviz/pygraphviz

以下のコマンドを実行し、先ほど追加した `graphviz` を python 環境で使用できるようにするパッケージをインストールする。

“`sh
python3 -m pip install –use-pep517 \
–config-settings=

元記事を表示

コピペで学ぶ機械学習

“`
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# Irisデータセットの読み込み
iris = datasets.load_iris()
X = iris.data[:, :2] # 最初の2つの特徴量を使用
y = iris.target

# データセットを訓練用とテスト用に分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# サポートベクターマシンの定義
svm_classifier = SVC(kernel=’linear’, C=1.0, random_state=42)

元記事を表示

PythonのLinterであるRuffの使い方を雑にメモしていく。

### インストール

“`sh
pip install ruff
“`

### 設定方法
https://docs.astral.sh/ruff/linter/

自分はryeを使っているのでpyproject.tomlで以下のように書き込んでいく。
上のリンクにもあるようにruff.tmolも使える。
“`toml
[tool.ruff.lint]
select = [
# pycodestyle
“E”,
# Pyflakes
“F”,
# pyupgrade
“UP”,
# flake8-bugbear
“B”,
# flake8-simplify
“SIM”,
# isort
“I”,
]

“`

### 使えるルール
https://docs.astral.sh/ruff/rules/

以上のとおり。

### VSCodeでの設定方法

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazon

元記事を表示

Pythonで〇×ゲームのAIを一から作成する その97 ゲーム木の生成過程を表示するアニメーション

# 目次と前回の記事

https://qiita.com/ysgeso/items/2381dd4e3283cbed49a0

https://qiita.com/ysgeso/items/7b687d25a4ab300f5865

## これまでに作成したモジュール

以下のリンクから、これまでに作成したモジュールを見ることができます。

| リンク | 説明 |
|:–|:–|
| [marubatsu.py](https://github.com/ysgeso/marubatsu/blob/master/097/marubatsu.py) | Marubatsu、Marubatsu_GUI クラスの定義|
| [ai.py](https://github.com/ysgeso/marubatsu/blob/master/097/ai.py) | AI に関する関数 |
| [util.py](https://github.com/ysgeso/marubatsu/blob/master/097/util.py) | ユーティリティ関数の定義。現在は `gui_pl

元記事を表示

【Pybulletサンプル解説】SAT(衝突検出アルゴリズム)を有効化【satCollision.py】

Pybullet公式gitリポジトリのサンプルコードを解説するシリーズです(一覧は[こちら](https://qiita.com/akinami/items/7b433b60aeb5115ba4d7))。

今回は、satCollision.pyを解説します。(コードのリンクは[こちら](https://github.com/bulletphysics/bullet3/blob/master/examples/pybullet/examples/satCollision.py))

本コードを実行すると、SAT(衝突検出アルゴリズム)の有効化された状態で、オブジェクトが生成されます。

※ SAT(Separating Axis Theorem)は複雑な形状の衝突を検出するのに向いている衝突検出アルゴリズムです。

![satCollision.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2030125/8f1c2788-c58d-9a13-365b-63a60cf83ac6.gif)

元記事を表示

Linter と Formatter について

みなさんは、Linter や Formatter を使用していますか

Pythonの開発では、Linterとして flake8、Formatter として Black などがよく使用される(体感です)と思います。

これらについて考える機会や知る機会が意外となく、実務経験では必須レベルなのに知らない方も多そうなので軽く調査したことを書いていきます。

## 本記事のまとめ
Lint や Formatter をCI/CDに組み込むと幸せになれます!!!

## そもそも Lint, Format is 何?

結論から言うと、自動でコードがベストプラクティスに従ってるか、解析してくれるものです。

例えば、Python では [PEP8](https://peps.python.org/pep-0008/)と呼ばれる、コードを書く際の決まりがあります。
コードは動かすだけなら簡単にかけますが、個々人が好き勝手にいろんな書き方をしてしまうと他の人の書いたコードが読みづらかったりして、今後の開発に差し支えてしまいます。

そこで、コードを書く際のルールを決めたものが PEP8 です。

元記事を表示

OTHERカテゴリの最新記事