モジュール 00 · 第 2 回

開発環境と API キーの準備

uv で Python のプロジェクト環境を整え、DeepSeek の API キーを取得して環境変数に設定し、スクリプトですべて使えることを確認します。通義千問(Qwen)、Kimi、ローカルの Ollama への切り替え方も説明します。

  • 約 30 分
  • 難易度:入門
  • 検証:2026-09-14 deepseek-flash、uv 0.12

コードと実行結果は実際に動かしたときのまま載せているため、コメントと出力は中国語です。

この課を終えると、LLM を呼び出せる Python 環境と、それが使えることを確かめるチェック用スクリプトが手に入ります。全体で 30 分ほどで、ほとんどの時間はアカウント登録にかかります。

Python と uv をインストールする

このコースでは uv で Python 環境を管理します。Python のパッケージ管理ツールで、従来の pipvenv の組み合わせよりはるかに高速なうえ、適切なバージョンの Python もついでにインストールしてくれるので、先に Python を単独でインストールする必要はありません。

macOS と Linux ではターミナルで次を実行します。

curl -LsSf https://astral.sh/uv/install.sh | sh

Windows では PowerShell で次を実行します。

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Homebrew を使っているなら brew install uv でもかまいません。インストールしたらターミナルのウィンドウを開き直して uv --version を実行し、バージョン番号が表示されれば完了です。

pipvenv、あるいは conda に慣れているなら、そのまま使ってもまったく問題ありません。このコースのコードが依存するのはよく使われるパッケージ数個だけなので、どのツールで入れても大丈夫です。以下のコマンドには pip での書き方も併記します。

プロジェクトを作る

コードを置く場所を決めて、プロジェクトのディレクトリを作ります。

uv init --no-package ai-course
cd ai-course
uv add openai

--no-package は「これはスクリプトを置くだけのプロジェクトで、パッケージとして配布するつもりはない」という意味です。このオプションを付けないと、新しいバージョンの uv はパッケージ化用のディレクトリ構成(src/ ディレクトリとビルド設定)を生成しますが、このコースには不要です。

uv init が生成するファイルは次のとおりです。

ai-course/
  .git/             uv 顺手帮你初始化了 git 仓库
  .gitignore        已经写好了该忽略的文件,包括 .venv
  .python-version   这个项目用哪个版本的 Python
  main.py           一个打印 Hello 的示例脚本
  pyproject.toml    项目信息和依赖列表
  README.md

uv add openai を実行すると、さらに二つ増えます。.venv ディレクトリはこのプロジェクトの仮想環境で、openai はここにインストールされます。uv.lock は各パッケージの正確なバージョンを記録しており、他の人があなたのプロジェクトを受け取って uv sync を実行すれば、まったく同じ環境を再現できます。同時に openaipyproject.tomldependencies に書き込まれます。

動くか試してみましょう。

uv run main.py

Hello from ai-course! と表示されれば成功です。

今後このプロジェクトのスクリプトを実行するときは uv run を使います。

uv run python 你的脚本.py

uv run はプロジェクトの仮想環境を自動で使うので、手動で有効化する必要はありません。

pip での書き方は次のとおりで、効果は同じです。

mkdir ai-course && cd ai-course
python3 -m venv .venv
source .venv/bin/activate      # Windows 用 .venv\Scripts\activate
pip install openai

この方法では、新しいターミナルを開くたびに source .venv/bin/activate を実行し直し、そのあと python あなたのスクリプト.py で直接実行します。

なぜ仮想環境が必要か

プロジェクトごとに自分専用のパッケージ一式を使い、互いに干渉しないようにするためです。今日このコースのために openai の最新版を入れても、明日別の古いプロジェクトが旧版を必要とするなら、両方とも問題なく動きます。すべてのパッケージをシステムの Python に入れてしまうと、いずれバージョンの衝突が起き、しかも後始末が大変です。

エディタ

使い慣れたエディタでかまいません。特にこだわりがなければ VS Code に、Microsoft 公式の Python 拡張機能を入れるのがおすすめです。VS Code で ai-course ディレクトリを開いたら、Ctrl+Shift+P(macOS は Cmd+Shift+P)を押して「Python: Select Interpreter」と入力し、.venv の中の Python を選びます。こうしないとエディタがインストールしたパッケージを認識できず、画面中が赤い波線だらけになります。

DeepSeek の API キーを取得する

  1. DeepSeek 開放平台(オープンプラットフォーム)を開き、携帯電話番号で登録してログインします。
  2. 左のメニューから「充值」(チャージ)に進み、少額をチャージします。第 1 部を終えるまでにかかるのはたいてい 1 ドル未満なので、最低額で十分です。
  3. API keys のページで「创建 API key」(API キーを作成)をクリックし、「ai-course」などの名前を付けます。
  4. 生成されたキーをコピーします。sk- で始まり、表示されるのはこの 1 回だけで、ページを閉じると二度と見られません。コピーし損ねたら、削除して作り直せば済みます。

