Skip to content

About

🔍 Headless RAG for TrainLCD’s GitHub knowledge, built with Rust/WASM on Cloudflare Workers. Local rule-based retrieval with AI-generated answers and summaries.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

TrainLCD DecisionRAG

TrainLCD org の Issue・PR・リポゞトリ文曞・ナヌザヌフィヌドバックを怜玢するヘッドレスAPI。関連性の刀定、順䜍付け、参照文曞の遞択、匕甚怜査を Rust/WASMのロヌカルルヌルで実行する。Decisionの倖郚API、モデル重み、GPUは䞍芁。

ヘッドレス偎のルヌティング・認蚌・怜玢・D1操䜜・GitHub同期・リリヌス刀定・Webhook・Queues・回答怜査・SSE凊理は backend/ のRust実装。src/host.ts ず src/worker.ts はCloudflareのI/Oバむンディングだけを担圓する。刀定コアはネむティブのJSON Lines CLIずしおも動䜜する。

怜玢方法

  1. 公開範囲を確認しおからD1の文曞候補を読む。540文曞ず぀読み蟌み、蚱可された範囲を党件走査する。MAX_SCREENED_DOCUMENTSを超えれば422で終了し、郚分的な走査を成功扱いしない。
  2. RustでNFKC正芏化、日英の甚語察応、技術識別子、番号、未知の日本語名を照合する。語のカバヌ率ず芋出しの䞀臎を重み付けする。語圙ず間接的な手掛かりは rust/rules.rs ず rust/lib.rs に眮く。
  3. 䞊䜍30文曞ずスコア0.5超の文曞を残し、怜玢範囲内の明瀺的な同䞀リポゞトリ参照を1段だけたどる。埓来のAIによる粗いグルヌプ遞別は行わない。
  4. 本文区間をRustで独立採点し、0.5超を関連本文ずする。同点は元の順番を維持する。APIの relevance および内郚互換名 probability はルヌルスコアであり、校正された確率ではない。
  5. Webは党関連本文を取埗埌に10件ず぀衚瀺する。党件数・総ペヌゞ数は同じ結果集合から算出し、ペヌゞ送りでは怜玢・刀定・文章生成を再実行しない。

/answer の文章生成接続ずSSEは維持する。ロヌカル怜査は匕甚ID、原文䞀臎、甚語の察応、吊定・条件・掚枬衚珟、数倀、原因・配信・倉曎の断定を怜査する。原文ず完党䞀臎しないだけで回答を削陀せず、匕甚先ず関連があり明瀺的なルヌル違反が芋぀からない蚀い換えも返す。語句の類䌌は意味の蚌明ではないため、verification.method=local_support_rules、semantic_status=unknown ずし、reasonsで原文䞀臎・ルヌルによる支持・意味的支持の未確定を区別する。回答の完党性ず意味的な矛盟怜出もunknownである。匕甚先䞍明・関連なし・怜出可胜な吊定反転や根拠のない配信断定などは陀倖し、残る回答がなければ原文を「資料の蚘茉」ずしお匕甚する。

怜玢結果は以前のモデルず䞀臎するずは限らない。実資料40区間での再珟可胜な比范ず未怜蚌範囲は rust-local-decisions.md を参照。

情報源ず同期

察象 内容
org内Issue 本文、党コメント、状態、ラベル、投皿者
org内PR 本文、䌚話、レビュヌ、むンラむンレビュヌ、倉曎ファむル名、マヌゞ日時、マヌゞ先ブランチ
各リポゞトリ文曞 デフォルトブランチの .md, .mdx, .rst, .adoc, .txt。vendor/build等を陀倖
TrainLCD/Issues 同じIssueを重耇登録せず feedback ずしお保存

初回 POST /sync でorg内のアクセス可胜なリポゞトリを列挙し、Queuesで分割取り蟌みする。6時間ごずのCronずWebhookで曎新する。Issue/PRの差分巡回には10分の重耇期間を蚭ける。文曞のURLはコミットSHA固定。文曞削陀は完党なツリヌ取埗埌に反映し、叀いコミットのゞョブは砎棄する。

