|
114 | 114 | ) |
115 | 115 | from astrbot.core.utils.string_utils import normalize_and_dedupe_strings |
116 | 116 |
|
| 117 | +LLM_ERROR_MESSAGE_EXTRA_KEY = "_llm_error_message" |
| 118 | + |
117 | 119 |
|
118 | 120 | @dataclass(slots=True) |
119 | 121 | class MainAgentBuildConfig: |
@@ -183,25 +185,39 @@ class MainAgentBuildResult: |
183 | 185 | reset_coro: Coroutine | None = None |
184 | 186 |
|
185 | 187 |
|
| 188 | +def _set_llm_error_message(event: AstrMessageEvent, message: str) -> None: |
| 189 | + event.set_extra(LLM_ERROR_MESSAGE_EXTRA_KEY, message) |
| 190 | + |
| 191 | + |
186 | 192 | def _select_provider( |
187 | 193 | event: AstrMessageEvent, plugin_context: Context |
188 | 194 | ) -> Provider | None: |
189 | 195 | """Select chat provider for the event.""" |
190 | 196 | sel_provider = event.get_extra("selected_provider") |
191 | 197 | if sel_provider and isinstance(sel_provider, str): |
192 | 198 | provider = plugin_context.get_provider_by_id(sel_provider) |
193 | | - if not provider: |
| 199 | + if provider is None: |
194 | 200 | logger.error("未找到指定的提供商: %s。", sel_provider) |
| 201 | + _set_llm_error_message( |
| 202 | + event, |
| 203 | + f"LLM 请求失败:未找到指定的提供商 `{sel_provider}`。请检查提供商配置或重新选择可用模型。", |
| 204 | + ) |
| 205 | + return None |
195 | 206 | if not isinstance(provider, Provider): |
196 | 207 | logger.error( |
197 | 208 | "选择的提供商类型无效(%s),跳过 LLM 请求处理。", type(provider) |
198 | 209 | ) |
| 210 | + _set_llm_error_message( |
| 211 | + event, |
| 212 | + f"LLM 请求失败:选择的提供商类型无效({type(provider).__name__}),已跳过本次请求。", |
| 213 | + ) |
199 | 214 | return None |
200 | 215 | return provider |
201 | 216 | try: |
202 | 217 | return plugin_context.get_using_provider(umo=event.unified_msg_origin) |
203 | 218 | except ValueError as exc: |
204 | 219 | logger.error("Error occurred while selecting provider: %s", exc) |
| 220 | + _set_llm_error_message(event, f"LLM 请求失败:{exc}") |
205 | 221 | return None |
206 | 222 |
|
207 | 223 |
|
@@ -1192,6 +1208,11 @@ async def build_main_agent( |
1192 | 1208 | provider = provider or _select_provider(event, plugin_context) |
1193 | 1209 | if provider is None: |
1194 | 1210 | logger.info("未找到任何对话模型(提供商),跳过 LLM 请求处理。") |
| 1211 | + if not event.get_extra(LLM_ERROR_MESSAGE_EXTRA_KEY): |
| 1212 | + _set_llm_error_message( |
| 1213 | + event, |
| 1214 | + "LLM 请求失败:未找到任何可用的对话模型(提供商)。请先在 WebUI 中配置并启用可用模型。", |
| 1215 | + ) |
1195 | 1216 | return None |
1196 | 1217 |
|
1197 | 1218 | if req is None: |
|
0 commit comments