キーを環境変数に設定する

キーはあなたのアカウントのお金そのものです。手に入れた人は誰でも、あなたの残高でモデルを呼び出せます。そこで一つルールがあります。キーは決してコードのファイルに書かない

コードに書くと何が問題なのでしょうか。コードは git にコミットされ、GitHub にプッシュされ、同僚と共有され、質問するためにネットに貼られます。そのどの段階でもキーが外に出る可能性があります。GitHub には公開リポジトリのキーを専門にスキャンしている人が常にいて、漏れたキーはすぐに盗用されます。

正しいのは、キーを環境変数に置き、コードの実行時に読み込む方法です。このコースでは三つの環境変数に統一しています。

変数 意味 DeepSeek の値
LLM_API_KEY キー コピーしたばかりの sk-...
LLM_BASE_URL サービスのアドレス https://api.deepseek.com
LLM_MODEL モデル名 deepseek-flash

DeepSeek の公式ドキュメントにある DEEPSEEK_API_KEY という名前を使わないのは、このコースのコードを複数のサービス間で切り替えられるようにするためです。あとで別のサービスに替えたくなっても、この三つの変数の値を変えるだけで、コードは 1 行も変えずに済みます。

macOS と Linux~/.zshrc(macOS の標準シェルは zsh)か ~/.bashrc(ほとんどの Linux)を開き、末尾に次を追加します。

export LLM_API_KEY="sk-你的密钥"
export LLM_BASE_URL="https://api.deepseek.com"
export LLM_MODEL="deepseek-flash"

保存したら、ターミナルを閉じて開き直すか、source ~/.zshrc を実行します。

Windows:PowerShell で次の 3 行を実行すると、変数がユーザーアカウントに永続的に保存されます。

setx LLM_API_KEY "sk-你的密钥"
setx LLM_BASE_URL "https://api.deepseek.com"
setx LLM_MODEL "deepseek-flash"

setx で設定した変数は今開いているウィンドウには反映されないので、PowerShell を閉じて開き直す必要があります。Windows で最もよくある落とし穴で、確かに設定したのにプログラムが見つからないと言う、という状況になります。

もう一つの方法:.env ファイル

キーをプロジェクトディレクトリの .env ファイルに書き、python-dotenv パッケージでプログラム起動時に読み込むのが好きな人もいます。それもかまいませんが、必ず先に .env.gitignore に加えてください。

echo ".env" >> .gitignore

先に .gitignore に追加し、それから .env を作ります。順番が逆だと、いつかの git add . でコミットしてしまうかもしれません。一度コミットすると、あとで削除しても git の履歴に残ります。そうなったら履歴の消し方を考えるより、プラットフォームでそのキーを削除して作り直すほうが確実です。

確認する

次のスクリプトを check_env.py として保存します。

"""检查三个环境变量有没有设置好,并用一次最便宜的请求确认密钥可用。"""
import os
import sys

from openai import APIConnectionError, AuthenticationError, OpenAI

key = os.environ.get("LLM_API_KEY")
base_url = os.environ.get("LLM_BASE_URL", "https://api.deepseek.com")
model = os.environ.get("LLM_MODEL", "deepseek-flash")

if not key:
    sys.exit("没有找到 LLM_API_KEY。设置完环境变量后,要重新打开一个终端窗口才会生效。")

# 只显示密钥的开头和结尾,避免截图时泄露
print(f"密钥:{key[:5]}...{key[-4:]}")
print(f"地址:{base_url}")
print(f"模型:{model}")

client = OpenAI(api_key=key, base_url=base_url)
try:
    available = [m.id for m in client.models.list().data]
except AuthenticationError:
    sys.exit("密钥不对(401)。检查有没有复制完整、有没有多出空格。")
except APIConnectionError:
    sys.exit("连不上服务器。检查地址有没有写错,或者网络是否需要代理。")

print(f"这个密钥能用的模型:{', '.join(available)}")
if model not in available:
    print(f"注意:{model} 不在列表里,调用时可能会报错或被映射到别的模型。")
else:
    print("一切正常,可以开始上课了。")

実行します。

uv run python check_env.py

私が実行した結果は次のとおりです(キーの中央部分は伏せています)。

密钥:sk-7f...805f
地址:https://api.deepseek.com
模型:deepseek-flash
这个密钥能用的模型:deepseek-flash, deepseek-v4-pro
一切正常,可以开始上课了。

