启动服务
X-Talk 的大多数模型与执行逻辑都运行在服务端。客户端主要负责访问麦克风、传输音频、收发 WebSocket 消息,以及处理轻量级的会话逻辑。
客户端 API 已经发布为独立包 xtalk-client,其公开接口由 frontend/src/index.ts 导出。
客户端最简接入
createSession() 接收一个 WebSocket 地址。当您调用 session.open() 时,客户端会:
- 调用登录接口;
- 获取访问令牌;
- 携带该令牌连接 WebSocket;
- 保持当前会话状态与服务端同步。
如果您使用打包工具,请先安装:
npm install xtalk-client
对开发者来说,客户端代码位于
frontend目录下。在该目录中,您可以运行npm run watch进行开发构建。
然后在前端代码中导入并使用:
import { createSession } from "xtalk-client";
const wsUrl =
location.protocol === "https:"
? `wss://${location.host}/ws`
: `ws://${location.host}/ws`;
const session = createSession(wsUrl);
session.onStateChange((state) => {
console.log("connection:", state.connectionState);
console.log("session:", state.sessionId);
console.log("messages:", state.messages);
});
await session.open();
如果您不想自行打包客户端代码,也可以直接通过 CDN 加载:
<script type="module">
const { createSession } = await import("https://unpkg.com/xtalk-client@0.2.6/dist/index.js");
const wsUrl =
location.protocol === "https:"
? `wss://${location.host}/ws`
: `ws://${location.host}/ws`;
const session = createSession(wsUrl);
await session.open();
</script>
服务端最简接入
对于公开发布的 xtalk-client,推荐的服务端接法是:从配置文件创建一个 Xtalk 实例,并把它的内置路由挂到 FastAPI 应用上:
from fastapi import FastAPI
from xtalk import Xtalk
app = FastAPI(title="Xtalk Server")
xtalk_instance = Xtalk.from_config("path/to/config.json")
xtalk_instance.mount_routes(app)
这会挂载前端默认使用的这些接口:
POST /api/auth/loginGET /api/sessionsGET /api/sessions/{session_id}POST /api/uploadWS /ws
在这些默认路由存在时,前端只需要调用 createSession(wsUrl),然后执行 session.open() 即可。
自定义路由
如果您的后端没有使用默认的内置路由路径,那么在创建 session 时需要显式传入这些服务地址:
const session = createSession(wsUrl, {
serviceURLs: {
login: "/custom/login",
sessions: "/custom/sessions",
sessionDetail: (sessionId) => `/custom/sessions/${sessionId}`,
upload: "/custom/upload",
},
});
完整示例
如果您需要包含静态资源、模板、上传界面、会话切换和音色切换的完整示例,可继续参考:
examples/sample_app/configurable_server.pyexamples/sample_app/static/js/index.jsexamples/sample_app/templates/index.html