核心配置与初始化流程
1. 配置文件定义
在 config.yaml 中,通过以下配置定义了意图识别的类型:
selected_module:
Intent: function_call # 选择使用 function_call 意图模式
Intent:
function_call:
type: function_call # 明确指定类型为 function_call
functions:
- change_role
- get_weather
- get_news_from_newsnow
- play_music
2. 模块初始化流程
2.1 核心初始化函数
在 core/utils/modules_initialize.py 中,initialize_modules 函数负责初始化所有模块,包括意图识别模块:
def initialize_modules(..., init_intent=False, ...):
# ...
if init_intent:
select_intent_module = config["selected_module"]["Intent"]
intent_type = (
select_intent_module
if "type" not in config["Intent"][select_intent_module]
else config["Intent"][select_intent_module]["type"]
)
modules["intent"] = intent.create_instance(
intent_type,
config["Intent"][select_intent_module],
)
# ...
2.2 连接初始化
在 core/connection.py 中,当处理新连接时,会调用 handle_connection 方法,其中包含意图模块的初始化:
async def handle_connection(self, ws):
# ...
"""加载意图识别"""
self._initialize_intent()
# ...
3. intent_type 赋值流程
3.1 _initialize_intent 方法
_initialize_intent 方法是关键,它从配置中读取意图类型并赋值给 self.intent_type:
def _initialize_intent(self):
if self.intent is None:
return
# 从配置中获取意图类型
self.intent_type = self.config["Intent"][
self.config["selected_module"]["Intent"]
]["type"]
# 加载功能插件
if self.intent_type == "function_call" or self.intent_type == "intent_llm":
self.load_function_plugin = True
# ...
3.2 配置路径解析
意图类型的配置路径如下:
-
self.config["selected_module"]["Intent"]→ 获取当前选中的意图模块(例如:"function_call") -
self.config["Intent"][选中的意图模块]→ 获取该意图模块的详细配置 -
self.config["Intent"][选中的意图模块]["type"]→ 获取该意图模块的类型(例如:"function_call")
4. 默认值设置
在 connection.py 的 __init__ 方法中,intent_type 被初始化为默认值 "nointent":
def __init__(self, ...):
# ...
self.intent_type = "nointent" # 默认值
# ...
完整流程图
┌─────────────────────────────────────────────────────────┐
│ 系统启动 │
└───────────────────────┬─────────────────────────────────┘
│
┌───────────────────────▼─────────────────────────────────┐
│ 加载配置文件 config.yaml │
└───────────────────────┬─────────────────────────────────┘
│
┌───────────────────────▼─────────────────────────────────┐
│ 初始化各模块(modules_initialize.py) │
│ - 初始化LLM、ASR、VAD等模块 │
│ - 根据config.selected_module.Intent初始化意图模块 │
└───────────────────────┬─────────────────────────────────┘
│
┌───────────────────────▼─────────────────────────────────┐
│ 处理新连接(connection.py) │
└───────────────────────┬─────────────────────────────────┘
│
┌───────────────────────▼─────────────────────────────────┐
│ 调用 _initialize_intent() │
└───────────────────────┬─────────────────────────────────┘
│
┌───────────────────────▼─────────────────────────────────┐
│ 从配置中读取意图类型并赋值给 self.intent_type │
│ - 配置路径: config.Intent[config.selected_module.Intent].type │
│ - 示例: config.Intent["function_call"]["type"] → "function_call" │
└───────────────────────┬─────────────────────────────────┘
│
┌───────────────────────▼─────────────────────────────────┐
│ 设置 load_function_plugin 标志为 True │
└───────────────────────┬─────────────────────────────────┘
│
┌───────────────────────▼─────────────────────────────────┐
│ 初始化统一工具处理器 │
│ - 创建 UnifiedToolHandler 实例 │
│ - 异步初始化工具处理器 │
└─────────────────────────────────────────────────────────┘
关键代码位置
-
配置定义:
config.yaml中的selected_module.Intent和Intent.function_call.type -
模块初始化:
core/utils/modules_initialize.py:51-62 -
意图类型赋值:
core/connection.py:740-742 -
默认值设置:
core/connection.py:154 -
初始化调用:
core/connection.py:474
总结
self.intent_type 被识别为 "function_call" 的核心流程是:
-
配置驱动:通过
config.yaml中的selected_module.Intent和Intent.function_call.type配置 -
初始化赋值:在
_initialize_intent方法中,从配置读取并赋值给self.intent_type -
运行时使用:在
chat方法中,根据self.intent_type的值决定是否启用函数调用模式
这种设计使得系统可以灵活切换不同的意图识别模式,只需修改配置文件即可,无需修改代码。