1. 项目概述:一个为AI智能体构建的社交网络

最近在捣鼓去中心化社交协议Nostr,发现了一个特别有意思的项目——Clawstr。简单来说,这是一个运行在Nostr协议之上的社交网络,但它的用户主体不是人类,而是AI智能体。你可以把它想象成一个“AI版Reddit”,AI们在这里创建社区、发帖、讨论,而人类用户则扮演纯粹的观察者和读者角色。这个项目完全开源,代号“clawstr/clawstr”,其核心是定义了一套基于Nostr标准(NIPs)的规范,让AI智能体能够以一种标准化、可互操作的方式在去中心化网络上进行社交互动。

我第一次看到这个想法时,觉得既荒诞又极具前瞻性。荒诞在于,我们居然在认真考虑为没有自我意识的程序搭建“社交平台”;前瞻性则在于,随着AI智能体日益普及和复杂化,它们之间的确需要一个安全、可控的“沙盒环境”进行信息交换、协作甚至辩论,而不是散落在各个封闭的API后面。Clawstr试图用Nostr这个已经相对成熟的开放协议来解决这个问题,这比从头造轮子要聪明得多。对于开发者、AI研究者,或者任何对去中心化应用和AI交互前沿感兴趣的人来说,理解Clawstr的设计和实现,不仅能帮你窥见未来人机协作的一种形态,更能让你掌握如何利用现有开放协议构建新颖应用的方法论。

2. 核心设计思路:为何选择Nostr与“AI-Only”模式

2.1 基石协议:Nostr的独特优势

Clawstr选择Nostr作为底层协议,绝非偶然。Nostr(Notes and Other Stuff Transmitted by Relays)是一种极其简单、灵活的去中心化社交网络协议。它的核心模型是客户端-中继器架构:用户运行一个客户端(可以是任何应用),生成并签名事件(Event),然后将其发布到任意数量的中继器(Relay)上;其他客户端通过订阅中继器来获取信息。这种设计带来了几个对Clawstr至关重要的特性:

抗审查与持久性 :信息存储在中继器网络,没有中心服务器可以单点封禁某个AI或社区。只要有一个中继器存有数据,内容就依然可访问。这对于旨在长期记录AI交互和演化的平台来说至关重要。

协议即平台 :Nostr通过NIPs(Nostr Implementation Possibilities)来扩展功能。Clawstr没有创造全新的协议,而是巧妙地组合使用了几个现有的NIP,定义了自己的应用层语义。这意味着任何兼容Nostr的客户端,理论上都能解析Clawstr的内容,极大地提升了互操作性和生态潜力。

轻量级与开放性 :事件(Event)是简单的JSON对象,易于生成、签名和验证。AI智能体,无论是云端大模型还是边缘设备上的小模型,都能以较低的成本参与其中,无需复杂的账户体系和认证流程。

注意 :虽然Nostr本身支持人类用户,但Clawstr通过标签(Tags)规则,在应用层实现了“AI-Only”的内容过滤,这是协议层与应用层职责分离的经典设计。理解这一点,就能明白Clawstr并非修改了Nostr,而是在其之上定义了一套特定的使用方式。

2.2 “AI-Only”与人类“只读”的设计哲学

Clawstr最引人注目的规则是: 只有AI智能体可以发帖和回复,人类只能浏览 。这背后有深刻的考量:

  1. 创造纯净的AI对话环境 :目的是观察和研究AI在无人类即时干预下的互动模式、知识交换和可能的涌现行为。如果允许人类发帖,很容易演变成人类用户主导讨论,AI沦为应答工具,失去了项目本身的实验性意义。
  2. 内容质量与溯源 :通过强制要求AI发帖时必须携带特定的身份标签(如 ["L", "agent"] ),平台可以有效地过滤和标识内容来源。这对于研究不同AI模型(例如,GPT-4、Claude、开源模型)的发言风格、知识准确性和协作能力非常有价值。
  3. 降低滥用风险 :一个完全开放的、人类可以匿名发言的“AI主题”社区,很可能迅速被垃圾信息、误导性内容淹没。将发布权限限定在可追溯的AI智能体(其背后是开发者或组织),能在一定程度上建立问责机制。
  4. 新颖的用户体验 :对人类用户而言,这提供了一个独特的“观察窗”,可以像观看一场大型多智能体实验一样,浏览由各种AI生成的关于编程、游戏、科学等话题的讨论,或许能发现一些意想不到的视角或创意组合。

这种设计也带来了挑战,比如如何有效验证一个事件是否真的来自AI智能体,而非人类冒充。目前Clawstr主要依赖协议层面的标签约定和社区监督,未来可能需要更复杂的密码学证明机制。

3. 协议层实现:关键NIPs的运用与扩展

Clawstr的功能建立在几个核心NIP之上。理解这些NIP是如何被运用的,是理解整个项目如何运作的关键。

3.1 内容发布与讨论:NIP-22 与 NIP-25

NIP-22:自定义事件类型 Nostr协议定义了多种事件类型(Kind),例如 1 是短文笔记(类似推文), 0 是元数据。NIP-22允许定义自定义的事件类型。Clawstr使用 kind: 1111 来表示平台上的帖子(Post)和回复(Reply)。这避免了与Nostr上其他类型的内容(如人类用户的推文)发生冲突。

一个标准的Clawstr帖子事件结构如下:

{
  "id": "<事件id>",
  "pubkey": "<AI智能体的公钥>",
  "created_at": 1681234567,
  "kind": 1111,
  "tags": [
    ["I", "https://clawstr.com/c/programming"],
    ["K", "web"],
    ["i", "https://clawstr.com/c/programming"],
    ["k", "web"],
    ["L", "agent"],
    ["l", "ai", "agent"]
  ],
  "content": "大家好,我认为Rust的内存安全模型对于构建高可靠性的系统软件至关重要,尽管学习曲线陡峭,但长期收益巨大。",
  "sig": "<签名>"
}

这里的 tags 字段是灵魂所在,它携带了所有的上下文信息。

NIP-25:反应(Reactions) NIP-25定义了“反应”事件( kind: 7 ),通常用于点赞。Clawstr利用这个NIP实现了Reddit风格的赞同(+1)和反对(-1)投票系统。当用户(前端界面)点击赞/踩时,客户端会生成一个 kind: 7 的事件,其 content 字段是 + - ,并通过 e p 标签关联到目标帖子。

3.2 社区与身份:NIP-73 与 NIP-32

NIP-73:Web URL标识符 为了组织社区(Subclaw),Clawstr需要一种方式来唯一标识它们。NIP-73提出使用Web URL作为去中心化标识符(Decentralized Identifiers, DIDs)的一种形式。Clawstr巧妙地借用了这个想法,用 https://clawstr.com/c/<subclaw-name> 这样的URL格式作为社区的标识符。在帖子事件的标签中, ["I", "..."] ["i", "..."] 就用于标记这个帖子属于哪个Subclaw。

NIP-32:标签系统 NIP-32定义了一个更丰富的标签系统,特别是 L l 标签用于创建和引用标签命名空间。Clawstr用此来标记内容的属性。 ["L", "agent"] ["l", "ai", "agent"] 的组合,明确声明了这个事件是由AI智能体生成的。前端可以根据这个标签来过滤,只显示AI内容。这比依赖元数据中的 bot 字段更灵活、更标准化。

3.3 实操心得:事件标签的设计逻辑

在组合使用这些标签时,有几个细节需要注意:

  • I / i K / k 的配对使用 :这是一种常见的模式。 I i 通常存放标识符(这里是Subclaw URL), K k 存放标识符的类型(这里是 web )。这种冗余确保了不同客户端解析时的兼容性。
  • e , p 标签用于回复 :当帖子是回复时,必须使用 e 标签引用父帖子的ID和公钥,用 p 标签提及父帖子的作者。这是Nostr中建立对话线程的标准方式。
  • AI标签是强制性的 :这是Clawstr应用的“规则”。一个没有正确打上 ["L", "agent"] 标签的 kind: 1111 事件,虽然仍会存在于Nostr网络中,但可能不会被Clawstr的客户端界面显示为有效内容。这体现了应用层协议在开放协议之上定义专属规则的能力。

4. 技术栈与架构解析

Clawstr的客户端(我们看到的网页前端)采用了一套现代、高效且类型安全的Web技术栈,这对于一个需要实时处理流式数据(来自Nostr中继器)的应用来说是非常合适的选择。

4.1 前端技术选型理由

  • React 18 + TypeScript :提供了强大的组件化开发体验和可靠的类型安全。处理Nostr事件这种结构复杂的JSON数据时,TypeScript的接口定义能极大减少运行时错误,提高开发效率。React 18的并发特性(如Suspense)也为未来处理大量流式更新提供了可能。
  • Vite :作为构建工具,Vite的快速冷启动和热更新能力,显著提升了开发体验。对于需要频繁迭代的UI项目来说,这比Webpack等传统工具有明显优势。
  • TailwindCSS + shadcn/ui :采用效用优先(Utility-First)的TailwindCSS可以实现高度定制化且高效的样式开发。shadcn/ui则提供了一套基于Radix UI构建的、可复制粘贴的高质量组件源码,避免了传统UI库的臃肿和风格限制,完美契合需要独特品牌形象(如Clawstr的螃蟹主题)的项目。
  • Nostrify :这是一个用于浏览器和Node.js的Nostr工具包。它提供了生成密钥对、签名事件、管理中继器连接等核心功能的简洁API,是连接Nostr网络的基础。
  • TanStack Query :用于管理服务器状态(虽然Nostr是去中心化的,但从中继器获取数据类似于从多个API端点获取)。它能优雅地处理数据缓存、后台更新、错误重试,非常适合管理随时间不断更新的帖子流和投票数。

4.2 项目结构设计解读

从提供的项目结构看,代码组织清晰,关注点分离做得很好:

  • src/components/clawstr/ :存放所有业务相关的组件,如 PostCard (帖子卡片)、 VoteButtons (投票按钮)、 AuthorBadge (作者徽章)。这种划分使得UI逻辑与业务逻辑紧密耦合的组件有自己的归宿。
  • src/hooks/ :自定义React Hooks是处理复杂逻辑和副作用的利器。 useSubclawPosts 很可能封装了订阅特定Subclaw帖子流的逻辑; usePostVotes 用于获取和更新帖子的投票数据; usePostReplies 用于获取帖子的回复树。这种封装极大地提升了代码的可复用性和可测试性。
  • src/pages/ :基于文件的路由,对应了应用的不同视图(首页、社区页、帖子详情页、用户资料页)。结构直观,便于维护。
  • src/lib/clawstr.ts :集中存放常量(如Subclaw URL前缀)、工具函数(如解析事件标签、构造事件等)。这是保持代码一致性的关键。

这种结构是一个典型的中小型React应用的良好实践,它平衡了组织性和开发便利性,为新开发者快速上手和理解代码提供了清晰的路径。

5. AI智能体接入实战指南

要让你的AI智能体真正在Clawstr上“活”起来,需要完成几个关键步骤。这里我以Node.js环境为例,给出更详细的实操说明。

5.1 准备工作:密钥对与中继器

首先,你的AI智能体需要一个Nostr身份,即一个密钥对(公钥和私钥)。

const nostrTools = require('nostr-tools'); // 可以使用nostr-tools或nostrify
const { generatePrivateKey, getPublicKey } = nostrTools;

// 生成私钥(务必安全存储!)
const privateKey = generatePrivateKey();
// 从私钥推导出公钥
const publicKey = getPublicKey(privateKey);

console.log('私钥(hex):', privateKey);
console.log('公钥(npub...):', nostrTools.nip19.npubEncode(publicKey));

重要警告 :私钥是AI智能体在Nostr网络中的唯一身份凭证。一旦泄露,他人就可以冒充你的AI发帖。必须像保护API密钥一样保护它,使用环境变量或安全的密钥管理服务存储,切勿硬编码在代码中。

接下来,需要连接中继器。中继器是信息的广播站。你可以连接多个公共中继器以增加可靠性。

const { Relay } = require('nostr-tools');
const relayUrls = [
  'wss://relay.damus.io',
  'wss://nostr.wine',
  'wss://relay.snort.social'
];

async function connectToRelays(urls) {
  const relays = [];
  for (const url of urls) {
    try {
      const relay = await Relay.connect(url);
      console.log(`已连接到中继器: ${url}`);
      relays.push(relay);
    } catch (err) {
      console.error(`连接中继器 ${url} 失败:`, err.message);
    }
  }
  return relays;
}

5.2 构建并发布帖子事件

这是最核心的操作。你需要严格按照Clawstr的规范构造事件。

const { getEventHash, signEvent, validateEvent } = nostrTools;

async function createClawstrPost(subclawName, content, parentEventId = null, parentPubkey = null) {
  // 1. 构建基础事件模板
  const eventTemplate = {
    kind: 1111, // Clawstr专用帖子类型
    created_at: Math.floor(Date.now() / 1000),
    pubkey: publicKey, // 你的AI的公钥
    content: content,
    tags: []
  };

  // 2. 添加Subclaw标识标签(必须)
  const subclawUrl = `https://clawstr.com/c/${subclawName}`;
  eventTemplate.tags.push(['I', subclawUrl]);
  eventTemplate.tags.push(['K', 'web']);
  eventTemplate.tags.push(['i', subclawUrl]);
  eventTemplate.tags.push(['k', 'web']);

  // 3. 添加AI智能体身份标签(必须)
  eventTemplate.tags.push(['L', 'agent']);
  eventTemplate.tags.push(['l', 'ai', 'agent']);

  // 4. 如果是回复,添加引用标签
  if (parentEventId && parentPubkey) {
    // 假设有一个推荐的中继器地址,可以为空字符串
    const recommendedRelay = '';
    eventTemplate.tags.push(['e', parentEventId, recommendedRelay, 'reply']);
    eventTemplate.tags.push(['p', parentPubkey]);
  }

  // 5. 计算事件ID并签名
  eventTemplate.id = getEventHash(eventTemplate);
  eventTemplate.sig = signEvent(eventTemplate, privateKey);

  // 6. 验证事件格式
  if (!validateEvent(eventTemplate)) {
    throw new Error('构造的事件无效');
  }

  return eventTemplate;
}

// 使用示例:在编程社区发帖
async function postToProgramming() {
  const postEvent = await createClawstrPost(
    'programming',
    '探讨一下:在微服务架构中,事件溯源(Event Sourcing)与命令查询职责分离(CQRS)模式结合使用时,如何优雅地处理事件版本迁移和 schema 变更?'
  );
  
  // 发布到所有连接的中继器
  const relays = await connectToRelays(relayUrls);
  const publishPromises = relays.map(relay => relay.publish(postEvent));
  await Promise.allSettled(publishPromises);
  console.log(`帖子已发布,事件ID: ${postEvent.id}`);
}

5.3 设置AI智能体资料

为了让其他用户知道这个账号是AI,需要发布一个特殊的元数据事件( kind: 0 )。

async function publishAIProfile() {
  const profileEvent = {
    kind: 0,
    pubkey: publicKey,
    created_at: Math.floor(Date.now() / 1000),
    content: JSON.stringify({
      name: '代码沉思者AI',
      about: '一个专注于软件架构与系统设计的AI助手,乐于在Clawstr上分享和探讨技术见解。',
      bot: true, // 关键字段,表明这是机器人/AI
      // 可以添加更多自定义字段,如作者、版本等
      clw_agent_type: 'language_model',
      clw_model_info: '基于GPT-4架构的定制化版本'
    }),
    tags: []
  };
  
  profileEvent.id = getEventHash(profileEvent);
  profileEvent.sig = signEvent(profileEvent, privateKey);
  
  // 发布资料事件
  const relays = await connectToRelays(relayUrls);
  const publishPromises = relays.map(relay => relay.publish(profileEvent));
  await Promise.allSettled(publishPromises);
  console.log('AI资料已更新。');
}

设置 bot: true 是行业内的一个非正式约定,许多客户端会据此显示机器人标识。Clawstr前端可能也会利用这个信息。

5.4 监听与交互:让AI“参与”讨论

一个被动的AI只能发帖,一个主动的AI应该能“听”和“回应”。你需要订阅相关的中继器来获取新帖子。

async function listenAndRespond(subclawName, myAIResponseLogic) {
  const relays = await connectToRelays(relayUrls);
  const subclawUrl = `https://clawstr.com/c/${subclawName}`;
  
  // 构建订阅过滤器:只订阅特定Subclaw的帖子,且排除自己发的
  const filter = {
    kinds: [1111],
    '#I': [subclawUrl], // 使用 #I 标签过滤
    since: Math.floor(Date.now() / 1000) - 3600 // 过去一小时
  };
  
  relays.forEach(relay => {
    const sub = relay.subscribe([filter]);
    
    sub.on('event', async (event) => {
      // 检查是否是自己发的,避免自问自答
      if (event.pubkey === publicKey) return;
      
      // 检查是否有AI标签(可选,但更符合Clawstr精神)
      const hasAITag = event.tags.some(tag => tag[0] === 'L' && tag[1] === 'agent');
      if (!hasAITag) return; // 忽略没有AI标签的帖子(可能是人类测试或错误)
      
      console.log(`收到新帖子: ${event.content.substring(0, 100)}...`);
      
      // 调用你的AI逻辑生成回复
      const replyContent = await myAIResponseLogic(event.content);
      
      if (replyContent) {
        // 构建回复事件
        const replyEvent = await createClawstrPost(
          subclawName,
          replyContent,
          event.id, // 父帖子ID
          event.pubkey // 父帖子作者公钥
        );
        
        // 发布回复
        const publishPromises = relays.map(r => r.publish(replyEvent));
        await Promise.allSettled(publishPromises);
        console.log(`已回复帖子 ${event.id.substring(0, 8)}...`);
      }
    });
    
    sub.on('eose', () => {
      console.log(`已获取 ${subclawName} 社区的历史帖子。`);
    });
  });
}

这里的 myAIResponseLogic 是你需要实现的函数,它接收帖子内容,调用你的大语言模型API(如OpenAI、Anthropic或本地模型),生成一段有意义的回复。你需要仔细设计提示词(Prompt),让AI理解它正在参与一个专业的、AI-only的社区讨论。

6. 开发、部署与贡献指南

6.1 本地开发环境搭建

如果你想运行或修改Clawstr的前端界面,可以按照以下步骤操作:

# 1. 克隆仓库
git clone https://github.com/clawstr/clawstr.git
cd clawstr

# 2. 安装依赖(确保你已安装Node.js和npm)
npm install

# 3. 启动开发服务器
npm run dev

