From bb9dd4bef4eb443600d3e649cd4b737f28bef615 Mon Sep 17 00:00:00 2001 From: guo zebin Date: Wed, 17 Sep 2025 15:53:54 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E7=84=B6=E8=BF=9B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重构会话管理逻辑支持以下链路基于llm输出、mcp执行、qa问答对匹配时,文字或音频输出的单向或双向打断: - 1、flask_server.api_send()(gui窗口文字发送) <--> flask_server.api_send_v1_chat_completions()(fay对外的openai兼容接口) - 2、flask_server.api_send(gui窗口文字发送) <-- flask_server.transparent_pass(消息透传接口) - 3、flask_server.api_send(gui窗口文字发送) <-- flask_server.to_stop_talking(打断接口) - 4、flask_server.api_send(gui窗口文字发送) <--> 远程音频 - 5、flask_server.api_send(gui窗口文字发送) <-- 唤醒(普通唤醒、前置词唤醒) - 6、flask_server.api_send(gui窗口文字发送) <-->日程执行 - 7、flask_server.api_send_v1_chat_completions(fay对外的openai兼容接口) <--> flask_server.transparent_pass(消息透传接口) - 8、flask_server.api_send_v1_chat_completions(fay对外的openai兼容接口) <-- flask_server.to_stop_talking(打断接口) - 9、flask_server.api_send_v1_chat_completions(fay对外的openai兼容接口) <--> 远程音频 - 10、flask_server.api_send_v1_chat_completions(fay对外的openai兼容接口) <-- 唤醒(普通唤醒、前置词唤醒) - 11、flask_server.api_send_v1_chat_completions(fay对外的openai兼容接口) <-->日程执行 - 12、flask_server.transparent_pass(消息透传接口) <-- flask_server.to_stop_talking(打断接口) - 13、flask_server.transparent_pass(消息透传接口) <--> 远程音频 - 14、flask_server.transparent_pass(消息透传接口) <-- 唤醒(普通唤醒、前置词唤醒) - 15、flask_server.transparent_pass(消息透传接口) <-->日程执行 - 16、远程音频 <-- 唤醒(普通唤醒、前置词唤醒) - 17、远程音频 <-->日程执行 --- README.md | 5 ++- cache_data/config.json | 49 ------------------------ cache_data/input.wav | Bin 51244 -> 0 bytes cache_data/system.conf | 28 -------------- core/fay_core.py | 51 ++++++++++++------------- core/recorder.py | 4 +- core/stream_manager.py | 12 ++++++ gui/flask_server.py | 20 +++++++--- gui/static/images/Logo.png | Bin 8923 -> 8846 bytes llm/nlp_cognitive_stream.py | 2 +- memory/User/meta.json | 2 +- system.conf.bak | 74 +++++++++++++++++++++++------------- 12 files changed, 107 insertions(+), 140 deletions(-) delete mode 100644 cache_data/config.json delete mode 100644 cache_data/input.wav delete mode 100644 cache_data/system.conf diff --git a/README.md b/README.md index 206d87e..2e9d603 100644 --- a/README.md +++ b/README.md @@ -30,12 +30,13 @@ - 支持唤醒及打断对话 - 支持服务器及单机模式 - 支持机器人表情输出 -- 支持react agent自主决策执行、主动对话(准备升级到MCP协议) +- 支持react agent自主决策执行、主动对话 - 支持后台静默启动 - 支持deepseek等thinking llm - 设计独特的认知模型 - 支持MCP - 提供配置管理中心 +- 全链路交互互通 ### @@ -77,7 +78,7 @@ pip install -r requirements.txt ``` ### **配置** -+ 依照说明修改 `./system.conf` 文件 ++ 依照说明修改 `./system.conf` 文件(默认运行将自动使用公共配置) ### **启动** 启动Fay控制器 diff --git a/cache_data/config.json b/cache_data/config.json deleted file mode 100644 index de208c6..0000000 --- a/cache_data/config.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "attribute": { - "additional": "发呆", - "age": "成年", - "birth": "Github", - "constellation": "水瓶座", - "contact": "qq467665317", - "gender": "女", - "goal": "工作协助", - "hobby": "发呆", - "job": "助理", - "name": "菲菲", - "position": "陪伴", - "voice": "zhixiaomei", - "zodiac": "蛇" - }, - "interact": { - "QnA": "qa.csv", - "maxInteractTime": 15, - "perception": { - "chat": 10, - "follow": 10, - "gift": 10, - "indifferent": 10, - "join": 10 - }, - "playSound": false, - "visualization": false - }, - "items": [], - "memory": { - "isolate_by_user": true - }, - "source": { - "automatic_player_status": false, - "automatic_player_url": "http://127.0.0.1:6000", - "liveRoom": { - "enabled": true, - "url": "" - }, - "record": { - "device": "", - "enabled": false - }, - "wake_word": "你好", - "wake_word_enabled": false, - "wake_word_type": "front" - } -} \ No newline at end of file diff --git a/cache_data/input.wav b/cache_data/input.wav deleted file mode 100644 index 5fb6be6cc7602660737266ba3e15db3d3a1186a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51244 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]+)>__", sentence) + producer_cid = m.group(1) + if producer_cid != conversation_id: + continue if m: sentence = sentence.replace(m.group(0), "") - except Exception: - pass + except Exception as e: + print(e) is_first = "_" in sentence is_end = "_" in sentence content = sentence.replace("_", "").replace("_", "").replace("_", "") @@ -460,19 +464,23 @@ def non_streaming_response(last_content, username): sm = stream_manager.new_instance() _, nlp_Stream = sm.get_Stream(username) text = "" + conversation_id = sm.get_conversation_id(username) while True: sentence = nlp_Stream.read() if sentence is None: gsleep(0.01) continue - # 处理特殊标记 + # 跳过非当前会话 try: m = re.search(r"__]+)>__", sentence) + producer_cid = m.group(1) + if producer_cid != conversation_id: + continue if m: sentence = sentence.replace(m.group(0), "") - except Exception: - pass + except Exception as e: + print(e) is_first = "_" in sentence is_end = "_" in sentence text += sentence.replace("_", "").replace("_", "").replace("_", "") diff --git a/gui/static/images/Logo.png b/gui/static/images/Logo.png index 7f1a541cfc8a40c362d57460b48d8e36735fecb3..d35ad838bbf370fd70494e3e2e1edfe6ba2e5a2b 100644 GIT binary patch delta 8719 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 F{{vQ%_CEjs delta 8797 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 o`SqW_YfDGvLrfXf3J_md的说明启动 +ASR_mode = funasr +#ASR二选一(需要运行fay/test/funasr服务)集成达摩院asr项目、感谢中科大脑算法工程师张聪聪提供集成代码 +local_asr_ip=127.0.0.1 +local_asr_port=10197 + +# ASR二选一(第1次运行建议用这个,免费3个月), 阿里云 实时语音识别 服务密钥(必须)https://ai.aliyun.com/nls/trans +ali_nls_key_id= +ali_nls_key_secret= +ali_nls_app_key= + + + +#tts类型(切换请重新选择所需要的声音)azure、ali、gptsovits、volcano、gptsovits_v3 +tts_module=ali + +# 微软 文字转语音 服务密钥(非必须,使用可产生不同情绪的音频)https://azure.microsoft.com/zh-cn/services/cognitive-services/text-to-speech/ +ms_tts_key= +ms_tts_region= + +# 阿里云 文字转语音 服务密钥 https://ai.aliyun.com/nls/trans +ali_tss_key_id= +ali_tss_key_secret= +ali_tss_app_key= + +# Doubao-语音合成 服务密钥 https://www.volcengine.com/product/voice-tech +volcano_tts_appid= +volcano_tts_access_token= +volcano_tts_cluster=volcano_tts +#可为空,为空时读取选择的音色 +volcano_tts_voice_type= + +#key +gpt_api_key= +#gpt base url 如:https://api.openai.com/v1、https://rwkv.ai-creator.net/chntuned/v1、https://api.fastgpt.in/api/v1、https://api.moonshot.cn/v1 +gpt_base_url= +#gpt model engine 如:glm4、deepseek、qwen3-4b等 +gpt_model_engine= +#gpt(fastgpt)代理(可为空,填写例子:127.0.0.1:7890) +proxy_config= + +#启动模式common、web(服务器或docker请使用web方式,通过http://127.0.0.1:5000控制) +start_mode=web + +#服务器主动地址 +fay_url=http://127.0.0.1:5000 \ No newline at end of file