diff --git a/docs/AI_Chat_Assistant PRD.md b/docs/AI_Chat_Assistant PRD.md index 6e84967..727a925 100644 --- a/docs/AI_Chat_Assistant PRD.md +++ b/docs/AI_Chat_Assistant PRD.md @@ -270,23 +270,23 @@ graph TD - **需求说明** - 文本气泡:展示普通文字对话内容,完整支持Markdown格式; - Markdown支持包括普通文本格式化、表格布局以及图片嵌入,提供更丰富的内容展示方式 - - 卡片气泡:用于展示结构化信息,如车辆信息、维保记录等; - 按钮气泡:包含可交互按钮,用于快速回复或执行操作; - 富媒体气泡:支持图片、视频、语音等多媒体内容展示; - 富媒体气泡可能适用于显示特定的信息,或者是视频的教程,轮播的图片 - - 链接气泡:用于显示一个链接,包含Icon,Title,Description,以及一个可以点击的链接; - 点击链接可以进入webview,链接气泡主要是用于详细介绍某些活动或者查看详情 - - 业务气泡:用于特定业务的定制化气泡,会根据对话的业务场景,显示不同的气泡。 - 业务气泡不同于其他的气泡,可以在用户询问金融方案后显示返回的计算结果,在结果后面还有一个按钮,可以进入金融计算器的页面;同时在用户说出我希望订购某款车型时,会出现车型的信息,并且有一个立即订购的按钮。业务气泡是根据返回的数据来判断具体的业务场景,混合显示的气泡类型。 - + +![按钮气泡](images/button_bubble_image.png) + +![快捷回复](images/quick_reply_image.png) + +![业务气泡1](images/image%203.png) + +![业务气泡2](images/bussine_image.png) #### **3.3.2 普通问答流程** @@ -453,53 +453,54 @@ graph TD ``` packages/ ai_chat_core/ - ai_chat_core.dart # 对外统一入口 - src/ # 代码目录 - models/ # models - message.dart # 消息和消息块 - message_chunk.dart - vehicle_command.dart # 车控 - vehicle_command_response.dart - command_result.dart - enums/ # enums - message_type.dart - message_status.dart - command_type.dart - service_state.dart # 服务状态 - input/ - audio_recorder_service.dart # 录音以及保存文件 - voice_recognition_service.dart # 目前项目未使用 - wake_word_service.dart # 预留(可选) - nlp/ # 自然语言处理相关 - text_classification_service.dart - vehicle_command_service.dart - dialog/ #对话相关的 - chat_channel/ - chat_sse_service.dart # SSE - chat_ws_service.dart # 预留 WebSocket(可选) - chat_http_service.dart # 批量 HTTP 方案(可选) - message_service.dart # 核心编排/状态更新 - tts/ # TTS - tts_service.dart - tts_task_queue.dart - command/ # 车控相关 - command_service.dart # Command Register Callback(已更新为抽象类的方式) - vehicle_command_handler.dart # 自定义实现车控命令 - persistence/ # 持久化 - persistence_service.dart # 提供持久化服务 - dao/ # dao - message_dao.dart # 消息体的 dao 对象 - infra/ # infra 的服务 - config_service.dart - redis_service.dart - location_service.dart - vehicle_state_service.dart # 预留 - logger.dart - error_mapper.dart - utils/ # 工具类 - markdown_cleaner.dart - id_generator.dart - throttle.dart + lib/ + ai_chat_core.dart # 对外统一入口 + src/ # 代码目录 + models/ # models + message.dart # 消息和消息块 + message_chunk.dart + vehicle_command.dart # 车控 + vehicle_command_response.dart + command_result.dart + enums/ # enums + message_type.dart + message_status.dart + command_type.dart + service_state.dart # 服务状态 + input/ + audio_recorder_service.dart # 录音以及保存文件 + voice_recognition_service.dart # 目前项目未使用 + wake_word_service.dart # 预留(可选) + nlp/ # 自然语言处理相关 + text_classification_service.dart + vehicle_command_service.dart + dialog/ #对话相关的 + chat_channel/ + chat_sse_service.dart # SSE + chat_ws_service.dart # 预留 WebSocket(可选) + chat_http_service.dart # 批量 HTTP 方案(可选) + message_service.dart # 核心编排/状态更新 + tts/ # TTS + tts_service.dart + tts_task_queue.dart + command/ # 车控相关 + command_service.dart # Command Register Callback(已更新为抽象类的方式) + vehicle_command_handler.dart # 自定义实现车控命令 + persistence/ # 持久化 + persistence_service.dart # 提供持久化服务 + dao/ # dao + message_dao.dart # 消息体的 dao 对象 + infra/ # infra 的服务 + config_service.dart + redis_service.dart + location_service.dart + vehicle_state_service.dart # 预留 + logger.dart + error_mapper.dart + utils/ # 工具类 + markdown_cleaner.dart + id_generator.dart + throttle.dart ``` 对外暴露(ai_chat_core.dart)仅导出: @@ -638,10 +639,46 @@ class MessageService { } ``` +#### **4.1.6 编译与分发说明(path 子包 vs 单包)** +- 当前结构:插件(ai_chat_assistant)+ 仓库内 path 依赖(packages/ai_chat_core、packages/basic_intl)。 + +- 下游集成(pubspec)仅需: + ```yaml + ai_chat_assistant: + git: + url: + ref: + ``` +- Flutter 构建行为: + 1. 克隆仓库 → 解析主插件 pubspec → 解析 path 子包 → 汇总全部 Dart 源码。 + 2. Debug:JIT,Release:统一 AOT 编译为一个 snapshot(无包边界差异)。 +- 性能与产物差异:将子包“内联”进 lib/ 与保持 path 组织,在编译后无本质差异(tree shaking 后输出等价)。 +- 适用场景对比: + | 目标 | 保持多包 | 合并单包 | + | ---- | -------- | -------- | + | 代码隔离 / 复用 | 优 | 弱 | + | 发布到 pub.dev | 需逐包发布 | 更简单 | + | 测试隔离性 | 优 | 一般 | + | 用户认知成本 | 稍高 | 低 | +- 暂不需发布:保持 path 结构即可;若未来开放生态 → 发布次序:ai_chat_core → basic_intl → ai_chat_assistant。 + +#### **4.1.7 AAR 与闭源分发说明** +| 诉求 | 可行性 | 说明 | +| ---- | ------ | ---- | +| 给“另一个 Flutter App”仅提供预编译 AAR 使用 | 不推荐/不可行 | Flutter 仍需源文件参与整体编译流程 | +| 给纯原生 Android App 内嵌使用 | 可用 `flutter build aar` | 适用于“原生 App 集成 Flutter 模块”,不是插件分发 | +| Dart 逻辑闭源 | 官方未支持 | 只能转移核心到 native/FFI 或服务端 | + +结论:对 Flutter 使用方,直接 Git 依赖即可,无需 AAR。 + + +--- + + ## 参考文件 -[AI Assistant in One App.pdf](https://telekom-my.sharepoint.de/:b:/r/personal/guangfei_zhao_t-systems_com/Documents/Dokumente/AI%20Assistant%20in%20One%20App.pdf?csf=1&web=1&e=On4V2o) +> [AI Assistant in One App.pdf](https://telekom-my.sharepoint.de/:b:/r/personal/guangfei_zhao_t-systems_com/Documents/Dokumente/AI%20Assistant%20in%20One%20App.pdf?csf=1&web=1&e=On4V2o) -[https://www.figma.com/design/YBuYyBdkRRyP4YCPuzstDX/AI智能体?node-id=21-738&t=1eLWMSwO6XrA6mFE-0](https://www.figma.com/design/YBuYyBdkRRyP4YCPuzstDX/AI%E6%99%BA%E8%83%BD%E4%BD%93?node-id=21-738&t=1eLWMSwO6XrA6mFE-0) +> [Figma 设计稿](https://www.figma.com/design/04VXNLNrLdVDHhKBuOr06o/AI_Chat_Assistant?node-id=2-4607&t=qofYGMFzBLQ7cKus-1) -[分子送检系统需求规格书.docx](images/%E5%88%86%E5%AD%90%E9%80%81%E6%A3%80%E7%B3%BB%E7%BB%9F%E9%9C%80%E6%B1%82%E8%A7%84%E6%A0%BC%E4%B9%A6.docx) \ No newline at end of file +> [分子送检系统需求规格书.docx](images/%E5%88%86%E5%AD%90%E9%80%81%E6%A3%80%E7%B3%BB%E7%BB%9F%E9%9C%80%E6%B1%82%E8%A7%84%E6%A0%BC%E4%B9%A6.docx) \ No newline at end of file diff --git a/docs/images/bussine_image.png b/docs/images/bussine_image.png new file mode 100644 index 0000000..fef6622 Binary files /dev/null and b/docs/images/bussine_image.png differ diff --git a/docs/images/button_bubble_image.png b/docs/images/button_bubble_image.png new file mode 100644 index 0000000..6759a0c Binary files /dev/null and b/docs/images/button_bubble_image.png differ diff --git a/docs/images/quick_reply_image.png b/docs/images/quick_reply_image.png new file mode 100644 index 0000000..6f4776b Binary files /dev/null and b/docs/images/quick_reply_image.png differ diff --git a/packages/ai_chat_core/pubspec.lock b/packages/ai_chat_core/pubspec.lock new file mode 100644 index 0000000..ab42029 --- /dev/null +++ b/packages/ai_chat_core/pubspec.lock @@ -0,0 +1,189 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.11.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.1" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.3.0" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.1" + collection: + dependency: transitive + description: + name: collection + sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.19.0" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.3.1" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06" + url: "https://pub.flutter-io.cn" + source: hosted + version: "10.0.7" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379" + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.0.8" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.0.1" + matcher: + dependency: transitive + description: + name: matcher + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.12.16+1" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.11.1" + meta: + dependency: transitive + description: + name: meta + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.15.0" + path: + dependency: transitive + description: + name: path + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.9.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.10.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.12.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.2" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.3.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.7.3" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b + url: "https://pub.flutter-io.cn" + source: hosted + version: "14.3.0" +sdks: + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/ai_chat_core/pubspec.yaml b/packages/ai_chat_core/pubspec.yaml new file mode 100644 index 0000000..4ad5fe8 --- /dev/null +++ b/packages/ai_chat_core/pubspec.yaml @@ -0,0 +1,15 @@ +name: ai_chat_core +description: Core functionalities for the AI Chat Assistant package. +version: 0.1.0 +publish_to: none + +environment: + sdk: ">=3.0.0 <4.0.0" + +dependencies: + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index 7c6a0fa..e74b817 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,6 +1,13 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + ai_chat_core: + dependency: "direct main" + description: + path: "packages/ai_chat_core" + relative: true + source: path + version: "0.1.0" args: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index f6edb97..b60e0e6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -21,6 +21,8 @@ dependencies: # basic_intl: 0.2.0 t_basic_intl: path: packages/basic_intl + ai_chat_core: + path: packages/ai_chat_core # flutter_ingeek_carkey: 1.4.7 # app_car: # path: ../app_car