メディア保存
ナレッジベースは知識とリンクを保存し、Cloudinaryは大きなファイルを保存します。保存のたびに、開けるリンクと kho-media.md の1行が生成されます。
優先順位: セッション内のユーザーの発言、次にナレッジベースのルールファイル、最後にこのスキル。
初回セットアップ(ナレッジベースに kho-media.md がまだない場合のみ実行)
-
ユーザーがすでにCloudinaryアカウントを持っているか尋ねます。持っていない場合は、cloudinary.com にアクセスし、無料プランに登録し、API Keysセクションを開いてCloud name、API Key、API Secretを確認するよう指示します。
-
コードはナレッジベースのルートにある
.envファイルに保存します。ナレッジベースに.envがまだない場合は、以下の3行で作成します。すでにある場合は、不足している行を追加し、他の行は変更しません。マシン上にこれらの3つのコードを含む別のファイルがすでにあり、ユーザーがそのファイルを使いたい場合は、.envの代わりにそのファイルパスを記録します。CLOUDINARY_CLOUD_NAME= CLOUDINARY_API_KEY= CLOUDINARY_API_SECRET= -
ナレッジベースがGitで管理されている場合、
git check-ignore -q .envを実行します。無視されていない場合は、続行する前に.envを.gitignoreに追加します。.envがすでにGitにコミットされている場合は、処理を停止してユーザーに通知します。 -
.envを開き、ユーザーに指示します:Windows ではnotepad .env、Mac ではopen -e .env。ユーザーに 自分でコードを=の後に貼り付け、スペースや引用符を追加せず、保存するよう依頼します。チャット欄には貼り付けないでください。API Secretは金庫の鍵のようなものです。これを持つ人は誰でもすべての画像を削除または変更できます。 -
ユーザーが完了したと報告したら、3行すべてに値が入っていることを確認しますが、値が入っているか空かのみ確認し、値自体は表示しません。
-
このファイルの最後にあるテンプレートに従って
kho-media.mdを作成し、コードファイル名(コード値ではなく)を記録します。index.mdに行を追加します。 -
テスト用の画像を1枚提供してもらい、以下の手順を実行し、リンクを送信します。リンクが開ければセットアップ完了です。
保存手順
1. クラウドにアップロードする必要があるか
画像の使用場所を確認します(明確でない場合)。
- 公開リンクが必要(ブログ記事、メール、ボット、ドキュメント、他のプラットフォームで構築したページ):続行。
- Webサイトに専用の画像フォルダがあり、そこから画像を読み込んでいる場合:アップロードしないでください。2つのバージョンで不一致が生じるためです。代わりに、その画像フォルダにコピーし、適切な名前を付けることを提案します。ユーザーが同意した場合のみコピーします。ここで停止します。
- ドラフト、テスト、一時的なスクリーンショット:ローカルに保持し、その理由を説明します。疑わしい場合は、「これはどのような目的で使用しますか?」と尋ねます。
2. 重複がないか
kho-media.md で名前と目的を検索します。すでに存在する場合は、既存のリンクを提供し、新しいバージョンをアップロードするかどうかをユーザーに尋ねます。ユーザーが単にリンクを探しているだけの場合は、ここで回答して停止します。
3. 個人情報が漏洩していないか
公開リンクは、リンクを知っている人なら誰でも閲覧でき、拡散された後は完全に回収するのが困難です。画像の内容を確認します。顧客の顔や名前、子供、電話番号、口座番号、身分証明書、プライベートメッセージなどが含まれている場合は、何が見つかったかを明確に伝え、ユーザーに本当にアップロードしてもよいか確認します。
4. フォルダに分類し、名前を付ける
| フォルダ | 内容 | リンクの記録先 |
|---|---|---|
kho-media/thuong-hieu | ロゴ、ポートレート、カバー画像、ブランドアイデンティティ | ブランドページまたはプロフィール |
kho-media/san-pham/<ten-san-pham> | 製品画像、モックアップ、紹介動画 | その製品ページ |
kho-media/noi-dung/<yyyy-MM> | 投稿画像、バナー、サムネイル、ショート動画 | コンテンツ計画ページ |
kho-media/bang-chung | フィードバック、ビフォーアフター、認証、メディア掲載 | 関連製品ページ |
kho-media/su-kien/<ten-su-kien> | イベント画像、動画、クラス | そのイベントページ |
ファイル名とフォルダ名:アクセント記号なし、小文字、- で区切り、一目でわかるように。例:feedback-khach-lan-a。どのフォルダかわからない場合は、番号付きの2つの選択肢を含む1つの質問をします。複数のファイルがある場合は、名前とフォルダを一度に表で提示し、確認してから順次アップロードします。エラーのあるファイルは記録してから次のファイルに進みます。
5. アップロード
kho-media.md からコードファイル名を取得し、フルパスを使用します。コードファイルがGitで管理されているナレッジベース内にある場合は、事前に git check-ignore -q <コードファイルパス> を実行します。無視されていない場合は停止し、ユーザーに通知します。OSに合わせた正確なコマンドをコピーし、先頭の4つの値のみを置き換えます。コードを画面に表示したり、回答、ページ、他のファイルにコピーしたりしないでください。アップロードコマンドがパスにアクセント記号やスペースがあると失敗しやすいため、自動的にファイルを一時的なアクセント記号なしの名前にコピーします。
Windows (PowerShell):
$tep='<ファイルパス>'; $ngan='<フォルダ>'; $ten='<拡張子なしのファイル名>'; $fileMa='<コードファイルパス>'
$m=@{}; Get-Content -LiteralPath $fileMa | ForEach-Object { if($_ -match '^\s*(?:CLOUDINARY_)?(CLOUD_NAME|API_KEY|API_SECRET)\s*=\s*(.+?)\s*$'){ $m[$Matches[1]]=$Matches[2] } }
$ts=[DateTimeOffset]::UtcNow.ToUnixTimeSeconds()
$bam=[Security.Cryptography.SHA1]::Create().ComputeHash([Text.Encoding]::UTF8.GetBytes("folder=$ngan&overwrite=false&public_id=$ten×tamp=$ts$($m.API_SECRET)"))
$ky=-join($bam | ForEach-Object { $_.ToString('x2') })
$tenTam="luu-media-$ts"+[IO.Path]::GetExtension($tep); Copy-Item -LiteralPath $tep -Destination (Join-Path $env:TEMP $tenTam)
Push-Location $env:TEMP
try { curl.exe -sS -X POST "https://api.cloudinary.com/v1_1/$($m.CLOUD_NAME)/auto/upload" -F "file=@$tenTam" -F "api_key=$($m.API_KEY)" -F "timestamp=$ts" -F "folder=$ngan" -F "overwrite=false" -F "public_id=$ten" -F "signature=$ky" }
finally { Remove-Item -LiteralPath $tenTam -ErrorAction SilentlyContinue; Pop-Location }
Mac、Linux (bash):
TEP='<ファイルパス>'; NGAN='<フォルダ>'; TEN='<拡張子なしのファイル名>'; FILE_MA='<コードファイルパス>'
lay() { sed -n -E "s/^[[:space:]]*(CLOUDINARY_)?$1[[:space:]]*=[[:space:]]*//p" "$FILE_MA" | tr -d '\r' | sed -E 's/[[:space:]]+$//' | head -n 1; }
TS=$(date +%s)
KY=$(printf '%s' "folder=$NGAN&overwrite=false&public_id=$TEN×tamp=$TS$(lay API_SECRET)" | { if command -v shasum >/dev/null; then shasum -a 1; else sha1sum; fi; } | cut -d' ' -f1)
curl -sS -X POST "https://api.cloudinary.com/v1_1/$(lay CLOUD_NAME)/auto/upload" -F "file=@$TEP" -F "api_key=$(lay API_KEY)" -F "timestamp=$TS" -F "folder=$NGAN" -F "overwrite=false" -F "public_id=$TEN" -F "signature=$KY"
結果はJSONで返ります。secure_url を取得します。error がある場合は、エラー内容をそのまま報告して停止し、独自に式を書き換えないでください。ファイルが現在のプランに対して大きすぎる場合は、ユーザーに圧縮を依頼します。コマンドは overwrite=false を使用して同名ファイルを上書きしません。拡張子または返された内容が送信したファイルと異なる場合は、名前を変更してから再アップロードします。
6. 確認してナレッジベースに記録
- リンクを開いてみて、正常に応答が返るか確認します。
kho-media.mdに行を追加します。日時はマシンの時刻を使用します。- フォルダ表の最終列に従い、関連ページの
Mediaセクションにリンクを追加します。そのページがまだない場合は、kho-media.mdにのみ記録し、その旨を報告します。
7. 報告
リンク、フォルダ、記録した2つのページを提示します。Webサイトや記事で使用する画像の場合は、次のセグメントを /upload/ の直後に挿入して高速配信バージョンも提供します:f_auto,q_auto,w_1200/。Cloudinaryが自動的にフォーマット、品質を選択し、幅を1200pxにリサイズします。
禁止事項
- Cloudinary上のファイルを削除または変更しないでください。ユーザーがMedia Libraryで自分で行うか、個別にリクエストして確認を得た場合のみ行います。
- 画像ファイルや動画ファイルをGitナレッジベースに保存しないでください。
- コードは宣言されたコードファイルにのみ保存します。ページ、ログ、スキル、チャット欄に記述しないでください。ナレッジベースフォルダを他の人と共有する前に、ユーザーに
.envを除外するよう注意してください。
kho-media.md のテンプレート
# メディア保存 - 目次
クラウドストレージ: Cloudinary。コードファイル: ナレッジベースルートの `.env`。GitHubにはアップロードしません。
| 日時 | ファイル名 | フォルダ | リンク | 使用先 |
|---|---|---|---|---|