GitHub Copilot ChatのAgentにWeb検索機能を持たせたい(要Python)

fetchはあるけどWeb検索はしてくれない。前は検索してくれていた気がするんだけど、気づいたら無くなった?ようなので。(企業向けではあるようだし、Micros0ft謹製だけど外部APIを利用する変な機能拡張もあるけど)

というわけでSkillを書いてみた。

多分怒られて使えなくなる。規約上やるなとは書いてないがやって良いとも書かれてないしBOT検知ソリューションを入れているから普通の神経をしてるならやってはいけない。悪用厳禁。自己責任で。

Web-search Skill (for GitHub Copilot Chat) · GitHub

これをインストールするには、こう (Bash)

SKILL_DIR=".github/skills/web-search"
GIST_REVISION="https://gist.githubusercontent.com/ryozi-tn/224088e5b9e56af081c30452eeb40883/raw/83fd1883d8abfc9a23147e175207e73a9bbb2540"
mkdir -p "${SKILL_DIR}/scripts"
curl -Lo "${SKILL_DIR}/scripts/web-search.py" "${GIST_REVISION}/scripts__web-search.py"
curl -Lo "${SKILL_DIR}/SKILL.md" "${GIST_REVISION}/SKILL.md"

Marketplaceで配布?しないよ。得体のしれない人のモンをチェックも何もない仕組みで入れるもんじゃない。

そして、こう。

/web-search React不要説に関する情報を集めて

うまく使えば中身スッカスカの技術記事を量産できますね。

具体的な応答例はgistのコメントに応答例を張ってある。(お題は違うけど、まぁこのプロンプトと過程と結果の雰囲気でこんな感じに動くという参考になれば。)

以下は仕組みとか工夫とか。

DuckDuckGoを悪用利用している

仕組みとしては、DuckDuckGoのhtml版の検索フォームを全面的に利用している。 最初は標準のページをpuppeteerで叩く作戦である程度機能していたが、時間もメモリも食うし、BOT検知が動きやすい。

調べるとHTML版とLite版(ほぼ1枚ぺらのHTML版)を提供していることを知った。こっちだとUAをごまかせばBOT検知されない(今のところ)し、データ量も少ない。Lite版はHTMLの構造が辛くて抽出が面倒なわりに、データ量が少なくなるわけでもないのでやっていない。

ただ、1ページ10件しか得られないのは辛いとおもい、せめて3ページ(30件)は欲しいと思いページングの仕組みを調べた。 ページングの仕組みが特殊(Formの特殊な値をPOSTしないといけない)ので、Pythonスクリプトに書かせた。なのでアップデートでセレクタが動かなくなる可能性がある。本当はLLMに抽出タスクまでやらせたかったんだがなぁ。

こういう記事を書いて広まったら対策されて自分の首を絞めるんじゃないかと思いつつも、まぁ使えちゃうので使えるもんは使ってやろうという悪い考えで書いてる。クローラというわけではなくユーザの代理として検索してるだけだし良いじゃん、許してや。AIに知性あるんでしょ。AIが知性をもってデータにアクセスしてるんだ。いいじゃない。クローラーみたいなカスみたいなクエリを投げつけ結果をさらうような粗悪品じゃありませんぜ。(要出典)

でもBOT対策してくれた方があきらめがつくので対策してほしい。やっぱよくないよこれ。便利だから使うけど。

どうせ調べるなら、たくさんの情報をひっぱってほしい。

単純にナイーブな検索結果がほしいなら クエリを考えさせてFetchツールでクエリを投げてその結果を受け取るだけでいい。こんなskillを長々書く必要もない。実際機能する。

でもそれじゃもったいない。 同じ 1 Premium Request ならもっと働かせよう

以下の工夫をしている

  • クエリ水増し(日本語記事はQiitaとかZennの怪しい記事を拾うことがあったので英語を足したりしている)
  • クエリから欲しい情報の観点を上げる
  • 観点に一致しそうな結果を判定(っぽいことをLLMの気分でやらせる)

その結果、少しはましな感じになったかな、という。個人の感想ですが。

ただ、descriptionはあまり効き目がない感じでSkillを読み取らず指示がないとWeb検索をしようとしないので、ここは要改善ポイント。 (LLMのやつら、昔から知ったかぶりが全然治らねえんだ。特にGPT-5系は自分が賢いと思い込んでる節が見え隠れしててムカつく。まぁ俺より賢いけどさ。)

Skillの指示

AIレビューをさせながら大半は自力で書いてる。

最初の情報としてskillの作成手順として以下の情報を与えたけど、なんか微妙にフォーマットに合わないとかで割と書き直した。

skill-creatorも試したんだけど、なんか求めていた感じにならなくて、name, description書いて手順書くだけじゃん、なら手で書くか、という感じになった。

script

Pythonスクリプトは「duckduckgoを使ってこういう風に使うPythonスクリプトを依存無しで書いて」という指示だけ出して、ほとんどGPT-5.2-Codexに書かせたはず。こういうちょっとしたものはAIが便利ですね。自分じゃもう書けない。コーディング好きじゃないし。

プロンプトエンジニアリング難しい

このプロンプトが効いているという感覚があまりないまま「なんとなく動いてそう」でやっている。

欲しい結果にならなかったらこれをやれ、と足したり、嫌な結果になったらそれをやめろ、と足したりしている。

本当は対称実験させるべきなんだけど、そんなののために数に限りがあるPremium Request使いたくないしなぁ。