control>コンピュータの簡単操作センター>マウスを使いやすくします
マウスポインターをウィンドウ上に合わせたときにウィンドウを選択します
にチェックをつける。
・タイミングを変更する方法
regedit>HKEY_CURRENT_USER\Control Panel\Desktop\ActiveWndTrkTimeout
10進数で500から好きな数字に変更
自分用のメモです。内容が間違っていたり、作りかけで動作しないコードなどあるのでご注意ください。
control>コンピュータの簡単操作センター>マウスを使いやすくします
マウスポインターをウィンドウ上に合わせたときにウィンドウを選択します
にチェックをつける。
・タイミングを変更する方法
regedit>HKEY_CURRENT_USER\Control Panel\Desktop\ActiveWndTrkTimeout
10進数で500から好きな数字に変更
新しいNAS(Windows Server IoT)を導入した。バックアップに専用のソフトを導入するほどの規模でもないのでPowerShell+タスクスケジューラにて設定。
-日次ミラーリングデータ*2
-1週間分の差分データ
-月次のミラーリングデータ
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$src = "xxx" $dst1 = "xxx" $dst2 = "xxx" $dif = "xxx" $mon = "xxx" $opt = @("/R:3", "/W:5", "/NP", "/NDL") $today = Get-Date $dayNum = [int]$today.DayOfWeek robocopy $src $dst1 /MIR $opt robocopy $src $dst2 /MIR $opt if ($dayNum -ne 0) { $targetDir = Join-Path $dif $dayNum if (Test-Path $targetDir) { Remove-Item $targetDir -Recurse -Force } New-Item -Path $targetDir -ItemType Directory -Force | Out-Null $lastSunday = $today.AddDays(-$dayNum).ToString("yyyyMMdd") robocopy $src $targetDir /S /MAXAGE:$lastSunday $opt } if ($today.Day -eq 1) { robocopy $src $mon /MIR $opt } |
変化の前提:AIはパラダイムシフト
AIに実装を任せる方向は今後さらに拡大していく。これは単なる効率化ではなくパラダイムシフトであり、これまでと違う考え方が必要になる。
人間側で重要になる能力
AIが基礎的な能力を身につける機会を奪う面がある一方で、人間に残る重要領域はより上流に寄っていく。今後重要になるのは、問題分解能力、意図の言語化、アーキテクチャ設計、ドメイン知識、そしてAI出力の検証である。
「全部読む」前提は破綻する
AI特有の不安定さに対して、現状では「人間が全て読んで最終判断する(経験が重要)」「責任は人間がとる」という意見がある。しかし、今後AIが生成する膨大な実装をすべて人間が理解する方法では破綻する。
本質:確定的な世界に確率的な知能を組み込む
問題の本質は、確定的なものから確率的なものへの変化にある。不安定さを前提に、それを制御するエンジニアリングが必要になる。重要なのは、確定的な世界に確率的な知能をどう組み込むかである。
解き方:ガードレールと統計的テスト
制御の具体策として、ガードレールを設けること、統計的なテストを実施することが重要になる。考え方としては、現在の工学における安全率にも近い。
実務の要:自動テストとCI/CDが競争力になる
膨大な実装を前提にするなら、自動的にテストし、継続的に検証して流せるCI/CDの仕組みが重要になる。テスト無し+ZIPで履歴管理のような従来スタイルでは競争力を完全に失う。
アーキテクチャの役割が変わる
アーキテクチャのような知識はより重要になるが、目的が変化している。これまでは「人間が修正しやすいように」だったのが、今後は「AIに作業範囲を指示できるように」という意味合いが強くなる。
目的最適化DSL:ブレを消すための“厳格な指示”
目的ごとに最適化されたDSLが重要になってくる。DSLとは厳格で再利用可能な指示のことで、プロンプトの中で定義して利用できる。狙いは結果のブレをなくすことであり、DSLの源泉はドメイン知識である。これはAIが理解するための表現であり、DSLから汎用言語への進化に逆行しているわけではない。
近い未来像:人間が指示し、実装はAIが担う
一部の最先端を除いて、「AIに何をさせるかだけ人間が決め、実装はAI」という未来は確実に近い。したがって競争力は、実装速度そのものよりも、指示の質と検証・運用の仕組みに移っていく。
現時点のボトルネック:OS操作はまだ難しい
現時点では、副作用や人間に最適化されたOS設計のため、自動でOSを操作するのは難しい領域である。今後、OSがAIに最適化されたり、副作用を理解するアプローチが進む可能性はあるが、まだ時間がかかる。
※こちらがメイン
AIが直接実行可能なコードを書くとセキュリティリスクがある。
DSLならサンドボックス化できる。
AIの暴走を防ぐという意味でこちらもガードレールの1つ。
従来のガードレールと併用。
その他にも、
インターフェースの固定(出力が安定)
ドメイン知識の注入
コマンド化することで分岐などを意識させる
Guidanceなど。
スレッドのmdを投げて、個人的な話題を消してもらう指示。
Get-NetConnectionProfile
Set-NetConnectionProfile -InterfaceIndex 5 -NetworkCategory Private
主語を省略しない。指示語(こそあど)、程度語は具体的に。
指示と素材のセクションを分ける。タスクは分割する。
LLMの内部推論を制御し論理的飛躍を防ぐ手法。
ステップバイステップで中間的な推論を出力させる 。より複雑な思考が必要な場合、答えに至る思考プロセスを1〜2個例示としてプロンプトに含める。
弱点として間違った方向に進むと修正できない。
※プロンプト
ステップバイステップで考えてください。
論理的に一歩ずつ順を追って説明してください。
複数の解決策を出し、それらを自己評価・選別し、最善の道筋を絞り込む手法。
プロンプト
1.複数の案を出させて思考を枝分かれさせる。
2.各案の欠点や利点を評価させる。
3.評価の高い案での思考を前進させる。
4.全ての案を俯瞰して合理的な結論をださせる。
思考をノード、関係性をエッジとしてグラフ構造化。複数の思考を統合したり再利用したりする 。ToTの進化版。
※プロンプト
1.複数の案を出させて思考を枝分かれさせる。
2.各案の欠点や利点を評価させる。
3.各案を相互の関係性(トレードオフや依存関係)を評価させる。
4.統合した案はステップ2から欠点や利点を評価させる。
5.評価の高い案での思考を前進させる。
6.全ての案を俯瞰して合理的な結論をださせる。
※反復回数の明示
このプロセス(統合と再評価)は最大2回まで繰り返してください
※収束条件の設定(理論的なBreak)
評価スコアが全ての項目で4以上になったら終了してください
前回案と比較して改善点が見当たらない場合は結論を出してください
※ステップの直列化(Sequential Pipeline)
ステップをあらかじめ分散→統合→最終修正のように固定する。
回答の骨組みを先に作らせ、その各項目を並列で埋めさせることで生成速度と構造化を両立する 。
※プロンプト
まずアウトラインや箇条書きのポイントなどを生成。
それぞれを別のプロンプトで並列に実行。
具体的な問題から一歩引いて背後にある一般原理や概念を先に特定させてから回答させる 。そもそも何を目指しているのかという原則に立ち返ることで、ハルシネーションを抑制し精度を大幅に高めることができます
※プロンプト
いきなりどうすればいい。ではなく基本的な仕組みは?原則は?と質問し、その答えを踏まえてどうすればいいか確認する。
AIに自身の出力を検証・修正させ、回答の信頼性を高める手法。
同じ問題に対して複数の推論パスを実行し、最も多い回答を最終解とする(多数決)。複数の異なる推論をさせると、正しい答えは一致しやすく、間違いはバラバラになりやすいという特徴がある。
回答を生成した後、その回答に含まれる事実を確認するための質問を自ら作成し、検証した上で最終回答を修正する 。
1.回答を生成させる。
2.最初の回答が正しいか確認するために検証用に自問自答させる。
3.最初の回答と自問自答を照合し、最終的な回答にする。
複雑な質問に対し自分への追加の質問を繰り返し行い、その答えを積み上げて最終回答を導く 。
失敗やエラー結果をフィードバックとして受け取り、次の試行で修正する反復プロセス 。
静的なプロンプトではなく、外部情報やツールと動的にやり取りする手法。
思考と行動のループ。外部ツールの結果を観察して次の思考へ繋げる 。
外部知識を検索し、プロンプトのコンテキストとして注入する 。
タスクに最適なツールを自動的に選択し、推論プロセスに組み込む 。
タスクをサブタスクに分割し、Aの出力をBの入力にするパイプラインを組む 。
プロンプトそのものを生成・評価・最適化するための手法。
プロンプトの書き方や構造そのものをAIに定義させる、あるいはプロンプトを生成するためのプロンプト 。
多数のプロンプト候補をAIに生成させ、テストデータに対するスコアが最も高いものを自動選択する 。
プロンプトを文字列ではなく、最適化可能なプログラムのシグネチャとして記述し、自動で最適なプロンプトやデモンストレーション(Few-shot例)をコンパイルする 。
出力の質や形式を厳密に制御する手法。
例示の数による学習制御 。
AIにユーザーの質問をより理解しやすい形に「言い換え」させてから回答させる 。
AIに先に質問をさせ、ユーザーがそれに答えることで必要な情報を揃えてからタスクを実行する 。
0.0-0.3 決定的(正確性重視)
0.7-1.0 標準
1.2-1.5 ランダム・創造的
今回はローカルにDify環境を構築
DockerDesktopインストール
https://www.docker.com/ja-jp/get-started/
クローン
git clone –branch 1.11.1 https://github.com/langgenius/dify.git
cd dify\docker
環境設定
copy .env.example .env
起動
docker compose up -d
※ここまで実行して、アクセスできなかった。
docker compose ps
全てのコンテナがupかどうか。
ポート競合しているようだった。
.env
を編集し、
EXPOSE_NGINX_PORT=8080
と変更する。
再起動
docker compose down
docker compose up -d
アクセス
http://localhost:8080/
これでOK
今回はVSCodeのターミナルで利用予定
node -v
npm -v
https://nodejs.org/ja/download
からダウンロード、インストールする。
npmバージョンアップ
npm install -g npm@latest
※nodeのインストールでもnpmは更新されるが最新にはならない。
npm install -g @google/gemini-cli
gemini -v
gemini
・Do you want to connect VS Code to GeminiCLI?
>1. Yes
※Failed to install VS Code companion extension. Please try installing ‘GeminiCLI Companion’ manually from the VS Code extension marketplace.
となったので後ほど個別でインストール
・How would you like to authenticate for this project?
>1. Login with Google
※ChromeからGoogleアカウントでログインして完了
VSCodeにインストールすることで、開いているファイルや選択範囲を自動認識。VS Codeネイティブの差分ビューで確認・承認。コマンドパレットからGeminCLIを起動可能。IDE経由で直感的にファイル編集を提案。など可能になる。
事業所データの圧縮中にエラーが発生しました。
ユーザー名またはパスワードが正しくありません。
と表示された。
クライアントPCに、SQLServerのバックアップ共有フォルダの認証情報を登録してないのが原因だろうと気付いたが、ホスト名が必要でIPアドレスではダメという部分につまづいた。
VSCodeでFlutter拡張機能をインストール。
Ctrl+Shift+P>Flutter: New Project>Download SDK
をクリック。
Add SDK to PATH
をクリック。
使用状況などを送信する旨が表示されるので、
OKをクリック。
※無効化する場合
dart –disable-analytics
Ctrl+Shift+P>Flutter: New Project
ここでプロジェクトの種類が選べる。
右下でデバイスを選ぶ。
メニュー>実行>デバックの開始
Chromeで開発用に起動(ホットリロード)
flutter run -d chrome
本番用ビルド
flutter build web –release
WebAssembly(実験的)
flutter run -d chrome –wasm
サーバーのみ起動
flutter run -d web-server
version:変更不要
name:任意
request:launch、attach(すでに動いているプロセスに接続)
type:dart、chrome(サーバーは起動しない)など。どのデバッガーを使うか。
deviceId:chrome、windowsなど。どのデバイスを使うか。
社内で利用しているのソフトの起動が遅くなった。ソースや詳細な仕様は手元になくSQLServer+.NETということと、サーバーへのアクセス情報だけ。
最初に表示される軽量なログイン画面の表示が遅い。ただ、ソフトを終了後、すぐに起動すると遅くならなかったりもする、維持が数秒と短いのでDBではなく、SMB+NTLMあたりが怪しい。
https://learn.microsoft.com/ja-jp/sysinternals/downloads/procmon
Filter>Filter
ProcessName | Contains | xxx | Include
Add>OK
これでどのIOが遅いか明確につかめる場合もあるけど、今回はプログラムの中の処理で時間がかかっているようだった。
https://github.com/icsharpcode/ILSpy/releases
プログラムを開いたらエントリポイントを探す。
起動プロセスの中で、社内共有フォルダ(IPアドレス指定)にアクセス、SQLServerに接続をしていることがわかった。
これで名前解決は関係ないと分かる。
https://learn.microsoft.com/ja-jp/sysinternals/downloads/tcpview
検索ボックスにプログラム名(または接続先IPアドレス)を入力し、プログラムを起動。接続が確立されるのはDBのみ。またタイミングからやはり共有フォルダが怪しいとなる。
どのタイミングで時間がかかっているか見づらいのでWiresharkを利用。
https://www.wireshark.org/
キャプチャ>開始
フィルタに
ip.src==192.168.1.xxx && ip.dst==192.168.2.xxx || ip.dst==192.168.1.xxx
このように入力した。
これで共有フォルダにアクセスにしているときが遅いことが分かった。
その他に実施したこと。
・クライアント/サーバーのFirewall停止→効果無し。
・クライアント/サーバーで修復系コマンド実施→効果無し。
・該当のアドレスにpingを送信して時間確認。
・該当のアドレスのSQLSserverに接続して時間確認。
・該当のアドレスへの送信をFirewallでふさぐ→効果無し。
・ネットワーク系のキャッシュリセット→効果無し。
・ネットワーク セキュリティ: LAN Manager 認証レベルを変更→効果無し。
・ログ確認(eventvwr)
アプリケーションとサービスログ>Microsoft>Windows>SMBClient
アプリケーションとサービスログ>Microsoft>Windows>NTLM
最終的に、
gpedit.msc>コンピュータの構成>管理用テンプレート>ネットワーク>Lanmanワークステーション>暗号化が必要:無効
で解決することが判明した。
※追記
起動プロセスの中で存在しないIPアドレスへのアクセスがあり、こちらもボトルネックになっているようなので遮断することに。
Win+R>hdwwiz
一覧からインストール
ネットワークアダプター
Microsoft / Microsoft KM-TEST Loopback Adapter
Win+R>ncpa.cpl
IPv4>プロパティ
192.168.x.x / 255.255.255.255