1.对话式大模型 @startuml title Minote Iflytek LLM Interaction skinparam sequenceParticipant underline skinparam stereotypePosition top hide footbox actor user participant NoteEditActivity<> participant IflytekActivity<> participant SparkChain<> participant LLMFactory<> participant chat_llm<> participant mCallback<> note right of user: 用户启动应用 user -> NoteEditActivity : 启动LLM activate NoteEditActivity NoteEditActivity -> IflytekActivity : 初始化SDK activate IflytekActivity IflytekActivity -> SparkChain : init(Config) activate SparkChain SparkChain --> IflytekActivity : 初始化完成 deactivate SparkChain IflytekActivity -> LLMFactory : textGeneration() activate LLMFactory LLMFactory --> chat_llm : 创建LLM实例 deactivate LLMFactory IflytekActivity -> chat_llm : 注册回调\n注册LLMCallbacks activate chat_llm chat_llm -> mCallback : registerLLMCallbacks(mCallback) deactivate chat_llm alt 同步模式 IflytekActivity -> chat_llm : run(question) activate chat_llm chat_llm --> IflytekActivity : syncOutput deactivate chat_llm loop 循环获取结果 IflytekActivity -> mCallback : syncOutput.getContent() mCallback --> IflytekActivity : result end else 异步模式 IflytekActivity -> chat_llm : arun(question) activate chat_llm loop 等待回调 mCallback -> chat_llm : 接收结果 chat_llm -> mCallback : getContent() mCallback -> IflytekActivity : 处理结果 end end IflytekActivity -> NoteEditActivity : 展示结果 deactivate IflytekActivity NoteEditActivity --> user : 展示结果 deactivate NoteEditActivity user -> NoteEditActivity : 退出应用 activate NoteEditActivity NoteEditActivity -> IflytekActivity : 停止LLM activate IflytekActivity IflytekActivity -> SparkChain : uninit() activate SparkChain SparkChain --> IflytekActivity : 逆初始化完成 deactivate SparkChain IflytekActivity --> NoteEditActivity : 通知退出完成 deactivate IflytekActivity NoteEditActivity --> user : 通知退出完成 deactivate NoteEditActivity @enduml 2.语音听写 @startuml title Minote Iflytek Iat skinparam sequenceParticipant underline skinparam stereotypePosition top hide footbox actor User as user participant "NoteEditActivity" as note<> participant "IatDemo" as demo<> participant "SpeechRecognizer" as recognizer<> participant "RecognizerDialog" as dialog<> participant "JsonParser" as parser<> participant "SpeechUtility" as utility<> activate user == 初始化阶段 == user -> note : 点击语音按钮 activate note note -> demo : startActivity() deactivate note activate demo demo -> utility : createUtility(appid) activate utility demo -> recognizer : createRecognizer(InitListener) activate recognizer demo -> dialog : new RecognizerDialog(InitListener) activate dialog == 参数配置阶段 == user -> demo : 点击开始听写 demo -> recognizer : setParameter(LANGUAGE, "zh_cn") demo -> recognizer : setParameter(VAD_BOS, "4000") demo -> recognizer : setParameter(VAD_EOS, "1000") == 语音识别阶段 == demo -> dialog : show() deactivate demo dialog -->> user : 显示录音对话框 user -> dialog : 开始说话 dialog -->> user : onBeginOfSpeech()显示"开始说话" loop 语音输入过程 dialog -->> user : onVolumeChanged()显示音量大小 end user -> dialog : 停止说话 dialog -->> user : onEndOfSpeech()显示"结束说话" == 结果处理阶段 == dialog -> recognizer : 语音数据处理 activate recognizer recognizer -->> dialog : onResult(RecognizerResult) deactivate recognizer dialog -> parser : parseIatResult(json) activate parser parser -->> dialog : 返回解析后的文本 deactivate parser deactivate dialog activate demo demo -->> user : 显示识别结果 == 错误处理 == alt 识别出错 demo -->> user : 显示错误信息 end == 完成阶段 == user -> demo : 确认文本 demo -->> note : 返回识别文本 deactivate demo activate note note -->> user : 更新便签内容 deactivate note deactivate user @enduml 3.语音合成 @startuml title Minote Iflytek Tts skinparam sequenceParticipant underline skinparam stereotypePosition top hide footbox actor User as user participant "NoteEditActivity" as note<> participant "TtsDemo" as demo<> participant "SpeechSynthesizer" as synthesizer<> participant "TtsSettings" as settings<> participant "SpeechUtility" as utility<> activate user == 初始化阶段 == user -> note : 点击语音合成按钮 activate note note -> demo : startActivity() deactivate note activate demo demo -> utility : createUtility(appid) activate utility demo -> synthesizer : createSynthesizer(InitListener) synthesizer -->> demo : onInit()回调初始化状态 == 参数配置阶段 == user -> demo : 点击设置按钮 demo -> settings : startActivity() activate settings settings -->> user : 显示设置界面(语速/音调/音量) user -> settings : 调整参数 settings -->> demo : 保存设置参数 deactivate settings user -> demo : 选择发音人 demo -->> user : 显示发音人列表对话框 user -> demo : 确认发音人选择 == 合成播放阶段 == user -> demo : 点击开始播放 demo -> demo : setParam() demo -> synthesizer : startSpeaking(text, listener) activate synthesizer synthesizer -->> demo : onSpeakBegin() synthesizer -->> user : 开始播放提示 loop 合成播放过程 synthesizer -->> demo : onBufferProgress() synthesizer -->> demo : onSpeakProgress() demo -->> user : 显示进度和高亮文本 end alt 用户控制 user -> demo : 点击暂停 demo -> synthesizer : pauseSpeaking() synthesizer -->> user : 暂停播放提示 user -> demo : 点击继续 demo -> synthesizer : resumeSpeaking() synthesizer -->> user : 继续播放提示 user -> demo : 点击停止 demo -> synthesizer : stopSpeaking() synthesizer -->> user : 停止播放提示 end synthesizer -->> demo : onCompleted() deactivate synthesizer demo -->> user : 播放完成提示 == 结束阶段 == user -> demo : 退出界面 demo -> synthesizer : destroy() deactivate demo deactivate user @enduml 4.百度翻译顺序图: @startuml title Minote BaiDuTranslate skinparam sequenceParticipant underline skinparam stereotypePosition top hide footbox actor User as user participant "NoteEditActivity" as translate<> participant "BaiduTranslateService" as service<> participant "MD5Utils" as md5<> participant "RespondBean" as bean<> participant "Retrofit" as retrofit<> activate user == 初始化阶段 == user -> translate : 输入待翻译文本 activate translate == 参数准备阶段 == translate -> translate : 生成随机数salt translate -> translate : 准备appid translate -> md5 : getMD5Code(appid + q + salt + 密钥) activate md5 md5 -->> translate : 返回sign签名 deactivate md5 == 翻译请求阶段 == translate -> service : translate(q, from, to, appid, salt, sign) activate service service -> retrofit : 发起POST请求 activate retrofit retrofit -->> service : 返回JSON响应 deactivate retrofit service -> bean : 解析JSON响应 activate bean bean -->> service : 返回RespondBean对象 deactivate bean service -->> translate : 返回翻译结果 deactivate service == 结果显示阶段 == translate -> translate : 处理翻译结果 translate -->> user : 显示翻译结果 alt 翻译出错 translate -->> user : 显示错误信息 end deactivate translate deactivate user @enduml 5.登陆界面顺序图 @startuml title Minote Iflytek Tts skinparam sequenceParticipant underline skinparam stereotypePosition top hide footbox actor User as user participant "LoginActivity" as login<> participant "SplashActivity" as splash<> participant "NotesListActivity" as list<> participant "SetPassword" as setpwd<> participant "DeletePassword" as delpwd<> participant "SharedPreferences" as prefs<> activate user == 应用启动流程 == user -> login : 启动应用 activate login login -> prefs : getBoolean("user") activate prefs prefs -->> login : 返回密码设置状态 deactivate prefs alt 未设置密码 login -> splash : startActivity() activate splash splash -> list : 延时3秒后跳转 deactivate splash activate list else 已设置密码 login -->> user : 显示登录界面 user -> login : 输入密码 login -> prefs : getString("password") activate prefs prefs -->> login : 返回存储的密码 deactivate prefs alt 密码正确 login -> splash : startActivity() activate splash splash -> list : 延时3秒后跳转 deactivate splash else 密码错误 login -->> user : 显示"密码错误"提示 login -->> user : 清空密码输入框 end end deactivate login == 设置密码流程 == user -> list : 选择设置密码 list -> setpwd : startActivity() activate setpwd setpwd -->> user : 显示密码设置界面 user -> setpwd : 输入密码和确认密码 alt 密码为空 setpwd -->> user : 显示"密码不能为空"提示 else 两次密码不匹配 setpwd -->> user : 显示"密码不匹配"提示 setpwd -->> user : 清空确认密码框 else 密码设置成功 setpwd -> prefs : putBoolean("user", true) setpwd -> prefs : putString("password", pwd) activate prefs prefs -->> setpwd : 保存成功 deactivate prefs setpwd -->> user : 显示"设置密码成功"提示 setpwd -->> list : startActivity() end deactivate setpwd == 删除密码流程 == user -> list : 选择删除密码 list -> delpwd : startActivity() activate delpwd delpwd -->> user : 显示密码验证界面 user -> delpwd : 输入当前密码 alt 密码为空 delpwd -->> user : 显示"密码不能为空"提示 else 密码错误 delpwd -->> user : 显示"密码错误"提示 delpwd -->> user : 清空密码输入框 else 密码正确 delpwd -> prefs : putBoolean("user", false) activate prefs delpwd -> prefs : putString("password", "") prefs -->> delpwd : 保存成功 deactivate prefs delpwd -->> user : 显示"已经删除登录密码"提示 delpwd -->> list : startActivity() end deactivate delpwd deactivate user @enduml 分界线以下是弃用的UML顺序图 /////////////////////////////////////////////////////////////////////////////////////////////// 架构包图: @startuml title Software Architecture Package Diagram package "Interface Layer" { package "ui" { class "UIController" as UI } package "widget" { class "WidgetManager" as Widget } package "res" { class "ResourceLoader" as Res } } package "Business Layer" { package "etask.remote" { class "RemoteTask" as Remote } package "tool" { class "ToolUtils" as Tool } package "exception" { class "ExceptionHandler" as Exception } } package "Model Layer" { class "BusinessModel" as Model } package "Data Layer" { class "DataAccessObject" as Data } UI --> Widget : uses UI --> Res : uses Widget --> Remote : interacts with Tool --> Exception : handles Remote --> Model : processes Model --> Data : stores @enduml Speech版本语音听写: @startuml title Speech Recognition Process with NoteEditActivity and IATActivity skinparam sequenceParticipant underline skinparam stereotypePosition top hide footbox actor user participant "NoteEditActivity" as NEA participant "IATActivity" as IATA participant "SpeechRecognizer" as SR participant "RecognizerListener" as RL participant "InitListener" as IL note right of user: 用户启动应用并选择语音识别功能 user -> NEA : 选择语音识别功能 activate NEA NEA -> IATA : startIATActivity() activate IATA note right of IATA: 初始化SDK和SpeechRecognizer IATA -> SR : createRecognizer(Context, IL) activate SR SR --> IATA : onInit(int) deactivate SR note right of IATA: 设置识别参数 IATA -> SR : setParameter(String, String) note right of IATA: 构建语法(如果需要) IATA -> SR : buildGrammar(String, String, GL) activate SR SR --> IATA : onBuildFinish(String, SpeechError) deactivate SR note right of IATA: 更新词典(如果需要) IATA -> SR : updateLexicon(String, String, LXL) activate SR SR --> IATA : onLexiconUpdated(String, SpeechError) deactivate SR note right of IATA: 开始录音进行识别 IATA -> SR : startListening(RL) activate SR SR --> IATA : onBeginOfSpeech() loop Recording SR --> IATA : onVolumeChanged(int, byte[]) end SR --> IATA : onEndOfSpeech() SR --> IATA : onResult(RecognizerResult, boolean) SR --> IATA : onError(SpeechError) deactivate SR note right of IATA: 处理识别结果 IATA -> user : 展示识别结果 note right of user: 用户完成识别并退出 user -> IATA : 退出识别功能 IATA -> SR : stopListening() IATA -> SR : destroy() @enduml Linux版本: @startuml title Speech Recognition Process with NoteEditActivity and IATActivity skinparam sequenceParticipant underline skinparam stereotypePosition top hide footbox actor user participant "NoteEditActivity" as NoteEdit participant "IATActivity" as IAT participant "SpeechRecognizer" as SR participant "RecognizerListener" as RL participant "InitListener" as IL note right of user: 用户启动应用并选择语音识别功能 user -> NoteEdit : 选择语音识别功能 activate NoteEdit NoteEdit -> IAT : startIATActivity() activate IAT note right of IAT: 初始化SDK和SpeechRecognizer IAT -> SR : createRecognizer(Context, IL) activate SR SR --> IAT : onInit(int) deactivate SR note right of IAT: 注册监听回调和配置识别参数 IAT -> SR : setParameter(String, String) note right of IAT: 启动会话 IAT -> SR : startListening(RL) activate SR loop Recording SR --> IAT : onVolumeChanged(int, byte[]) SR --> IAT : onBeginOfSpeech() IAT -> SR : writeAudio(byte[], int, int) SR --> IAT : onResult(RecognizerResult, boolean) SR --> IAT : onEndOfSpeech() end note right of IAT: 处理识别结果 IAT -> user : 展示识别结果 note right of user: 用户完成识别并退出 user -> IAT : 退出识别功能 IAT -> SR : stopListening() IAT -> SR : destroy() deactivate SR deactivate IAT @enduml