import { ChatMessage, NewChatProps, ModelInfo } from '../types'; import { MCPClients } from '../MCPClients'; import { ESTool, MCPToolParams } from '../MCPClients/type'; export interface ToolCallResult { name: string; params: any; result?: any; error?: string; success: boolean; timestamp: number; id?: string; } export interface ChatServiceOptions { config: NewChatProps; initModelInfo?: ModelInfo; } /** * LLM 传输层契约 * LLMService(OpenAI 直连)与 EarthServerLLMService 均实现该接口, * ChatService 据此按配置切换,上层逻辑无需感知具体传输方式。 */ export interface ILLMTransport { updateTools(tools: MCPToolParams[]): void; streamChat(messages: Array<{ role: 'user' | 'assistant' | 'system'; content: string; }>, onChunk: (chunk: string) => void, abortController?: AbortController): Promise; } /** * ChatService - 核心对话服务类 * 编排所有服务层组件,处理复杂的多轮对话流程 */ export declare class ChatService { private llmService; mcpClient: MCPClients; private messageHistory; private config; private initModelInfo?; /** 待注入的 sessionId(service 异步初始化未就绪时缓存,就绪后应用) */ private pendingSessionId?; /** sessionId 变化回调缓存(同上) */ private onSessionIdChangeCb?; constructor(options: ChatServiceOptions); /** * 初始化 LLM 服务 * - 配置了 earthServer 时走 EarthServer 传输层 * - 否则走 OpenAI 直连(需要 initModelInfo) */ private initializeLLMService; /** * 设置系统提示词 */ setSystemPrompt(systemPrompt: string): void; /** * 添加消息到历史记录 */ addMessage(message: ChatMessage): void; /** * 清除消息历史(保留系统消息) */ clearHistory(): void; /** * 获取可用工具列表 */ getAvailableTools(): Promise; /** * 初始化 MCP 客户端 */ initializeMCP(): Promise; /** * 注册外部工具 */ registerTools(tools: ESTool[]): void; /** * 获取分组工具列表 */ getGroupTools(): Promise<{ group: string; tools: MCPToolParams[]; }[]>; /** * 运行时更新模型配置 * EarthServer 模式下模型由服务端决定,不支持运行时切换 */ updateModel(config: ModelInfo): void; /** * 复聊时注入 sessionId,透传给 EarthServerLLMService(default 模式忽略) */ setSessionId(id: string): void; /** * 清空 sessionId(新建对话时调用,仅 EarthServer 模式有效) */ clearSessionId(): void; /** * 注册 sessionId 变化回调(新建会话/响应头回写时触发,用于回写历史项 id) */ setOnSessionIdChange(cb: (id: string) => void): void; /** * 处理流式查询 */ processStreamQuery(query: string, onChunk: (chunk: string) => void, onToolCall?: (toolCall: ToolCallResult) => void, abortController?: AbortController, isRecursiveCall?: boolean, configFunc?: { beforeSendAddMessage?: () => Promise<{ role: 'assistant' | 'user'; content: string; }>; afterAIAnswerAddMessage?: () => Promise<{ role: 'assistant' | 'user'; content: string; }>; beforeSendUpdateSystemPrompt?: () => Promise; afterAIAnswerUpdateSystemPrompt?: () => Promise; }): Promise; /** * 处理工具调用 */ private handleToolCalls; /** * 解码 HTML 实体 */ private decodeHTMLEntities; }