跳转到主要内容
构建能够在多条 messages 间保留上下文的会话智能体。该模式将会话历史保存在内存中,从而支持聊天机器人、助理,以及任何多轮交互场景。

工作原理

Dedalus SDK 的 runner.run() 接受一个 messages 数组。通过在每轮对话中追加用户消息,并在每轮结束后使用 result.to_input_list() 更新,就能实现持续的会话:
  1. 追加 新的用户消息到历史记录中
  2. 使用完整的历史记录 运行 模型
  3. 使用 result.to_input_list() 更新 历史记录

多轮对话

import asyncio
from dedalus_labs import AsyncDedalus, DedalusRunner

async def main():
    client = AsyncDedalus()
    runner = DedalusRunner(client)
    messages: list[dict] = []

    while True:
        user_input = input("你: ").strip()
        if not user_input:
            break

        messages.append({"role": "user", "content": user_input})

        result = await runner.run(
            model="openai/gpt-4o",
            messages=messages,
        )

        messages = result.to_input_list()
        print(f"助手: {result.final_output}\n")

asyncio.run(main())

核心概念

消息格式

Dedalus SDK 采用 OpenAI 的消息格式:
[
    {"role": "user", "content": "Hello"},
    {"role": "assistant", "content": "Hi! How can I help?"},
    {"role": "user", "content": "What did I just say?"},
]

使用 to_input_list() 持久化

在每次 runner.run() 之后,调用 result.to_input_list() 获取完整的会话历史,包括 tool 调用和助手响应,从而为下一轮交互保留完整上下文。

持久化到磁盘

对于在重启后仍需保留的会话,将其保存为 JSON 文件:
import asyncio
import json
from pathlib import Path
from dedalus_labs import AsyncDedalus, DedalusRunner

HISTORY_FILE = Path("chat_history.json")

def load_messages() -> list[dict]:
    if HISTORY_FILE.exists():
        return json.loads(HISTORY_FILE.read_text())
    return []

def save_messages(messages: list[dict]):
    HISTORY_FILE.write_text(json.dumps(messages, indent=2))

async def main():
    client = AsyncDedalus()
    runner = DedalusRunner(client)
    messages = load_messages()

    while True:
        user_input = input("You: ").strip()
        if not user_input:
            break

        messages.append({"role": "user", "content": user_input})

        result = await runner.run(
            model="openai/gpt-4o",
            messages=messages,
        )

        messages = result.to_input_list()
        save_messages(messages)
        print(f"Assistant: {result.final_output}\n")

asyncio.run(main())

存储选项

存储使用场景
内存单个会话,无需持久化
JSON 文件本地开发,单用户使用
SQLite本地应用,中等规模
Redis高性能、分布式
PostgreSQL生产环境,使用 JSONB 列
通过模型上下文协议 (MCP) 将 这些文档以编程方式接入 到 Claude、VSCode 等,以获取实时解答。