Enhance AIClient with skill document processing capabilities

Added a new method to run a skill document pipeline, allowing for enhanced processing of user messages based on specified skill documents. Implemented logic to extract relevant text from user messages and improved error handling during processing. Updated message handling to strip URLs from responses to prevent issues with message delivery. Added tests to validate the new processing functionality and ensure robustness.
This commit is contained in:
Mimikko-zeus
2026-03-03 14:57:26 +08:00
parent ffb30390d8
commit 726d41ad79
5 changed files with 172 additions and 4 deletions

View File

@@ -55,3 +55,19 @@ def test_extract_prefix_limit_from_user_message():
assert AIClient._extract_prefix_limit("直接返回前100字") == 100
assert AIClient._extract_prefix_limit("前 256 字") == 256
assert AIClient._extract_prefix_limit("返回全文") is None
def test_extract_processing_payload_with_marker():
message = "调用humanizer_zh.read_skill_doc人性化处理以下文本\n第一段。\n第二段。"
payload = AIClient._extract_processing_payload(message)
assert payload == "第一段。\n第二段。"
def test_extract_processing_payload_with_generic_pattern():
message = "请按技能规则优化如下:\n这是待处理文本。"
payload = AIClient._extract_processing_payload(message)
assert payload == "这是待处理文本。"
def test_extract_processing_payload_returns_none_when_absent():
assert AIClient._extract_processing_payload("请调用工具 humanizer_zh.read_skill_doc") is None

View File

@@ -0,0 +1,35 @@
"""Tests for QQ-safe text sanitization in MessageHandler."""
from types import SimpleNamespace
import pytest
pytest.importorskip("botpy")
from src.handlers.message_handler_ai import MessageHandler
def _handler() -> MessageHandler:
fake_bot = SimpleNamespace(robot=SimpleNamespace(id="test_bot"))
return MessageHandler(fake_bot)
def test_plain_text_removes_markdown_link_url():
handler = _handler()
text = "参考 [Wikipedia](https://en.wikipedia.org/wiki/Wikipedia) 获取详情。"
result = handler._plain_text(text)
assert "Wikipedia" in result
assert "http" not in result.lower()
def test_plain_text_removes_bare_url():
handler = _handler()
text = "访问 https://example.com/path?a=1 或 www.example.org 查看。"
result = handler._plain_text(text)
assert "http" not in result.lower()
assert "www." not in result.lower()
assert "[链接已省略]" in result