action-perfect-get-on-go

command module
v1.0.19 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 30, 2025 License: MIT Imports: 1 Imported by: 0

README ¶

🀖 Action Perfect Get On Go

Language Go Version GitHub tag (latest by date)

🌟 抂芁: 完璧な情報取埗ずAI構造化

Action Perfect Get On Go は、耇数のりェブペヌゞから本文を䞊列で高速に取埗し、その結合されたテキストを LLM倧芏暡蚀語モデル のマルチステップ凊理によっお情報欠萜なく重耇排陀、重芁な情報を保持したたた、情報密床の高い簡朔な文章に論理的に構造化する、高い保守性ず堅牢性を備えたコマンドラむンツヌルです。

このツヌルは、ロヌカルファむルパスに加えお、Google Cloud Storage (GCS) バケット内のファむルからでも、凊理察象のURLリストを透過的に読み蟌むこずができたす。たた、最終的な構造化結果は、自動的に完党なHTMLドキュメントに倉換され、ロヌカルファむルパスたたは GCS URI (gs://...) を出力先ずしお、柔軟に曞き出すこずが可胜です。初期からの䞊列凊理での負荷や䞀時的なネットワヌク゚ラヌに耐えるための堅牢なリトラむ・遅延メカニズムを備えおおり、明確に分離されたDIパむプラむン蚭蚈により、高い保守性を実珟しおいたす。


🛠 䞻な機胜ず堅牢性

  1. 堅牢なWebスクレむピングず䞊列数制埡:
    • 耇数のURLからの本文抜出をGoルヌチンで同時に実行したす。最倧䞊列数はCLIオプションで制埡されたす。デフォルトは10
    • 䞊列凊理にはセマフォ機構を採甚し、実行スロットの䞊限を厳密に管理するこずで、察象サヌバヌぞの過負荷を防止し、アプリケヌションのリ゜ヌス消費を最適化したす。
    • 個々のGoroutineは、䟝存性泚入されたカスタムHTTPクラむアントのタむムアりトずリトラむロゞックによっお堅牢に制埡されたす。
    • Webスクレむピングずリトラむ戊略は、runner.ReliableScraperずいう独立したコンポヌネントにカプセル化され、DIパむプラむンのContentFetcherに泚入されたす。これにより、堅牢性ロゞックのテスト容易性ず亀換性が向䞊したした。
  2. LLMマルチステップ凊理 (MapReduce型) の堅牢な実行:
    • 巚倧な結合テキストをセグメントに分割。
    • 各セグメントを䞊列でLLM凊理し、䞭間芁玄Mapを䜜成。
    • LLM凊理の䞊列実行ずレヌトリミット管理は、LLMExecutorむンタヌフェヌスにカプセル化されおいたす。たた、MapフェヌズずReduceフェヌズで異なるAIモデルを指定する機胜も抜象化に含たれおいたす。
    • 䞭間芁玄を統合し、最終的な重耇排陀ず論理構造化を実行したす。この際、各䞻芁セクション##の盎埌に、そのセクションの情報を構成した参照元URLリストを付䞎し、情報源の透明性を確保したす。
  3. AI駆動のデヌタクリヌンアップず構造化: 結合されたテキストから重耇コンテンツやノむズフッタヌ、ナビゲヌションなどを排陀し、情報構造を再構築したす。凊理指瀺は日本語で行われたす。内郚で go-ai-client を利甚
  4. 堅牢なデヌタ入力局 (GCSサポヌト):
    • Go SDKを利甚しおGCSパス (gs://...) を怜知し、Cloud Run Jobやロヌカル環境で認蚌情報ADCを甚いおセキュアか぀確実にファむルを読み蟌みたす。
    • 入力ファむルの読み蟌みロゞックは、pipeline.InputReaderむンタヌフェヌスgo-remote-ioパッケヌゞの抜象化を利甚によっお抜象化されたす。GCSずロヌカルファむルの読み蟌みは、䟝存性泚入された倖郚コンポヌネントが透過的に担いたす。これにより、I/O責務がpipelineパッケヌゞから完党に分離されおいたす。
  5. 堅牢なデヌタ出力局 (GCSサポヌト):
    • 出力パスの柔軟性: --output フラグにロヌカルパスたたはGCS URI (gs://bucket/object) を指定するこずで、出力先を透過的に切り替えられたす。
    • 排他的な出力制埡: GCS URIが指定された堎合、ロヌカルファむルぞの曞き蟌みや暙準出力ぞのプレビュヌは自動的にスキップされ、GCSぞの出力のみが実行されたす。
    • GCSぞの出力には、pipeline.Writerむンタヌフェヌスgo-remote-ioパッケヌゞの抜象化 の実装が䜿甚されたす。GCS URIのパヌスロゞックも倖郚ナヌティリティに委譲されおおり、認蚌は入力局ず同様にアプリケヌションのデフォルト認蚌情報 (ADC) に䟝存したす。
  6. 柔軟な蚭定: 各フェヌズでタむムアりトを蚭定可胜にし、LLM APIキヌを環境倉数たたはCLIオプションで柔軟に蚭定できたす。
  7. 内郚蚭蚈の最適化:
    • DIベヌスの明確なパむプラむン構造: アプリケヌションは「URL生成」「コンテンツ取埗」「AIクリヌンアップ・出力」の3぀の独立したステヌゞに分割され、DIによっお結合されたす。特に「コンテンツ取埗」ステヌゞには、リトラむ戊略を責務ずする独立したScraperRunner実装が泚入され、パむプラむンの各コンポヌネントが単䞀の責務を持぀ように蚭蚈されおいたす。
    • プロンプト定矩を倖郚ファむル.mdに分離し、Goのembedパッケヌゞでバむナリに組み蟌むこずで、デプロむの堅牢性を確保。
    • LLMプロンプトの生成にビルダヌパタヌンを採甚し、テンプレヌトパヌスのコストを削枛するため再利甚可胜なむンスタンスずしお管理しおいたす。
    • CLIオプションを構造䜓に集玄するこずで、グロヌバル倉数ぞの䟝存を枛らし、コヌドの堅牢性を高めおいたす。I/O凊理は log/slog による構造化ロギングに移行し、ファむル曞き蟌み時のディレクトリ自動䜜成ず堅牢なファむル䞊曞きロゞックを远加したした。

✹ 技術スタック

芁玠 技術 / ラむブラリ 圹割
蚀語 Go (Golang) ツヌルの開発蚀語。䞊列凊理ず堅牢な実行環境を提䟛したす。
CLI Cobra コマンドラむン匕数ずオプションの解析に䜿甚したす。
Web抜出 github.com/shouni/go-web-exact 任意のりェブペヌゞからメむンの本文コンテンツを正確に抜出したす。
AI通信 github.com/shouni/go-ai-client LLMGeminiぞの通信を管理し、自動リトラむ機胜を提䟛したす。
I/O, GCS github.com/shouni/go-remote-io) ロヌカルファむルずGCSぞの透過的な入出力を抜象化し、パむプラむンのI/O責務を分離したす。
HTML倉換 github.com/shouni/go-text-format) LLMが出力したMarkdownを完党なHTMLドキュメントに倉換・レンダリングしたす。
プロンプト text/template, embed プロンプトを倖郚ファむル化し、テンプレヌトパヌスのコストを抑えた効率的なプロンプト生成ロゞックを実珟したす。
䞊列凊理 sync.WaitGroup / Goルヌチン 耇数のURLぞのアクセス、およびLLMマルチステップ凊理における䞭間芁玄の生成 (Mapフェヌズ) を䞊列で高速に実行したす。
蚭蚈パタヌン 䟝存性泚入 (DI) / パむプラむン / ビルダヌパタヌン 凊理フロヌ党䜓を構造化し、モック化ず保守性を向䞊させたす。I/Oずクラむアントの構築は、倖郚のfactoryパッケヌゞに委譲され、internal/builderは泚入の調敎圹のみを担いたす。

🗃 凊理の流れ (Pipeline Flow)

本ツヌルは、䟝存性泚入DIで結合された3぀の䞻芁なパむプラむンステヌゞを順に実行したす。

1. 倖郚パむプラむンステヌゞ
ステヌゞ 担圓コンポヌネント 圹割
Stage 1: URL生成 pipeline.URLGenerator 䟝存性泚入された pipeline.InputReader を䜿甚し、GCS URIたたはロヌカルファむルからURLリストを読み蟌み、凊理察象のURLを抜出する。
Stage 2: コンテンツ取埗 pipeline.ContentFetcher 䞊列スクレむピングず堅牢なリトラむを実行し、本文コンテンツを抜出する。
Stage 3: AIクリヌンアップ・出力 pipeline.LLMOutputGenerator 抜出コンテンツを結合し、MapReduce凊理cleaner.Cleanerを実行しお最終結果をHTMLドキュメントずしお柔軟に出力する。
2. Stage 3 内郚 (LLM MapReduceフロヌ)

Stage 3AIクリヌンアップの凊理は、cleaner.Cleanerが以䞋の詳现なMapReduceフロヌを実行するこずで行われたす。

  1. コンテンツ結合ず分割: 成功したすべおの抜出コンテンツを結合し、LLMのトヌクン制限MaxSegmentCharsに埓っお安党なチャンクSegmentに分割する。
  2. Mapフェヌズ (䞊列実行):
    • 各チャンクは、LLMExecutor の䞊列セマフォずレヌトリミッタヌの制埡䞋でLLM--map-modelで指定に䞊列で送られる。
    • LLMは各チャンクに察しお「䞭間芁玄」を生成する。
  3. Reduceフェヌズ (単䞀実行):
    • すべおの䞭間芁玄を統合し、LLM--reduce-modelで指定に送り、最終的な重耇排陀、論理的な構造化を実行する。
    • 結果の付䞎: この際、統合に甚いられた各゜ヌスURLが、関連する䞻芁セクション##の盎䞋にリストずしお挿入される。
  4. 出力: LLMが構造化した最終的なテキストMarkdown圢匏が、go-text-formatによっお完党なHTMLドキュメントに倉換された埌、--outputで指定されたパスロヌカルたたはGCS に曞き蟌たれる。

🛠 事前準備ず蚭定

1. ビルド
# リポゞトリをクロヌン
git clone git@github.com:your-repo-path/action-perfect-get-on-go.git
cd action-perfect-get-on-go

# 䟝存関係をダりンロヌド (GCS SDKを含む)
go mod tidy

# 実行ファむルを bin/ ディレクトリに生成 (カレントディレクトリの main パッケヌゞを䜿甚)
go build -o bin/llm_cleaner .

実行ファむルは ./bin/llm_cleaner に生成されたす。

2. LLM API キヌの蚭定 (必須)

LLMGeminiを利甚するためには、APIキヌが必芁です。蚭定は以䞋のどちらかの方法で行いたす。

  • 掚奚: コマンド実行時に -k たたは --api-key フラグで盎接指定する。
  • 代替: 環境倉数 GEMINI_API_KEY を蚭定する。

泚意: コマンドラむンフラグでキヌを指定した堎合、環境倉数の蚭定よりも垞に優先されたす。

# 䟋: 環境倉数に蚭定する堎合
export GEMINI_API_KEY="YOUR_GEMINI_API_KEY" 
3. GCSからの読み蟌み/曞き蟌み蚭定 (クラりド/ロヌカル)

GCSバケットからファむルを読み蟌む、たたはGCSバケットぞファむルを曞き蟌む堎合-f gs://... たたは -o gs://...、プログラムはアプリケヌションのデフォルト認蚌情報 (ADC) を䜿甚しお認蚌を行いたす。

  • Cloud Run Job: Jobに割り圓おられたサヌビスアカりントに、GCSバケットに察する適切なロヌル読み蟌みには Storage オブゞェクト閲芧者、曞き蟌みには Storage オブゞェクト䜜成者 や Storage オブゞェクト管理者 などを付䞎する必芁がありたす。
  • ロヌカルPC: 以䞋のコマンドを実行し、ロヌカル環境に認蚌情報を蚭定する必芁がありたす。
gcloud auth application-default login

🚀 䜿い方 (Usage)

本ツヌルは、凊理察象のURLを蚘茉したファむルを読み蟌む圢匏のみをサポヌトしたす。

実行コマンド圢匏ずオプション
オプション フラグ 説明 デフォルト倀
--api-key -k Gemini APIキヌを盎接指定したす掚奚。 なし
--url-file -f 凊理察象のURLリストを蚘茉したファむルパスを指定したす。ロヌカルパスたたはGCS URI (gs://...) を指定できたす。 (必須) なし
--output -o 最終的な構造化結果の出力先パスを指定したす。ロヌカルパスたたはGCS URI (gs://...) を指定できたす。GCS URIを指定した堎合、ロヌカルぞの出力はスキップされたす。 ./output/output_reduce_final.md
--llm-timeout -t LLM凊理党䜓のタむムアりト時間。 5m0s (5分)
--scraper-timeout -s WebスクレむピングHTTPアクセスのタむムアりト時間。 15s (15秒)
--parallel -p Webスクレむピングの最倧同時䞊列リク゚スト数。リ゜ヌス消費や察象サヌバヌぞの負荷を考慮し、デフォルト倀を調敎したした。 5
--map-model なし Mapフェヌズ䞭間芁玄に䜿甚するAIモデル名䟋: gemini-2.5-flash。 gemini-2.5-flash
--reduce-model なし Reduceフェヌズ最終構造化に䜿甚するAIモデル名䟋: gemini-2.5-pro。 gemini-2.5-pro
1. URLファむル (urls.txt の䟋) の䜜成

ファむル内に、1行に1぀ず぀凊理したいURLを蚘述したす。

# ファむル名: urls.txt
https://example.com/page-a
https://example.com/page-b
https://example.com/page-c/specification
2. 実行コマンド圢匏

凊理を実行するには、必ず run サブコマンドず --url-file たたは -f フラグを䜿甚しお有効なファむルパスを指定する必芁がありたす。URLを盎接匕数ずしお枡す圢匏はサポヌトされおいたせん。

# 最小実行圢匏 (ロヌカルファむルから読み蟌み、結果はデフォルトファむルに出力)
# 暙準出力ぞはMarkdown圢匏のプレビュヌのみが出力されたす。ファむルは './output/output_reduce_final.md' に出力されたす。
./bin/llm_cleaner run -f ./urls.txt

# 掚奚実行圢匏 (APIキヌ、カスタムタむムアりト、ロヌカルファむルに出力、モデル指定)
# デフォルトではMarkdown圢匏で出力されたすが、䟋のように拡匵子を.htmlにするこずでHTMLドキュメントずしお出力するこずも可胜です。
./bin/llm_cleaner run -k "YOUR_API_KEY" -f ./urls.txt \
  -s 30s -t 3m -p 5 \
  --map-model "gemini-2.5-flash" \
  --reduce-model "gemini-2.5-pro" \
  -o ./output/summary.html

# クラりド運甚向け実行圢匏 (GCSバケットから読み蟌み、GCSバケットぞ曞き出し)
# JobサヌビスアカりントにGCS読み曞き暩限が必芁です。
./bin/llm_cleaner run -k "YOUR_API_KEY" \
  -f "gs://my-project/input/urls.txt" \
  -o "gs://my-project/output/summary.html"

📜 ラむセンス (License)

このプロゞェクトは MIT License の䞋で公開されおいたす。

Documentation ¶

The Go Gopher

There is no documentation for this package.

Directories ¶

Path Synopsis
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL