Files
ailine/backend/app/subgraphs/dictionary/api_client.py

82 lines
2.7 KiB
Python
Raw Normal View History

"""
词典API调用工具使用MCP统一接口
"""
from typing import Dict, Any, Optional
from dataclasses import dataclass
from ...mcp.mcp_manager import mcp_manager
from ...mcp.adapters import DictionaryAdapter
@dataclass
class DictionaryAPIClient:
"""
词典API客户端 - 使用MCP统一接口
保持向后兼容内部使用MCP适配器
"""
# 保留配置字段用于向后兼容
youdao_api_key: Optional[str] = None
youdao_api_secret: Optional[str] = None
word_repository: Optional[Any] = None
def __post_init__(self):
2026-05-05 23:17:00 +08:00
"""初始化后设置(延迟初始化标志)"""
self._mcp_initialized = False # 延迟初始化标志
async def _init_mcp(self):
2026-05-05 23:17:00 +08:00
"""初始化MCP系统延迟初始化"""
if self._mcp_initialized:
return # 已初始化,跳过
if not mcp_manager.get_adapter("dictionary"):
mcp_manager.register_adapter(
DictionaryAdapter(word_repo=self.word_repository)
)
await mcp_manager.initialize()
2026-05-05 23:17:00 +08:00
self._mcp_initialized = True
async def query_word(
self,
user_id: str = "default",
word: str = "",
use_cache: bool = True
) -> Dict[str, Any]:
"""查询单词(统一入口)"""
await self._init_mcp()
result = await mcp_manager.execute(
"dictionary", "query_word",
user_id=user_id, word=word, use_cache=use_cache
)
if result.success:
return result.data
return self.query_word_mock(word)
def query_word_mock(self, word: str) -> Dict[str, Any]:
"""模拟查询(保留用于向后兼容)"""
return {
"word": word,
"phonetic": "",
"part_of_speech": "n.",
"definitions": [f"{word} 的释义1", f"{word} 的释义2"],
"examples": [f"This is an example sentence with '{word}'."]
}
def translate_mock(self, text: str, from_lang: str = "auto", to_lang: str = "zh") -> Dict[str, Any]:
"""模拟翻译(保留用于向后兼容)"""
return {
"translated_text": f"【翻译】{text}",
"confidence": 0.95
}
def extract_terms_mock(self, text: str) -> list:
"""模拟术语提取(保留用于向后兼容)"""
return [
{"term": "AI", "type": "技术术语", "definition": "人工智能", "confidence": 0.95},
{"term": "大模型", "type": "技术术语", "definition": "大语言模型", "confidence": 0.92}
]
# 全局单例(保持向后兼容)
dictionary_api = DictionaryAPIClient()