Daydreams:轻量级TypeScript框架,构建有记忆的AI代理

在人工智能领域,我们经常遇到一个核心挑战:如何让AI代理记住过去,在多个任务间切换,并保持连贯的行为逻辑?传统框架往往让开发者陷入状态管理的泥沼。Daydreams框架应运而生,为开发者提供了简洁优雅的解决方案。

什么是Daydreams框架?

Daydreams是一个轻量级TypeScript框架,专为构建状态持久多上下文的AI代理而设计。它能在Node.js和浏览器环境中运行,解决了AI开发中的关键痛点:


  • 记忆断层:普通AI模型对话结束后即”失忆”

  • 任务割裂:难以同时处理多个独立会话

  • 能力局限:缺乏执行自定义操作的标准方法

核心能力解析

graph TD
    A[用户输入] --> B[Daydreams引擎]
    B --> C[上下文管理器]
    C --> D[记忆存储]
    B --> E[动作执行]
    E --> F[外部API调用]
    B --> G[LLM处理]
    G --> H[结构化输出]

Daydreams通过三大支柱解决这些问题:

  1. 🔄 多上下文系统
    同时管理多个独立对话流,每个上下文保持隔离状态。想象一位客服同时处理数十个客户咨询,每个对话都有独立的记忆和进度。

  2. 💾 长时状态维护
    会话状态自动保存,重启后恢复进度。即使服务器重启,你的AI代理也能从上次中断处继续工作。

  3. 🔌 框架无绑定设计
    无缝集成LangChain、Vercel AI SDK等流行工具,不强迫开发者改变现有技术栈。

为什么选择Daydreams?

开发者体验优势


  • TypeScript原生支持:完整的类型安全与智能提示

  • 极简API设计:核心概念仅需掌握上下文和动作两个抽象

  • 模块化架构:按需使用组件,打包体积最小可至5KB

  • 实时流式响应:内置支持渐进式结果返回
// 流式响应示例
await agent.send({
  handlers: {
    onLogStream: (log) => {
      if (log.ref === "output") {
        console.log(log.content); // 实时输出片段
      }
    }
  }
});

实际应用场景

  1. 跨平台聊天机器人:在Discord、Telegram等平台保持统一用户画像
  2. 复杂任务代理:分步骤执行研究、数据分析等多阶段任务
  3. 个性化推荐系统:基于长期交互历史提供精准建议
  4. 自动化工作流:连接API执行预定操作序列

五分钟快速入门

环境准备

确保具备:


  • Node.js 18+ 环境

  • TypeScript 4.5+(推荐)

  • LLM服务API密钥(OpenAI/Anthropic等)

安装命令

# 选择你喜欢的包管理器
npm install @daydreamsai/core
# 或
yarn add @daydreamsai/core
# 或
pnpm add @daydreamsai/core

构建你的第一个AI代理

import { createDreams, context } from "@daydreamsai/core";
import { anthropic } from "@ai-sdk/anthropic";
import { z } from "zod";

// 定义聊天上下文结构
const chatContext = context({
  type: "chat",
  schema: z.object({ userId: z.string() }),
  create() {
    return {
      messages: [],
      preferences: {} // 用户偏好存储
    };
  },
});

// 创建代理实例
const agent = await createDreams({
  model: anthropic("claude-3-5-sonnet-latest"),
  context: chatContext
}).start({ userId: "user-123" });

// 发送消息 - 状态自动保持
await agent.send({
  context: chatContext,
  args: { userId: "user-123" },
  input: {
    type: "text",
    data: "记住我用Python做数据分析"
  }
});

核心概念深度解析

上下文(Context):记忆的容器

上下文是Daydreams的核心抽象,代表一个独立的任务或会话环境。每个上下文包含:


  • 对话历史

  • 自定义状态对象

  • 元数据信息
const projectContext = context({
  type: "project",
  schema: z.object({ projectId: z.string() }),
  create() {
    return {
      tasks: [],
      progress: 0,
      lastUpdated: new Date()
    };
  }
});

// 不同项目隔离状态
const projectA = agent.getContext({
  context: projectContext,
  args: { projectId: "A" }
});

动作(Action):扩展代理能力

动作是代理可执行的自定义函数,通过类型安全接口定义:

const sendEmailAction = {
  name: "send_email",
  description: "发送邮件给指定联系人",
  schema: z.object({
    to: z.string().email(),
    subject: z.string(),
    body: z.string()
  }),
  handler: async ({ to, subject, body }) => {
    // 实际邮件发送逻辑
    return { success: true };
  }
};

// 注册到代理
const agent = createDreams({
  actions: [sendEmailAction]
});

记忆(Memory):知识持久化

Daydreams采用双层存储架构:

graph LR
    A[工作内存] --> B[键值存储]
    A --> C[向量存储]
    A --> D[情景记忆]

  • 键值存储:保存结构化数据

  • 向量存储:支持语义搜索

  • 情景记忆:记录事件序列
// 保存用户偏好
await agent.memory.store.set("user:prefs", {
  language: "zh-CN",
  timezone: "Asia/Shanghai"
});

// 向量存储知识片段
await agent.memory.vectors.upsert("fact-001", {
  text: "用户偏好使用Python进行数据分析",
  embedding: await generateEmbedding(text)
});

架构设计揭秘

Daydreams采用模块化事件驱动架构:

