feat: add AntafLLM provider for Ant Afu text API integration

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hailin 2026-04-05 12:27:49 -07:00
parent 688a5e17b3
commit d399a21f23
2 changed files with 66 additions and 0 deletions

View File

@ -0,0 +1,66 @@
import requests
from config.logger import setup_logging
from core.providers.llm.base import LLMProviderBase
TAG = __name__
logger = setup_logging()
class LLMProvider(LLMProviderBase):
"""
蚂蚁阿福 LLM Provider
通过 Frida HTTP Bridge (port 18900) 对接蚂蚁阿福 App 的文字对话 API
Bridge 运行在手机上通过 adb forward 或网络暴露 SSE 流式接口
"""
def __init__(self, config):
self.bridge_url = config.get("bridge_url", "http://127.0.0.1:18900")
self.timeout = config.get("timeout", 60)
logger.bind(tag=TAG).info(
f"AntafLLM 初始化: bridge={self.bridge_url}, timeout={self.timeout}s"
)
def response(self, session_id, dialogue, **kwargs):
# 提取最后一条用户消息
query = ""
for msg in reversed(dialogue):
if msg.get("role") == "user":
query = msg.get("content", "")
break
if not query:
logger.bind(tag=TAG).warning("对话中没有用户消息")
yield "抱歉,我没有收到您的问题。"
return
logger.bind(tag=TAG).info(f"AntafLLM 请求: {query[:50]}...")
try:
url = f"{self.bridge_url}/chat"
resp = requests.get(
url,
params={"q": query},
stream=True,
timeout=self.timeout,
)
resp.encoding = "utf-8"
for line in resp.iter_lines(decode_unicode=True):
if not line:
continue
if line.startswith("data: "):
data = line[6:]
if data == "[DONE]":
break
if data and len(data.strip()) > 0:
yield data
except requests.exceptions.ConnectionError:
logger.bind(tag=TAG).error("无法连接蚂蚁阿福 Bridge请检查手机和 Frida 状态")
yield "抱歉,蚂蚁阿福服务暂时不可用。"
except requests.exceptions.Timeout:
logger.bind(tag=TAG).error(f"蚂蚁阿福 Bridge 超时 ({self.timeout}s)")
yield "抱歉,回答超时了。"
except Exception as e:
logger.bind(tag=TAG).error(f"AntafLLM 异常: {e}")
yield "抱歉,发生了错误。"