rte-design / ASTRA.ai

ASTRA.ai is an agent framework that supports the creation of real-time multimodal AI Agents. It enables the rapid orchestration and reuse of the latest large model capabilities, achieving low-latency, real-time multimodal interaction with AI Agents.
Apache License 2.0
58 stars 12 forks source link

[Feature Request] Data-Stream updates to RTM2 #28

Open cyfyifanchen opened 1 week ago

cyfyifanchen commented 1 week ago

@Lensual

Lensual commented 5 days ago

对于 go 语言集成 Agora RTM/RTC 的一些问题需要讨论和确定

  1. 目前 Agora RTM SDK 只有 x86_64 架构支持
  2. 目前 Agora RTC SDK 有 arm64 架构支持,但略微小于 x86_64 架构的版本
  3. 引入 cgo 导致对现有的 CI/CD 、脚本及文档 的破坏
  4. 构建过程、调试过程、运行过程更复杂,需要设置 CGO_CFLAGSCGO_LDFLAGSLD_LIBRARY_PATH 等参数
  5. 大量 unsafe 、指针类型强制转换、非托管内存的使用,代码可靠性降低
cyfyifanchen commented 5 days ago

Good research, let's look into it.

Halajohn commented 4 days ago

對於 go 語言整合 Agora RTM/RTC 的一些問題需要討論和確定

  1. 目前 Agora RTM SDK 只有 x86_64 架構支援
  2. 目前 Agora RTC SDK 有 arm64 架構支援, 但略微小於 x86_64 架構的版本

RTC/RTM SDK 有其他的 arch 支持, 有需求的话, 可以看怎么满足.

  1. 引入 cgo 導致對現有的 CI/CD , 指令碼及文件 的破壞
  2. 建構過程, 偵錯過程, 運行過程更複雜, 需要設定 CGO_CFLAGS, CGO_LDFLAGS, LD_LIBRARY_PATH 等參數
  3. 大量 unsafe , 指針類型強制轉換, 非託管記憶體的使用, 程式碼可靠性降低

以上三点是同一件事, 只要想把 C/C++ codes 引入到 go, 那势必引入 cgo. 引入 cgo 势必需要处理 CGO_xxx 这些参数以及代码的复杂性, 这些是写 cgo 下原本需要处理的事情, 因此触碰到 cgo 是 go programming 里面比较进阶的一环.

感觉你的想法会有两种作法:

1 extension

用 go 开发一个 ASTRA extension, 内含 C/C++ 的 SDK => 这个会需要开发者自行处理 cgo 的部份, 至少包含原 post 中的最后这三个复杂性需要开发者自行处理.

2 extensions

  1. 用 C++ 开发一个 ASTRA extension, 内含 C++ 的 SDK => 纯 C++ 开发, 甚至不需要包 C wrapper, 就直接纯 C++ 开发即可.

  2. 用 go 开发另一个 ASTRA extension, 内含纯用 go 写的 "业务" 代码, 不涉及任何的 cgo.

而这两个 ASTRA extension 之间透过 ASTRA 的 interface 交互即可, 原本 1 extension 想要达到的功能, 2 extensions 都可以达到. 相当于 cgo 的所有复杂性, performance handling, 多语言的安全交互等等, 全由 ASTRA 完成.

cyfyifanchen commented 4 days ago

这么好的讨论不如直接 convert 过去。