TEN Framework 的 Default Go App:用 Go 编写默认应用模板的完整指南
人工智能AI Agent多模态语音AI 应用【免费下载链接】ten-frameworkOpen-source framework for conversational voice AI agents项目地址https://gitcode.com/TEN-framework/ten-framework点击查看免费下载本文以 packages/core_apps/default_app_go/docs/README.zh-TW.md 为主体结合仓库内default_app_go包的源码与配置系统讲解如何在 TEN Framework 中编写、构建、安装并运行一个 Go 语言编写的默认应用App。读完本文你将掌握该应用模板的完整目录结构、生命周期回调的 Go 实现方式、manifest.json 依赖声明与构建/启动脚本的使用方法并了解如何基于它开发自己的 TEN 应用。概述什么是 Default Go Appdefault_app_go是 TEN Framework 官方提供的、以 Go 语言编写的「默认应用模板」Default TEN Framework application template written in Go。在 TEN 体系中应用App是最顶层的可执行载体负责加载配置、初始化运行时环境并承载由扩展Extension组成的图Graph。这个模板的作用就是给出一个最小可运行的 Go 应用骨架开发者可以基于它快速起步再逐步加入自定义的扩展与业务逻辑。该包在 packages/core_apps/default_app_go/manifest.json 中被声明为type: app名称为default_app_go版本为0.11.73标签为[go, template]。其多语言展示名称与描述均已在 manifest 中配置例如简体中文为「默认 Go 应用」繁体中文为「預設 Go 應用程式」。特性Go 语言实现的应用模板整个 App 以 Go 编写通过 TEN Framework 的 Go 绑定ten_runtime_go与 C 核心运行时通信。可直接整合进 TEN 应用该包遵循框架规范可作为标准app类型软件包被 TEN 应用整合与发布。生命周期回调开箱即用模板实现了OnInit、OnDeinit等核心回调开发者只需在此基础上按需覆写。具备完整的包元数据包含多语言 README、依赖声明、构建与启动脚本符合 TEN 软件包ten_package的发布规范。快速开始前置条件在安装与运行该模板前需要满足 manifest.json 中指定的必需相依性。查看 packages/core_apps/default_app_go/manifest.json 的dependencies字段dependencies: [ { type: system, name: ten_runtime, version: 0.11.73 }, { type: system, name: ten_runtime_go, version: 0.11.73 } ]即该模板依赖两个系统级软件包依赖包类型说明ten_runtimesystemTEN Framework 的 C 核心运行时ten_runtime_gosystemTEN 的 Go 语言绑定提供ten_framework/ten_runtime接口与构建工具链此外本地开发环境需要具备 Go 工具链模板的go.mod声明go 1.20并能通过 TEN Framework 的包管理机制拉取上述系统依赖。安装该模板作为标准 TEN 软件包遵循 TEN Framework 的套件安装指南进行安装。从构建配置 packages/core_apps/default_app_go/BUILD.gn 可以看到它通过ten_package(default_app_go)声明为package_kind app打包时收集的资源包括bin/start启动脚本Windows 平台额外包含bin/start.pygo.sum、go_release.modgo.mod发布时以 release 模块替换本地开发模块main.go应用入口源码manifest.json、manifest.json.tentmanifest 模板、property.jsondocs/**全部多语言文档安装时可将该包视为一个普通app类型套件交由 TEN 的套件安装流程如 tman/ten-manager 机制安装到ten_packages/app/下随后即可通过scripts.startbin/start启动。使用方法1. 应用入口与生命周期实现模板的核心实现位于 packages/core_apps/default_app_go/main.go。完整源码如下package main import ( fmt ten ten_framework/ten_runtime ) type defaultApp struct { ten.DefaultApp } func (p *defaultApp) OnInit(tenEnv ten.TenEnv) { tenEnv.LogDebug(onInit) tenEnv.OnInitDone() } func (p *defaultApp) OnDeinit(tenEnv ten.TenEnv) { tenEnv.LogDebug(onDeinit) tenEnv.OnDeinitDone() } func main() { // test app app, err : ten.NewApp(defaultApp{}) if err ! nil { fmt.Println(Failed to create app.) } app.Run(true) app.Wait() }这段代码展示了 Go 应用模板的标准写法核心步骤有三定义 App 结构体内嵌ten.DefaultApp获得框架提供的默认回调实现覆写生命周期回调OnInit/OnDeinit中先写调试日志再调用OnInitDone()/OnDeinitDone()通知框架该阶段完成创建并运行 Appten.NewApp创建应用实例Run(true)以非阻塞后台方式启动Wait()阻塞等待退出。2. 生命周期回调与 Go 绑定的底层机制从源码层面看模板中使用的ten.DefaultApp、ten.NewApp等 API 定义于 Go 绑定接口包 core/src/ten_runtime/binding/go/interface/ten_runtime/app.goIApp接口声明了OnConfigure(tenEnv TenEnv)、OnInit(tenEnv TenEnv)、OnDeinit(tenEnv TenEnv)三个必须实现的回调DefaultApp是框架提供的默认实现其OnConfigure会调用tenEnv.LogDebug(OnConfigure.)并执行tenEnv.OnConfigureDone()OnInit、OnDeinit同理App接口暴露Run(runInBackground bool)、Close()、Wait()三个方法NewApp(iApp IApp)会校验传入实例非空然后通过 CGO 调用C.ten_go_app_create创建 C 层 app 对象并利用runtime.SetFinalizer注册最终化回调确保 C app 随 Go 对象回收而被正确销毁。模板中的defaultApp之所以可以只覆写OnInit与OnDeinit正是因为内嵌了ten.DefaultApp其余回调沿用默认行为——这解释了「模板为何如此精简却能直接运行」。3. 依赖与模块解析开发态与发布态的切换该模板通过两个 go.mod 变体区分开发态与发布态packages/core_apps/default_app_go/go.mod开发态module app go 1.20 replace ten_framework ../../ten_runtime/binding/go/interface require ten_framework v0.0.0-00010101000000-000000000000packages/core_apps/default_app_go/go_release.mod发布态module app go 1.20 replace ten_framework ./ten_packages/system/ten_runtime_go/interface require ten_framework v0.0.0-00010101000000-000000000000两者的唯一差异在于replace指令的指向开发时通过相对路径直接引用仓库内绑定源码发布打包时见 BUILD.gn 中的go_release.modgo.mod则替换为已安装到ten_packages/system/ten_runtime_go/interface的接口包。main.go中import ten ten_framework/ten_runtime的模块路径正是由这一replace机制解析的。4. 构建与启动脚本manifest.json 的scripts字段定义了两个标准命令scripts: { start: bin/start, build: go run ten_packages/system/ten_runtime_go/tools/build/main.go }start执行bin/startWindows 上为bin/start.py拉起应用该入口在 BUILD.gn 中被作为资源打包进产物build调用ten_runtime_go内置的构建工具tools/build/main.go完成应用构建构建工具源码位于 core/src/ten_runtime/binding/go/tools/build/main.go。5. 以包为模板开发自己的 Go 应用将该包作为起点开发自定义应用时通常的做法是复制main.go作为应用入口保留type defaultApp struct { ten.DefaultApp }的骨架按业务需要覆写OnConfigure、OnInit、OnDeinit覆写时务必调用对应的*Done()方法否则框架会因阶段未完成而无法继续在 manifest.json 中补充需要的 extension 依赖、property.json中放置自定义配置模板的 property.json 当前为空对象{}作为扩展起点使用 manifest 中声明的build/start脚本构建并运行或交由 TEN 的套件安装与发布流程处理。授權此套件是 TEN Framework 專案的一部分源码文件头部声明遵循 Apache License, Version 2.0详见 packages/core_apps/default_app_go/LICENSE。该包归属仓库目录packages/core_apps/default_app_go/与default_app_cpp、default_app_nodejs、default_app_python等模板并列共同构成 TEN Framework 的多语言默认应用模板集合见 packages/core_apps/BUILD.gn。赞分享人工智能AI Agent多模态语音AI 应用【免费下载链接】ten-frameworkOpen-source framework for conversational voice AI agents项目地址https://gitcode.com/TEN-framework/ten-framework点击查看免费下载相关推荐TEN Framework 默认 Go 应用模板default_app_go深度解析从 main.go 到应用生命周期TEN Framework 默认 Go 应用模板default_app_go深度解析从 main.go 到应用生命周期 本文围绕 TEN Framewor人工智能AI Agent多模态语音AI 应用TEN Framework 默认 C 应用模板从源码结构到构建运行的完整指南TEN Framework 默认 C 应用模板从源码结构到构建运行的完整指南 default_app_cpp 是 TEN Framework面向对话式语人工智能AI Agent多模态语音AI 应用TEN Framework 默认 C 应用模板解析从零构建与运行你的第一个 C TEN AppTEN Framework 默认 C 应用模板解析从零构建与运行你的第一个 C TEN App 导读 packages/core_apps/defau人工智能AI Agent多模态语音AI 应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考