人工智能AI Agent多模态语音AI 应用【免费下载链接】ten-frameworkOpen-source framework for conversational voice AI agents项目地址https://gitcode.com/TEN-framework/ten-framework点击查看免费下载导读本文以 TEN Framework 仓库中的 websocket_server_python 扩展文档为核心围绕其main.py源码实现、manifest.json包元数据、BUILD.gn构建配置与集成测试用例系统讲解如何在 TEN Framework 中实现一个基于 Pythonwebsockets库的 WebSocket 服务器扩展。读完本文你将掌握该扩展的完整生命周期on_init→on_start→on_cmd→on_stop、server_port配置的读取与默认值机制、如何将其作为软件包依赖集成进 TEN 应用、以及如何通过集成测试验证回显功能。一、扩展概述在 TEN 应用中以扩展形态提供 WebSocket 服务websocket_server_python是 TEN Framework 官方提供的一个 Python 编写的 WebSocket 服务器扩展示例英文文档见 README.en-US.md。它的定位非常明确——作为 TEN Framework 软件包package的一个组件将 WebSocket 服务器能力封装成符合框架规范的扩展extension从而可以按框架规格被集成到任意 TEN 应用中。其核心特性可概括为以 Python 实现依赖websockets库版本约束为websockets~14.0见 requirements.txt遵循 TEN 扩展生命周期规范实现AsyncExtension的全部异步钩子方法通过扩展的server_port属性配置监听端口并内置 8002 作为读取失败时的兜底端口对收到的每条 WebSocket 消息做回显echo处理作为后续业务处理的起点模板。在 TEN 的扩展分类中该包与 websocket_server_nodejsNode.js 版本、aio_http_server_pythonHTTP 服务器版本等共同构成一组“服务器型扩展”示例分别演示不同语言、不同协议下接入 TEN 应用的方式。二、包结构一个标准 TEN Python 扩展的完整文件清单先来看该扩展在仓库中的目录布局全部文件均位于packages/example_extensions/websocket_server_python/下文件作用main.py扩展核心实现Addon 注册 WebsocketServerExtension异步扩展类manifest.json包元数据类型、名称、版本、依赖、多语言展示名与文档映射property.json扩展级默认属性当前为空对象{}requirements.txtPython 依赖声明websockets~14.0pyproject.tomlPython 工程化配置构建、打包元数据BUILD.gnGN 构建脚本声明包资源与发布目标docs/多语言文档en-US、ja-JP、ko-KR、zh-CN、zh-TW其中manifest.json通过readme.locales字段把各语言 README 映射到docs/目录下的对应文件例如 ja-JP 对应 docs/README.ja-JP.md这也解释了本扩展文档在包中的定位它是随包分发的说明文档供用户在tman安装、浏览或集成该包时查阅。三、源码深度解析扩展的生命周期与回显实现扩展的全部逻辑集中在 main.py以下按框架生命周期逐个剖析。3.1 Addon 注册与实例创建入口register_addon_as_extension(websocket_server_python) class DefaultExtensionAddon(Addon): def on_create_instance(self, ten_env: TenEnv, name: str, context: object) - None: print(on_create_instance) ten_env.on_create_instance_done(WebsocketServerExtension(name), context)通过装饰器register_addon_as_extension(websocket_server_python)扩展把自己注册为名为websocket_server_python的 addon对应 manifest.json 中的name字段。当 TEN 引擎按图graph实例化该扩展时会回调on_create_instance将WebsocketServerExtension实例交给框架。3.2 初始化on_initasync def on_init(self, ten_env: AsyncTenEnv) - None: self.ten_env ten_envon_init中仅保存ten_env引用为后续生命周期阶段使用AsyncTenEnv的日志与属性读取能力做准备。3.3 启动服务器on_start 与 server_port 读取async def on_start(self, ten_env: AsyncTenEnv) - None: ten_env.log(LogLevel.DEBUG, on_start) self.server_port, err await ten_env.get_property_int(server_port) if err is not None: ten_env.log(LogLevel.ERROR, Could not read server_port from properties. str(err)) self.server_port 8002 self.server await websockets.serve(self.echo, localhost, self.server_port) self.ten_env.log(LogLevel.DEBUG, fWebsocket server started on port {self.server_port})这是整个扩展最核心的启动逻辑可以拆解为三个要点属性读取与错误兜底通过ten_env.get_property_int(server_port)从应用图的扩展property中读取端口号。若读取失败err非空记录LogLevel.ERROR日志并回退到默认端口8002。该默认值在 test_case.py 中也得到印证——测试启动阶段即通过http.is_app_started(127.0.0.1, 8002, 30)探测默认端口上的服务状态。启动 WebSocket 服务websockets.serve(self.echo, localhost, self.server_port)基于websockets库~14.0在当前进程内异步拉起监听服务绑定地址固定为localhost每个连接由echo协程处理。日志确认启动成功后通过ten_env.log输出包含实际端口的调试日志便于在 TEN 的日志系统中定位。注意一个细节get_property_int返回的是一个二元组值, 错误这是 TEN Python 绑定中常见的错误传递风格与AsyncTenEnv的异步 API 设计一致。3.4 回显处理echo 协程async def echo(self, websocket): async for message in websocket: print(fReceived message: {message}) # Echo the message back to the client await websocket.send(fServer received: {message})对每个 WebSocket 连接echo使用async for持续消费消息每收到一条消息控制台打印原始内容并向客户端回发带Server received:前缀的确认消息。这是典型的“服务器侧接收 业务处理 应答”骨架实际项目中可把print替换为 TEN 扩展间的消息发送如转发给下游 LLM/ASR 扩展。3.5 命令处理与其他生命周期async def on_cmd(self, ten_env: AsyncTenEnv, cmd: Cmd) - None: ten_env.log(LogLevel.DEBUG, on_cmd) # Not supported command. await ten_env.return_result(CmdResult.create(StatusCode.ERROR, cmd))on_cmd是 TEN 扩展接收命令cmd的统一入口本例不处理任何命令直接以StatusCode.ERROR返回错误结果。on_deinit与on_stop则负责清理on_stop中若服务器对象存在则调用self.server.close()并await self.server.wait_closed()优雅关闭监听随后置空引用。从实现上可以推断该扩展在 TEN 图中是纯“服务器型”节点——它不主动向其他扩展发消息只在本机端口上被动提供 WebSocket 服务。四、包元数据与配置manifest.json 与 property.json4.1 manifest.json 关键字段manifest.json 定义了包的元数据主要字段含义如下字段取值当前仓库说明typeextension包类型为扩展namewebsocket_server_python扩展唯一名称与 Addon 注册名一致version0.11.73与仓库当前发布版本对齐display_name多语言展示名含 ja-JP面向用户的显示名称description多语言描述如 ja-JP 的 “TEN Framework用のPythonで書かれたWebSocketサーバー拡張サンプル”readme各语言import_uri指向docs/下的 READMEtags[python]便于包搜索分类dependenciesten_runtime_python0.11.73system 类型运行时依赖要求 Python 运行时绑定api{}当前未声明对外 API4.2 property.json 与 server_port 的实际注入位置扩展自身的 property.json 为空对象说明该扩展不声明扩展级默认属性。server_port的实际取值来自宿主应用的图配置。以仓库集成测试应用 websocket_server_python_app/property.json 为例{ nodes: [ { type: extension, name: aio_http_server_python, addon: aio_http_server_python, extension_group: test, property: { server_port: 8002 } }, { type: extension, name: websocket_server_python, addon: websocket_server_python, extension_group: test, property: { server_port: 8003 } } ] }即在predefined_graphs的图节点中通过扩展节点的property.server_port传入端口号扩展在on_start时经get_property_int(server_port)读取。这套“应用图注入属性 → 扩展读取”的机制是 TEN 扩展参数传递的标准路径本扩展是理解该机制的极简范例。五、安装与集成前置条件与依赖声明5.1 前置条件原文档明确要求的前置条件是manifest.json 中指定的必需依赖。对本包而言即系统包ten_runtime_python版本 0.11.73提供ten_runtimePython 绑定Python 依赖websockets~14.0见 requirements.txt。5.2 安装安装遵循 TEN Framework 的包安装指南。TEN 的包管理 CLI 为tman其安装脚本位于 tools/tman/install_tman.shWindows 对应install_tman.ps1安装包后通过tman将扩展安装到应用的ten_packages/extension/目录。整体从零搭建应用的流程可参考 docs/getting-started/quick-start.cn.md。5.3 集成到 TEN 应用按框架规范把本包集成进应用需要两步应用 manifest.json 声明依赖。参照测试应用 websocket_server_python_app/manifest.json在dependencies中声明该扩展{ type: app, name: default_app_python, version: 0.11.73, dependencies: [ { type: system, name: ten_runtime, version: 0.11.73 }, { type: system, name: ten_runtime_python, version: 0.11.73 }, { type: extension, name: websocket_server_python, version: 0.11.73 }, { type: extension, name: aio_http_server_python, version: 0.11.73 } ] }在 property.json 的图graph中加入扩展节点并按需设置server_port见 4.2 节示例。六、运行验证集成测试与客户端连接6.1 集成测试逻辑仓库在 tests/ten_runtime/integration/python/websocket_server_python/test_case.py 提供了完整的端到端测试验证该扩展的真实可用性其流程可作为你手动复现的标准步骤构建并组装websocket_server_python_appPython 应用用uv引导 Python 依赖uv run main.py启动应用通过http.is_app_started(127.0.0.1, 8002, 30)等待服务就绪向ws://localhost:8003发送Hello, World!并断言收到回显通过http.stop_app优雅停止。测试还特意为 WebSocket 客户端实现了重试机制ws_request最多 3 次、间隔 1 秒因为图中 HTTP 服务器8002 端口与 WebSocket 服务器8003 端口启动顺序不定客户端可能在 WebSocket 服务尚未就绪时先探测到 HTTP 已可用而立即连接导致失败——这从侧面提示在多服务器型扩展并存的图中客户端侧务必处理连接竞态。6.2 客户端验证代码参照测试中的连接方式使用websocket-client库可得到最小验证脚本import websocket ws websocket.create_connection(ws://localhost:8003) ws.send(Hello, World!) result ws.recv() ws.close() print(result) # 期望输出Server received: Hello, World!当应用运行后扩展会先在控制台打印Websocket server started.随后对每条消息打印Received message: ...客户端收到Server received: Hello, World!即证明整条链路TEN 应用启动 → 扩展 on_start → websockets 服务 → 回显工作正常。七、构建与发布BUILD.gn 解读BUILD.gn 展示了该扩展如何被打包为 TEN 软件包ten_package(websocket_server_python)声明package_kind extensionresources列出LICENSE、__init__.py、main.py、manifest.json、property.json、pyproject.toml、requirements.txt等随包分发文件通过exec_script递归收集docs/**/*文档作为包资源deps [ //core/src/ten_runtime ]声明对核心运行时的构建依赖在启用 ten_manager 时额外生成ten_package_publish(upload_websocket_server_python_to_server)发布目标说明该包可经由 TEN 包服务器发布/分发。八、许可证该扩展是 TEN Framework 项目的一部分采用 Apache License 2.0 开源协议详见包内 LICENSE 与 main.py 头部注释允许在遵循协议的前提下自由使用、修改与再分发。总结websocket_server_python虽然代码量不大却是理解 TEN Framework Python 扩展开发的理想起点它完整展示了 Addon 注册、AsyncExtension生命周期钩子、AsyncTenEnv属性读取与日志、基于websockets的异步服务启动、图配置注入端口参数、以及标准打包发布流程。掌握了这个最小可运行范例即可在此基础上扩展出面向真实业务的 WebSocket 服务端——例如将回显逻辑替换为向 TEN 图中其他扩展转发消息构建语音助手、流式推理等场景的入口节点。赞分享人工智能AI Agent多模态语音AI 应用【免费下载链接】ten-frameworkOpen-source framework for conversational voice AI agents项目地址https://gitcode.com/TEN-framework/ten-framework点击查看免费下载相关推荐TEN Framework websocket_server_python用 Python 扩展示例在 TEN 应用中搭建 WebSocket 服务器TEN Framework websocket_server_python用 Python 扩展示例在 TEN 应用中搭建 WebSocket 服务器 本文以人工智能AI Agent多模态语音AI 应用在 TEN Framework 中构建异步 HTTP 服务器 Python 扩展aio_http_server_python 源码解析与实战在 TEN Framework 中构建异步 HTTP 服务器 Python 扩展aio_http_server_python 源码解析与实战 导读 aio_h人工智能AI Agent多模态语音AI 应用TEN Framework 中的 Node.js HTTP 服务器扩展http_server_extension_nodejs 集成与源码解析TEN Framework 中的 Node.js HTTP 服务器扩展http_server_extension_nodejs 集成与源码解析 http_se人工智能AI Agent多模态语音AI 应用上一篇如何快速下载全网视频Video-Downloader完整使用指南下一篇开源AI视频分析神器5分钟自动看懂视频内容解放你的双手创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考