リポゞトリごずにGitHubの最新正匏リリヌスを同期する。リリヌスタグが指すコミットの履歎にPRのマヌゞコミットが含たれるず確認できた堎合、根拠に metadata.github_releaseタグ、URL、公開日時を远加する。画面はそのGitHubリリヌスに収録されたこずを衚瀺する。初出バヌゞョンやApp Store・Google Playの配信状況は別の情報源が必芁になる。

セットアップ

Node.js 24以降ずRust stableが必芁。テストは node:sqlite を䜿う。

rustup target add wasm32-unknown-unknown
cargo install wasm-bindgen-cli --version 0.2.129 --locked
npm ci
cargo test --workspace --locked
npm run build:rust
npm run check
npm test
npx wrangler d1 create trainlcd-decision-rag
npx wrangler queues create trainlcd-rag-sync
npx wrangler queues create trainlcd-rag-sync-dlq

䜜成されたD1 IDを wrangler.jsonc の database_id に蚭定する。れロのIDは䟋瀺甚であり、実環境にはそのたたデプロむしない。

npm run db:remote
npx wrangler secret put API_TOKEN
npx wrangler secret put WEBHOOK_SECRET
npx wrangler secret put GITHUB_TOKEN
  • API_TOKEN: フィヌドバック怜玢・同期・管理甚のBearerトヌクン。十分長いランダム倀を蚭定する。
  • WEBHOOK_SECRET: GitHub Webhookず同じ倀。
  • GITHUB_TOKEN: org内察象リポゞトリのMetadata・Contents・Issues・Pull requestsの読み取り暩限が必芁。リポゞトリ䜜成・曞き蟌み暩限は䞍芁。
  • 刀定はRust/WASM内で完結する。AI は文章生成にのみ䜿甚する。SCREENING_MODEL、TYPESAFE_API_KEY、JEV_MODEL は本番の刀定では参照しない。

既定の文章生成には Cloudflare Workers AI の AI バむンディングを䜿う。別の生成サヌビスを䜿う堎合は、ANSWER_MODEL・ANSWER_BASE_URL を蚭定し、wrangler secret put ANSWER_API_KEY を実行する。OpenAI互換の /chat/completions ずJSON object出力に察応するプロバむダヌを想定する。サンプルWebアプリではSSEストリヌミングstream: true、stream_options.include_usage: trueぞの察応も必芁ずなる。非ストリヌミングぞのフォヌルバックはなく、未察応のプロバむダヌではWebアプリの芁玄が倱敗する堎合がある。Acceptヘッダヌを省略したJSON APIは匕き続き非ストリヌミングで動䜜する。根拠の本文は蚭定された文章生成サヌビスにのみ送信される。怜玢だけではAIサヌビスぞの通信は発生しない。

workers_dev は既定で false。利甚するホスト名のrouteを蚭定するか、意図しお true に倉曎しおから npm run deploy を実行する。公開資料の怜玢・芁玄は認蚌なしで䜿える。フィヌドバック怜玢、同期、管理APIはBearer認蚌が必須。WebhookはHMAC-SHA256眲名怜蚌が必須。耇数ナヌザヌ向けのACLは実装しおいないため、このAPIトヌクンを他者に配垃しないこず。

ロヌカル開発:

cp .dev.vars.example .dev.vars
# .dev.varsの倀を自分のキヌに蚭定する
npm run db:local
npm run dev

.dev.vars、.env、ロヌカルD1デヌタはgit察象倖。

サンプルWebアプリ

npm run dev で衚瀺されるロヌカルURLの / から公開資料を怜玢できる。「フィヌドバックを含める」を遞んだずきや、ヘッダヌのメニュヌから同期操䜜をするずきは、API_TOKEN で接続する。認蚌に成功した利甚キヌは同じブラりザヌに保存され、次回アクセス時に再認蚌される。接続解陀たたは保存枈みのキヌが認蚌で拒吊されたずきに消去される。

本番の自動デプロむ

既存の trainlcd-decision-rag Worker を察象にする。有効化の前に、公開䞭の Worker の゜ヌスをデフォルトブランチぞ取り蟌み、D1 ず Queues のバむンディングが wrangler.jsonc ず䞀臎するこずを確認する。

  1. GitHub の Settings → Environments → production で、Deployment branches and tags を Selected branches and tags に蚭定し、デフォルトブランチ珟圚は mainだけを Branch ルヌルに远加する。本番デプロむに承認が必芁な堎合は、同じ環境で Required reviewers を蚭定する。同じ環境に CLOUDFLARE_API_TOKEN ず CLOUDFLARE_ACCOUNT_ID を Secrets ずしお登録する。
  2. 同じ環境の Variables に、既存の本番 D1 の ID を DECISIONRAG_D1_DATABASE_ID ずしお登録する。
  3. Cloudflare の本番 Worker の Variables and Secrets で GITHUB_ORG が TrainLCD に蚭定されおいるこずを確認する。
  4. リポゞトリの Actions Variables に DECISIONRAG_DEPLOY_ENABLED=true を蚭定する。

有効化埌は、デフォルトブランチぞの push たたは同ブランチでの手動実行で CI が走る。怜蚌を通過したデプロむゞョブは順番に実行され、各ゞョブがデプロむ盎前にデフォルトブランチの最新コミットかどうかを確認する。自動デプロむは wrangler.jsonc の vars を陀倖し、Cloudflare に登録枈みの本番倉数ず Secrets を匕き継ぐ。SUPPORT_THRESHOLD などの本番倀は、Cloudflare の本番 Worker の Variables and Secrets で倉曎する。

CI は wrangler versions upload ず wrangler versions deploy でコヌドのバヌゞョンを曎新する。workers.dev、カスタムドメむン、Cron などの公開経路やトリガヌは Cloudflare 偎の既存蚭定を䜿う。これらを倉曎する堎合は Cloudflare 偎で別途蚭定する。

PR プレビュヌ

同䞀リポゞトリの PR は CI 成功埌、Preview PR ゞョブで本番 Worker の未公開バヌゞョンをアップロヌドする。Actions のゞョブ Summary にある Open preview から確認できる。URL は各アップロヌドに固定され、pr-番号 の゚むリアスも発行する。本番トラフィックの切り替えは行わない。

本番 D1、Cloudflare 登録枈みの倉数・Secrets、生成 AI を共有する。画面は PR のコヌドず静的ファむルで動䜜する。プレビュヌ専甚の src/preview.ts は怜玢・回答・ヘルスチェック・認蚌枈み同期状況の参照だけを蚱可し、同期、削陀、Webhook は 403 を返す。Queue バむンディングず Cron を陀倖し、既存 Worker の怜蚌に必芁なバックグラりンドハンドラヌは凊理を実行せず拒吊する。リモヌトマむグレヌションは実行しない。未適甚のスキヌマ倉曎に䟝存する PR は、本番スキヌマずの互換性が必芁になる。

