これはGitHub Finish-Up-A-Thon Challenge
への提出です。 私が作ったもの
デジタル秘書は、プライバシーを最優先した個人のAIアシスタントで、あなたのWindows PCで動作し、Telegramを通じてあなたとコミュニケーションを取ります。クラウドサブスクリプションは不要です。Dockerも不要です。あなたのマシンからデータが流出することはありません。それをあなたが選択するまで。
メッセージを送信 → パソコンがそれを処理 → スマートでメモリに対応した返信を受け取ります。音声入力、音声出力。ファイル、ウェブ検索、リマインダー、OCR — すべてTelegramから。
GitHub: github.com/sree1959git/Digital-Secretary
デモ
インストールウィザード
インタラクティブなウィザードは3分未満で完了します:
____ _ _ _ _ ____ _
| _ \(_) __ _(_) |_ __ _| | / ___| ___ ___ _ __ ___| |_ __ _ _ __ _ _
| | | | |/ _` | | __/ _` | | \___ \ / _ \/ __| '__/ _ \ __/ _` | '__| | | |
| |_| | | (_| | | || (_| | | ___) | __/ (__| | | __/ || (_| | | | |_| |
|____/|_|\__, |_|\__\__,_|_| |____/ \___|\___| _| \___| \__\__,_|_| \__, |
|___/ |___/
Your personal AI secretary. On Telegram. On Windows.
Step 1: Telegram Bot Token
Step 2: OpenRouter API Key
Step 3: Default AI Model
Step 4: Name Your AI Secretary
Step 5: Personality
ボットが動作中
You: Remind me to call the dentist tomorrow at 10am
Digital Secretary: Done! I've set a reminder for tomorrow at 10:00 AM: "Call the dentist".
I'll message you here on Telegram when it's time.
You: [sends photo of whiteboard]
Digital Secretary: I can see a whiteboard with what appears to be a sprint plan.
The items listed are: [extracted text from OCR + vision analysis]
You: [voice message] "What did we discuss last week about the project?"
Digital Secretary: [voice reply] Based on our previous conversations, we talked about...
アーキテクチャの概要
Telegram (Your Phone)
│
▼
Digital Secretary (Windows PC)
│
├── 🧠 AI: OpenRouter / Ollama / llama.cpp
├── 💾 Memory: SQLite FTS5 (persistent, searchable)
├── 🛠️ Tools: files, shell, web, OCR, MCP servers
├── 📅 Scheduler: APScheduler-backed reminders
├── 🎙️ STT: faster-whisper (local Whisper)
└── 🔊 TTS: edge-tts (Microsoft neural voices)
戻り組のストーリー
それが始まった場所(以前)
約6ヶ月前、私はこのプロジェクトの最初のバージョンを構築しました—当時はAntidoteと呼ばれていました—週末の実験として。アイデアは単純でした:月額サブスクリプション不要で、私のWindows PCで動作し、既に携帯電話にインストールしていたTelegramを使用する個人的なAIアシスタントが欲しかったのです。
- 月額サブスクリプション不要
- 私のWindows PCで動作
- Telegram(既に携帯電話にインストールしていた)を使用
3日で動作するプロトタイプができた。しかし、その後人生があった。プロジェクトはそこに置かれ—機能的ではあったが荒い:
- 設定ファイルに埋め込まれたハードコーディングされたパス (
C:/Users/Sreedhar/...) - ボットは質問に答えたが、再起動の間はすべてを忘れていた
- 全く音声サポートがなかった
- 1,000行に達した単一のPythonファイル
- ドキュメントなし — 自分で設定する方法を覚えていなかった
私はこれらをCODE_REVIEW_REPORT.mdで残虐かつ正直に記録した
「設定ファイルには個人のパスがハードコードされている... メモリはセッションごとにのみ生存する... OcrImageToolはTelegramチャンネルに登録されているが、メインツールレジストリには登録されていない... 自動起動タスクの名前はwizard.pyとautostart.pyで一致しない...」
私が変更したこと(その後)
このチャレンジのために再度手を加える際、クライアントのコードベースを初めて見たかのように扱った。変更点は以下の通りです:
アーキテクチャの改善:
- モノリスを適切なパッケージ構造に分割しました:
agent/、channels/、memory/、providers/、security/、tools/ - SQLite FTS5で
MemoryStoreを追加しました—このボットはセッション間であなたを覚えておくことができます ContextBuilderを導入しました—これはアイデンティティファイル(SOUL.md、AGENTS.md、USER.md)からシステムプロンプトを組み立てます- OpenAI互換の機能定義を持つ適切な
ToolRegistryを作成しました
新しい機能が追加されました
- 🎙️音声入出力 — Whisper (ローカルSTT) + Edge-TTSニューラルボイス(3段階ボイスシステム)
- 📅 スケジューラ — 「毎日3時に立ち上がってストレッチするのを思い出して」
- 🖼️ 視覚 + OCR — 写真を送信し、テキストを抽出し、画像を説明
- 🔌 MCPブリッジ — 任意のModel Context Protocolサーバーにプラグイン
- 🔐 ハードウェアに依存する暗号化 — シークレットはWindows UUIDに鍵付けられたFernetで保存
品質の向上:
- インタラクティブな設定ウィザード(手動のJSON編集不要)
- Windows Task Schedulerによる自動起動
- Ctrl+C / SIGTERMによる適切な優雅なシャットダウン
- 段落境界で応答を分割します(単語の途中でのTelegramの切り詰めは行いません)
-
/modelコマンドで会話中にAIモデルを切り替えます
再ブランド化:
AntidoteからDigital Secretaryに改名されました—新しい名前は実際に何をするかをよりよく反映しています:それはあなたの個人的な秘書であり、「AI」だけではありません- 新しいCLI:
digital_secretaryおよびdigital_secretary setup
GitHub Copilot(Antigravity IDE経由)は、この復活期間中に本当に価値があります。最も大きな違いを造成した具体的な瞬間は以下の通りです:
GitHub Copilot(Antigravity IDE経由)(via Antigravity IDE)は、この復活期間中に本当に価値があります。ここに、具体的な瞬間を記載します:
1. 音声パイプライン設計
3層音声応答システムは最も難しい設計課題でした:
- レベル1:"それを読み上げる" → 最後の応答のTTS再生、LLMコールなし
- Tier 2:「これは説明して」→ LLM が自然な言葉で再説明
- Tier 3:デフォルトの音声クエリ→ LLM が音声用に応答を要約
:私は英語で問題を説明し、Copilot が状態機構をスケッチし、初期の _is_readout_request() を書いた_is_explain_request() パターンマッチング。エッジケースを考慮するのに1時間かかるところを、数分で書けた。
2. ハードウェア制約暗号化
# Copilot suggested this elegant approach for Windows-specific key derivation
def _derive_key(uuid_bytes: bytes) -> bytes:
return hashlib.pbkdf2_hmac(
"sha256",
uuid_bytes,
salt=b"digital_secretary_v1",
iterations=480_000,
)
PBKDF2を使うべきだと気づき、2024年のOWASPの推奨に基づいて480Kの特定の反復回数を提案した。
3. SQLite FTS5 メモリ検索
以前、FTS5を使ったことがなかった。Copilotがスキーママイグレーションを書き、MATCHクエリを書き、なぜ rankが適切な関連性順序のために否定される必要があるかを説明した。その過程で新しいことを学んだ。
4. Windows シグナルハンドリングバグ
# This pattern only works on Unix:
loop.add_signal_handler(signal.SIGTERM, callback)
# Copilot caught this and suggested the Windows-compatible approach:
signal.signal(signal.SIGTERM, _signal_handler)
コードレビューの際にプラットフォーム互換性の問題を見つけ出しました—ユーザーが報告してくれなければ私が発見するはずだったものです.
利用例
Digital Secretaryは、個人的なAIを望む人々のために設計されています
| シナリオ | あなたの行動 | それが行うこと |
|---|---|---|
| パーソナルアシスタント | 「ミルクを買い物リストに追加」 | 記憶に保存し、必要に応じて呼び出す |
| 毎日のお知らせ | 8時のスケジュールメッセージ | リマインダーとメモの要約を送信 |
| 文書リーダー | PDF写真を送信 | OCR+AIによる要約 |
| コードヘルパー | エラーを貼り付け、修正を尋ねる | ウェブを検索し、ファイルを読み取り、解決策を提案 |
| 会議メモ | 声で要点を記録 | 記録してメモリに保存 |
| 家庭秘書 | 共有リマインダー | 家族全員のタスクをスケジュール |
| 研究補助 | 「Xに関する最近の論文を探す」 | ウェブ検索+要約 |
| オフラインAI | ローカルllama.cpp設定 | クラウド不要、インターネット不要 |
技術的アーキテクチャのハイライト
持続するメモリ
# Search semantic memory with FTS5
results = await memory.search("dentist appointment", limit=5)
# Returns: [Memory(content="User mentioned dentist on Tuesday...", category="fact")]
すべての会話は要約され、保存されます。次に関連する質問を尋ねると、関連する記憶が自動的にシステムプロンプトに注入されます。
ツールの使用例
「明日の天気はどうですか?」と質問すると、LLM:
- 呼び出すことを決定します
web_search("weather tomorrow [your city]") - 結果を取得します
- 詳細な予報のために
fetch_webpage(url)を呼び出します - 自然言語の応答を生成
テレグラムの交換で一括で行います
マルチプロバイダーAI
# Switch between providers transparently
provider = get_provider() # reads config, returns right provider
# All providers implement the same interface
response = await provider.chat(messages=messages, tools=tool_defs)
OpenRouter (100以上のモデル)、Ollama (ローカル)、およびllama.cpp (超ローカル、GPUまたはCPU)と連携します
開始方法
git clone https://github.com/sree1959git/Digital-Secretary.git
cd Digital-Secretary
.\start.ps1
起動器はすべてを処理します — Pythonのバージョン確認、venvの作成、依存関係のインストール、およびウィザードの起動
完全なセットアップガイド: TELEGRAM_BOT_SETUP.md
次に何をするか
プロジェクトのロードマップはまだやるべきことがあることを正直に示しています:
-
マルチエージェントルーティング — 独立
/finance、/health、/workはスコープ付きメモリを持つサブエージェントです - 承認ワークフロー — ファイル書き込みとシェルコマンドの承認に使用するTelegramのインラインボタン
- 持続可能な会話履歴 — 各ターンをすべて保存し、要約だけではありません
- ウェブUI — メモリのレビュー、リマインダーの管理、モデルの切り替えを行うダッシュボードです
この挑戦が、このモノを棚に置きっぱなしにしないで済むようになるのにちょうど良いきっかけでした。
試してみたら、コメントでどう思うか教えてください。 👇
タグ: #devchallenge #githubchallenge #python #telegram #ai #windows #opensource












