Skip to content
This repository was archived by the owner on Aug 20, 2026. It is now read-only.

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

yay-agent

Yay!(イェイ)でキャラ付けしたAIエージェントが自動で会話する実験プロジェクト。

  • 通信: yaylib v2(fork同期済み・Python SDK)
  • 通常DM会話エンジン: 独立Hermes profile + Yay platform plugin
  • 初回DM・追いDM・投稿生成: YAY_LLM_* で選ぶOpenAI互換backend
  • 安全装置: PolicyEngine・durable Outbox・日次/rolling-hour上限・送信前フィルタ・全ログ

構成

yay_agent/
  config.py    # .env / persona / 上限 / ターゲット性別 / メディア / ダッシュボード
  qwen.py      # QwenChat クライアント(aiohttp・リトライ付き)
  store.py     # SQLite: 会話状態・Outbox・上限予約・backoff
  policy.py    # 全送信共通の本文・PII・日次上限ポリシー
  send_service.py # 唯一の外向き送信境界: Policy + Outbox + Yay API
  safety.py    # 送信フィルタ(URL/電話/住所/メール禁止・長さ制限)
  brain.py     # プロンプト生成・返信/初回メッセージ作成・記憶更新(JSON出力)
  scout.py     # タイムライン監視・候補収集・性別取得(読み取り専用)
  media.py     # Yay CDN限定のprivateメディア保存・URL dedupe
  media_sync.py # DM相手の全履歴backfill・投稿watermark差分同期
  dashboard.py # 状況確認・手動DM送信(aiohttp)
  engagement.py # 成果帰属・匿名特徴量・Wilson区間・保守的variant選択
  runner.py    # DM / 24時間追いDM / outbound / 投稿 / 公開返信 / 新着全投稿いいねのoneshot処理
  __main__.py  # CLI
hermes_plugin/  # Yay platform adapter(受信ledger・Shadow/Live・API lock)
personas/sample.json  # キャラ設定のサンプル(PERSONA環境変数で切替)
data/           # SQLite・セッションキャッシュ・保存メディア(gitignore対象)

セットアップ

cp .env.example .env
# YAY_EMAIL / YAY_PASSWORD / LLM API key を設定
python -m venv .venv
source .venv/bin/activate
pip install -e .

Hermes運用

# 稼働状態
systemctl --user status hermes-gateway-yay.service
systemctl --user status yay-agent-dashboard.service

# 現在のmode
hermes config get gateway.platforms.yay.extra.mode

# 緊急rollback: まずShadowへ戻してから専用gatewayをplanned reload
hermes config set gateway.platforms.yay.extra.mode shadow
systemctl --user reload hermes-gateway-yay.service
  • Yay入力に渡すToolsetは yay-topic-search と読み取り専用 yay-lookup のみ。映画・邦ロック・音楽以外の公開検索と、書き込み操作はコードで拒否する
  • 個人memory、terminal、file、browser、汎用web、外部送信Toolはmodelへ渡さない
  • shadowは下書きをdata/hermes_yay.sqlite3へ保存するだけで送信しない
  • liveはHermes最終出力をSendServiceへ渡す。LLM自身には送信Toolを与えない
  • 通常返信は、会話終了・拒否・謝罪修復を除き「短い反応+返しやすい足場(質問1つまたは比較して返せる自分の話)」にする
  • 生成文のは中央policyへ渡す前に除去する。正規化後に空になる出力は拒否し、URL・PII・長さ・idempotency検査は維持

Legacy CLI / 手動診断

Hermes gatewayがlive中は、以下の実送信コマンドを並行実行しない。

source .venv/bin/activate

# 下書きのみ(送信しない)
python -m yay_agent tick-reply --dry-run
python -m yay_agent tick-followup --dry-run --limit 1
python -m yay_agent tick-outbound --dry-run --limit 1
python -m yay_agent tick-post --dry-run
python -m yay_agent tick-timeline-reply --dry-run --limit 1
python -m yay_agent tick-timeline-like --dry-run

# 送信せず、DM・公開投稿の成果だけを更新
python -m yay_agent tick-engagement

# Legacy実送信(通常運用では使わない)
python -m yay_agent tick-reply
python -m yay_agent tick-followup --limit 1
python -m yay_agent tick-outbound --limit 1
python -m yay_agent tick-post
python -m yay_agent tick-timeline-reply --limit 1
python -m yay_agent tick-timeline-like --batch-limit 50 --page-limit 3

# ダッシュボード(状況確認・効果測定・手動DM送信)
python -m yay_agent dashboard --port 8666

設定(.env)

変数 既定 意味
YAY_EMAIL / YAY_PASSWORD - Yay!アカウント
YAY_LLM_API_KEY / YAY_LLM_BASE_URL / YAY_LLM_MODEL - OpenAI互換LLM backend
AGENT_MODE draft draft=下書きのみ / live=実送信
TARGET_GENDER 1 1=女性のみ / 0=男性のみ
OUTBOUND_HOURLY_LIMIT / OUTBOUND_DAILY_LIMIT 30 / 300 初回DMのhard cap
REPLY_DAILY_LIMIT 0 DM返信の日次上限(0=無制限)
POST_HOURLY_LIMIT / POST_DAILY_LIMIT 1 / 4 投稿のhard cap
POST_REPLY_HOURLY_LIMIT / POST_REPLY_DAILY_LIMIT 6 / 40 公開返信のhard cap
SAVE_MEDIA 0 画像・動画を保存するか
PERSONA sample.json キャラ設定ファイル
DASHBOARD_HOST / DASHBOARD_PORT 127.0.0.1 / 8666 ダッシュボード待受

テスト

python -m pytest -q

ライセンス

MIT

About

Policy-controlled Yay! conversation agent and Hermes platform adapter

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages