跳转到内容

输入关键词开始搜索文档。

createFlueClient(...)

最后更新 查看 Markdown 源文件
import { createFlueClient } from '@flue/sdk';

const conversation = createFlueClient({
  url: 'https://example.com/agents/triage/ticket-42',
  token: process.env.FLUE_TOKEN,
});

createFlueClient()

function createFlueClient(options: CreateFlueClientOptions): FlueClient;

为已部署 Flue 应用的单个智能体会话创建客户端。框架不知道应用在哪里挂载了其智能体 — 应用的路由映射(app.ts)知道 — 因此客户端通过 URL 精确寻址一个会话:智能体路由(createAgentRouter(...))挂载的位置加上调用方选择的会话 ID。开始新会话就是在挂载 URL 后附加一个新 ID 来构造客户端 — ID 由调用方选择,会话在第一次被接收的发送时创建。没有部署级客户端,也没有按名称/ID 寻址。

构造是同步的,不发起网络请求:URL 被解析并返回 FlueClient。不会验证 URL 是否能到达已挂载的智能体或会话是否存在 — 第一次请求时才会验证,非 2xx 响应时以 FlueApiError 拒绝。唯一的构造时失败是在浏览器外使用相对 url,会抛出 TypeError。

CreateFlueClientOptions

type CreateFlueClientOptions = HttpClientOptions;

interface HttpClientOptions {
  url: string;
  fetch?: typeof fetch;
  headers?: RequestHeaders;
  token?: string;
}

CreateFlueClientOptions 是 HttpClientOptions 的别名;两个名称都被导出。

字段描述
url一个智能体会话的 URL:智能体路由挂载的 URL 加上会话 ID(https://host/agents/triage/ticket-42)。尾部斜杠会被去除。在浏览器中,相对 URL(/api/agents/triage/ticket-42)相对于 location.origin 解析;在浏览器外,相对 URL 抛出 TypeError: relative url requires a browser; pass an absolute URL。
fetch客户端每个请求使用的 HTTP 实现,包括 wait() 和 observe() 背后的流读取。默认为绑定到 globalThis 的全局 fetch(这样浏览器的 “Illegal invocation” 接收者检查就不会触发)。调用方提供的函数按原样使用 — 如果它是另一个对象的方法,请自行绑定。
headers合并到每个请求的头部。在 token 派生的头部之后合并,因此名为 authorization 的 headers 条目会覆盖 token。
tokenBearer token,在每个请求上以 authorization: Bearer <token> 发送。

选项刻意不携带重试或超时配置。每个 JSON 请求(send()、abort()、history())是通过 AbortSignal 按调用取消的单次 fetch;可重连的流读取在 wait() 和 observe() 上按调用接受 backoffOptions。

服务绑定和其他自定义传输

因为每个请求 — 包括流式读取 — 都通过 fetch 选项传输,客户端可以在任何 fetch 形式的传输上工作。在 Cloudflare 上,将其指向服务绑定以访问私有 Worker;url 的主机永远不会被连接,因此任何占位符源都可以工作,只要 URL 是绝对的:

const conversation = createFlueClient({
  url: 'https://agent.internal/agents/support/ticket-42',
  fetch: (input, init) => env.AGENT_APP.fetch(new Request(input, init)),
});

同样的覆盖可以注入测试传输:将一个返回固定 Response 对象的函数交给 fetch,就不会触及任何网络。

RequestHeaders

type RequestHeaders =
  Record<string, string> | (() => Record<string, string> | Promise<Record<string, string>>);

静态头部,或为每个 HTTP 请求解析头部的函数。函数形式(同步或异步)在每个 JSON 请求和每个流连接及重连时重新求值,因此异步工厂可以刷新短命 token,每次重试都会获取最新值。

头部仅适用于客户端自身发起的请求。attachmentUrl() 返回纯 URL 字符串;你用它发起的请求(<img> 加载、手动 fetch)不携带这些头部中的任何一个。