mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-26 00:53:54 +08:00
update:更新版本号
This commit is contained in:
@@ -57,7 +57,7 @@ prompt: |
|
|||||||
- 讨论感情 → 炫耀程序员男友但抱怨"他只会送键盘当礼物"
|
- 讨论感情 → 炫耀程序员男友但抱怨"他只会送键盘当礼物"
|
||||||
- 问专业知识 → 先用梗回答,被追问才展示真实理解
|
- 问专业知识 → 先用梗回答,被追问才展示真实理解
|
||||||
绝不:
|
绝不:
|
||||||
- 使用大陆网络流行语
|
- 长篇大论,叽叽歪歪
|
||||||
- 长时间严肃对话
|
- 长时间严肃对话
|
||||||
|
|
||||||
# 使用完声音文件后删除文件(Delete the sound file when you are done using it)
|
# 使用完声音文件后删除文件(Delete the sound file when you are done using it)
|
||||||
|
|||||||
@@ -3,24 +3,32 @@ import sys
|
|||||||
from loguru import logger
|
from loguru import logger
|
||||||
from config.settings import load_config
|
from config.settings import load_config
|
||||||
|
|
||||||
SERVER_VERSION = "0.1.16"
|
SERVER_VERSION = "0.1.17"
|
||||||
|
|
||||||
|
|
||||||
def setup_logging():
|
def setup_logging():
|
||||||
"""从配置文件中读取日志配置,并设置日志输出格式和级别"""
|
"""从配置文件中读取日志配置,并设置日志输出格式和级别"""
|
||||||
config = load_config()
|
config = load_config()
|
||||||
log_config = config["log"]
|
log_config = config["log"]
|
||||||
log_format = log_config.get("log_format", "<green>{time:YYMMDD HH:mm:ss}</green>[{version}_{selected_module}][<light-blue>{extra[tag]}</light-blue>]-<level>{level}</level>-<light-green>{message}</light-green>")
|
log_format = log_config.get(
|
||||||
log_format_file = log_config.get("log_format_file", "{time:YYYY-MM-DD HH:mm:ss} - {version_{selected_module}} - {name} - {level} - {extra[tag]} - {message}")
|
"log_format",
|
||||||
|
"<green>{time:YYMMDD HH:mm:ss}</green>[{version}_{selected_module}][<light-blue>{extra[tag]}</light-blue>]-<level>{level}</level>-<light-green>{message}</light-green>",
|
||||||
|
)
|
||||||
|
log_format_file = log_config.get(
|
||||||
|
"log_format_file",
|
||||||
|
"{time:YYYY-MM-DD HH:mm:ss} - {version_{selected_module}} - {name} - {level} - {extra[tag]} - {message}",
|
||||||
|
)
|
||||||
|
|
||||||
selected_module = config.get("selected_module")
|
selected_module = config.get("selected_module")
|
||||||
selected_module_str = ''.join([value[0] + value[1] for key, value in selected_module.items()])
|
selected_module_str = "".join(
|
||||||
|
[value[0] + value[1] for key, value in selected_module.items()]
|
||||||
|
)
|
||||||
|
|
||||||
log_format = log_format.replace("{version}", SERVER_VERSION)
|
log_format = log_format.replace("{version}", SERVER_VERSION)
|
||||||
log_format = log_format.replace("{selected_module}", selected_module_str)
|
log_format = log_format.replace("{selected_module}", selected_module_str)
|
||||||
log_format_file = log_format_file.replace("{version}", SERVER_VERSION)
|
log_format_file = log_format_file.replace("{version}", SERVER_VERSION)
|
||||||
log_format_file = log_format_file.replace("{selected_module}", selected_module_str)
|
log_format_file = log_format_file.replace("{selected_module}", selected_module_str)
|
||||||
|
|
||||||
|
|
||||||
log_level = log_config.get("log_level", "INFO")
|
log_level = log_config.get("log_level", "INFO")
|
||||||
log_dir = log_config.get("log_dir", "tmp")
|
log_dir = log_config.get("log_dir", "tmp")
|
||||||
log_file = log_config.get("log_file", "server.log")
|
log_file = log_config.get("log_file", "server.log")
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ async def check_direct_exit(conn, text):
|
|||||||
|
|
||||||
async def analyze_intent_with_llm(conn, text):
|
async def analyze_intent_with_llm(conn, text):
|
||||||
"""使用LLM分析用户意图"""
|
"""使用LLM分析用户意图"""
|
||||||
if not hasattr(conn, 'intent') or not conn.intent:
|
if not hasattr(conn, "intent") or not conn.intent:
|
||||||
logger.bind(tag=TAG).warning("意图识别服务未初始化")
|
logger.bind(tag=TAG).warning("意图识别服务未初始化")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -69,7 +69,9 @@ async def process_intent_result(conn, intent_result, original_text):
|
|||||||
# 检查是否有function_call
|
# 检查是否有function_call
|
||||||
if "function_call" in intent_data:
|
if "function_call" in intent_data:
|
||||||
# 直接从意图识别获取了function_call
|
# 直接从意图识别获取了function_call
|
||||||
logger.bind(tag=TAG).info(f"检测到function_call格式的意图结果: {intent_data['function_call']['name']}")
|
logger.bind(tag=TAG).info(
|
||||||
|
f"检测到function_call格式的意图结果: {intent_data['function_call']['name']}"
|
||||||
|
)
|
||||||
function_name = intent_data["function_call"]["name"]
|
function_name = intent_data["function_call"]["name"]
|
||||||
if function_name == "continue_chat":
|
if function_name == "continue_chat":
|
||||||
return False
|
return False
|
||||||
@@ -83,7 +85,7 @@ async def process_intent_result(conn, intent_result, original_text):
|
|||||||
function_call_data = {
|
function_call_data = {
|
||||||
"name": function_name,
|
"name": function_name,
|
||||||
"id": str(uuid.uuid4().hex),
|
"id": str(uuid.uuid4().hex),
|
||||||
"arguments": function_args
|
"arguments": function_args,
|
||||||
}
|
}
|
||||||
|
|
||||||
await send_stt_message(conn, original_text)
|
await send_stt_message(conn, original_text)
|
||||||
@@ -91,16 +93,24 @@ async def process_intent_result(conn, intent_result, original_text):
|
|||||||
# 使用executor执行函数调用和结果处理
|
# 使用executor执行函数调用和结果处理
|
||||||
def process_function_call():
|
def process_function_call():
|
||||||
conn.dialogue.put(Message(role="user", content=original_text))
|
conn.dialogue.put(Message(role="user", content=original_text))
|
||||||
result = conn.func_handler.handle_llm_function_call(conn, function_call_data)
|
result = conn.func_handler.handle_llm_function_call(
|
||||||
if result and function_name != 'play_music':
|
conn, function_call_data
|
||||||
|
)
|
||||||
|
if result and function_name != "play_music":
|
||||||
# 获取当前最新的文本索引
|
# 获取当前最新的文本索引
|
||||||
text = result.response
|
text = result.response
|
||||||
if text is None:
|
if text is None:
|
||||||
text = result.result
|
text = result.result
|
||||||
if text is not None:
|
if text is not None:
|
||||||
text_index = conn.tts_last_text_index + 1 if hasattr(conn, 'tts_last_text_index') else 0
|
text_index = (
|
||||||
|
conn.tts_last_text_index + 1
|
||||||
|
if hasattr(conn, "tts_last_text_index")
|
||||||
|
else 0
|
||||||
|
)
|
||||||
conn.recode_first_last_text(text, text_index)
|
conn.recode_first_last_text(text, text_index)
|
||||||
future = conn.executor.submit(conn.speak_and_play, text, text_index)
|
future = conn.executor.submit(
|
||||||
|
conn.speak_and_play, text, text_index
|
||||||
|
)
|
||||||
conn.llm_finish_task = True
|
conn.llm_finish_task = True
|
||||||
conn.tts_queue.put(future)
|
conn.tts_queue.put(future)
|
||||||
conn.dialogue.put(Message(role="assistant", content=text))
|
conn.dialogue.put(Message(role="assistant", content=text))
|
||||||
@@ -121,10 +131,14 @@ def extract_text_in_brackets(s):
|
|||||||
:param s: 输入字符串
|
:param s: 输入字符串
|
||||||
:return: 中括号内的文字,如果不存在则返回空字符串
|
:return: 中括号内的文字,如果不存在则返回空字符串
|
||||||
"""
|
"""
|
||||||
left_bracket_index = s.find('[')
|
left_bracket_index = s.find("[")
|
||||||
right_bracket_index = s.find(']')
|
right_bracket_index = s.find("]")
|
||||||
|
|
||||||
if left_bracket_index != -1 and right_bracket_index != -1 and left_bracket_index < right_bracket_index:
|
if (
|
||||||
return s[left_bracket_index + 1:right_bracket_index]
|
left_bracket_index != -1
|
||||||
|
and right_bracket_index != -1
|
||||||
|
and left_bracket_index < right_bracket_index
|
||||||
|
):
|
||||||
|
return s[left_bracket_index + 1 : right_bracket_index]
|
||||||
else:
|
else:
|
||||||
return ""
|
return ""
|
||||||
|
|||||||
@@ -23,5 +23,4 @@ bs4==0.0.2
|
|||||||
modelscope==1.23.2
|
modelscope==1.23.2
|
||||||
sherpa_onnx==1.11.0
|
sherpa_onnx==1.11.0
|
||||||
mcp==1.4.1
|
mcp==1.4.1
|
||||||
|
|
||||||
cnlunar==0.2.0
|
cnlunar==0.2.0
|
||||||
|
|||||||
Reference in New Issue
Block a user