農協の営農指導員が、組合員からの農薬の相談に、農薬の登録内容と産地の防除暦を引き、使用時期と使用回数を根拠付きで答える
組合員から「キャベツのコナガにこの剤はまだ使えるか」と相談を受けた指導員が、作物・病害虫・農薬・収穫の予定日を入れると、農薬の登録内容と産地の防除暦から当たる箇所を引用し、防除の記録から使った回数を数えて答えの材料を返します。答えるのは指導員です。
- 生成AI
- Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 連携・自動化
- Python
- 対象業界
- その他/小売
- 対象部門
- カスタマーサポート
- 対象業務
- 内容確認・チェック/問い合わせ対応
- 主な課題
- 問い合わせが多い/属人化している/確認ミスが多い
- AIで行う処理
- 検索(RAG)
- 主な効果
- 入力漏れ削減/品質標準化/対応スピード向上
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 指導員が、組合員から作物、病害虫、使いたい農薬、収穫の予定を聞き取る
- 農薬登録情報提供システムで、その農薬の適用表から作物と病害虫の行を探し、使用時期と使用回数を確かめる
- 農薬の有効成分を確かめ、成分ごとの総使用回数を見る
- 組合員の防除の記録を開き、今作で同じ成分を含む農薬を何回使ったかを数える
- 産地の防除暦で、勧めている剤と時期を確かめる
- 組合員に答え、相談の記録を書く
- 人指導員が、相談の画面で組合員の番号、圃場、作物、病害虫、使いたい農薬、使う予定の日、収穫の予定日を入れて送る
- 自動中継プログラムが、作物の名前を作物群の表で引き、その作物が入る作物群と、個別の作物の登録があるかを確かめる
- 自動Agent Search(Vertex AI Search)が、登録内容のデータストアから、農薬・作物(または作物群)・病害虫の行を返す
- 自動中継プログラムが、その農薬の有効成分を引き、防除の記録から今作で同じ成分を含む農薬を使った回数を数える。使う予定の日と収穫の予定日の差を数える
- 自動answer メソッドが、品目・作型・年度で絞った防除暦と産地の技術資料から、その時期に勧めている剤と注意を引用して返す
- 自動中継プログラムが、登録の行・回数・日数・防除暦を1枚にまとめ、`ok`(登録の範囲に収まる)/`check`(指導員が登録の画面で確かめる)に分ける
- 人指導員が登録の行と回数を確かめ、組合員に答える。`check` は農薬登録情報提供システムで登録内容を開き直してから答える
各工程の詳しい説明を読む
- 指導員が、組合員から作物、病害虫、使いたい農薬、収穫の予定を聞き取る
- 農薬登録情報提供システムで、その農薬の適用表から作物と病害虫の行を探し、使用時期と使用回数を確かめる
- 農薬の有効成分を確かめ、成分ごとの総使用回数を見る
- 組合員の防除の記録を開き、今作で同じ成分を含む農薬を何回使ったかを数える
- 産地の防除暦で、勧めている剤と時期を確かめる
- 組合員に答え、相談の記録を書く
(a)有効成分ごとの総使用回数を数え漏らす。 組合員は商品の名前で覚えています。成分が同じ別の商品を前に使っていたことに気づかず、「この剤は1回目なので大丈夫」と答えることが起きます。
(b)作物群の登録で迷う。 登録が個別の作物ではなく作物群(「非結球あぶらな科葉菜類」など)で付いている農薬があります。その作物が群に入るのか、個別の作物に別の登録があるのかを確かめるのに時間がかかります。
(c)防除暦と登録の食い違いに気づかない。 防除暦のとおりに答えたが、年の途中で使用時期が変わっていた、ということが起きます。出荷の前の確かめで分かると、その圃場の出荷が止まります。
(d)答えが指導員によって違う。 経験のある指導員は成分と作物群を覚えていて早く答えますが、新しい指導員は1件ずつ調べます。繁忙期には、調べきれずに「確認して折り返す」が積み上がります。
- 【人】 指導員が、相談の画面で組合員の番号、圃場、作物、病害虫、使いたい農薬、使う予定の日、収穫の予定日を入れて送る
- 【自動】 中継プログラムが、作物の名前を作物群の表で引き、その作物が入る作物群と、個別の作物の登録があるかを確かめる
- 【自動】 Agent Search(Vertex AI Search)が、登録内容のデータストアから、農薬・作物(または作物群)・病害虫の行を返す
- 【自動】 中継プログラムが、その農薬の有効成分を引き、防除の記録から今作で同じ成分を含む農薬を使った回数を数える。使う予定の日と収穫の予定日の差を数える
- 【自動】 answer メソッドが、品目・作型・年度で絞った防除暦と産地の技術資料から、その時期に勧めている剤と注意を引用して返す
- 【自動】 中継プログラムが、登録の行・回数・日数・防除暦を1枚にまとめ、
ok(登録の範囲に収まる)/check(指導員が登録の画面で確かめる)に分ける - 【人】 指導員が登録の行と回数を確かめ、組合員に答える。
checkは農薬登録情報提供システムで登録内容を開き直してから答える
3番目と5番目で、データストアを分けているのが、この設計の前提です。 登録内容は1行ずつ値の決まった表で、防除暦は産地の文書です。登録内容は表の行として返し、生成AIの文には混ぜません。 生成AIが書くのは、防除暦の引用の部分だけです。
4番目の回数と日数は、中継プログラムの計算です。 公式の省令は、総使用回数を有効成分の種類ごとに定めています。数え方を規則として書き、誰が相談を受けても同じ数が出るようにします。
02今回想定するシステム構成
農薬の登録内容(FAMIC の CSV、月ごと) 産地の防除暦・技術資料(年度・品目・作型)
│ 1行ずつ JSON に │ 品目・作型・年度を付ける
▼ ▼
登録内容のデータストア(構造化) 防除暦のデータストア(レイアウト パーサー)
│ reg_no/crop/pest/timing/times │ item/cropping/year
└──────────────┬──────────────────────────┘
▼
営農指導員の相談の画面 ──【トリガー】指導員の送信
▼
中継プログラム(Python、Cloud Run)
├──▶ 作物群の表で作物を引く
├──▶ 登録内容の検索:農薬・作物・病害虫の行
├──▶ 防除の記録:同じ有効成分の今作の回数、収穫までの日数
├──▶ answer メソッド:防除暦と技術資料の引用
└──▶ ok / check
▼
指導員の画面(登録の行・回数・日数・防除暦の1枚)| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Vertex AI Search(Agent Search)。登録内容の構造化データの検索と、防除暦の answer メソッド | Azure AI Search、Amazon OpenSearch Service |
| 生成AI | Gemini(answer メソッドの回答の生成に使うモデル) | ─ |
| 連携 | 中継プログラム(Python。Cloud Run で動かし、相談の画面・検索・防除の記録をつなぐ) | Node.js で同じものを書く |
| 集計 | 中継プログラム(同じ成分の回数と、収穫までの日数を数える) | ─ |
| 保管 | Cloud Storage(登録内容の取り込みの写し、防除暦、相談の記録) | ─ |
登録内容の元は、FAMIC(農林水産消費安全技術センター)が公開している農薬登録情報のダウンロードです。 登録の基本情報(登録番号、農薬の種類、名称、登録を有する者)と、適用の情報(作物名、適用病害虫雑草名、使用時期、使用方法、使用回数など)が、CSVの形でも配られています。ページには「2026年10月07日登録反映分」のように反映の日が書かれているので、その日付を取り込みの版として持ちます。
防除の記録は、組合員が出す栽培の履歴を農協が入力したものです。 中継プログラムは読むだけで、記録を書き換えません。
構造化データは、Cloud Storage から JSON Lines か NDJSON で取り込めます。 公式では、1ファイル2GB未満・1行1MB未満で、1回の取り込みで1,000ファイルまでです。BigQuery の表から取り込むこともできます。
03どうやって実装するのか
処理の起点を決める
起点は、指導員が相談の画面で送信したことです。 電話を受けながら入れるので、項目は選ぶものを中心にします。
| 画面の項目 | 書き方 | 使い道 |
|---|---|---|
| 組合員の番号・圃場 | 組合員の台帳の番号と圃場の番号 | 防除の記録を引く |
| 作物 | 部会の品目から選ぶ(作型も) | 作物群の表、絞り込み |
| 病害虫 | 自由記述(「コナガ」「べと病」) | 登録内容の検索 |
| 使いたい農薬 | 商品の名前(候補から選ぶ)。決まっていなければ空 | 登録内容の絞り込み |
| 使う予定の日・収穫の予定日 | 日付 | 使用時期の日数 |
使いたい農薬が空なら、作物と病害虫で登録のある農薬の行を返し、防除暦の勧めと並べます。 「暦の剤が品切れ」という相談は、この形で答えます。
もう一つのトリガーは、登録内容の更新です。 FAMIC のページの反映の日が変わったら、CSVを取り直して取り込み直します。月に1回は確かめ、反映の日を画面に出します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 相談 | 画面の5項目、指導員、日時 | 相談の画面 |
| 登録の基本情報 | 登録番号、農薬の種類、名称、有効成分 | FAMIC の登録基本部(CSV) |
| 登録の適用情報 | 作物名、適用病害虫雑草名、使用時期、使用方法、本剤の使用回数、有効成分ごとの総使用回数 | FAMIC の登録適用部(CSV) |
| 作物群の表 | 作物群と、それに含まれる作物 | 農協が作る(登録情報提供システムの作物群の説明から) |
| 防除の記録 | 組合員・圃場・作型ごとの、使った農薬の名前と日付 | 農協の栽培の履歴 |
| 防除暦・技術資料 | 品目・作型ごとの勧める剤と時期、注意 | 営農部の文書(PDF) |
質を決めるのは、作物群の表です。 農薬登録情報提供システムのトップでは、作物群の登録がある農薬はその群に新たに含まれた作物にも使えること、ただし群の中の個別の作物にも登録があるときは、その作物には個別の作物の登録内容に従うことが示されています。同じ農薬でも、作物によって見る行が変わります。 中継プログラムは、個別の作物の行があればそれを、無ければ作物群の行を選びます。
FAMIC の総使用回数の注意事項では、適用表の総使用回数の欄が「その有効成分を含む農薬の総使用回数」を表すと説明されています。 例として、3つの成分を含む農薬で、本剤の使用回数と、成分ごとの総使用回数が別々に書かれた表が載っています。回数は、本剤の回数と成分ごとの回数の両方で見ます。
データの取得方法を決める
登録の適用情報は1行ずつ JSON にし、登録の基本情報から有効成分を足して、構造化データとして取り込みます。
{"id":"22xxx-cabbage-diamondback","reg_no":"22xxx","name":"(商品名)",
"crop":"キャベツ","crop_group":"","pest":"コナガ",
"timing":"収穫7日前まで","method":"散布",
"times_product":"3回以内",
"ingredients":[{"name":"(成分A)","times_total":"4回以内"}],
"release":"2026-10-07"}
問い合わせのたびに、農薬と作物で絞ります。 公式の構文では、文字の項目は ANY() に並べた値のどれかと完全に一致するかを見られ、AND・OR で組み合わせられます。項目はスキーマで索引可能にしておく必要があります。
reg_no: ANY("22xxx") AND (crop: ANY("キャベツ") OR crop_group: ANY("非結球あぶらな科葉菜類"))
病害虫は絞り込みに入れず、検索の文に入れます。 組合員の言う「青虫」と適用表の「アオムシ」のように、書き方が違っても当たるように、言葉の検索に任せます。 返ってきた行の pest は、指導員が画面で確かめます。
防除暦は、品目・作型・年度をメタデータに持たせて取り込みます。 レイアウト パーサーは段落・表・見出しを検出し、チャンクに上位の見出しを付ける設定(includeAncestorHeadings、既定は無効)があります。防除暦は表が中心なので、表の行が単独で引かれても品目と作型が分かるように見出しを付けます。 絞り込みは item: ANY("cabbage") AND cropping: ANY("spring") AND year: ANY("2026") のように書きます。
AIへ渡す前に整形する
- CSVを取り直す … FAMIC のページの反映の日を見て、変わっていれば基本部と適用部を取り直します
- 行を JSON にする … 適用部の1行を1件にし、基本部から有効成分を足します。使用時期と回数の文字はそのまま残します
- 前の版と比べる … 前の取り込みと比べ、使用時期・回数が変わった行、無くなった登録番号を一覧にします
- 防除暦と照らす … 3番目の一覧の農薬が、今年の防除暦に載っていれば、営農部に知らせます
- 防除の記録の農薬の名前をそろえる … 記録の商品の名前を登録番号に引き当てます。引き当てられない名前は、指導員が台帳で直します
3番目と4番目が、(c) の食い違いを見つける仕組みです。 登録が変わった剤を、相談が来る前に防除暦の側から拾います。
5番目で引き当てられない名前を残すと、回数が数えられません。 組合員の手書きの略称や、品切れのときの代わりの剤の書き方は、最初の数か月で台帳にたまっていきます。
回数の数え方は、中継プログラムに次のように書きます。 今作の記録の行を登録番号に引き当て、その農薬の有効成分ごとに1回ずつ足します。
used = {} # 成分 → 今作で使った回数
for row in records(member, field, season):
reg = name_to_reg.get(row.name) # 記録の名前 → 登録番号
if reg is None:
flags.add("record_unmatched"); continue
for ing in ingredients[reg]: # 登録基本部の有効成分
used[ing] = used.get(ing, 0) + 1
room_product = limit(times_product) - count_same_reg(records, target_reg)
room_ing = {i: limit(t) - used.get(i, 0) for i, t in times_total[target_reg]}
limit() は「3回以内」から3を取り出すだけで、「(育苗箱への処理は1回以内)」のような括弧の条件が付く行は数えずに check にします。 括弧の中は使用方法ごとの上限で、記録に使用方法が書かれていないと数え分けられないからです。
使用時期の文字は、次の形だけを日数として読みます。
| 登録の書き方 | 読み方 |
|---|---|
| 収穫N日前まで | 収穫の予定日の N 日前の日まで |
| 収穫前日まで | 収穫の予定日の前日まで |
| それ以外(定植時、生育期、出穂前 など) | 読まずに timing_parse |
AIに処理させる
生成AIにさせるのは、防除暦と技術資料から、その時期に勧めている剤と注意を引用して並べることだけです。 登録の行、回数、日数は、中継プログラムが表として出します。
| させること | 中身 |
|---|---|
| 防除暦の勧めを引用する | 品目・作型の、その時期の剤と散布の目安を、防除暦の言葉のまま |
| 注意を引用する | 技術資料の、抵抗性の注意や混用の注意 |
| 出典を示す | 防除暦の年度・品目・作型、技術資料の名前 |
| させないこと | 理由 |
|---|---|
| 使えるか・使えないかの結論 | 登録の行と回数と日数で、指導員が確かめる |
| 使用回数を数える | 有効成分ごとに、中継プログラムが記録から数える |
| 収穫までの日数を計算する | 日付の計算で出す |
| 登録に無い作物・病害虫への使い方を勧める | 登録の範囲の外 |
| 希釈倍数や使用量を一般論で書く | 登録の行と防除暦にあるものだけ |
answer メソッドの設定は次のようにします。
| 設定 | 値 | 理由 |
|---|---|---|
includeCitations | 有効 | 防除暦の年度・品目・作型を示す(既定は無効) |
ignoreLowRelevantContent | 有効 | 関係の薄い暦で答えない |
filter | 品目、作型、年度 | その圃場の作型の暦だけを引く |
groundingSpec | includeGroundingSupports を有効 | 文ごとの根拠のスコアを受け取る |
promptSpec.preamble | 下の指示 | 答え方の規則を与える |
指示内容を固定する
answer メソッドの promptSpec.preamble に、次の指示を入れます。中継プログラムは、品目、作型、病害虫、使う予定の日を検索の文の先頭に付けます。
あなたは農協の営農部の担当として、営農指導員が組合員の農薬の相談に
答えるための材料を、産地の防除暦と技術資料から作る立場です。
読むのは営農指導員で、農薬の登録内容は別の表で確かめます。
【前提】
検索の文の最初に、品目、作型、病害虫、使う予定の日が並んでいます。
検索の対象は、その品目・作型の今年度の防除暦と技術資料だけです。
【答え方】
1. その時期に防除暦が勧めている剤と散布の目安を、暦の言葉のまま引用する
2. 技術資料に、抵抗性や混用の注意があれば引用する
3. 出典として、防除暦の年度・品目・作型、または技術資料の名前を書く
【厳守事項】
- 使える、使えない、まだ大丈夫、と書かないでください。
- 使用回数を数えたり、残りの回数を書いたりしないでください。
- 収穫まで何日あるか、使用時期に間に合うかを書かないでください。
- 防除暦と技術資料に無い剤、希釈倍数、使用量を書かないでください。
一般的な防除の知識で補わないでください。
- 登録の内容は別の表で確かめるので、登録について推測で書かないでください。
- 該当する箇所が見つからないときは、
「防除暦に該当する箇所はありませんでした」とだけ書いてください。
「まだ大丈夫と書かない」を明記しないと、AIは防除暦の時期と使う予定の日を見比べて判断を書きます。 防除暦の「収穫前の最終散布」の欄を引いて「予定日なら間に合います」と書きますが、守るべきは登録の使用時期で、暦の欄ではありません。
出力形式を固定する
中継プログラムが、登録の行・回数・日数・防除暦の引用を次の形にまとめます。
{
"consult_id": "",
"crop": "", "crop_group_used": "", "pest_input": "",
"registration": [ { "reg_no": "", "name": "", "pest": "", "timing": "",
"method": "", "times_product": "",
"ingredients": [ { "name": "", "times_total": "", "used": 0 } ],
"release": "" } ],
"days_to_harvest": 0,
"calendar": [ { "quote": "", "source": "", "uri": "" } ],
"flags": [],
"route": "ok | check"
}
registration は登録内容の検索の返り値から、used は防除の記録から、days_to_harvest は日付から、中継プログラムが入れます。calendar だけが answer メソッドの返り値です。 引用の位置は UTF-8 のバイト数なので、日本語の文を文字数で切るとずれます。
route は次の規則で決めます。
flags | 立てる条件 |
|---|---|
not_registered | 農薬・作物(または作物群)の行が無い |
pest_unmatched | 返ってきた行の pest が、入れた病害虫と文字で一致しない |
times_no_room | 本剤の回数か、成分ごとの総使用回数の残りが0 |
timing_parse | 使用時期が「収穫N日前まで」「収穫前日まで」の形でなく、日数で比べられない |
timing_out | 収穫までの日数が、使用時期の日数より少ない |
record_unmatched | 防除の記録に、登録番号に引き当てられない名前がある |
calendar_conflict | 防除暦が勧める剤が、前の版との比較の一覧に入っている |
どれにも当たらないものだけが ok です。 ok でも、組合員に答えるのは指導員です。timing_parse は「定植時」「生育期」のような書き方の行で、日数の比べ方を機械が決められないものです。 指導員が登録の言葉を読んで判断します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 相談の画面 | 画面から中継プログラムを呼ぶ | 5項目を受け取り、1枚の材料を返す |
| 登録内容のデータストア | 検索(構造化データ) | 農薬・作物・病害虫の行 |
| 防除の記録 | 読み出し | 組合員・圃場・作型の使った農薬と日付 |
| 防除暦のデータストア | answer メソッド | その時期の勧めと注意の引用 |
| 営農部の一覧 | 1行足す | calendar_conflict を防除暦の担当に知らせる |
防除の記録には書き込みません。 組合員が相談のあとに使ったかどうかは、組合員が出す記録で残ります。
人が確認する
組合員に答えるのは、いつも指導員です。 材料の1枚を読み、次の順に確かめます。
- 登録の行を確かめる …
pestが相談の病害虫か、crop_group_usedが正しい群かを見ます - 回数を確かめる … 成分ごとの
usedとtimes_totalを見て、記録の引き当てにrecord_unmatchedが無いかを見ます - 使用時期を確かめる …
timingとdays_to_harvestを見ます。収穫の予定がずれそうなら、組合員にその前提で伝えます checkは登録の画面で開き直す … 農薬登録情報提供システムで、その農薬の適用表を開いて確かめます
3番目の「収穫の予定がずれそう」は、機械には分かりません。 天候で収穫が早まれば、使用時期を割り込みます。登録の使用時期が収穫の何日前までかを、組合員に数字で伝えます。
組合員への伝え方は、登録の言葉と数字をそのまま使います。 「この剤はキャベツのコナガに登録があり、収穫7日前まで、本剤は3回以内です。同じ成分を含む剤を今作で2回使っているので、成分としてはあと2回です」のように、どの行のどの数字かが分かる形で伝え、 相談の記録にも同じ言葉で書きます。
例外に対処する
| 起きること | 対応 |
|---|---|
| 組合員の番号か圃場が無い | 回数を数えず check。登録の行と防除暦だけを返す |
| 作物が作物群の表に無い | 個別の作物の行だけで検索し、not_registered なら check |
| CSVの取り直しに失敗した | 前の版のまま使い、反映の日を画面で赤く出す |
| 混合剤で成分が3つある | 成分ごとに回数を数え、どれか1つでも残りが0なら times_no_room |
| 防除の記録に日付の無い行がある | 今作の回数に入れ、record_unmatched で指導員へ |
| 登録が失効した農薬を聞かれた | 行が無いので not_registered。指導員が失効の情報を確かめる |
| 検索の呼び出しが失敗した | 「確認できませんでした」と返し、従来どおり登録の画面で調べる |
5行目で日付の無い行を今作に入れるのは、回数を少なく数えないためです。 少なく数えた誤りは使用の基準の違反につながり、多く数えた誤りは指導員が記録を見れば直せます。
記録を残す
- 相談の5項目、組合員と圃場、指導員、日時
- 使った登録内容の版(反映の日)と、返ってきた行
- 回数の数え方の内訳(記録のどの行を、どの成分で数えたか)
- answer メソッドの返り値の全文、
flagsとroute - 指導員が組合員に答えた内容(相談の記録に本人が書く)
回数の内訳を残すのは、出荷の前の確かめで食い違いが出たときに、どの記録をどう数えたかを示すためです。
04実装レベルの3段階
最小構成では件数がさばけません。 適用表を毎回写す手間がかかり、確かめるための段階です。 半自動化で、9分が6分程度になります。 登録の行と防除暦を探す時間は減りますが、記録を開いて成分ごとに数える手間が残ります。本格構成で4分になり、この段階が本記事の想定です。 差が大きいのは、②の回数の数えが自動になることです。
05工数削減シミュレーション
導入後 1,200件 × 4分 ÷ 60 = 80 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 野菜・果樹などの産地を持ち、品目と作型ごとの防除暦を作って組合員に配り、営農指導員が農薬の使い方の相談を毎日受けている農協。組合員の防除の記録(栽培の履歴)を農協が集めており、出荷の前に使用の基準を守っているかを確かめる必要がある場合。相談への答えが指導員の経験によって違い、登録の確かめに時間がかかっている場合。
- 扱う品目が1つで、使う農薬も数剤に限られ、指導員が登録内容を覚えていられる場合。組合員の防除の記録を集めていない場合(使った回数が数えられません)。農薬を使ってよいかの判断をAIの回答で済ませ、組合員に直接返したい場合(この構成は指導員が登録の条文を確かめてから答える前提です)。
07最小構成で試す方法
- 相談の多い品目(キャベツとなしなど)について、今年の防除暦と、よく使う農薬20剤の適用表を農薬登録情報提供システムから写す
- 過去1か月の相談から30件を拾う(成分が同じ別の商品を使っていたもの、作物群の登録の剤、収穫が近いものを数件入れる)
- 手元のAIサービスに適用表と防除暦を貼り、第7章の指示を貼って、防除の記録を添えて1件ずつ入れる
- 出てきた材料を、当時の指導員の答えと突き合わせる
| 出てきた内容 | 判断 |
|---|---|
| 登録の行と防除暦を正しく引いた | データストアへの取り込みに進む |
| 商品の名前で回数を数えた | 回数を中継プログラムで数える設計で進める |
| 「まだ大丈夫です」と書いた | 指示で直るか試す。直らなくても、判断は表の側で出す |
2行目が出ることは珍しくありません。 記録に商品の名前しか書かれていないと、AIは商品ごとに数えます。成分の表と記録を機械でつなぐ理由が、ここで分かります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 商品の名前で回数を数える | 有効成分ごとに、記録を登録番号に引き当てて数える |
| 作物群と個別の作物の行を取り違える | 個別の作物の行があればそれを、無ければ群の行を選ぶ |
| 防除暦の時期で答えてしまう | 根拠は登録の使用時期。暦は勧めとして添える |
| 登録の変更に気づかない | 取り込みのたびに前の版と比べ、防除暦の剤と照らす |
| 使用時期の書き方がさまざま | 日数で比べられない形は timing_parse で指導員へ |
| 病害虫の書き方が違って当たらない | 病害虫は絞り込みに入れず検索の文に入れ、pest を指導員が確かめる |
| 記録の名前が引き当てられない | record_unmatched で知らせ、台帳を直す |
| 引用の位置がずれる | 位置は UTF-8 のバイト数。文字数で切らない |
上の3行が、この構成の失敗のほとんどです。 どれも、使用の基準から外れた使い方を「大丈夫」と答えてしまう誤りです。回数と行の選び方を、AIの外の規則で守ります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 農薬の登録内容(公開の情報)、産地の防除暦(農協の文書)、組合員の防除の記録(組合員ごとの圃場と農薬の使用の記録)、相談の内容です。
- 使用の基準は登録内容から決まる … 農薬取締法は、農林水産大臣と環境大臣が農薬の使用の時期・方法などについて農薬使用者が守るべき基準を定め、農薬使用者はその基準に違反して農薬を使ってはならないとしています。基準の省令は、適用農作物等の範囲に含まれない食用農作物等に使わないこと、使用時期以外に使わないこと、有効成分の種類ごとの総使用回数を超えて使わないことなどを定めています。この構成は、その確かめを早くするもので、指導員の確かめを省くものではありません
- 組合員の記録を目的の外に使わない … 防除の記録は、出荷の前の確かめと指導のために集めているものです。相談の画面は指導員だけが使い、記録を他の目的に回しません
- 公開の登録情報を最新に保つ … 登録情報提供システムには反映の日が出ており、FAMIC のダウンロードにも反映の日が書かれています。取り込みの版を画面に出し、古い版で答えていないかを指導員が見られるようにします
- 組合員に直接返さない … 組合員が自分で聞く形にすると、使用時期や回数の前提(収穫の予定、記録の書き漏れ)を確かめる人がいなくなります
- データの置き場所を確かめる … 公式では、データストアの場所は
global・us・euで、日本のリージョンはありません。組合員の記録の取扱いの規程と合わせて確かめてください
誤りが起きた場合のリスクは、使用の基準を外れた使い方を組合員に勧め、出荷が止まることです。 多くは回数の数え漏れと、作物群の行の取り違えから起きます。どちらも、AIの文ではなく中継プログラムの規則で守ります。
10まず何から始めるか
1週目:作物群の表と名前の台帳を作る
部会の品目について作物群の表を作り、防除の記録に出てくる農薬の名前を登録番号に引き当てる台帳を、よく使う剤から作ります。
2週目:30件の相談で試す
手元のAIサービスに適用表と防除暦を貼り、過去の相談30件を入れます。回数を商品の名前で数えていないか、「大丈夫」と書いていないかを最優先で見ます。
3週目:登録内容を取り込む
FAMIC のCSVを取り、1行ずつ JSON にして構造化データとして取り込みます。反映の日を版として持ち、前の版との比較の一覧を作ります。
4週目:防除暦を取り込み、指導員が検索の画面で使う
今年度の防除暦を品目・作型・年度で取り込み、指導員が登録の行と防除暦を並べて見る運用を始めます。
2か月目: 防除の記録から成分ごとの回数と収穫までの日数を数える仕組みと、ok/check の規則を作り、1つの部会で始めます。3か月目以降: ほかの部会に広げます。登録の変更が取り込みの夜に防除暦の側で拾われ、どの指導員が受けても同じ回数と同じ使用時期で答えられるのが当たり前になった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
answer メソッドの includeCitations(既定は false)、ignoreLowRelevantContent、promptSpec.preamble、検索の指定の filter、groundingSpec の includeGroundingSupports。引用の startIndex/endIndex が UTF-8 のバイト単位であること | Google Cloud: Get answers and follow-ups | 2026-10-15 |
絞り込みの ANY() が列挙した値との完全一致を見ること、AND/OR での組み合わせ、構造化データと非構造化データのメタデータで使えること、項目を索引可能にする必要があること | Google Cloud: Filter custom search for structured or unstructured data | 2026-10-15 |
| 構造化データを Cloud Storage から JSON Lines/NDJSON で取り込めること、1ファイル2GB未満・1行1MB未満・1回1,000ファイルまで。BigQuery から取り込めること | Google Cloud: Prepare data for ingesting | 2026-10-15 |
レイアウト パーサーが段落・表・見出しを検出すること、includeAncestorHeadings(既定は false) | Google Cloud: Parse and chunk documents | 2026-10-15 |
データストアの場所が global・us・eu で、日本のリージョンが無いこと | Google Cloud: Locations | 2026-10-15 |
| 農薬登録情報のCSVのダウンロードで、登録基本部(登録番号・農薬の種類・名称・登録を有する者)と登録適用部(作物名・適用病害虫雑草名・使用時期・使用方法・使用回数)が配られていること。反映の日(2026年10月07日登録反映分など)が書かれていること | FAMIC: 農薬登録情報ダウンロード(csvファイル) | 2026-10-15 |
| 登録適用部の総使用回数の欄が、有効成分ごとの「その成分を含む農薬の総使用回数」を表すこと(3成分の農薬の例) | FAMIC: 総使用回数についての注意事項 | 2026-10-15 |
| 作物群の登録がある農薬は群に新たに含まれた作物にも使えること、群の中の個別の作物にも登録がある場合はその作物には個別の作物の登録内容に従うこと。最終更新の日が出ていること | 農林水産省: 農薬登録情報提供システム | 2026-10-15 |
| 農薬取締法第25条(使用の時期・方法などについて農薬使用者が守るべき基準を定め、農薬使用者はそれに違反して使ってはならない) | e-Gov 法令API: 農薬取締法 | 2026-10-15 |
| 農薬を使用する者が遵守すべき基準を定める省令第2条(適用農作物等の範囲外に使わない、使用時期以外に使わない、有効成分の種類ごとの総使用回数を超えて使わない など) | e-Gov 法令API: 農薬を使用する者が遵守すべき基準を定める省令 | 2026-10-15 |
農薬の使い方の判断は、農薬のラベルと最新の登録内容、各産地の指導の方針に従ってください。 本記事は Google Cloud の公式ドキュメント、FAMIC と農林水産省の公開情報、e-Gov の法令データで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1633)についてのご相談はこちらから。
