- **子 Agent 支持**: - 新增 `dispatch_subagent` 工具,支持分配特定任务给子 Agent,由其独立操作。 - 前端新增 `ChatSubAgent` 组件,支持子 Agent 任务状态展示(运行中/已完成)、工具调用进度及输出预览等。 - **技能管理扩展**: - 新增 Skill 编辑器页面(`SkillEditorView.vue`),支持创建、编辑、删除技能。 - 完善技能工具权限分组选择功能,按类型灵活分配工具。 - **工具增强**: - 新增工具接口:`get_outline_detail`、`get_character_detail`、`get_chapter_detail`,用于获取详情内容。 - 优化部分工具返回数据,仅输出基础信息以减少上下文体积。 - 后端添加 `SPECIAL_TOOLS` 支持,增强 `dispatch_subagent` 的特殊处理能力。 同时优化部分前后端交互,提升代码维护性与可读性。
This commit is contained in:
@@ -70,6 +70,25 @@ export interface PendingToolCallData {
|
||||
arguments: Record<string, unknown>
|
||||
}
|
||||
|
||||
export interface SubAgentStartInfo {
|
||||
skill_id: number
|
||||
skill_name: string
|
||||
task: string
|
||||
subagent_id: string
|
||||
}
|
||||
|
||||
export interface SubAgentToolCallInfo {
|
||||
name: string
|
||||
label: string
|
||||
arguments: Record<string, unknown>
|
||||
}
|
||||
|
||||
export interface SubAgentToolResultInfo {
|
||||
name: string
|
||||
label: string
|
||||
result: string
|
||||
}
|
||||
|
||||
export interface StreamChatOptions {
|
||||
messages: { role: string; content: string }[]
|
||||
novelId?: number
|
||||
@@ -87,6 +106,12 @@ export interface StreamChatOptions {
|
||||
onToolCallsPending?: (calls: PendingToolCallData[], assistantText: string) => void
|
||||
onToolCallsAuto?: (calls: PendingToolCallData[]) => void
|
||||
onToolResult?: (info: ToolResultInfo) => void
|
||||
// 子 Agent 回调(subagentId 用于区分并行的多个子 Agent)
|
||||
onSubAgentStart?: (info: SubAgentStartInfo) => void
|
||||
onSubAgentChunk?: (text: string, subagentId: string) => void
|
||||
onSubAgentToolCall?: (info: SubAgentToolCallInfo, subagentId: string) => void
|
||||
onSubAgentToolResult?: (info: SubAgentToolResultInfo, subagentId: string) => void
|
||||
onSubAgentDone?: (result: string, subagentId: string) => void
|
||||
signal?: AbortSignal
|
||||
}
|
||||
|
||||
@@ -95,6 +120,7 @@ export async function streamChat(options: StreamChatOptions): Promise<void> {
|
||||
messages, novelId, pageContext, toolsEnabled, autoApproveTools, skillId,
|
||||
pendingToolCalls, assistantText,
|
||||
onChunk, onError, onDone, onToolCallsPending, onToolCallsAuto, onToolResult,
|
||||
onSubAgentStart, onSubAgentChunk, onSubAgentToolCall, onSubAgentToolResult, onSubAgentDone,
|
||||
signal,
|
||||
} = options
|
||||
|
||||
@@ -160,6 +186,22 @@ export async function streamChat(options: StreamChatOptions): Promise<void> {
|
||||
if (event.tool_result && onToolResult) {
|
||||
onToolResult(event.tool_result)
|
||||
}
|
||||
// 子 Agent 事件(所有事件携带 subagent_id 用于区分并行的子 Agent)
|
||||
if (event.subagent_start && onSubAgentStart) {
|
||||
onSubAgentStart(event.subagent_start)
|
||||
}
|
||||
if (event.subagent_chunk && onSubAgentChunk) {
|
||||
onSubAgentChunk(event.subagent_chunk, event.subagent_id ?? '')
|
||||
}
|
||||
if (event.subagent_tool_call && onSubAgentToolCall) {
|
||||
onSubAgentToolCall(event.subagent_tool_call, event.subagent_id ?? '')
|
||||
}
|
||||
if (event.subagent_tool_result && onSubAgentToolResult) {
|
||||
onSubAgentToolResult(event.subagent_tool_result, event.subagent_id ?? '')
|
||||
}
|
||||
if (event.subagent_done !== undefined && onSubAgentDone) {
|
||||
onSubAgentDone(event.subagent_done, event.subagent_id ?? '')
|
||||
}
|
||||
} catch {
|
||||
// 忽略解析错误
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user