oncurrent.interpreters
ここは、このセクションの内容とは直接関係なさそう。まとめとかに入れた方がいいのでは
oncurrent.interpreters
ここは、このセクションの内容とは直接関係なさそう。まとめとかに入れた方がいいのでは
では
メソッドでは
注釈
(´・∀・`)へぇ〜
計算を軽くしてタスク数を増やし、転送コストが目立つケースを見てみましょう。
これって一つ前の起動コストが時間には含まれていないんですか?
起動コストは4ワーカーのみだから一つ前とおなじくらいってことなのかな?ちょっとぱっと見どこをどう計測しているんだろう?って思った
ほぼ
起動コストはほぼ
では
ではプロセス生成がない分
とか書いてもいいかも
Mac
MacBook Air
でもいいかなと
C拡張のグローバル状態の問題を避けたい場合や、メモリ空間を完全に分離したい場合
これが具体的にどういうパターンなのかを教えてくれるとうれしい。
私の理解は基本はThread→CPUバウンドならInterpreterでいいかなーと思っているので
7
なんでここ7なんだろう。とくに意味のある数値ではないと思うけど
使ってみる
使用する
とかでよいのでは
独立したGIL
独自のGIL、と、独立したGILという似ているけど異なる表現であることに意味はあるのか。同じものなら表現を合わせたい
独自のGIL
独自のGILとGIL Bという表現の違いはあとでわかる?
意味的にはどちらも独自のGILと言えるかなとおもったので
プロセスより軽量
表現を合わせて「起動コスト小」とかの方がわかりやすいかなーと
てい
トル
Python 3.14で追加された
最初の段階で「◯◯をするための機能」みたいな簡単な説明があった方が読みやすいかなと思いました
title='Pythonで始める
見にくいので改行を入れてほしい派
(みやすくするために改行を入れてます、的な
記事情報のリストを
ここにもArticleInfo ArticleListを書いておくと、ほしいデータとコード上のPydanticモデルの関連が把握しやすくなるかなと
安全
ここの「安全」も気になる
Pythonを安全
Pythonを安全に活用しているわけではないのでは
Pythonを拡張して型安全なLLMアプリを作成する
みたいなイメージ?
python example_5.py
横スクロールしないと一番みたい結果がみれないので、改行して表示して欲しい
いうの
という機能
とか?「というのが」は口語的なので
itleやauthorは
コードでの出現順にあわせて、この項目が最初に来て欲しい
alidate_url_format(
docstringを書いて欲しい
example_4.py
他に併せるなら、このコードは article_common_strict.py みたいなファイルにした方がよいのでは。
で、example_4.pyではそれをimportして使用する
安全
これも安全という表現が適切か気になる。
LLMからのデータをバリデーションして、ルールに則ったデータのみを取得できます。
とか
モデル
Pydanticモデルの
スキーマを直接指定
スキーマとしてPydanticのモデルを
とか
example_2.p
article_common?
での実装
で◯◯を実装する
みたいに言いたい
安全
安全っていうとどちらかというと、情報が漏れるとかそういう話を想像する。
ここで言いたいことは指定した構造のとおりのデータを受け取れるということを言いたいんだと思います。
LLMから適切に構造活かしたデータを受け取る?とか??
text={ "format": { "type": "json_schema", "name": "ArticleList", "schema": schema, } },
ここでOpenAIのAPIに対して「このスキーマに従って構造化したデータを返してね」としているので、その説明がコメントでほしい
schema = make_strict_schema(ArticleList.model_json_schema())
もうちょい説明が欲しい
PydanticのモデルからJSONスキーマを生成し、そのスキーマで必須の項目(?)対してOpen AIでの◯◯のためにadditionalProperties: falseを追加する?
「additionalProperties: false」がないといけないというドキュメントへのリンクもあるといいなぁ
with open(html_path, encoding="utf-8") as f: SAMPLE_HTML = f.read()
Pathオブジェクトからは以下で読み込む派
SAMPLE_THML = html_path.read_text(encoding="utf-8")
APIだけで試してみる
APIでの構造化出力を試す
の方がわかりやすいかなと
プロバイダーに
◯◯プロバイダーと呼びたいけど、なんだろう。 生成AIのAPIプロバイダー?
3.14未満
https://pypi.org/project/pydantic-ai/ 3.14に対応してそう?
「パッケージマネージャーの導入 ─ uv」「静的コード解析ツール ─ Ruff」「構造的パターンマッチ」「一歩進んだ型ヒントの活用」「テンプレート文字列リテラル ─ t-string」「コマンドラインツール – click」「TOMLファイルを扱う – tomllib」「非同期に対応したHTTPクライアント ─ HTTPX」
節タイトルそのままだ冗長かなと思いました。
パッケージマネージャーuv、とか、HTTPクライアントHTTPXとかでいいかなと
版
トル
、
「」が区切りになるので「、」はなくてもいい派
節
節、トルでもいいのでは
前述のように
トルでも意味は通じそう
もの
機能
かなぁ
このなか
ドキュメント
ほとんどの
今見たら3.14の翻訳率は50%くらいだったので「多くの」くらいがよいと思います
はじめに
生成AIが台頭している今のタイミングで本書を手に取る意味、みたいなことは書かなくてもいいかなぁ。 普遍的な知識をつけるとか?
rules = TextFileKnowledgeSource(file_path="writing_rules.txt")
ここにコメントが欲しい
マネージャー LLM が各 Agent の成果物を確認し、妥当性をチェックしたうえで最終結果としてまとめる
これは具体的になにをやっているのかちょっとわからなかったです。
最後のブログ記事の内容を確認して、もともとのタスクの依頼内容を満たしているかをチェックしている? 満たしてなかったらどうなる?
マネージャー LLM がタスク全体を把握し、実行計画をたてる
ここもうちょい具体的に書いてくれた方が、コードをもとにCrewAIがなにをやってるか明確になると思いました。
タスク全体をTaskの内容から把握し、実行計画を立てる。実行計画では◯◯調査、◯◯調査を実施し、その結果をもとにトレンド分析し~~
書くAgentの役割や能力を踏まえ、各タスクを以下のように額Agentに割り当てる
◯◯調査、◯◯調査: データ収集専門家
みたいな
(
閉じ括弧がない。このカッコ不要そう?
LLM やそのバージョンによって異なるため
この説明だとLLMのバージョンが同じだったら同じ結果が返ってくると読める。
実際には実行するたびに微妙に違う結果が返ってくるのでは?
kickoff()
kickoff()メソッド
kickoff()は等幅フォントにしたい
。
デフォルトでは~~の説明が欲しい
一般向け
一般の読者向け
とか
トレンド
トレンド情報
かな
pip install "crewai[google-genai]" python-dotenv
そういえばコードに全体的にキャプションを入れたい
調査→分析→検証
これ、後の方に出てくるストーリーと同じですか?違ったら合わせて欲しい
。
実行したあとに幾つかログが抜粋で表示されていると、処理内容がイメージができていいかなと思いました。
次の行に「ログには主に以下の情報が」と書いてあるので、ログの例がほしいと思います
。
最初の例をYAMLも使った構成で書き直すとこうなります。 みたいなのが見れるとうれしいなー
各専門 Agent が Task 完了後に結果を マネージャー LLM に報告し、マネージャー LLM が最終成果物をユーザーに提出する
シーケンシャルな場合との違いがあまりピントこなかったです
# .env ファイルに環境変数を設定 OPENAI_API_KEY="your-openai-api-key" SERPER_API_KEY="your-serper-api-key"
MUST: これだとコマンドラインで環境変数を設定しているように見える。コードブロックを分けた方が良い
ツール
ツールの説明がここまであんまなかったので唐突に感じる。
します。
箇条書きは「だ、である」派
。
これも、先にどういう構成なのかを説明して欲しい。 図で示せるとわかりやすいかも。
task-attributes
tableが壊れとる...
List[BaseTool]
list[BaseTool] 派。BaseToolってなに?
Union[str, LLM, Any]
str | LLM | Any 派
Anyありなんかい!!
以下に
話が急に飛んでいる。
一度見出し「◯◯の主な引数」みたいなのを挟み
Agent、Task...には◯◯をするためにさまざまな引数があります。 以下に~~
見たいな文章がほしい。
。
SHOULD: コードの前に、どういうことをさせようとしているかの説明分がほしいです。 以下のコードのコメントを読めばわかるとは思うんですが、先に説明してからコードを読む方が、スムーズに理解できるかなと思いました
たとえばこういう感じかなと
最新のAI技術に対してわかりやすい記事を書くという目的で、調査員とライターの2人のメンバーがいて、調査員の調査した内容を元に~~~
dotenv
dotenvが必須かなと思ったけどそうじゃなくて環境変数を.envファイルに書きたいから使っているだけですよね。
ここでは環境変数を.envファイルに書いて~~~のためにdotenvを使用します。
みたいな説明がほしいかなと思いました
しています。
ここも箇条書きにするなら文体を揃えたい
本記事では触れませんが、より高度な制御をすることが可能です。興味のある方は以下を参照してください。
nits 箇条書きだと「体言止め」で文体が違うので、ここは普通の文章にした方がよいかと
選択肢オプションとして特定の拡張子を指定
ここも書き換えてください
以下の
1つの文で「以下」が連続しているので、こっちはトルでも意味が通じるかな。
ファイルパス引数として存在することを確認
上の文章と似た内容だけど微妙に情報が増えて箇条書きになっている。この箇条書きでなにを伝えたいかを直前に文章で書いて欲しい。
以下は〜〜です。 以下に〜〜を示します。
みたいな
click.Choice(["txt", "md"]
例なのでしょうがないけど、自分でファイル名を指定しつつ、拡張子も指定するというコマンドは、オプションの用途としてピンとこないなと思いました。
何か数え方のルールとかを変えられるといいんだけど。文字数でカウントするかバイト数でカウントするか、とか
required=
これも = をトルでいいと思う
default
キーハード引数を示すときに = って付けるのあんまり見たことないので、トルでいいと思います
。
nits: 表の文章は最後の。はトルでいいかなぁ
@click.command()
キャプションがない。
以降も同様
pass
ここに中身を入れて、実際に動作させた例がほしい
指定
オプションに値が
とか?
は
トル
オプションの後に値を指定しない。
これはコマンドで呼び出すときの話ですよね?ちょっとこの文章だけだと意味が取りにくい
長い形
「短縮形」と「長い形」という表現がいまいちだなと
短いオプション名と長いオプション名とか?
短縮形
表でまとめた方が見やすそう
例えば、--nameオプションは名前を指定するために使用されます.
これはなんか--nameは名前を指定するためだけにしか使われないように読めるので、ちょっと違うかなと。
例えば、名前を指定するための--nameオプション、などです。
とか?
テストを安全に出力することができる
ちょっと意味が分からなかったです。
:caption: clickの基本的な使用例 hello.py
なんか変。以降もcaptionになってない
あ
が
--help
これもバッククォートで囲む
などを
などのデコレーターを
サードパーティ製パッケージ
外部ライブラリ
にしたんじゃないっけか
作成
を作成
。
argparseについては「<project:#argparse>」を参照してください。
とか入れて欲しい
モジュール
標準ライブラリの、と書いてあるのでモジュールはトルでよいかと
@click.command()
バッククォートで囲んで欲しい
os.process_cpu_count()
バッククォートで囲んでほしい
free threading
毎回太字にしなくてよいかと。初出の時だけでよいのでは
Python 3.14
Python 3.13からサポートされていますが、ここでは3.14のことしか書かない?
https://docs.python.org/ja/3.14/howto/free-threading-python.html
コア開発者のモチベーションとしては
これはどこ情報なのか、が気になりました
完全に分離
完全に分離、とはどういう意味かがわかりにくい。
なにから完全に分離しているのか
サブインタプリタ
表記揺れ: インタープリター
実行環境のCPU数(os.process_cpu_count()が返す値)+4と32
CPU数(長い文章)+4、と書いてあるのでそれがまとまりだとわかりにくいと思います。
(os.process_cpu_count()が返す)実行環境のCPU数+4と32のどちらか
だと読みやすいかな
未取得結果の最大件数を指定し、指定しない場合はすべての要素が即座にスケジューリングされる
この表現ちょっとわかりにくいかなと思いました。
buffersizeが指定されると、その数のプロセスやスレッドなどがスケジュールされ、それ以外は待ちとなる、ということですよね。
「未取得結果の最大件数」という表現がわかりにくいなと思いました
...
インデントがずれている
un(coroutine, *, debug=False)
引数が増えているので確認してください
補足
捕捉
引数で受け取ったsecの秒数
コードを書き換えたのでこのコメントは正しくない
asyncio.run(coroutine, *, debug=False)
https://docs.python.org/ja/3/library/asyncio-runner.html#asyncio.run
3.12からloop_factory引数が増えてる
... # 時間のかかる処理
インデントが3文字になっている
複数組み込んでも
なにを複数組み込むのか?
実施
ruff checkとruff formatを実施
とか。なにを実施するか書いて欲しい
各種CI
pre-commitはCIじゃないかなー
各種ツールでruffを使用する方法、とか?
に行っておくと便利です。
日本語がなんか変です。
で行(おこな)っておくと?
それだけで
引数無しで
それだけで
引数無しで
quote-style = "double" # 文字列をダブルクォートで統一する indent-style = "space" # インデントはスペ
これデフォルト設定だからなー。 クォートをシングルにできるけど、設定なしの運用でいいんじゃない?みたいな記述がいいかなーって思ってます。
"
カンマを付けたい派
。
これはストーリーとしては、この前に ruff check --fix を実行していないといけないので、そのように手前で実行している必要がある
import sys import os
使われていないモジュールだとF401が出ちゃうのでisortの意味がない(fixできない)
無理やり使うモジュールを入れましょう
datetimeとかなにかをいれてメッセージに追加する感じで
)
文章(文章)。
が正しい書き方(のはず)
。
トル
なお
この手前でfixされたあとのexample.pyを表示して、import osが削除されていることを確認したい
す
す。
F系
系なくてもいい派です
またはruff.toml
下の設定例だとpyproject.tomlなので
前述の設定ファイルを用いて、にしてコードのキャプションに「説明 - pyproject.toml」とか書くのはどうでしょうか
check
checkコマンド
とか
ルールコードの
長いので、トルでも通じるかなと
表のタイトルを入れてください。
https://myst-parser.readthedocs.io/en/latest/syntax/tables.html#table-with-captions
と
と、
ここで、を打たないと「一部のルール」がFにもかかっているように読める。
もしくはE系の一部とF系のルールが
とか
flake8
Flake8 (以下同様
flake8
Flake8と最初は大文字かなと
indent-width = 4 # インデント文字数
同様にデフォルト設定っぽいものは除外して必要最低限にしてほしい
indent-width = 4 # インデント文字数
デフォルト設定を設定例に書いているのが気になります。
デフォルト設定はここにあることを示して、設定ファイルとしては必要最低限の記述例でいいかなと思います https://docs.astral.sh/ruff/configuration/
フォーマッター
整形
他の箇所と表現を合わせる
が記述されます。
を記述します。
前の文は主体が自分だったので
Ruffは、Astral社https://astral.shから提供さ
他のライブラリとかでuvを使ったインストールには触れていないので、ここはなくてもいいかなぁ
Resolved 29 packages in 11ms Installed 27 packages in 58ms (省略) + pytest-cov==7.0.0 (省略) + sphinx==9.0.4 (省略)
ここも両方指定した場合と同じとか、まるっと省略してもいいかも
olved 29 packages in 13ms Uninstalled 20 packages in 200ms Installe
このへんも2回目以降は省略しちゃってもいいんじゃないかな
uv venvコマンド以外に仮想環境を作成できるコマンド
いいと思います
、
や
する
箇条書きで体言止めと、だであるが混ざっているので、どちらかに統一したい派
uv pip list # パッケージ一覧を表示
ここまでの手順を再実行すると多分この結果は得られないはず。手前で環境作り直すとかした方がいいかも?
ampleprojectが削除されている
依存ライブラリも一緒に削除されているのがポイントかなと
uv.lock
uv lockコマンド
依存関係
こっちはまだ依存関係という言葉が残っている。タイトルと表現を合わせたい
uvで
ここはuv の節なので、「uvで」はなくてもいいかなと思った。他も同様
現在インストールされているPython環境の一覧を出力する
インストール可能な一覧とインストールされていたらその場所を出力している
現在インストールされているPython環境の一覧を出力する
インストール可能なPythonの一覧を出力する。が正しいです
List the available Python installations
コマンド名
uv pythonがない
ファイル名
README.mdも説明した方が良いのでは
ディレクトリもあるので「名前」としたい
ファイル、ディレクトリ
2回目は冗長なので「ファイル群」とかでよいかと
uvの主なコマンド
本書で紹介するuvのコマンド
でいいかな。主なというよりはこの書籍で紹介するものを列挙していると思うので
0.9.17
最新版の0.9.17
アンインストール
addは追加するだけどremoveはアンインストールするなので表現が揃っていない。 追加/削除 or インストール/アンインストールに揃えて欲しい
は
が
の方がいいかなー
uvx
uvx とバッククォートで囲みたい。以下同様
サードパーティ
外部パッケージによって提供されるツール
とか?
sample-script
.pyはつけない派?
PEP 723[4]
PEP 723で提案されたけどPyPA関連はのちのち変わっていくので、仕様としてはこちらを参照するのが適切です。
(PEPドキュメントの先頭にもそう書いてある)
https://packaging.python.org/en/latest/specifications/inline-script-metadata/#inline-script-metadata
サードパーティ
外部
。
この手順よりは、新規にディレクトリ作成、uv init実行した後に、pyproject.toml, uv.lockだけコピーしてuv sync実行するみたいな手順がいいのではと思った。
実際のユースケースに合わせる
。
uv pip installした場合はuv addと違ってpyproject.tomlとかuv.lockが更新されないということを書いた方がいいかなぁ
名
名を
uv.lockの更新があるかを事前に調べる
pyproject.tomlの設定を見て、今のuv.lockファイルに存在するパッケージのままか新しいバージョンが存在するかを調べる。
みたいな意味合いだと思います。
あと、これってどっちかというと hoge>4.0.0 とかかいていて、hogeの最新バージョンがでているか(pip list -O)みたいな使い方がメインかなと思ったんですが、そうではない?
pyproject.tomlを書き換えたのはここで例として示しているために必要なだけど、本来はpyproject.toml書き換えたらuv syncの方を使うかなと思ったので(uv 素人なのではずしてたらすいません)
uv.lock
uv.lockファイル
計測にはUnix系OSの標準コマンドであるtimeコマンドを使いました。
トルでもいいかな(あってもいいけど)
uv.lock
uv lock
uv.lockコマンド
uv.lockファイル
uv.lock
uv.lockファイル
(省略)
ハッシュの例はハッシュ値を省略しつつ1行くらいは載せて欲しいかな
ます。
てインストールします。 pyproject.tomlにはdevというセクション(?)が追加され~~
みたいな文章がほしい。
。
このときもpyproject.tomlの中は書き換えられるよ(ですよね?)とか説明があっていいと思う
依存関係にある
依存関係というよりも、「さきほど追加したパッケージが」とかいう説明でよいのではないか
Pythonパッケージがイ
pipコマンドと同様に、とかあってもいいかも
PyPIからダウンロードしてインストールされていることとか触れて欲しい。
依存関係を管理する
依存関係を管理するってちょっとイメージしにくいかなと思いました。
プロジェクトで使用するライブラリを管理する、とか?
実行後
コマンド実行後
利用できますが、
一文が長いので「利用できます。」で一度切ってもいいかも
もう一つの方法として
なにももう一つの方法なのか
仮想環境下のPythonを実行するもう一つの~
とか?
は
に
の方がいいかな
uv-example
さっきとは異なるディレクトリに作ったと言うことですかね。手順で mkdir uv-example がないのでちょっと混乱するかも
は
では
。
◯◯な場合に仮想環境を再作成します。
みたいな用途にも触れてくれるとうれしいなと思った。
「A virtual environment already exists at `.venv`. Do you want to replace it? [y/n]」という
長いし、トルでも意味は通じるかなと
確認するメッセージが表示されます。
を
コマンドを
では、
で
でよさそう
。
仮想環境を有効化した場合は、プロンプトにプロジェクト(ディレクトリ名)が表示されることにも言及して欲しい。
venvは作成したvenv名がプロンプトで表示されていたので
システム
ここで段落を変えてもいいかな
いないません。
typo: いません
.venvディレクトリが作成される
手順にlsを入れるといいかなと。 venvの方にはあった
。
uvで作成する仮想環境は、基本的にvenvで作るやつと同じだよ、みたいな説明がほしいかな
uv-example-script
.py は付けない?
てプロジェクト
Pythonプロジェクト
とか最初は書いておいた方がいいかなと
uv init
この手前に全体を俯瞰したいので、uvで提供しているコマンド一覧がほしい。
全部紹介しないなら、そのうち本書ではこれを紹介するよ、とか言ってほしい
。
これを紹介しているので、あえてバージョン指定してのインストールは教えなくてもいいかなと
特定のバージョンのuvをインストールする場合は
これ必要な場合ってありますか?説明しなくてもいいかなと思った
True
nits: コメントでどういうチェックを有効にしたかかいてあるといいかも
起こし
起こり
したりとすると
したりすると
の
トル
Key/value pairs within tables are not guaranteed to be in any specific order.
日本語訳も併記して欲しい