本文将带你走进一个充满创意与挑战的项目:如何利用大模型技术,结合90年代的复古元素,打造一个能与AI角色互动的异次元电话。主人公Austin Mutschler-Hickam在短短一个月内,将一个看似不可能的想法变成了现实,而这背后,是LLM(大型语言模型)的强大助力和无数次的尝试与失败。我们将深入探讨他在硬件选择、软件开发、以及AI角色设计等方面的探索过程,揭示大模型技术在快速原型设计和解决工程难题中的巨大潜力。
硬件选型:从树莓派到VoIP适配器
项目的初期,硬件选型成为了首要难题。Austin最初的设想是将树莓派(Raspberry Pi)直接集成到老式电话中,控制其按键、扬声器和麦克风。他选择了AT&T Trimline 210这款经典的90年代电话,希望能将其改造成智能设备。然而,现实情况远比想象复杂。
挑战一:空间限制。 电话内部空间狭小,难以容纳树莓派及其连接线。
挑战二:音频问题。 树莓派Zero 2缺乏直接支持外部模拟麦克风的硬件组件。Austin尝试了多种音频板方案,例如Waveshare WM8960和Teensy 4 Audio Shield,但都因缺少必要的功能或兼容性问题而告终。他甚至向大模型寻求帮助,但结果并不理想。
最终,在时间紧迫的情况下,Austin不得不放弃直接改造电话硬件的方案,转向了基于VoIP(Voice over IP)技术的解决方案。他购买了一个FlyingVoice FTA1101 VoIP适配器,将电话连接到树莓派 4上运行的VoIP服务器。这个转变虽然放弃了原有的硬件改造计划,却为项目的成功奠定了基础。
案例分析: 硬件选型的反复尝试充分说明了在项目开发过程中,灵活应变的重要性。最初的方案可能存在各种未知的风险,及时调整方向,选择更可行的技术路径,往往是成功的关键。
软件架构:TypeScript与Asterisk的完美结合
在软件方面,Austin选择了TypeScript作为主要的编程语言。尽管有些人可能会觉得这是一个非传统的选择,但他认为NodeJS和TypeScript拥有丰富的社区资源,非常适合快速原型设计。
核心关键词:快速原型设计
在这个项目中,时间非常紧迫,Austin需要在很短的时间内构建出一个可用的系统。TypeScript的动态类型特性和丰富的第三方库,让他能够快速地实现各种功能,而无需花费大量时间在编译和类型检查上。
软件的核心模块包括:
- 电话模拟软件: 最初负责捕获按键、播放DTMF音调、检测电话状态等。在切换到VoIP方案后,这部分代码被废弃,转而专注于与VoIP服务器的交互。
- VoIP服务器接口: 使用Asterisk的ARI (Asterisk REST Interface) API,控制电话的呼入呼出,以及音频流的处理。
- 媒体会话管理: MediaSession类负责处理音频的输入输出,通过UDP服务器与Asterisk进行音频数据的传输。
- AI角色管理: 管理AI角色的prompt、声音、电话号码,以及呼叫时间表。
案例分析: 选择合适的编程语言和框架,能够显著提高开发效率。TypeScript在本项目中的应用,体现了快速原型设计理念的重要性,尤其是在时间有限的情况下。
大模型技术的应用:从音频处理到角色扮演
大模型技术在本项目中扮演了至关重要的角色。Austin充分利用了LLM的强大能力,解决各种技术难题,并赋予电话角色以智能。
1. 音频处理与OpenAI API集成:
Austin利用大模型学习了实时音频处理的相关知识,并成功地将Asterisk与OpenAI的实时API集成在一起。他使用了g711 ulaw音频编解码器,实现了音频数据的无损传输,并通过队列管理音频数据,避免了失真和卡顿。
2. AI角色设计与Tool Calling:
Austin设计了多个AI角色,每个角色都有独特的prompt、声音和故事情节。他使用了OpenAI的Tool Calling功能,赋予角色执行特定操作的能力,例如挂断电话、推荐歌曲等。
案例分析: 大模型不仅可以用于学习新知识,还可以用于解决实际问题。在音频处理和AI角色设计方面,LLM都发挥了重要的作用,帮助Austin实现了项目的关键功能。
3. 解决技术难题:
在遇到技术难题时,Austin经常向大模型寻求帮助,例如音频板的选择、MICBIAS的设置等。虽然LLM的回答并不总是准确,但它仍然提供了一些有用的线索和建议。
VoIP服务器配置:Asterisk与FreePBX
由于硬件改造方案的失败,Austin不得不转向VoIP方案。他选择了Asterisk作为VoIP服务器,并使用FreePBX作为管理界面。
1. RasPBX:
Austin最初尝试使用RasPBX,这是一个预配置的Asterisk和FreePBX的发行版,但发现它已经过时,不支持当前的树莓派版本。
2. 手动配置:
最终,Austin不得不手动配置Asterisk和FreePBX。他参考了网上找到的教程,并对配置文件进行了一些修改,以实现自定义的电话路由功能。
3. 电话路由:
Austin修改了Asterisk的dialplan,将所有拨出的电话都路由到他自己编写的电话服务器上,而不是尝试拨打真实的电话号码。
案例分析: VoIP服务器的配置是一个复杂的过程,需要一定的技术知识。Austin通过查阅资料和实践,成功地搭建了一个可用的VoIP服务器,为项目的顺利进行提供了保障。
性能优化与用户体验
在项目接近尾声时,Austin开始关注性能优化和用户体验。他解决了一些常见的问题,例如AI角色说话时被打断、音频反馈循环等。
1. 语音活动检测(VAD):
为了避免AI角色在说话时被打断,Austin使用了OpenAI的内置VAD功能。当检测到用户开始说话时,VAD会暂停AI角色的语音输出。
2. 音频反馈循环:
由于音频输入和输出没有隔离,导致在通话过程中产生音频反馈循环。Austin通过修改音频路由,将音频直接发送到Asterisk,而不是通过媒体桥,从而解决了这个问题。
3. Hangup Tool的优化:
为了确保AI角色在挂断电话时能够完整地说完最后一句话,Austin在调用Hangup Tool之前,会等待音频队列为空。
案例分析: 性能优化和用户体验是项目成功的关键。通过解决这些问题,Austin打造了一个流畅、自然的AI电话体验。
90年代主题与异次元剧情
为了贴合90年代的主题,Austin设计了一系列有趣的AI角色,例如108.3电台DJ、百视达店员、必胜客员工、IT支持人员、以及紧急服务人员等。
他还设计了一个引人入胜的异次元剧情,让玩家通过与AI角色的互动,体验一场充满冒险和挑战的逃脱游戏。
故事梗概:
Henderson博士一直在研究一种可以连接不同维度的频率。他追踪到频率放大的源头是一个房子,房子里空无一人,只有一部老式电话。当他拿起电话时,电话开始自动拨号。
Henderson博士需要帮助派对嘉宾回到现实世界,他会给他们布置各种任务,以稳定频率。每次对话都会揭示下一个挑战。
案例分析: 90年代主题和异次元剧情的结合,为项目增添了趣味性和吸引力。AI角色的设计,使得电话不仅仅是一个技术演示,更是一个充满创意和想象力的艺术作品。
总结:大模型技术驱动的创新
总而言之,Austin的AI异次元电话项目是一次软硬件结合的创新尝试,充分展示了大模型技术在快速原型设计、解决工程难题、以及提升用户体验方面的巨大潜力。虽然项目过程中遇到了各种挑战,但通过不断学习和调整,最终取得了成功。
这个项目不仅为Austin的派对增添了乐趣,也为我们提供了一个关于大模型技术应用的生动案例。未来,我们有理由相信,LLM将在更多领域发挥重要作用,推动科技创新和产业升级。
项目代码地址:https://github.com/AustinMutschler/90s-AI-Interdimensional-Phone (代码较为混乱,不建议直接作为项目基础使用)