尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Stream 视频边缘网络(SFU)架构解析:Vision-Agents 电话 RAG 示例中的 video.md 知识库文档
Stream 视频边缘网络SFU架构解析Vision-Agents 电话 RAG 示例中的 video.md 知识库文档【免费下载链接】Vision-AgentsOpen Vision Agents by Stream. Build voice and vision agents quickly with any model or video provider. Uses Streams edge network for ultra-low latency.项目地址: https://gitcode.com/GitHub_Trending/vi/Vision-Agents本文以 video.md 这份知识库文档为切入点完整解析 Stream 视频边缘网络的底层架构、可构建的应用形态与核心优势低延迟、开发者体验、Dynascale并深入 03_phone_and_rag_example 源码说明这份文档如何被索引进 RAG 知识库、在真实电话通话中为语音 AI 提供事实依据。读完本文你将掌握 Stream Video 能力的知识要点并能独立将knowledge/目录扩展成你自己的产品知识库。一、文档定位RAG 知识库中的 Stream Video 产品档案在 Vision-Agents 仓库的 03_phone_and_rag_example 中knowledge/目录扮演着产品知识库的角色其中包含 5 份 Markdown 文档video.mdStream Video视频边缘网络 / SFUchat.mdStream Chat聊天 APIfeeds.mdStream Feeds动态流 APImoderation.mdStream Moderation内容审核needle_in_haystack.md一条刻意植入的错误答案把终极问题的答案写成 33 而不是 42用于验证 RAG 检索是否真的能精确命中目标文档这些文档共同构成语音 AI 代理的大脑使代理能够在电话里准确回答关于 Stream Chat、Video、Feeds、Moderation 四类 API 的问题。配套的 instructions.md 明确要求代理先理解客户在构建什么chat、feeds、moderation 还是 video再针对对应产品查知识库文档——这正是 RAG 与 LLM 分工协作的典型范式。二、核心事实遍布全球的视频 SFU 边缘网络video.md 开宗明义地写道Stream runs a full edge network of video SFU servers around the world这句话包含两个关键信息点1. 边缘网络Edge Network。Stream 在全球范围部署了分布式服务器节点语音与视频媒体流量被路由到离用户最近的节点处理从而把跨地域回源造成的延迟降到最低。这与仓库中 03_phone_and_rag_example/README.md 的部署建议相互印证——README 明确提示为获得最优延迟建议将示例部署在美东US-east本地开发会因网络往返产生额外延迟。2. SFUSelective Forwarding Unit选择性转发单元。SFU 是 WebRTC 架构中一种经典的媒体服务器角色它接收各参与者的音视频流但不做混流而是按需选择性地转发给其他参与者。相比 MCU 混流方案SFU 方案解码/编码开销小、可扩展性强是主流视频会议与直播系统的首选架构。从仓库源码结构看这一边缘网络能力由 getstream 插件 承载其中stream_edge_transport.pyStream 边缘传输与sfu_events.pySFU 事件两个模块从命名即可推断分别对应边缘网络的媒体传输通道与 SFU 事件上报机制是 Stream 视频/语音能力在 Vision-Agents 中的底层接入点。三、能构建什么从直播到语音/视频 AIvideo.md 列出了四类典型的可构建应用应用形态要点直播体验Livestreaming超低延迟文档标注约为 50ms 量级视频通话Video calling基于 WebRTC 与 SFU 转发的实时多人通信音频房间Audio rooms语音优先的群组房间场景语音/视频 AIVoice/Video AI把 AI 代理接入实时音视频流即本文示例的核心场景其中语音 AI正是 03_phone_and_rag_example 的直接体现通过 Twilio 接入 PSTN 电话通过 Stream 边缘网络承载实时音频再由 AI 代理完成语音识别STT、大模型推理与语音合成TTS形成一条完整的实时语音 AI 链路。而视频 AI在仓库中同样有真实落地examples/05_security_camera_example/智能摄像头示例包含security_camera_processor.py与poster_generator.py展示了基于视频流的实时画面分析tests/目录下还设有 test_queue_and_video_forwarder.py、test_queued_video_track.py 等视频轨道相关测试佐证视频轨道VideoTrack在核心层agents-core/vision_agents/core有完整的队列与转发实现。四、为什么选择 Stream延迟、开发者体验与 Dynascalevideo.md 从三个维度给出选用 Stream 的理由1. 低延迟语音与视频。依赖前文所述的全球边缘网络把服务器部署在离用户近的地方是 50ms 级直播延迟的根本来源。README 中部署到美东以获得最优延迟的提示再次印证了地理分布对实时通信延迟的决定性影响。2. 优秀的开发者体验。文档强调 SDK 易集成。在 Vision-Agents 中这种易集成体现在一行声明式的插件使用上例如 inbound_phone_and_rag_example.py 中构建 Agent 的方式return Agent( edgegetstream.Edge(), agent_userUser(idai-agent, nameAI), instructionsinstructions, ttselevenlabs.TTS(voice_idFGY2WhTYpPnrIDTdsKH5), sttdeepgram.STT(eager_turn_detectionTrue), llmllm, )edge参数一行接入 Stream 边缘网络TTS/STT/LLM 均以插件形式即插即用。3. Dynascale 动态缩放。文档给出的定义非常具体根据屏幕显示内容、CPU 负载、通话中的设备数量与带宽自动调整分辨率和编码器。这意味着系统能在网络/设备条件变化时自动降级或升级视频质量在保障流畅性的同时节省带宽与算力——这是大型实时视频系统区别于简单固定码率方案的工程能力。五、知识库如何被索引进 RAG三种后端源码级拆解video.md 之所以能回答问题关键在于 inbound_phone_and_rag_example.py 启动时的索引流程。该文件顶部定义了知识库目录与后端选择KNOWLEDGE_DIR Path(__file__).parent / knowledge RAG_BACKEND os.environ.get(RAG_BACKEND, gemini).lower()create_rag_from_directory()见 inbound_phone_and_rag_example.py根据RAG_BACKEND环境变量选择三种初始化路径三者都显式声明extensions[.md]即只索引knowledge/下的 Markdown 文件RAG_BACKEND底层实现存储载体gemini默认gemini.create_file_search_store(name..., knowledge_dir..., extensions[.md])Gemini 内置 File Search 存储启动后统计_uploaded_files数量turbopufferturbopuffer.create_rag(namespacestream-product-knowledge-gemini, ...)TurboPuffer 向量库 LangChain索引完成后可读rag._indexed_filesqdrantqdrant.create_rag(collectionstream-product-knowledge, ...)Qdrant 混合检索完成后可读rag.indexed_files对应的查询方式在create_agent()inbound_phone_and_rag_example.py中实现turbopuffer / qdrant 后端LLM 采用gemini.LLM(gemini-flash-lite-latest)并通过llm.register_function注册一个名为search_knowledge的工具函数其描述为搜索 Stream 产品知识库中关于 Chat、Video、Feeds、Moderation API 的详细信息内部执行rag.search(query, top_k3)——即每次检索取回 top-3 最相关文档片段gemini 后端LLM 直接挂载gemini.tools.FileSearch(file_search_store)工具由 Gemini 原生 File Search 能力完成检索。这套设计对读者的启示是想要扩充代理的知识面只需向knowledge/目录新增 .md 文件并重启——video.md、chat.md 这类产品档案正是以这种极低门槛的方式成为 AI 的事实来源。而needle_in_haystack.md这种植入型文档则是检验检索是否精准命中而非泛泛召回的经典手段。六、语音链路打通Twilio 与 Stream 的桥接video.md 讲的是视频能力而 03 示例把 Stream 的实时媒体能力与 Twilio 电话网桥接在一起其关键链路见 inbound_phone_and_rag_example.pyTwilio 收到来电后向/twilio/voiceWebhook 发起请求该端点通过twilio.verify_twilio_signature校验签名、解析CallWebhookInput生成call_id并异步准备 Agent 与 Stream 通话对象Webhook 返回由twilio.create_media_stream_response(url)定义于 plugins/twilio/vision_agents/plugins/twilio/models.py生成的 TwiML指示 Twilio 把通话音频通过 WebSocket 管道到wss://{NGROK_URL}/twilio/media/{call_id}/{token}WebSocket 端点media_streaminbound_phone_and_rag_example.py校验 token 后调用twilio.attach_phone_to_call(stream_call, twilio_stream, phone_user.id)完成桥接——该函数定义于 plugins/twilio/vision_agents/plugins/twilio/media_stream.py职责是把电话用户挂接到 Stream 通话对象在 Twilio 与 Stream 之间桥接音频最后agent.join(stream_call, participant_wait_timeout0)让代理加入通话agent.simple_response(...)让代理先用一句开场白引导对话再twilio_stream.run()持续运行直到挂断。值得注意的工程细节Twilio 侧音频为mulaw 编码、8kHz 采样率文件 docstring 明确注明而 Vision-Agents 核心层通过 test_mulaw_conversion.py 等测试保证了与内部音频格式的转换正确性。出站方向outbound_phone_example.py则用twilio.create_media_stream_twiml(url)models.py生成 TwiML 并调用twilio_client.calls.create(...)主动拨号LLM 换用gemini.Realtime()实现流式实时对话。七、实战运行把 video.md 知识库跑起来完整的启动步骤记录在 03_phone_and_rag_example/README.md 中核心流程如下1. 配置环境变量在.env中填写STREAM_API_KEY STREAM_API_SECRET GOOGLE_API_KEY TWILIO_ACCOUNT_SID TWILIO_AUTH_TOKEN TURBO_PUFFER_KEY2. 启动 NGROK获得公网地址ngrok http 8000并在 Twilio 控制台将购买的号码的 A call comes in Webhook 指向https://replaceme.ngrok-free.app/twilio/voice。3. 出站呼叫示例AI 打电话订餐厅座位cd examples/03_phone_and_rag_example NGROK_URLreplaceme.ngrok-free.app uv run outbound_phone_example.py --from 1**** --to 1***--from必须是 Twilio 账户中已激活的号码--to填写你的手机号命令会同时启动 HTTP 服务并发起外呼。4. 入站呼叫示例电话接通后由 RAG 驱动的产品顾问应答可问任何关于 Stream Chat/Video/Feeds/Moderation 的问题cd examples/03_phone_and_rag_example RAG_BACKENDgemini NGROK_URLreplaceme.ngrok-free.app uv run inbound_phone_and_rag_example.py不设置RAG_BACKEND时默认使用 Gemini File Search改为turbopuffer或qdrant即可切换到向量库检索后端。示例项目的依赖与本地源码映射见 pyproject.toml要求 Python 3.13通过[tool.uv.sources]以可编辑模式引用agents-core与各插件。如 README 所述生产环境部署在美东可显著降低延迟。八、小结video.md 虽然只有寥寥数段却浓缩了 Stream 视频产品的核心卖点全球边缘网络 SFU 架构带来 50ms 级低延迟Dynascale 提供自适应编码体验覆盖直播、通话、音频房间与语音/视频 AI 四类场景。在 Vision-Agents 的 03_phone_and_rag_example 中它并非孤立的技术文档而是与 chat.md、feeds.md、moderation.md 共同构成 RAG 知识库经create_rag_from_directory()索引进 Gemini File Search / TurboPuffer / Qdrant 三种后端最终让电话另一端的用户获得一个懂 Stream 全部 API 产品细节的语音 AI 顾问。理解这份文档也就理解了知识库即产品文档这一 RAG 落地范式的全部要点。【免费下载链接】Vision-AgentsOpen Vision Agents by Stream. Build voice and vision agents quickly with any model or video provider. Uses Streams edge network for ultra-low latency.项目地址: https://gitcode.com/GitHub_Trending/vi/Vision-Agents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

