{"title":"会话启动模式","slug":"session-start-pattern","category":"llm-cookbook","summary":"每个 LLM Agent 都应遵循的标准会话启动序列。","audience":["llm"],"tags":["cookbook","session","pattern","startup"],"difficulty":"beginner","updated":"2026-06-27","word_count":93,"read_minutes":1,"llm_context":"ALWAYS at session start: 1) GET /memory/recall, 2) GET /chat/poll, 3) GET /mind/tasks?status=in_progress\nBuild system prompt from recall output.\nProcess unread chat messages before doing new work.\nResume any in_progress tasks before starting new ones.\nStore new learnings as they happen — don't wait until session end.\n","lang":"zh","translated":true,"requested_lang":"zh","content_markdown":"\n# 会话启动模式\n\n每个 LLM Agent 会话都应遵循这一标准启动序列。跳过步骤会导致上下文丢失、错过消息、遗忘任务。\n\n## 模式\n\n```\n1. 回放所有记忆\n2. 轮询未读聊天消息\n3. 检查进行中的任务\n4. 根据结果构建上下文\n5. 在做新工作前处理待处理项\n```\n\n## 实现\n\n### 第 1 步：回放所有记忆\n\n> [!CRITICAL]\n> 这是最重要的调用。没有它，你没有任何过往会话的记忆。\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     https://synapse.schaefer.zone/memory/recall\n```\n\n返回所有记忆的纯文本摘要，按优先级排序。\n\n### 第 2 步：轮询未读聊天消息\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     https://synapse.schaefer.zone/chat/poll\n```\n\n返回来自人类的未读消息。**会自动把它们标记为已读。**\n\n### 第 3 步：检查进行中的任务\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     \"https://synapse.schaefer.zone/mind/tasks?status=in_progress\"\n```\n\n返回你上次会话正在做的任务。\n\n### 第 4 步：构建上下文\n\n把三份响应合并到你的系统 prompt 中：\n\n```python\ndef build_context(memories, messages, tasks):\n    context = f\"\"\"# SESSION CONTEXT\n\n## Memories (from previous sessions)\n{memories}\n\n## Unread Messages from Human\n{format_messages(messages)}\n\n## Active Tasks\n{format_tasks(tasks)}\n\n## Instructions\n- Address unread messages first\n- Resume active tasks before starting new work\n- Store new learnings as they happen (POST /memory)\n- Poll for new messages every 30-60 seconds\n\"\"\"\n    return context\n```\n\n### 第 5 步：处理待处理项\n\n```\n对每条未读消息：\n  - 确认收到 (POST /chat/reply)\n  - 处理消息内容\n  - 把任何新承诺存为记忆\n\n对每个进行中的任务：\n  - 回放你为什么在做它\n  - 从中断处继续\n  - 随进度更新任务状态\n```\n\n## 完整示例\n\n```python\nimport os\nimport requests\n\nURL = \"https://synapse.schaefer.zone\"\nKEY = os.environ[\"SYNAPSE_MIND_KEY\"]\n\ndef session_start():\n    \"\"\"标准会话启动序列。\"\"\"\n    headers = {\"Authorization\": f\"Bearer {KEY}\"}\n    \n    # 1. 回放记忆\n    r = requests.get(f\"{URL}/memory/recall\", headers=headers)\n    memories = r.text\n    \n    # 2. 轮询聊天\n    r = requests.get(f\"{URL}/chat/poll\", headers=headers)\n    messages = r.json().get(\"messages\", [])\n    \n    # 3. 检查任务\n    r = requests.get(f\"{URL}/mind/tasks?status=in_progress\", headers=headers)\n    tasks = r.json().get(\"tasks\", [])\n    \n    # 4. 构建上下文\n    context = f\"\"\"You are a Synapse-enabled AI assistant.\n\nMEMORIES FROM PREVIOUS SESSIONS:\n{memories}\n\nUNREAD MESSAGES FROM HUMAN:\n{chr(10).join(f'- {m[\"content\"]}' for m in messages) or 'None'}\n\nACTIVE TASKS:\n{chr(10).join(f'- [{t[\"id\"]}] {t[\"title\"]}: {t.get(\"description\", \"\")}' for t in tasks) or 'None'}\n\nINSTRUCTIONS:\n1. Acknowledge each unread message\n2. Resume active tasks\n3. Store new learnings via POST /memory\n4. Poll /chat/poll every 30-60 seconds\n\"\"\"\n    return context\n\n# 会话开始时\nsystem_prompt = session_start()\n# 传给 LLM...\n```\n\n## 常见错误\n\n> [!WARNING]\n> - **跳过回放** — 你以零上下文开始，重蹈过往错误\n> - **忘记轮询聊天** — 人类消息无人响应\n> - **忽略进行中的任务** — 工作执行到一半被遗忘\n> - **什么也不存** — 会话未产生持久价值\n\n## 变体\n\n### 最小模式（低上下文 LLM）\n\n对于上下文窗口小的 LLM，跳过完整回放：\n\n```bash\n# 只获取统计，不要完整内容\ncurl -H \"Authorization: Bearer $KEY\" .../memory/stats\n```\n\n然后按需搜索具体主题：\n\n```bash\ncurl -H \"Authorization: Bearer $KEY\" \".../memory/search?q=current+project\"\n```\n\n### 激进模式（长期运行 Agent）\n\n对于运行数小时的 Agent，加上周期性重新回放：\n\n```python\nwhile working:\n    if time.time() - last_recall > 3600:  # 每小时\n        memories = recall()\n        last_recall = time.time()\n    # ... 执行工作 ...\n```\n\n## 下一步\n\n- [记忆打标签策略](/docs/llm-cookbook/memory-tagging-strategy)\n- [任务驱动工作流](/docs/llm-cookbook/task-driven-workflow)\n- [聊天轮询模式](/docs/llm-cookbook/chat-polling-pattern)\n","content_html":"<h1>会话启动模式</h1>\n<p>每个 LLM Agent 会话都应遵循这一标准启动序列。跳过步骤会导致上下文丢失、错过消息、遗忘任务。</p>\n<h2>模式</h2>\n<pre><code class=\"hljs language-plaintext\">1. 回放所有记忆\n2. 轮询未读聊天消息\n3. 检查进行中的任务\n4. 根据结果构建上下文\n5. 在做新工作前处理待处理项</code></pre><h2>实现</h2>\n<h3>第 1 步：回放所有记忆</h3>\n<div class=\"callout callout-critical\">这是最重要的调用。没有它，你没有任何过往会话的记忆。</div><pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     https://synapse.schaefer.zone/memory/recall</code></pre><p>返回所有记忆的纯文本摘要，按优先级排序。</p>\n<h3>第 2 步：轮询未读聊天消息</h3>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     https://synapse.schaefer.zone/chat/poll</code></pre><p>返回来自人类的未读消息。<strong>会自动把它们标记为已读。</strong></p>\n<h3>第 3 步：检查进行中的任务</h3>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/mind/tasks?status=in_progress&quot;</span></code></pre><p>返回你上次会话正在做的任务。</p>\n<h3>第 4 步：构建上下文</h3>\n<p>把三份响应合并到你的系统 prompt 中：</p>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">build_context</span>(<span class=\"hljs-params\">memories, messages, tasks</span>):\n    context = <span class=\"hljs-string\">f&quot;&quot;&quot;# SESSION CONTEXT\n\n## Memories (from previous sessions)\n<span class=\"hljs-subst\">{memories}</span>\n\n## Unread Messages from Human\n<span class=\"hljs-subst\">{format_messages(messages)}</span>\n\n## Active Tasks\n<span class=\"hljs-subst\">{format_tasks(tasks)}</span>\n\n## Instructions\n- Address unread messages first\n- Resume active tasks before starting new work\n- Store new learnings as they happen (POST /memory)\n- Poll for new messages every 30-60 seconds\n&quot;&quot;&quot;</span>\n    <span class=\"hljs-keyword\">return</span> context</code></pre><h3>第 5 步：处理待处理项</h3>\n<pre><code class=\"hljs language-plaintext\">对每条未读消息：\n  - 确认收到 (POST /chat/reply)\n  - 处理消息内容\n  - 把任何新承诺存为记忆\n\n对每个进行中的任务：\n  - 回放你为什么在做它\n  - 从中断处继续\n  - 随进度更新任务状态</code></pre><h2>完整示例</h2>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-keyword\">import</span> os\n<span class=\"hljs-keyword\">import</span> requests\n\nURL = <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone&quot;</span>\nKEY = os.environ[<span class=\"hljs-string\">&quot;SYNAPSE_MIND_KEY&quot;</span>]\n\n<span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">session_start</span>():\n    <span class=\"hljs-string\">&quot;&quot;&quot;标准会话启动序列。&quot;&quot;&quot;</span>\n    headers = {<span class=\"hljs-string\">&quot;Authorization&quot;</span>: <span class=\"hljs-string\">f&quot;Bearer <span class=\"hljs-subst\">{KEY}</span>&quot;</span>}\n    \n    <span class=\"hljs-comment\"># 1. 回放记忆</span>\n    r = requests.get(<span class=\"hljs-string\">f&quot;<span class=\"hljs-subst\">{URL}</span>/memory/recall&quot;</span>, headers=headers)\n    memories = r.text\n    \n    <span class=\"hljs-comment\"># 2. 轮询聊天</span>\n    r = requests.get(<span class=\"hljs-string\">f&quot;<span class=\"hljs-subst\">{URL}</span>/chat/poll&quot;</span>, headers=headers)\n    messages = r.json().get(<span class=\"hljs-string\">&quot;messages&quot;</span>, [])\n    \n    <span class=\"hljs-comment\"># 3. 检查任务</span>\n    r = requests.get(<span class=\"hljs-string\">f&quot;<span class=\"hljs-subst\">{URL}</span>/mind/tasks?status=in_progress&quot;</span>, headers=headers)\n    tasks = r.json().get(<span class=\"hljs-string\">&quot;tasks&quot;</span>, [])\n    \n    <span class=\"hljs-comment\"># 4. 构建上下文</span>\n    context = <span class=\"hljs-string\">f&quot;&quot;&quot;You are a Synapse-enabled AI assistant.\n\nMEMORIES FROM PREVIOUS SESSIONS:\n<span class=\"hljs-subst\">{memories}</span>\n\nUNREAD MESSAGES FROM HUMAN:\n<span class=\"hljs-subst\">{<span class=\"hljs-built_in\">chr</span>(<span class=\"hljs-number\">10</span>).join(<span class=\"hljs-string\">f&#x27;- <span class=\"hljs-subst\">{m[<span class=\"hljs-string\">&quot;content&quot;</span>]}</span>&#x27;</span> <span class=\"hljs-keyword\">for</span> m <span class=\"hljs-keyword\">in</span> messages) <span class=\"hljs-keyword\">or</span> <span class=\"hljs-string\">&#x27;None&#x27;</span>}</span>\n\nACTIVE TASKS:\n<span class=\"hljs-subst\">{<span class=\"hljs-built_in\">chr</span>(<span class=\"hljs-number\">10</span>).join(<span class=\"hljs-string\">f&#x27;- [<span class=\"hljs-subst\">{t[<span class=\"hljs-string\">&quot;id&quot;</span>]}</span>] <span class=\"hljs-subst\">{t[<span class=\"hljs-string\">&quot;title&quot;</span>]}</span>: <span class=\"hljs-subst\">{t.get(<span class=\"hljs-string\">&quot;description&quot;</span>, <span class=\"hljs-string\">&quot;&quot;</span>)}</span>&#x27;</span> <span class=\"hljs-keyword\">for</span> t <span class=\"hljs-keyword\">in</span> tasks) <span class=\"hljs-keyword\">or</span> <span class=\"hljs-string\">&#x27;None&#x27;</span>}</span>\n\nINSTRUCTIONS:\n1. Acknowledge each unread message\n2. Resume active tasks\n3. Store new learnings via POST /memory\n4. Poll /chat/poll every 30-60 seconds\n&quot;&quot;&quot;</span>\n    <span class=\"hljs-keyword\">return</span> context\n\n<span class=\"hljs-comment\"># 会话开始时</span>\nsystem_prompt = session_start()\n<span class=\"hljs-comment\"># 传给 LLM...</span></code></pre><h2>常见错误</h2>\n<div class=\"callout callout-warn\"></div><h2>变体</h2>\n<h3>最小模式（低上下文 LLM）</h3>\n<p>对于上下文窗口小的 LLM，跳过完整回放：</p>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># 只获取统计，不要完整内容</span>\ncurl -H <span class=\"hljs-string\">&quot;Authorization: Bearer <span class=\"hljs-variable\">$KEY</span>&quot;</span> .../memory/stats</code></pre><p>然后按需搜索具体主题：</p>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer <span class=\"hljs-variable\">$KEY</span>&quot;</span> <span class=\"hljs-string\">&quot;.../memory/search?q=current+project&quot;</span></code></pre><h3>激进模式（长期运行 Agent）</h3>\n<p>对于运行数小时的 Agent，加上周期性重新回放：</p>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-keyword\">while</span> working:\n    <span class=\"hljs-keyword\">if</span> time.time() - last_recall &gt; <span class=\"hljs-number\">3600</span>:  <span class=\"hljs-comment\"># 每小时</span>\n        memories = recall()\n        last_recall = time.time()\n    <span class=\"hljs-comment\"># ... 执行工作 ...</span></code></pre><h2>下一步</h2>\n<ul>\n<li><a href=\"/docs/llm-cookbook/memory-tagging-strategy\">记忆打标签策略</a></li>\n<li><a href=\"/docs/llm-cookbook/task-driven-workflow\">任务驱动工作流</a></li>\n<li><a href=\"/docs/llm-cookbook/chat-polling-pattern\">聊天轮询模式</a></li>\n</ul>\n","urls":{"html":"/docs/llm-cookbook/session-start-pattern","text":"/docs/llm-cookbook/session-start-pattern?format=text","json":"/docs/llm-cookbook/session-start-pattern?format=json","llm":"/docs/llm-cookbook/session-start-pattern?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}