最後の行に「一切正常」(すべて正常)と出れば、環境の準備は完了です。最後から 2 行目は、あなたのキーで呼び出せるモデルの一覧です。2026 年 9 月時点で、DeepSeek は deepseek-flashdeepseek-v4-pro の二つを提供しています。このコースでは標準で deepseek-flash を使います。安くて速く、コースの課題はどれもこなせます。

このスクリプトが呼び出すのは「モデル一覧」の API で、文章を一切生成しないので費用はかかりません。

他のサービスに切り替える

このコースのコードが依存しているのは OpenAI の Python SDK だけなので、OpenAI 互換の API を持つサービスならどれでも使えます。次のサービスにはどれも中国語のドキュメントがあります。アドレスとモデル名は各社の公式ドキュメントに従ってください(2026 年 9 月時点)。

サービス LLM_BASE_URL LLM_MODEL の例 キーの取得先
DeepSeek https://api.deepseek.com deepseek-flash platform.deepseek.com
Alibaba Cloud 百煉(通義千問) https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1。波括弧の部分はあなたのワークスペース ID に置き換えます。完全なアドレスはコンソールからそのままコピーできます コンソールのモデル一覧に従う 百煉コンソール
Kimi(Moonshot AI) https://api.moonshot.cn/v1 kimi-k3 platform.kimi.com
Ollama(ローカル実行) http://localhost:11434/v1/ ollama pull でダウンロードしたモデル名 不要。LLM_API_KEY には空でない任意の値を入れる

注意点が二つあります。

一つ目は、各社の「OpenAI 互換」の度合いが完全に同じではないことです。最も基本的な会話の呼び出しはどこでも使えますが、ツール呼び出し、JSON 出力、ストリーミング出力といった機能は、対応していないモデルがあったり細部が違ったりします。後の課でこれらの機能を使うときに、どれが DeepSeek 固有かを説明します。

二つ目は、ローカルの Ollama は完全に無料でネット接続も不要ですが、普通のノートパソコンで動くモデルは小さく、クラウドの大きなモデルよりはっきり性能が劣ることです。課によっては練習問題ができないかもしれません。まずクラウドのモデルで第 1 部を終えることをおすすめします。ローカルデプロイは第 10 モジュールで詳しく扱います。

よくある問題

スクリプトを実行すると ModuleNotFoundError: No module named 'openai' と出る:パッケージはプロジェクトの仮想環境に入っているのに、システムの Python で実行しています。uv run python ... で実行するか、先に仮想環境を有効にしてください。

「没有找到 LLM_API_KEY」(LLM_API_KEY が見つからない)と出るが、確かに設定した:環境変数を設定したらターミナルを開き直す必要があります。VS Code で実行しているなら、中のターミナルパネルを閉じるだけでは足りず、VS Code ごと閉じて開き直してください。

401 エラー:キーのコピーが不完全か、前後に余計な空白や引用符が付いています。キーがすでにプラットフォームで削除されている可能性もあります。

402 エラー、または残高不足の表示:プラットフォームでチャージしてください。

練習問題

  1. ターミナルで echo $LLM_MODEL(Windows の PowerShell では echo $env:LLM_MODEL)を実行し、モデル名が表示されることを確認してください。
  2. わざと LLM_API_KEY を 1 文字間違えて check_env.py を実行し、エラーメッセージがどうなるか見てください。終わったら元に戻すのを忘れずに。ターミナルで一時的に変数を変えるには、LLM_API_KEY=sk-wrong uv run python check_env.py のように書きます。このコマンド 1 回だけに効きます。
  3. 通義千問か Kimi のアカウントを持っているなら、上の表に従って三つの変数をそのサービスの値に替え、もう一度 check_env.py を実行してください。

確認テスト

1. API キーをコードに直接書いてはいけないのはなぜですか?

コードは git にコミットされ、GitHub にプッシュされ、人に送られます。そのどの段階でもキーが漏れる可能性があり、キーを手に入れた人はあなたのアカウントのお金を直接使えます。環境変数に置けば、コードのファイル自体には秘密が一切含まれないので、安心して共有できます。

2. Windows で setx を使って LLM_API_KEY を設定し、すぐにスクリプトを実行したら、見つからないと言われました。なぜですか?

setx は変数をユーザー設定に書き込みますが、すでに開いているウィンドウは設定を読み直しません。PowerShell(または VS Code 全体)を閉じて開き直せば解決します。

3. このコースが DEEPSEEK_API_KEY ではなく LLM_API_KEY、LLM_BASE_URL、LLM_MODEL の三つの変数を使うのはなぜですか?

サービスを切り替えるときにコードを変えずに済むようにするためです。OpenAI 互換のサービスはどれも、キー、アドレス、モデル名の三つさえあれば使えます。サービスを替えるときは、この三つの変数の値を変えるだけです。