STM32 RTC例程深度解析:从解压配置到掉电保持与校准

STM32 RTC例程深度解析:从解压配置到掉电保持与校准

简介:STM32例程Example_RTC.7z是一份基于STM32F10x标准外设库的RTC实时时钟开发示例工程,适合STM32初学者快速入门,可掌握RTC时钟配置、日历读写与低功耗唤醒等常见开发方法。压缩包共54个文件,主体为14个C源码与15个头文件&#…

📅 2026/9/16 19:14:10
Streambert 法律边界完整解析:影视搜索引擎聚合器如何规避版权责任

Streambert 法律边界完整解析:影视搜索引擎聚合器如何规避版权责任

Streambert 法律边界完整解析:影视搜索引擎聚合器如何规避版权责任 【免费下载链接】streambert A cross-platform Electron Desktop App to stream and download any Movie, TV Series or Anime in the World. Zero Ads and Tracking 项目地址: https://gitcode.…

📅 2026/9/16 19:09:10
lefthook 的 source_dir 配置详解:自定义脚本存放目录的完整指南

lefthook 的 source_dir 配置详解:自定义脚本存放目录的完整指南

lefthook 的 source_dir 配置详解:自定义脚本存放目录的完整指南 【免费下载链接】lefthook Fast and powerful Git hooks manager for any type of projects. 项目地址: https://gitcode.com/GitHub_Trending/le/lefthook source_dir 是 lefthook 中控制脚本…

