Packages 包@downcity/cityCity

Service 调用模型

@downcity/city 如何统一承载 AI service、custom service 和 service 调用。

City 最容易被误解的地方,是很多人只看到 client.ai.*,以为它只是“调模型 SDK”。

更准确的理解是:

  • client.ai.*:AI service
  • client.service(...).action(...).invoke():通用 Action 调用
  • client.service(...).get(...):读取型 GET Action 调用

AI service

适合:

  • text()
  • stream()
  • image()
  • video()

这类能力优先走 AIService,因为它已经把模型目录、默认模型、AI SDK UIMessage 约定都统一好了。

custom service

这是你自己注册到 City 的业务 service。

例如:

const result = await client.service("rewrite").action("formal").invoke({
  prompt: "把这段话改得更专业",
});

这种方式适合:

  • 工作流动作
  • 产品业务动作
  • 不想直接暴露模型细节的能力

service

service 不是另一套 API,它仍然是 City 里的 service。

例如:

  • accounts
  • usage
  • payment
  • payment.stripe

所以调用方式仍然一样:

await client.service("accounts").action("login").invoke(...)
await client.service("usage").get("me")
await client.service("payment").get("methods")

为什么这个统一模型重要

因为产品前端不应该记三套系统:

  • 一套给 AI
  • 一套给业务 service
  • 一套给 service

Downcity 的设计就是把它们都压回一个统一调用心智。