大数跨境

用 Flutter 和 AI 在 8 小时内构建了一个 AI 会议室应用(开源)

用 Flutter 和 AI 在 8 小时内构建了一个 AI 会议室应用(开源) 索引目录
2026-01-06
0
导读:关注「索引目录」公众号,获取更多干货。“如果能有一个由世界上最聪明的人工智能模型组成的董事会,实时讨论你的问题,那会怎么样?

关注「索引目录」公众号,获取更多干货。





“如果能有一个由世界上最聪明的人工智能模型组成的董事会,实时讨论你的问题,那会怎么样?”

这就是问题所在。结果如何?LLM理事会

最不可思议的是什么?我竟然在午饭后到晚饭前这段时间里,把整个移动应用都开发出来了。

作为一名Google Flutter 开发专家,我已经构建了数百个应用程序,但坦白说,我们现在使用Antigravity等 AI 工具发布软件的速度令人难以置信。

以下是我从一位人工智能传奇人物身上汲取灵感,打开我的集成开发环境(IDE),并在一天之内发布一款优质跨平台应用的故事。👇


💡灵感

事情的起因是我看到Andrej KarpathyOpenAI 的创始成员,特斯拉前人工智能总监)在推特上发布了关于他的项目llm-council 的信息。

他搭建了一个网页界面,用户可以在上面提问,然后多个语言学习模型(例如 GPT-4、Claude 等)会回答这个问题。之后,这些模型会“阅读”彼此的答案,最后由一个“主席”模型综合出最佳建议。

我喜欢这个概念,但我想要把它装进口袋里。

我想要的是一种高端、行政级别的移动体验。那种感觉就像走进了一间会议室。深色模式、金色点缀、流畅的动画。

于是我向自己发起挑战:我能在晚餐前完成吗?

🛠️ 技术栈

为了快速推进而不破坏现有系统,我坚持使用经过实战检验的技术栈:

  • Flutter 3.6+
    :在 iOS 和 Android 上实现丝滑流畅的 60fps 用户界面。
  • 模块化和简洁架构
    :因为“快速”不应该意味着“混乱的代码”。
  • OpenRouter API
    :使用一个密钥即可访问所有型号(Claude 3.5 Sonnet、GPT-4o、Gemini 1.5 Pro)。
  • Antigravity
    :这款人工智能编码助手就像我的打了兴奋剂的结对程序员。

⚡ “午餐至晚餐”冲刺时段(下午 1:00 - 晚上 9:00)

下午 1:00 - 准备工作 🏗️

我没有浪费时间写样板代码。我初始化了 Flutter 项目并设置了领域层。
用户 -> 问题 -> 委员会 -> 审议 -> 综合。

下午2:30 - “反重力”加速器🚀

接下来事情变得有点疯狂了。我没有手动输入每个模型类和存储库,而是使用了Antigravity

我:“创建一个能够调用 OpenRouter 的存储库。它需要同时处理来自 4 个不同模型的流式响应。”

反重力:完成。

它不仅编写代码,而且编写的是质量代码。它处理Dio拦截器、错误解析以及Future.wait理事会成员的并发调用。

下午 4:30 - 用户界面优化 ✨

“委员会”一词本身就带有威望。标准的 Material Design 设计风格并不合适。
我选择了“继承之战”式的美学风格:

  • 深海军蓝背景
    #0F172A
  • 这款扬声器采用金色装饰。
  • 匿名同行评审
    :模型之间进行盲评(模型 A 不知道答案是由模型 B 写的)。

我实现了flutter_animate让信息滑入的效果。感觉很生动。

下午 6:30 - 合成逻辑 🧠

这款应用的精髓在于“主席”模型。
该应用汇总所有答案,去除姓名,并将结果反馈给“主席”模型,并给出以下提示:
“审阅这些观点,并提供一份综合性的执行摘要。”

结果如何?得到的答案比任何单一模型都能提供的答案都更加平衡和细致入微。

晚上 8:00 - 最终优化和测试 🏁

最后一个小时用来做了:

  • 添加本地持久化功能,sqflite以便保存对话。
  • 确保API密钥存储安全。
  • 确保“主席”动画流畅无比。
  • 晚上9点
    :下定决心,全力以赴,完成任务。晚餐时间到。

🧑‍💻 代码(开源)

我将整个系统开源。你可以克隆它,输入你自己的密钥,然后拥有你自己的AI董事会。

点击此处查看代码库:
👉 github.com/sayed3li97/llm_council_app

(注:如果链接显示 404 错误,我正在完善 README 文件!请稍后再试。)

以下是使用 Dart 的并发功能处理并行咨询的示例代码片段:

Future<CouncilSession> consult(String query) async {
  // 1. Fire off requests to all members in parallel
  final responses = await Future.wait(
    members.map((model) => _api.ask(model, query))
  );

  // 2. Anonymize and Request Peer Reviews
  final reviews = await _conductPeerReviews(responses);

  // 3. Synthesis by Chairman
  return _chairman.synthesize(responses, reviews);
}

🚀 为什么这很重要

我们正在进入一个全新的开发时代。如今,速度不再是关键,关键在于架构理念工具运用

作为一名全球开发者工程师 (GDE),我对 2026 年的开发者的建议很简单:拥抱工具。
通过使用像 Antigravity 这样的 AI 代理,我专注于产品体验——动画、流程和价值,而 AI 则负责处理底层技术细节。

关注「索引目录」公众号,获取更多干货。


【声明】内容源于网络
0
0
索引目录
索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
内容 444
粉丝 0
索引目录 索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
总阅读12
粉丝0
内容444