人工智能AI Agent多模态语音AI 应用【免费下载链接】ten-frameworkOpen-source framework for conversational voice AI agents项目地址https://gitcode.com/TEN-framework/ten-framework点击查看免费下载导读本文围绕 TEN-framework 仓库中ai_agents/agents/examples/voice-assistant-sip-plivo/server/下的独立 Plivo 服务器展开讲解一个从main_python扩展迁移而来的、无框架依赖的 FastAPI 服务它负责 Plivo 电话的配置加载、健康检查与 tenapp 子进程生命周期管理而 WebSocket 音频流与 STT→LLM→TTS 语音对话管线仍由 tenapp 内的main_python扩展承载。读完本文你将掌握该服务器的环境变量配置、启动方式、HTTP 接口语义、进程管理原理以及它与完整 voice-assistant-sip-plivo 示例前端、ngrok、TMAN Designer的协作关系。一、服务器定位职责分离的“配置与进程管家”server/目录是 voice-assistant-sip-plivo 示例中一个独立可运行的 FastAPI 应用。值得注意其 README.md 标题写作 Voice Assistant SIP Twilio Server属模板复制遗留实际集成对象是PlivoTwilio 的竞品服务商源码与依赖均以 Plivo 为准。该服务器的核心设计是职责分离HTTP 管理面由本服务器FastAPI uvicorn提供 REST API负责配置下发、健康检查、tenapp 进程拉起与监控媒体面WebSocket 音频流、呼叫应答 XML/webhook/answer、状态回调/webhook/status等实时语音逻辑全部由 tenapp 应用main_python扩展处理对应实现位于 tenapp/ten_packages/extension/main_python/server.py。从源码看PlivoServer类在start_server()中先启动 tenapp 子进程执行./scripts/start.sh随后才监听自身端口一旦 tenapp 进程退出监控线程会主动向自身发送SIGTERM关闭整个服务器见 plivo_server.py。因此本服务器实际上承担了轻量级进程管理器 配置服务的双重角色。二、安装与依赖服务器为纯 Python 实现依赖集中在 requirements.txt依赖用途fastapiREST API 框架uvicorn[standard]ASGI 服务器plivoPlivo REST 客户端本服务器仅用于配置透传pydantic配置模型校验PlivoServerConfig继承BaseModel说明requirements.txt 特意注明 WebSocket 与音频处理audioop不属于本服务器职责前者由main_python扩展处理后者是 Python 标准库无需额外安装。在完整示例中安装通过 Taskfile 编排Taskfile.ymlcd ai_agents/agents/examples/voice-assistant-sip-plivo task install该命令依次执行tman install安装 tenapp 依赖、./scripts/install_python_deps.sh安装 Python 依赖、bun install安装前端依赖。若仅需本服务器可直接在server/目录下用 pip 安装上述依赖。三、配置环境变量与命令行参数3.1 环境变量服务器通过环境变量加载配置全部定义在PlivoServerConfigplivo_server.py中环境变量默认值说明PLIVO_AUTH_ID空字符串Plivo Auth ID必填PLIVO_AUTH_TOKEN空字符串Plivo Auth Token必填PLIVO_FROM_NUMBER空字符串发起外呼的 Plivo 号码必填PLIVO_HTTP_PORT8080本服务器监听端口进程管理面PLIVO_PUBLIC_SERVER_URL空字符串无协议公网地址如your-domain.com:9000同时用于媒体流与 webhook本地调试用 ngrok 暴露PLIVO_USE_HTTPSfalsewebhook 使用 HTTPS 或 HTTPPLIVO_USE_WSSfalse媒体流使用 WSS 或 WS设置示例export PLIVO_AUTH_IDyour_plivo_auth_id export PLIVO_AUTH_TOKENyour_plivo_auth_token export PLIVO_FROM_NUMBER1234567890 export PLIVO_HTTP_PORT8080 export PLIVO_PUBLIC_SERVER_URLyour-domain.com:9000 export PLIVO_USE_HTTPStrue export PLIVO_USE_WSStrue注意PLIVO_USE_HTTPS/PLIVO_USE_WSS的解析逻辑为os.getenv(..., false).lower() true即只有显式设置为字符串true才启用其余值一律视为false。3.2 命令行参数通过 main.py 提供的 argparse 入口可以覆盖两个关键配置参数默认值说明--tenapp-dir空回退为server/../tenapptenapp 应用目录用于定位启动脚本--port8080覆盖PLIVO_HTTP_PORT指定服务器监听端口命令行参数优先级高于环境变量load_config()中以args.port覆盖PLIVO_HTTP_PORT以args.tenapp_dir覆盖默认路径main.py。四、启动服务器4.1 启动方式# 方式一通过 Taskfile推荐位于示例根目录 cd ai_agents/agents/examples/voice-assistant-sip-plivo task run-api-server # 等价于python3 main.py --tenapp-dir ../tenapp # 方式二直接运行 cd ai_agents/agents/examples/voice-assistant-sip-plivo/server python3 main.py # 方式三指定 tenapp 目录与端口 python3 main.py --tenapp-dir /path/to/tenapp --port 90004.2 启动时序与生命周期从PlivoServer.start_server()plivo_server.py可还原完整启动流程解析配置环境变量 CLI 参数_start_tenapp_process()在 tenapp 目录下执行./scripts/start.sh该脚本设置PYTHONPATH、LD_LIBRARY_PATH、NODE_PATH后 execbin/main见 tenapp/scripts/start.sh并以os.setsid创建独立进程组启动守护线程_monitor_tenapp_process()每秒轮询 tenapp 进程状态等待 2 秒后以 uvicorn 启动 FastAPI 应用若 tenapp 进程意外退出守护线程记录退出码并向自身发送SIGTERM触发整体关闭关闭时_stop_tenapp_process()向进程组发送SIGTERM10 秒内未退出则升级为SIGKILL强制结束。main()中还注册了SIGINT/SIGTERM信号处理器plivo_server.py保证 CtrlC 或系统终止信号下能优雅清理子进程。4.3 日志入口main.py使用logging.basicConfig同时输出到标准输出与/tmp/plivo_server.logPlivoServer内部使用logging.getLogger(plivo_process_manager)格式为%(asctime)s - %(name)s - %(levelname)s - %(message)stenapp 子进程的 stdout/stderr 直接透传到父进程控制台便于统一观察。五、HTTP API 端点PlivoServer仅注册两个端点plivo_server.py与 README 描述的调用管理语义略有差异这里以源码为准方法路径说明GET/health健康检查返回{status: healthy, server_time: ISO时间}GET/api/config返回服务器与 tenapp 配置供前端展示/api/config的返回结构包含plivo_from_number、server_port、tenapp_port默认 9000可从PLIVO_PUBLIC_SERVER_URL中冒号后的端口解析出来、tenapp_url、public_server_url、use_https/use_wss以及按协议拼接好的media_ws_urlwss://url/media和webhook_urlhttps://url/webhook/status。注意真正的外呼、查询、挂断、应答与状态回调接口并不在本服务器上而是在 tenapp 内main_python扩展的 server.py 中其端口为 tenapp 的 9000# 发起外呼tenapp 9000 端口 curl -X POST http://localhost:9000/api/call \ -H Content-Type: application/json \ -d {phone_number: 1234567890, message: Hello from AI assistant!} # 查询单个呼叫 curl http://localhost:9000/api/call/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx # 列出所有呼叫 curl http://localhost:9000/api/calls # 停止呼叫 curl -X DELETE http://localhost:9000/api/call/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxtenapp 侧完整的 REST 端点还包括POST /webhook/answer返回 Plivo XML 应答与POST /webhook/status状态回调。六、与完整示例的协作关系本服务器是 voice-assistant-sip-plivo 示例的一个组件完整运行task run会同时拉起四个进程Taskfile.yml组件端口职责tenappmain_python扩展9000呼叫控制、WebSocket 媒体流、STT/LLM/TTS 对话管线本服务器Plivo Configuration Server8080tenapp 进程管理、配置下发、健康检查前端frontend3000Web 控制界面TMAN Designer49483可视化修改 tenapp 图配置ngrok动态公网地址将本地服务暴露为PLIVO_PUBLIC_SERVER_URLPlivo 侧的 webhook 与媒体流 URL 通过环境变量PLIVO_PUBLIC_SERVER_URL统一注入tenapp 内的PlivoCallServer会根据plivo_use_https/plivo_use_wss组装answer_url、status_url与 WebSocket 地址见 server.py。tenapp 的完整图配置STTdeepgram、LLMopenai、TTSelevenlabs、main_controlmain_python 等节点位于 tenapp/property.json其中main_control节点的plivo_server_port: 9000正是上面提到的 tenapp 端口。七、与原代码的差异与设计要点README 总结了该服务器从main_python扩展迁移后的五点改进独立运行完全独立无外部框架依赖可脱离 TEN runtime 单独启动配置管理以环境变量驱动配置便于容器化与多环境部署日志系统采用 Python 标准logging同时落盘/tmp/plivo_server.log模块化设计PlivoServerConfig配置模型、PlivoServer服务器与进程管理、main.pyCLI 入口职责清晰关注点分离WebSocket 与音频处理留在main_python扩展本服务器只做 HTTP 管理面。这种管理面独立、媒体面留在扩展的拆分使开发者可以复用 TEN 框架的实时语音管线同时用轻量 FastAPI 服务处理 Plivo 账号配置、健康探测与进程守护是 SIP 类语音助手落地时常见的部署形态。八、注意事项确保 Plivo 账号的PLIVO_AUTH_ID、PLIVO_AUTH_TOKEN、PLIVO_FROM_NUMBER配置正确否则外呼创建会失败PLIVO_PUBLIC_SERVER_URL必须为 Plivo 可达的公网地址本地调试请配合 start-with-ngrok.sh 暴露服务并将 ngrok 域名填入该环境变量防火墙需放行本服务器端口默认 8080、tenapp 端口9000以及前端端口3000本服务器只提供 HTTP 管理面端点呼叫的应答、状态回调与媒体流全部由main_python扩展处理排查问题时请同时查看 tenapp 子进程的控制台输出。赞分享人工智能AI Agent多模态语音AI 应用【免费下载链接】ten-frameworkOpen-source framework for conversational voice AI agents项目地址https://gitcode.com/TEN-framework/ten-framework点击查看免费下载相关推荐TEN Framework 语音助手前端实战基于 Next.js 构建 Plivo SIP 双向呼叫控制面板TEN Framework 语音助手前端实战基于 Next.js 构建 Plivo SIP 双向呼叫控制面板 导读 本文以 voice assistant s人工智能AI Agent多模态语音AI 应用用 EasyOCR 搭建 LiteParse 独立 OCR 服务部署、HTTP API 与接入实战用 EasyOCR 搭建 LiteParse 独立 OCR 服务部署、HTTP API 与接入实战 LiteParse 除了内置的 Tesseract OCROCR文档在 Vercel 上部署独立 Node.js HTTP 服务器examples/node 通用 Node 框架预设实战指南在 Vercel 上部署独立 Node.js HTTP 服务器 examples/node 通用 Node 框架预设实战指南 本指南围绕本仓库 exampleCLI后端云原生创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
C/C++宏定义:原理、技巧与最佳实践 1. 宏定义基础与核心概念在C/C开发者的日常工作中,宏定义(#define)就像瑞士军刀中的万能工具,看似简单却蕴含巨大能量。作为预处理器指令,它会在编译器看到代码之前完成文本替换工作。这种机制虽然原始,却为… · 2026/9/23 22:34:02
框架到底是什么?从控制反转到约定优于配置,一文讲透框架的本质 前阵子带一个刚转行的朋友,他问我:天天挂在嘴边的"框架"到底是个啥?我愣了一下,因为这个词太熟了,熟到像空气一样,每天都挂在嘴边,可要真用一句大白话解释清楚,还真没那么… · 2026/9/23 22:33:56
JavaSwing+MySQL+JDBC人事管理系统课程设计实战全解 简介:这是一套基于Java Swing、MySQL与JDBC的人事管理系统,面向正在完成数据库课程设计或学习Java桌面应用开发的人群。系统包含完整项目源码、运行界面截图与数据库脚本,覆盖员工信息管理、部门设置、考勤统计等常见业务模块,有助… · 2026/9/23 22:33:56
微信小程序 image 组件实战:14 种图片显示模式完整解析 前言
在微信小程序开发当中,image图片组件是使用频率极高的基础组件。我们在开发时经常遇到图片尺寸和容器尺寸不匹配的问题:图片被拉伸变形、部分画面被裁剪、留白过多等等。小程序 image 组件内置了多种 mode 显示模式,用来控制图片的缩放、… · 2026/9/23 23:05:15
VoxSail AI 音视频翻译与配音实战指南 很多创作者在尝试将视频内容推向全球市场时,往往被繁琐的本地化流程劝退。传统的做法需要分别找翻译、配音员和字幕组,不仅沟通成本高,而且很难保证口型、语速和情感的一致性。有时候仅仅因为一个品牌名的发音不准,或者某句话的停… · 2026/9/23 23:05:09
输电线绝缘子缺陷检测数据集:YOLO实战指南 简介:本资源是面向计算机视觉初学者与电力设备智能巡检开发者的目标检测专用数据集,聚焦输电线绝缘子表面缺陷识别这一典型工业场景。数据已按YOLO格式完成标注与划分,含训练集约480张、验证集约120张JPG图像及对应TXT标签文件,另… · 2026/9/23 23:04:56
Python+Flask+dlib人脸识别考勤系统:从环境搭建到阈值调优全流程 简介:本资源是一套基于Python、Flask与dlib实现的人脸识别企业考勤管理系统,属于高分毕业设计项目源码,面向计算机相关专业的毕业生及课程设计学习者,可帮助解决人脸考勤场景下的身份验证与出勤统计问题。项目已通过导师指导与答辩… · 2026/9/23 23:04:30
从斜率到导数:微积分入门核心概念与实战应用解析 1. 从一条直线的坡度说起:为什么斜率是理解微积分的第一道门先说实话,我当年学微积分的时候,教材第一句“导数是函数在某一点的瞬时变化率”,看得我一脸茫然。后来真正让我开窍的,反而是“斜率”和“切线”这两个初中就… · 2026/9/23 23:04:24
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29