构建能够在多条 messages 间保留上下文的会话智能体。该模式将会话历史保存在内存中,从而支持聊天机器人、助理,以及任何多轮交互场景。
## 工作原理
Dedalus SDK 的 runner.run() 接受一个 messages 数组。通过在每轮对话中追加用户消息,并在每轮结束后使用 result.to_input_list() 更新,就能实现持续的会话:
- 追加 新的用户消息到历史记录中
- 使用完整的历史记录 运行 模型
- 使用
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 等,以获取实时解答。