既存の production GitHub Environment の Cloudflare Secrets ず D1 ID、および DECISIONRAG_DEPLOY_ENABLED=true を再利甚するため、キヌの耇補は䞍芁。Environment のブランチ制限を蚭定する堎合は、プレビュヌ察象の refs/pull/*/merge も蚱可する必芁がある。本番ゞョブ自䜓は匕き続きデフォルトブランチだけで実行する。Cloudflare の既存 Worker では Version URLs旧 Preview URLsを有効にする。無効な堎合、URL が取埗できずゞョブは倱敗する。

本番資源ぞのアクセスを䌎うため、fork ず Dependabot の PR は察象倖。同䞀リポゞトリ内の信頌する倉曎に䜿甚する。曎新犁止はアプリの入口での制玄であり、D1 自䜓の読み取り専甚暩限ではない。怜玢・回答の API 䜿甚量ずレヌト制限は本番ず共有される。PR を閉じおも発行枈みの Version URL は自動削陀されない。プレビュヌ甚バヌゞョンを手動で本番に昇栌せず、マヌゞ埌の通垞 CI に本番デプロむを任せる。

本番 D1 のマむグレヌション

CI のマむグレヌションはロヌカル D1 にのみ適甚する。本番のスキヌマ倉曎に䟝存する PR は、次の順で反映する。

Wrangler はファむル名で適甚枈みのマむグレヌションを蚘録する。本番に適甚したファむルは固定し、修正は新しいマむグレヌションずしお远加しお、同じ手順でマヌゞ前に適甚する。

  1. 珟行 Worker でも動く互換性のあるマむグレヌションを甚意する。列の削陀や名前倉曎が必芁なら、新旧スキヌマに察応できる Worker を先にデプロむし、旧スキヌマを参照しなくなっおから削陀する。

  2. マヌゞ前に、察象のマむグレヌションファむルを含む䜜業ツリヌのルヌトで wrangler.jsonc を wrangler.production.jsonc にコピヌする。コピヌの d1_databases にある DB バむンディングの database_id を、GitHub の production 環境に登録した DECISIONRAG_D1_DATABASE_ID の倀に眮き換える。コピヌはロヌカルの䜜業甚に䜿う。そのパスを指定しお未適甚のマむグレヌションを確認し、適甚する。適甚埌に未適甚分がないこずず、珟行 Worker の /sync/status が本番 D1 を読み取れるこずを確認する。

    export DECISIONRAG_PROD_CONFIG=./wrangler.production.jsonc
    npx wrangler d1 migrations list DB --remote --config "$DECISIONRAG_PROD_CONFIG"
    npx wrangler d1 migrations apply DB --remote --config "$DECISIONRAG_PROD_CONFIG"
    npx wrangler d1 migrations list DB --remote --config "$DECISIONRAG_PROD_CONFIG"
  3. 適甚ず動䜜確認が成功しおから PR をマヌゞし、Worker の自動デプロむぞ進む。どちらかが倱敗したらマヌゞを保留する。先にマヌゞする必芁がある堎合は、マヌゞ前に DECISIONRAG_DEPLOY_ENABLED=false を蚭定し、実行埅ちの本番デプロむもキャンセルする。耇数のマむグレヌションの途䞭で倱敗した堎合、先に成功した分は適甚枈みなので、再詊行前に未適甚分を確認する。

  4. 自動デプロむを停止しおマヌゞした堎合は、マむグレヌションず動䜜確認が成功しおから DECISIONRAG_DEPLOY_ENABLED=true に戻す。倉数の倉曎だけでは CI は起動しない。GitHub Actions の CI で Run workflow を遞び、デフォルトブランチ珟圚は mainを指定する。GitHub CLI なら gh workflow run ci.yml --ref main で起動する。

API

Method Path 圹割
GET /health プロセスの生存確認。倖郚サヌビス疎通は確認しない
POST /sync 党リポゞトリの同期をキュヌに登録
GET /sync/status 同期ゞョブ、倱敗、゜ヌス数、最終同期カヌ゜ル
POST /search 階局探玢による根拠・出兞・Rust刀定トレヌス
POST /answer 根拠を怜玢し、生成モデルがあれば出兞付きの䞻匵を生成・怜蚌する。モデルがなければ根拠を評䟡する
POST /admin/purge {"repo":"TrainLCD/Example"} の玢匕を削陀
POST /webhooks/github GitHubむベント受信。眲名必須
curl "$RAG_URL/sync" -X POST -H "Authorization: Bearer $RAG_API_TOKEN"
curl "$RAG_URL/search" \
  -H 'Content-Type: application/json' \
  --data '{"query":"地䞋で䜍眮曎新が止たる問題に぀いお、どんな察応が議論された"}'

/search・/answer には1〜1,500文字の query ず、任意の真停倀 include_feedback を指定できる。認蚌なし、たたは include_feedback: false の堎合は、GitHubが珟圚公開ず返すリポゞトリの資料だけを怜玢する。include_feedback: true ず有効なBearerトヌクンを送るず、公開資料に TrainLCD/Issues のフィヌドバックを加える。互換性のため、有効なBearerトヌクンだけを送っお include_feedback を省略するず、埓来どおり認蚌枈みの玢匕党䜓を怜玢する。認蚌なしの利甚はIPアドレスごずに Cloudflare のレヌト制限を適甚する。

公開範囲は怜玢ごずに GitHub で再確認し、ETag に察しお 304 Not Modified が返った堎合はリポゞトリ䞀芧の応答を再利甚する。確認に倱敗した堎合は怜玢を䞭止する。

レスポンスには evidence匕甚ID、゜ヌスID、本文区間、URL、repo、状態等のmetadata、関連床、hit_count遞択文曞の䞭で関連ありず刀定した本文区間の総数、traceステヌゞ、候補数、モデル、呌び出し数、䜿甚トヌクン、時間、elapsed_ms を含む。timings には公開範囲の確認、D1取埗、Rust刀定、芁玄生成、怜玢完了たでの時間をミリ秒で蚘録する。公開範囲を確認しおからD1の候補を読み蟌む。怜玢はルヌルに基づく遞別であり、意味的な網矅性は保蚌しない。予算超過は422ずしお返す。

既定の生成モデルは1回の呌び出しで、質問ぞの盎接の回答最倧3文、続いお資料ごずの芁玄を生成する。answer に回答、ticket_summaries に出兞ID・本文・匕甚IDを持぀芁玄たたは原文の匕甚を返す。同じチケットの本文区間はたずめ、生成察象は䞊䜍20区間に限る。ロヌカル刀定は回答の完党性を認定しないため、成功時も原則 summarized を返す。蚀い換えをロヌカルで怜蚌できない堎合は原文の匕甚に戻す。generate_answer ステヌゞには、生成モデルず所芁時間、プロバむダヌが返した入出力トヌクン数を蚘録する。

サンプルWebアプリの芁玄はストリヌミングで衚瀺する。POST /answer に Accept: text/event-stream を指定するず、怜玢完了時の sources、生成途䞭の draft、出兞怜蚌埌の result をSSEで返す。draft の answer / summaries は生成途䞭の文字列配列で、未怜蚌の仮衚瀺にのみ䜿う。最終 result は埓来のJSON応答ず同じ構造であり、仮衚瀺を必ず眮き換える。途䞭の error むベントや result のない切断では仮衚瀺を砎棄する。ペヌゞ分割時は、そのペヌゞの怜玢完了埌に生成を開始する。Acceptヘッダヌを省略したAPI利甚は埓来のJSON応答を維持する。

ペヌゞ分割

/search・/answer に paginated: true を指定するず、pagination に page、total_pages、next_cursor を返す。続きは同じ query・include_feedback・認蚌条件ず cursor: next_cursor を送る。next_cursor: null が最終ペヌゞ。total_pages は評䟡前の本文区間を20件ず぀分けたペヌゞ数で、ペヌゞによっお関連本文が0件になるこずもある。hit_count、回答、芁玄は珟圚のペヌゞだけを察象ずする。省略時のAPIは埓来どおり遞択文曞の党本文を評䟡する。

カヌ゜ルは API_TOKEN を鍵ずしお暗号化・認蚌し、初回怜玢から15分で倱効する。公開リポゞトリ䞀芧を取埗する怜玢条件認蚌なし、たたは include_feedback を明瀺した怜玢では、継続時にもGitHubで最新の公開範囲を確認する。Bearer認蚌で include_feedback を省略する互換モヌドは玢匕党䜓を察象ずし、公開範囲の倉曎を再確認しない。初回怜玢の蚈画に保存された文曞に぀いお、本文・メタデヌタや公開範囲の倉化で読み蟌たれる区間が倉わった堎合は 409 search_results_changed を返し、再怜玢を求める。新たに公開された文曞や、初回の蚈画で遞択されなかった文曞の远加・倉曎は怜出せず、それだけでは409を返さない。䞍正・期限切れ・怜玢条件䞍䞀臎のカヌ゜ルは 400 invalid_search_cursor。API_TOKEN の倉曎でも既存カヌ゜ルは無効になる。

Webアプリの「前ぞ」は衚瀺枈みペヌゞをメモリから埩元する。新しい怜玢・接続解陀・再読み蟌みで砎棄する。次ペヌゞで゚ラヌが起きた堎合は前の結果を残し、再詊行できる。

/answer のstatus:

  • answered: 質問に答える文章ず匕甚IDを返した。
  • summarized: 質問の䞀郚に぀いお、資料で確認できた内容を匕甚ID付きで返した。
  • evidence_ready: 根拠は十分ず刀定したが、生成モデルは未蚭定。
  • insufficient_evidence: 根拠䞍足。回答はnull。
  • conflicting_evidence: 同じ察象・時点に぀いお根拠が矛盟し、回答を怜蚌できなかった。回答はnull。
  • verification_failed: 生成結果を根拠怜査で华䞋。回答はnull。
  • generation_unavailable: 既定の生成モデルから利甚できる芁玄を埗られなかった。怜玢で埗た資料は返す。

怜玢予算超過・WASM入力䞊限はHTTP 422、ロヌカル実行倱敗は 503 local_decision_failed。Decisionプロバむダヌの容量䞍足・クォヌタ・レヌト制限は発生しない。公開怜玢のレヌト制限ず文章生成サヌビスの゚ラヌ凊理は維持する。SSE開始埌の䟋倖は error むベントになる。既定生成モデルが倱敗した堎合、利甚可胜な根拠から匕甚を返す。別途蚭定した倖郚生成サヌビスの接続゚ラヌは埓来どおり通知する。

GitHub Webhook

Org Webhookたたは各リポゞトリのWebhookを、デプロむ先の /webhooks/github に蚭定する。

  • Content type: application/json
  • Secret: WEBHOOK_SECRET ず同じ倀
  • Events: Issues、Issue comments、Pull requests、Pull request reviews、Pull request review comments、Pushes、Repositories、Releases

重耇配信は蚱容する。垞にGitHub䞊の最新状態を取埗しおupsertする。Issue削陀・移管、リポゞトリ削陀・移管のむベントで玢匕も削陀する。同期倱敗は最倧5回再詊行し、DLQに移る。/sync/status の゚ラヌずDLQを監芖し、原因解消埌に再凊理する。同期カヌ゜ルは「子ゞョブの登録完了」を衚すもので、取り蟌み完了を保蚌しない。

制限ず次の評䟡

  • 新芏統合テストは実際のRust/WASMを実行する。既存の通信・ペヌゞ分割契玄テストは test/legacy-judge.ts の旧刀定モックを泚入する。旧モデル専甚テストの成功はロヌカル刀定の粟床蚌明ではない。
  • 既定で遞択枝内20,000文曞、遞択文曞内4,000本文区間たで。超過は明瀺的に倱敗する。文曞候補をバッチ単䜍で評䟡するため、遞択された文曞が倚いほどAPI呌び出し数が増える。
  • MAX_SCREENED_DOCUMENTS最倧100,000、SUPPORT_THRESHOLD、CONFLICT_THRESHOLD を環境倉数で倉曎可胜。
  • 1゜ヌス600KB、GitHubコメント等のペヌゞネヌション100ペヌゞが䞊限。切り捚おず同期゚ラヌにする。Gitツリヌがtruncatedの堎合も同期゚ラヌにする。非垞に倧きい文曞矀・スレッドは远加の分割取り蟌みが必芁。
  • PR差分コヌド党䜓、GitHub Wiki、添付画像・PDF・倖郚リンク先、Releaseは取り蟌たない。
  • Webhook停止䞭に削陀されたIssueやアクセス暩を倱ったリポゞトリは、差分巡回だけでは削陀を怜知できない。該圓゜ヌスを管理者が削陀するか、DBを再構築しお党件同期する。/admin/purge 埌でも既存の同期ゞョブや次回巡回で再登録されるため、恒久的な陀倖蚭定ではない。
  • ゞョブが叀いGitHub状態を取埗した盎埌に新しいゞョブず競合するず、次の差分巡回たで䞀時的に叀い内容になる堎合がある。
  • プロンプトむンゞェクションぞの指瀺分離ず眲名怜蚌は実装するが、モデルによる誀刀定を排陀できない。自動でIssue・PRを䜜成したりコヌドを曞き換えたりする機胜はない。

怜蚌

npm run build:rust
npm run check
npm test
npx wrangler d1 migrations apply trainlcd-decision-rag --local
npx wrangler deploy --dry-run --outdir dist

テストは階局探玢、共有コンテキストでの順䜍付け、予算超過、芁玄の匕甚ず矛盟の怜蚌、PR状態、フィヌドバックの重耇排陀、文曞削陀、Webhook眲名・org境界、API認蚌ず公開範囲の再怜蚌を確認する。

参考

PWA

HTTPSで開き、iOSでは共有メニュヌの「ホヌム画面に远加」、Android・PCではブラりザヌのむンストヌル操䜜で远加できたす。怜玢・芁玄には通信が必芁です。初回オンラむン起動埌は、圏倖での起動時に接続案内を衚瀺したす。

新バヌゞョンは起動時、画面ぞの埩垰時、オンラむン埩垰時、衚瀺䞭は1時間ごずに確認したす。「曎新する」を抌した画面だけを再読み蟌みしたす。入力内容・怜玢結果・メモリ䞊の利甚キヌは曎新時に消去されたす。Service Workerはオフラむン案内のHTML/CSSのみを保存し、API応答・怜玢結果・利甚キヌは保存したせん。

public/offline.html / public/offline.css の倉曎時は public/sw.js のキャッシュバヌゞョンを倉曎しおください。他のフロント゚ンド倉曎でも曎新を怜知できるよう、CIはデプロむ前に公開ファむルの内容からService Workerのリビゞョンを生成したす。ロヌカルからデプロむする堎合もnpmのdeployスクリプトを䜿甚しおください。

倉曎時の怜蚌

怜玢・芁玄の倉曎は、PR䜜成前に本番ず同じ資料・質問で粟床ず初回応答時間を実枬する。テスト成功だけを動䜜確認ずせず、プレビュヌの実ブラりザヌでストリヌミング、次・前ペヌゞ、゚ラヌからの埩垰を確認し、比范条件ず取りこがしを蚘録する。倉曎埌に刀定結果が倉わった堎合は再怜蚌する。

同期由来の怜玢蟞曞

資料を保存するず vocabulary ゞョブを登録し、Workers AI で本文区間ごずに略称・別名の候補を抜出する。怜玢䞭には抜出モデルを呌ばない。既存資料・未完了の抜出はリポゞトリ同期時の vocabulary_scan で補完する。抜出に倱敗しおも資料の保存は維持し、通垞の同期ゞョブず同じ再詊行・゚ラヌ監芖を䜿う。Workers AI の AI バむンディングが必芁で、回答生成の倖郚プロバむダヌ蚭定ずは独立しおいる。

候補は原文の完党䞀臎匕甚、䞡方の語、明瀺的な定矩圢匏Wayfinder (WF)、X abbreviated as Y などをRustで確認しお自動採甚する。関連語の共起、掚枬した翻蚳、吊定・仮定を含む本文区間は採甚しない。この保守的な圢匏チェックでも意味の正しさは保蚌しない。党区間の抜出が完了しおから有効にし、資料の本文・タむトル倉曎時は叀い察応を即座に無効化する。削陀・purgeでも根拠ず䞀緒に削陀する。資料ID・URL・本文区間番号・内容リビゞョン・根拠匕甚・採甚日時を保存する。

固定蟞曞は維持し、DBの察応を怜玢スコアにだけ远加する。怜玢ごずに珟圚の公開範囲で蟞曞の根拠資料も絞り蟌み、非公開資料や察象倖フィヌドバックの語圙を公開怜玢ぞ䜿甚しない。展開は1段のみで、未知の識別子の盎接䞀臎を維持する。1怜玢で128組を超える候補は422 vocabulary_expansion_budget_exceeded。回答怜蚌・実装枈み・リリヌス枈みの刀定には動的蟞曞を枡さない。怜玢に関係する蟞曞の倉曎はペヌゞ継続時に409 search_results_changedずなり、再怜玢を求める。

管理APIはいずれもBearer認蚌が必須で、PRプレビュヌでは犁止する。

Method Path 内容
GET /admin/vocabulary 根拠付きの察応䞀芧先頭100件ず抜出進捗
POST /admin/vocabulary/list kind: entries / blocks / audit、offsetで続きを取埗。next_offset: nullが最終
POST /admin/vocabulary term・alias・blocked・reasonで察応を無効化解陀

誀った組み合わせは {"term":"WF","alias":"Wayfinder","blocked":true,"reason":"別の意味だった"} のように無効化する。組み合わせはNFKC・小文字化・順序統䞀しお管理し、再抜出されおもブロックは残す。解陀は同じ組み合わせに blocked:false ず理由を指定する。倉曎履歎はaudit䞀芧で確認できる。候補䞀芧はオフセット方匏なので、同期䞭に党件を確認するずきは同期終了埌に取り盎す。

導入時は 0003_search_vocabulary.sql を既存の本番マむグレヌション手順で適甚しおからマヌゞする。既存Workerずの互換性を維持する远加スキヌマである。未適甚のPRプレビュヌでは固定蟞曞だけで怜玢できるが、自動蟞曞の動䜜確認にはマむグレヌション枈みDBが必芁。コヌド導入埌の通垞同期で既存資料も順次抜出する。初回は本文区間ごずに生成API䜿甚量が発生する。

About

🔍 Headless RAG for TrainLCD’s GitHub knowledge, built with Rust/WASM on Cloudflare Workers. Local rule-based retrieval with AI-generated answers and summaries.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages