跳转到主要内容
这篇 App Showcase 文章是用于评估快速开始候选的 AI 生成测试博客;请把它视为应用指导草稿,而不是最终产品文档。
AI 生成测试博客 - HeavenBase Team - 2026 年 6 月 23 日 - 约 1,300 字 - 阅读约 7 分钟
想象一位独立创作者在写 newsletter,并且偶尔和赞助商合作。最开始的工作并不复杂:记住哪些品牌有希望、下一步外联要做什么,以及哪些承诺交付物快到期了。 Creator CRM 把这个普通工作流变成一个小型 HeavenBase 应用。你不需要了解销售软件也能读懂它。“商机”就是一个可能合作的赞助商,“交付物”就是创作者承诺发布的内容。

1. 背景和目标

许多创作者一开始会用电子表格或笔记应用。这没有问题,直到创作者希望助手或智能体帮忙跟进。此时会出现两个问题:结构化事实放在哪里,以及智能体被允许触碰什么? 本教程的目标是构建一个小型 CRM,它可以:
  • 列出最好的赞助机会
  • 显示本周到期的交付物
  • 让每条记录都足够简单可读
  • 只把赞助和交付物数据暴露给智能体 profile
最后一点很重要。一个有帮助的智能体不应该自动看到你未来加入工作区的所有实体。

2. 场景和设定

我们会使用一位虚构创作者 Mira。她正在两个品牌之间做选择,并且已经为更强的商机承诺了两项内容。
BrandSituationNext Question
Aurora GearStrong fit and larger budget.What should Mira send next?
Lumen DeskPossible fit, but still early.Should Mira ask for a product sample?
应用应该帮助 Mira 回答两个实际问题:“哪个商机值得关注?”以及“未来七天有什么到期?”
你可以把赞助商替换成客户、资助项目、活动伙伴或自由职业潜在客户。模式是一样的:跟踪一个机会,以及围绕它承诺的工作。

3. Step 1:确定智能体边界

在写入数据之前,先定义智能体被允许做什么。这个 profile 只能读取、查询、创建和修补两种实体:sponsor-leaddeliverable
import heavenbase as hb

from community_runtime import demo_workspace, parse_reset, print_frame, seed

hb.ext.register_profile(
    hb.ext.ProfileSpec(
        name="creator-crm-agent",
        extends=("agent",),
        tools=("read", "query", "upsert", "set"),
        entities=("sponsor-lead", "deliverable"),
        serializer="markdown",
    ),
    replace=True,
)
这是一个值得尽早学习的小安全习惯:在应用继续增长之前,先定义助手可用的表面。

4. Step 2:定义商机和交付物

应用需要两种卡片。SponsorLead 存储和品牌的关系。Deliverable 存储绑定到某个商机的承诺工作。
class SponsorLead(hb.Entity):
    """Sponsor or partnership lead."""

    brand = hb.field(hb.ShortText).desc("Brand name")
    fit = hb.field(hb.Integer).desc("1 is weak fit, 5 is excellent fit")
    budget = hb.field(hb.Float).desc("Estimated campaign budget")
    next_step = hb.field(hb.LongText).desc("Next outreach step")
    status = hb.field(hb.ShortText).desc("new, active, won, or lost")


class Deliverable(hb.Entity):
    """Promised deliverable for an active lead."""

    lead_id = hb.field(hb.Identifier).desc("SponsorLead object_id")
    channel = hb.field(hb.ShortText).desc("Channel")
    due_days = hb.field(hb.Integer).desc("Days until due")
    brief = hb.field(hb.LongText).desc("Creative brief")
字段名刻意保持直白。非技术用户也能读懂 brandbudgetnext_stepdue_days,不需要学习数据库词汇。

5. Step 3:打开工作区并加入数据

现在打开本地工作区,注册两种卡片,并写入两个赞助商和两个交付物。
WS_ID = "community-app-creator-crm"

ws, _ = demo_workspace(WS_ID, "apps-creator-crm", parse_reset())
ws.enable_extension("agent")
ws.register(SponsorLead)
ws.register(Deliverable)

seed(
    ws,
    SponsorLead,
    [
        {"object_id": "lead-aurora", "brand": "Aurora Gear", "fit": 5, "budget": 7500.0, "next_step": "Send spring trail concept.", "status": "active"},
        {"object_id": "lead-lumen", "brand": "Lumen Desk", "fit": 3, "budget": 2800.0, "next_step": "Ask for product sample.", "status": "new"},
    ],
)
seed(
    ws,
    Deliverable,
    [
        {"object_id": "deliv-1", "lead_id": "lead-aurora", "channel": "newsletter", "due_days": 6, "brief": "Trail packing checklist placement."},
        {"object_id": "deliv-2", "lead_id": "lead-aurora", "channel": "short-video", "due_days": 12, "brief": "One 30-second campsite setup clip."},
    ],
)
这些数据足够让 Mira 做出真实选择,同时不会把 demo 变成完整业务系统。

6. Step 4:询问下一个业务问题

首先询问哪个赞助商机匹配度很强。然后询问七天内有什么交付物到期。
best_leads = (
    ws.query(SponsorLead)
    .where(SponsorLead.fit >= 4)
    .select("brand", "budget", "next_step")
    .execute()
)

upcoming = (
    ws.query(Deliverable)
    .where(Deliverable.due_days <= 7)
    .select("lead_id", "channel", "due_days", "brief")
    .execute()
)
输出就是第一个版本的全部价值:
Best sponsor leads
object_id | brand | budget | next_step
--------------------------------------
'lead-aurora' | 'Aurora Gear' | 7500.0 | 'Send spring trail concept.'

Upcoming deliverables
object_id | lead_id | channel | due_days | brief
------------------------------------------------
'deliv-1' | 'lead-aurora' | 'newsletter' | 6 | 'Trail packing checklist placement.'
这已经足够让 Mira 今天采取行动:发送 Aurora Gear 的概念方案,并准备 newsletter placement。

7. Step 5:暴露安全的智能体视图

最后,从自定义 profile 构建 MCP toolkit,并检查智能体能看到什么。
toolkit = ws.to_mcp(profile="creator-crm-agent")
print(toolkit.run("list_entities")["entities"])
结果刻意保持很窄:
Scoped agent entities: ['deliverable', 'sponsor-lead']
这是这个示例的核心教训。HeavenBase 不只是存储行;它还让应用描述助手应该使用的边界。
成功运行后,你会看到最佳商机、即将到期的交付物,以及一个只列出 deliverablesponsor-lead 的限定智能体 profile。

8. 这篇教程教了什么

Creator CRM 很友好,因为这个问题容易想象。它从普通工作开始:决定回复谁,以及什么快到期。然后它把 HeavenBase 介绍为一个地方,让这些事实变成类型化记录和限定工具。 下一个版本可以加入提醒、赞助通话笔记、内容审批状态,或者一个可复用扩展,为其他用户注册这套创作者工作流。

Try It

在社区示例 checkout 中运行:
rtk bash scripts/run.bash apps.creator_crm
当你希望第一个应用感觉个人化、实用,而不是先讲基础设施时,可以把这个草稿作为快速开始候选。

Further Exploration

相关资源:
  • Entities - 把商机和交付物建模成类型化行
  • HeavenBase MCP - 从工作区创建 MCP profile
  • Toolkits - 理解工具组和 profile 限定的工具
  • Extensions - 打包可复用的实体和 profile 组合
  • Agents - 把工作区工具附加到 LLM 会话