graph TB
    Input[输入源] --> Engine[引擎核心]
    Engine --> Context[上下文管理器]
    Engine --> Memory[记忆系统]
    Engine --> Actions[动作系统]
    Engine --> Task[任务运行器]
    Task --> LLM[大语言模型]
    
    Context --> State[上下文状态]
    Memory --> Vector[向量存储]
    Memory --> KV[键值存储]
    Actions --> Custom[自定义动作]

执行流程详解

sequenceDiagram
    participant 用户
    participant 代理
    participant 引擎
    participant 上下文
    participant 动作
    participant 记忆

    用户->>代理: 发送请求
    代理->>引擎: 处理请求
    引擎->>上下文: 加载状态
    上下文->>记忆: 检索数据
    引擎->>动作: 执行操作
    动作-->>引擎: 返回结果
    引擎->>记忆: 保存状态
    引擎-->>用户: 返回响应

实战应用场景

场景一:跨平台统一助手

import { discordAdapter } from "@daydreamsai/discord";

const discordAgent = createDreams({
  extensions: [discordAdapter],
  context: userContext
});

// 同一用户在不同平台共享状态
discordAgent.onMessage((msg) => {
  const state = agent.getContext({ userId: msg.author.id });
  // 使用历史记录回复
});

场景二:研究型代理协作

const researchAgent = createDreams({
  model: anthropic("claude-3-opus"),
  description: "专业研究代理"
});

const writerAgent = createDreams({
  model: openai("gpt-4-turbo"),
  description: "内容创作代理"
});

// 代理间共享上下文
const sharedCtx = context({ type: "project" });
const researchData = await researchAgent.run({ 
  context: sharedCtx,
  input: "量子计算最新进展"
});

const report = await writerAgent.run({
  context: sharedCtx,
  input: researchData
});

场景三:区块链交互

import { ethereumAction } from "@daydreamsai/chains";

const cryptoAgent = createDreams({
  actions: [ethereumAction],
  context: walletContext
});

// 执行链上操作
await agent.send({
  action: "ethereum_transaction",
  params: {
    to: "0x...",
    value: "1ETH"
  }
});

高级技巧与最佳实践

混合模型策略

根据任务特点选用不同模型:

createDreams({
  model: openai("gpt-4"), // 默认模型
  reasoningModel: anthropic("claude-3-opus"), // 复杂推理
  analysisContext: { 
    model: groq("mixtral-8x7b") // 高速分析
  }
});

调试与监控

内置强大诊断工具:

createDreams({
  logLevel: LogLevel.DEBUG,
  debugger: (ctxId, keys, data) => {
    console.log(`[${ctxId}]`, keys.join("."), data);
  }
});

性能优化

  1. 树摇优化:仅打包使用到的模块
  2. 流式处理:减少内存占用
  3. 缓存策略:复用常见查询结果

生态与扩展

平台适配器


  • Discord:@daydreamsai/discord

  • Twitter:@daydreamsai/twitter

  • Telegram:@daydreamsai/telegram

  • CLI:@daydreamsai/cli

存储后端


  • Supabase:@daydreamsai/supabase

  • ChromaDB:@daydreamsai/chroma

  • MongoDB:@daydreamsai/mongo

区块链支持

Ethereum
Arbitrum
Optimism

常见问题解答

Daydreams适合哪些场景?

理想使用场景


  • 需要跨会话记忆的聊天机器人

  • 多步骤工作流自动化

  • 个性化推荐系统

  • 跨平台统一助手

其他方案可能更适合


  • 单次请求-响应交互

  • 已深度集成特定框架(如LangChain)

  • 纯前端简单对话应用

状态存储如何工作?

Daydreams采用双层存储策略:

// 工作内存(易失性)
agent.context.state = { session: "active" };

// 持久化存储(自动保存)
await agent.memory.store.set("user:123", prefereces);

// 重启后恢复
const agent = createDreams(/*配置*/).start();
console.log(await agent.memory.store.get("user:123"));

支持哪些语言模型?

通过适配器支持主流提供商:

提供商 示例模型 适配器
OpenAI GPT-4 @ai-sdk/openai
Anthropic Claude 3.5 @ai-sdk/anthropic
Google Gemini Pro @ai-sdk/google
Groq Mixtral @ai-sdk/groq
本地模型 Llama 3 @ai-sdk/ollama

加入Daydreams社区

Daydreams是MIT许可的开源项目,欢迎贡献:

# 克隆仓库
git clone https://github.com/daydreamsai/daydreams.git
cd daydreams

# 安装依赖
pnpm install

# 开发模式构建
pnpm build:packages --watch

# 运行测试
pnpm test

社区资源

结语:构建有记忆的智能体

Daydreams框架重新定义了AI代理的构建方式,使开发者能够:


  • 创建真正有记忆的AI系统

  • 管理复杂的多任务环境

  • 无缝扩展代理能力

  • 在各类环境中部署

无论您是构建客户服务机器人、研究助手还是个性化推荐系统,Daydreams都提供了强大而简洁的抽象,让您专注于业务逻辑而非底层架构。

journey
    title AI代理演进之路
    section 基础代理
      单次交互 --> 无状态: 1: 早期系统
    section Daydreams
      记忆保持 --> 多上下文: 2: 突破点
      任务管理 --> 动作执行: 3: 能力扩展
    section 未来展望
      自主协作 --> 目标驱动: 4: 发展方向

框架目前处于Alpha阶段,正在快速迭代中。立即加入社区,共同塑造AI代理开发的未来!