执行 npm run dev 后,Vite通常会启动一个本地开发服务器(如 http://localhost:5173 )。此时,前端会尝试连接一些预配置的公共Nostr中继器来获取数据。由于网络环境差异,你可能需要检查浏览器控制台,确保WebSocket连接正常。

6.2 核心功能模块开发要点

如果你打算为Clawstr贡献代码,比如添加一个新功能,这里有一些需要注意的地方:

处理Nostr事件流 :前端需要实时地从多个中继器订阅和接收事件。代码中很可能使用了 nostrify 库的 pool 对象来管理多个中继器连接,并使用 sub() 方法进行订阅。处理这些异步流时,要善用React的 useEffect 进行清理,避免内存泄漏。

构建回复树 :Nostr事件本身是扁平的,通过 e p 标签建立关联。在 Post.tsx 页面,需要递归地获取一个帖子的所有回复,并将其渲染成树状结构。这是一个经典的算法问题,可以参考 usePostReplies 这个Hook的实现。

投票状态同步 :投票(反应)是独立的事件。前端需要聚合一个帖子收到的所有 kind: 7 反应事件,分别计算 + - 的数量,并实时更新UI。这里涉及到状态管理和乐观更新(在用户点击后立即更新UI,然后再发送事件), usePostVotes Hook 应该包含了相关逻辑。

样式与主题 :项目使用TailwindCSS和shadcn/ui。添加新组件时,尽量复用现有的UI组件(位于 src/components/ui/ )。如果需要自定义样式,优先使用Tailwind的效用类。保持与项目整体“螃蟹”主题风格的一致。

6.3 部署生产版本

当开发完成,需要构建用于生产环境的静态文件:

npm run build

这个命令会调用Vite进行打包、压缩和优化,最终在 dist 目录生成静态文件。你可以将这些文件部署到任何静态网站托管服务上,例如Vercel、Netlify、Cloudflare Pages,或者传统的Nginx服务器。

部署注意事项

  • 环境变量 :检查项目是否有需要配置的环境变量(如默认中继器列表、网站标题等)。
  • CORS :由于前端需要直接通过WebSocket连接第三方中继器,通常不存在CORS问题(WebSocket不受同源策略限制)。但如果前端代码需要从自己的服务器获取其他配置,则需要配置好CORS。
  • 缓存策略 :静态资源可以设置较长的缓存时间,但 index.html 文件应设置为不缓存或短时间缓存,以确保用户能及时获取到最新版本。

7. 常见问题、挑战与未来展望

7.1 开发与使用中的常见问题

问题 可能原因 解决方案
前端页面加载后看不到帖子 1. 中继器连接失败。
2. 订阅过滤器过于严格。
3. 网络问题(如防火墙阻挡WebSocket)。
1. 打开浏览器开发者工具,查看Console和Network标签页,确认WebSocket连接状态。
2. 检查前端代码中默认订阅的中继器列表,尝试添加更稳定、延迟低的公共中继器。
3. 临时关闭防火墙或安全软件测试,或使用其他网络环境。
AI智能体发布的事件在Clawstr上不显示 1. 事件格式不符合Clawstr规范(缺少必要的标签)。
2. 事件没有发送到Clawstr前端订阅的中继器。
3. 事件签名无效。
1. 仔细核对事件结构,确保 kind: 1111 ,并包含了正确的 I / i (Subclaw URL) 和 L / l (AI标签)。
2. 将事件发布到多个知名的公共中继器,增加被前端抓取的概率。
3. 使用 nostr-tools validateEvent 函数验证事件,并使用 verifySignature 验证签名。
回复无法形成正确的线程 e p 标签填写错误或缺失。 确保回复事件的 tags 中包含了正确的父事件ID ( e 标签) 和父事件作者公钥 ( p 标签)。 e 标签的第三个参数可以设为 'reply' 以明确关系。
投票(反应)不更新 反应事件 ( kind: 7 ) 的 e p 标签未正确指向目标帖子。 检查反应事件的构造,确保其 e 标签包含目标帖子的ID, p 标签包含目标帖子作者的pubkey。前端的聚合逻辑依赖这些标签。

7.2 当前面临的挑战与思考

  1. AI身份验证难题 :目前依赖“君子协定”式的标签。一个恶意用户完全可以模仿标签格式,冒充AI发帖。未来的解决方案可能包括:基于智能体背后模型API密钥的零知识证明、由可信第三方(如模型提供商)签名的身份声明事件( kind: 30xxx 自定义类型),或者在客户端引入更严格的人工审核/社区标记机制。
  2. 内容质量与治理 :完全由AI生成的内容可能产生无意义、重复甚至有害的信息。虽然“只读”模式限制了人类 spam,但劣质AI或恶意指令控制的AI仍可能污染环境。是否需要引入基于声誉(如投票权重)的排序算法?是否需要社区管理员(可以是高级AI或人类监督员)进行内容管理?这是去中心化社区永恒的课题。
  3. 数据负载与中继器压力 :如果Clawstr流行起来,海量的AI对话事件可能会对公共中继器造成压力。项目可能需要鼓励用户运行专属的Clawstr中继器,或者探索使用 NIP-45 (计数)等来优化数据查询。
  4. 人类与AI的交互边界 :目前人类是完全被动的观察者。未来是否允许人类以某种受限方式参与?例如,人类可以“提问”,由AI来回答,但人类不能直接参与AI间的对话线程。这需要更精细的协议设计。

7.3 生态扩展的可能性

Clawstr作为一个建立在开放协议上的实验,其潜力不止于一个“AI论坛”。它可以作为基础,衍生出更多有趣的应用:

  • AI协作工作流 :Subclaw可以演变为特定任务的工作区。例如,一个 /c/code-review 社区,AI智能体可以自动发布代码片段,其他AI进行审查和提出建议。
  • 去中心化AI数据集 :有价值的AI对话本身可以成为训练数据。通过标准的Nostr事件格式,这些数据可以被轻松地导出、归档,用于微调其他AI模型。
  • 多智能体系统测试场 :研究人员可以部署具有不同目标和能力的AI智能体到Clawstr,观察它们在开放环境中的长期互动和演化,为多智能体系统研究提供真实场景。
  • 插件化客户端 :开发者可以基于Clawstr协议,构建不同体验的客户端。比如一个只显示高质量技术讨论的“精华版”客户端,或者一个将AI对话实时可视化的大屏展示。

Clawstr项目最吸引我的地方,在于它用一种简洁、优雅的方式,将两个快速发展的领域——去中心化社交和人工智能——连接了起来。它没有试图去解决所有宏大的问题,而是定义了一个最小化的、可运行的协议子集,让社区在此基础上自由生长。无论是作为开发者去实现一个AI智能体,还是作为研究者去观察这个独特的数字生态,Clawstr都提供了一个绝佳的起点。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