📅 2026/9/16 19:09:10
MORE NEWS

更多资讯

📰

STM32串口控制步进电机速度与角度:脉冲换算与协议解析实战

简介:基于STM32的步进电机串口控制工程包,面向嵌入式初学者、电子竞赛选手及需要开发精确运动控制的STM32开发者,主要解决上位机通过串口发送指令后对步进电机速度与角度进行精细调节的问题。压缩包共216个文件,约3.41MB&#xff…

📰

React Native运行环境区分:模拟器与真机调试全指南

2. 为什么你的RN项目总卡在“环境区分”这一步先说个现象。我做React Native开发这几年,最常被问到的问题不是“组件怎么写”,而是“我明明照着官网装的,为什么npx react-native run-android之后就是跑不起来”。这个问题十有八九出在环境上&…

📰

STM32与ESP8266的AT指令通信:从UART接线到断线重连的完整指南

简介:基于STM32与ESP8266的AT指令实现工程,面向嵌入式开发与物联网学习者,演示如何通过串口向ESP8266发送AT指令完成无线网络连接、TCP数据传输等常用操作,适合正在入门STM32与Wi-Fi模块联合开发的读者。压缩包内含248个文件&…

📰

iOS Universal Links校验不通过?从AASA配置到排查的完整指南

先把结论放前面:如果你正在被 “universal link 校验不通过” 这个报错反复折腾,那这篇内容值得你读完。Universal Links(通用链接)在 iOS 8 时代之前靠 URL Scheme 也能做唤起,但体验和安全性都不是一回事。iOS 9 之后…

📰

SpiderMonkey 的 iongraph:用 GraphViz 可视化 IonMonkey 优化图的完整指南

SpiderMonkey 的 iongraph:用 GraphViz 可视化 IonMonkey 优化图的完整指南 【免费下载链接】mongo The MongoDB Database 项目地址: https://gitcode.com/GitHub_Trending/mo/mongo 本文基于 iongraph 官方文档 撰写,并结合 SpiderMonkey 源码中 …

📰

IEC 101规约C语言实现:帧结构解析与南瑞RTU调试实战

简介:面向电力系统远动通信、RTU设备调试及IEC 60870-5-101规约初学者,这份来自南瑞工程现场的RTU101小工具压缩包,将规约文档与可运行源码整合在一起,帮助快速绕开协议细节的弯路。包内共有2个文件,1个cpp源码文件用于…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