FluxAgent
一个灵活可扩展的 AI Agent 框架,支持多种大语言模型、插件系统和智能对话管理。
特性
- 🤖 多模型支持 - 支持 OpenAI、Claude 等多种大语言模型
- 🔧 插件系统 - 可自定义工具和对话流程
- 💾 知识库管理 - 内置知识存储和检索功能
- 📸 状态快照 - 保存和恢复 Agent 状态
- 🌊 流式响应 - 实时获取 AI 响应内容
安装
npm install fluxagent
快速开始
基础用法
import { Agent } from 'fluxagent';
const agent = new Agent({
llm: {
apiKey: 'your-openai-api-key',
modelName: 'gpt-4'
}
});
await agent.runStream('你好,请介绍一下你自己', {
onLLMToken: (token) => {
process.stdout.write(token);
},
onComplete: (response) => {
console.log('\n对话完成:', response);
}
});
自定义系统提示
const agent = new Agent({
llm: {
apiKey: 'your-api-key',
modelName: 'gpt-4'
},
systemPrompt: '你是一个专业的客服助手,请用友善的语气回答用户问题。'
});
知识库功能
为你的 Agent 添加专业知识:
const knowledgeId = agent.knowledge.add({
name: '产品介绍',
description: '我们的主要产品功能',
content: '我们的产品主要提供...',
tags: ['产品', '介绍']
});
const results = agent.knowledge.search('产品功能');
const allKnowledge = agent.knowledge.getAllKnowledge();
事件监听
监听 Agent 运行过程中的各种事件:
agent.eventHub.register('StateChange', (event) => {
console.log('Agent 状态:', event.payload.state);
});
agent.eventHub.register('Before-CalculatorTool', (event) => {
console.log('开始计算:', event.payload.arguments);
});
插件系统
通过插件扩展 Agent 功能:
agent.plugin('calculator', (context) => {
context.addTools([{
type: 'function',
function: {
name: 'calculate',
description: '执行数学计算',
parameters: {
type: 'object',
properties: {
expression: {
type: 'string',
description: '要计算的数学表达式'
}
}
}
}
}]);
});
agent.plugin('customerService', (context) => {
context.tap('Before-confirm', (payload) => {
return {
prompt: `作为客服,${payload.prompt}`
};
});
});
状态管理
addTools(tools: Array<BaseTool | Tool>)
: 添加工具列表(支持新旧工具类型)
tap(eventName: AgentEventName, callback)
: 影响输出的事件监听
tapVoid(eventName: AgentEventName, callback)
: 只执行动作的事件监听
disconnect(phaseName: string)
: 移除某个阶段
插件示例
import { PushUITool } from './tools/PushUITool';
agent.plugin('uiPlugin', (context) => {
const pushUITool = new PushUITool();
context.addTools([pushUITool]);
});
import { CalculatorTool } from './tools/CalculatorTool';
agent.plugin('calculator', (context) => {
context.addTools([CalculatorTool.getCalculatorTool()]);
});
3. 事件系统
事件系统提供了对 Agent 运行过程的完整监控能力,支持两种监听方式:
- 事件名称监听:监听特定的事件名称
- 事件类型监听:监听某一类型的所有事件
事件类型
阶段事件 (PhaseEvent)
Before-confirm
: confirm阶段开始前
After-confirm
: confirm阶段结束后
Before-thinkplan
: thinkplan阶段开始前
After-thinkplan
: thinkplan阶段结束后
Before-plan
: plan阶段开始前
After-plan
: plan阶段结束后
Before-react
: react阶段开始前
After-react
: react阶段结束后
Before-summary
: summary阶段开始前
After-summary
: summary阶段结束后
工具调用事件 (ToolCallEvent)
Before-[ToolName]
: 工具调用前(如:Before-PushUITool
)
After-[ToolName]
: 工具调用后(如:After-PushUITool
)
状态变更事件 (StateChangeEvent)
流式事件 (StreamEvent)
stream-token
: 实时token流
stream-partial-response
: 部分响应
stream-phase-change
: 阶段变更
stream-tool-call-start
: 工具调用开始
stream-tool-call-end
: 工具调用结束
UI事件 (UIEvent)
PushComponent
: UI组件推送事件
UIResultEvent
: UI操作结果事件
知识库事件 (KnowledgeEvent)
knowledge-added
: 知识条目添加
knowledge-removed
: 知识条目删除
knowledge-updated
: 知识条目更新
knowledge-applied
: 知识库内容应用
knowledge-cleared
: 知识库清空
事件监听
基本事件监听
import { AgentEventName } from './core/EventHub';
agent.eventHub.register(AgentEventName.STATE_CHANGE, (event) => {
console.log('Agent状态变更:', event.payload.state);
});
agent.eventHub.register(AgentEventName.BEFORE_CONFIRM, (event) => {
console.log('进入确认阶段前:', event.payload);
});
类型监听器 (新增)
使用 registerType
方法可以监听某个类型的所有事件,这对于全局监控非常有用:
agent.eventHub.registerType('PhaseEvent', (event) => {
console.log(`阶段事件: ${event.name}`, event.payload);
});
agent.eventHub.registerType('StreamEvent', (event) => {
console.log(`流式事件: ${event.name}`, event.payload);
});
agent.eventHub.registerType('KnowledgeEvent', (event) => {
console.log(`知识库事件: ${event.name}`, event.payload);
});
agent.eventHub.registerType('ToolCallEvent', (event) => {
console.log(`工具调用事件: ${event.name}`, event.payload);
});
agent.eventHub.registerType('UIEvent', (event) => {
console.log(`UI事件: ${event.name}`, event.payload);
});
组合使用
名称监听器和类型监听器可以同时使用,事件触发时两者都会被调用:
agent.eventHub.register(AgentEventName.BEFORE_PLAN, (event) => {
console.log('特定事件监听器 - 计划阶段开始');
});
agent.eventHub.registerType('PhaseEvent', (event) => {
console.log(`类型监听器 - 阶段事件: ${event.name}`);
});
取消监听
const listener = (event) => console.log(event);
agent.eventHub.register(AgentEventName.STATE_CHANGE, listener);
agent.eventHub.registerType('PhaseEvent', listener);
agent.eventHub.unregister(AgentEventName.STATE_CHANGE, listener);
agent.eventHub.unregisterType('PhaseEvent', listener);
实际应用场景
全局事件监控:
const eventTypes = ['PhaseEvent', 'ToolCallEvent', 'StateChangeEvent', 'StreamEvent', 'KnowledgeEvent', 'UIEvent'];
eventTypes.forEach(eventType => {
agent.eventHub.registerType(eventType, (event) => {
console.log(`[全局监控] ${eventType}: ${event.name}`, event.payload);
});
});
流式事件统一处理:
agent.eventHub.registerType('StreamEvent', (event) => {
switch (event.name) {
case AgentEventName.STREAM_TOKEN:
process.stdout.write(event.payload.token);
break;
case AgentEventName.STREAM_PHASE_CHANGE:
console.log(`\n[阶段变更] ${event.payload.toPhase}`);
break;
case AgentEventName.STREAM_TOOL_CALL_START:
console.log(`\n[工具调用] ${event.payload.toolName}`);
break;
}
});
知识库操作监控:
agent.eventHub.registerType('KnowledgeEvent', (event) => {
const { action, knowledgeName, itemCount } = event.payload;
console.log(`知识库操作: ${action} - ${knowledgeName} (总数: ${itemCount})`);
});
4. 知识库能力
内置的知识库系统支持完整的CRUD操作。
添加知识条目
const knowledgeId = agent.knowledge.add({
name: '法律条文',
description: '民法典第一条的相关内容',
content: '根据《民法典》第一条...',
tags: ['民法', '基础']
});
获取知识库数据
const allKnowledge = agent.knowledge.getAllKnowledge();
const item = agent.knowledge.get(knowledgeId);
const stats = agent.knowledge.getStats();
console.log('知识库统计:', stats);
搜索知识条目
const results = agent.knowledge.search('民法典');
console.log('搜索结果:', results);
更新知识条目
const success = agent.knowledge.update(knowledgeId, {
content: '更新后的内容',
tags: ['民法', '基础', '更新']
});
删除知识条目
const success = agent.knowledge.remove([knowledgeId]);
agent.knowledge.clear();
导入导出
const exportData = agent.knowledge.export();
agent.knowledge.import(exportData);
5. 快照能力
快照功能允许保存和恢复 Agent 的完整状态。
生成快照
const snapshot = agent.genSnapshot();
console.log('快照信息:', {
timestamp: snapshot.timestamp,
version: snapshot.version,
state: snapshot.state,
currentPhase: snapshot.currentPhase,
knowledgeCount: snapshot.knowledgeItems?.length || 0
});
应用快照
agent.applySnapshot(snapshot);
console.log('Agent状态已恢复');
重置状态
agent.reset();
console.log('Agent已重置到初始状态');
快照数据结构
interface AgentSnapshot {
state: AgentState;
currentPhase: PhaseType;
contextRecords: any[];
memoryMessages: any[];
phaseState?: any;
userInputStack: string[];
knowledgeItems?: KnowledgeItem[];
timestamp: number;
version: string;
}
6. 记忆模块
记忆模块管理与LLM的对话上下文。
获取记忆数据
const memory = agent.context.getMemory();
const messages = memory.getMessages();
console.log('对话记录:', messages);
消息格式
const messageFormat = {
role: 'user' | 'assistant' | 'system',
content: string,
tool_calls?: Array<any>,
timestamp: number
};
清空记忆
memory.clear();
console.log('对话记录已清空');
记忆状态监控
agent.eventHub.register('MemoryUpdate', (event) => {
const messageCount = agent.context.getMemory().getMessages().length;
console.log(`当前对话记录数量: ${messageCount}`);
});
7. 启动执行
流式执行 (推荐)
流式执行提供实时的响应和状态更新。
const streamCallbacks: AgentStreamCallbacks = {
onPhaseChange: (fromPhase, toPhase) => {
console.log(`阶段变更: ${fromPhase} -> ${toPhase}`);
},
onLLMToken: (token, phase, id) => {
process.stdout.write(token);
},
onLLMPartialResponse: (partial, phase, id) => {
console.log('部分响应:', partial);
},
onToolCall: (toolName, args, phase) => {
console.log(`工具调用: ${toolName}`, args);
},
onToolResult: (toolName, result, phase) => {
console.log(`工具结果: ${toolName}`, result);
},
onError: (error, phase) => {
console.error('执行错误:', error.message);
},
onComplete: (finalResponse) => {
console.log('执行完成:', finalResponse);
}
};
const sessionId = 'session_' + Date.now();
await agent.runStream('帮我分析这个法律案例', streamCallbacks, sessionId);
传统执行 (已废弃)
const response = await agent.handleUserInput('用户输入');
完整使用示例
import { Agent, AgentConfig, AgentStreamCallbacks } from './core/Agent';
import { PushUITool } from './tools/PushUITool';
const config: AgentConfig = {
llm: {
apiKey: process.env.OPENAI_API_KEY,
baseURL: process.env.OPENAI_BASE_URL,
modelName: "gpt-4"
},
systemPrompt: "你是一个专业的法律助手"
};
const agent = new Agent(config);
agent.plugin('legalAssistant', (context) => {
const pushUITool = new PushUITool();
pushUITool.applyAgent(agent);
context.addTools([pushUITool]);
});
agent.eventHub.register('StateChange', (event) => {
console.log('状态变更:', event.payload.state);
});
agent.knowledge.add({
name: '民法典第一条',
description: '民法典第一条的内容说明',
content: '为了保护民事主体的合法权益...',
tags: ['法律', '民法典']
});
const callbacks: AgentStreamCallbacks = {
onLLMToken: (token) => process.stdout.write(token),
onComplete: (response) => console.log('\n执行完成:', response)
};
await agent.runStream('帮我解释民法典第一条', callbacks);
const snapshot = agent.genSnapshot();
console.log('快照已生成');
agent.reset();
Agent流程阶段
Agent按照以下标准阶段执行:
- CONFIRM: 确认和澄清用户需求
- THINKPLAN: 思考和规划任务
- PLAN: 制定详细执行计划
- REACT: 执行具体任务步骤
- SUMMARY: 总结执行结果
每个阶段都可以通过插件进行自定义或禁用。
系统工具
框架内置以下系统工具:
EndPhaseTool
: 结束当前阶段,流转到下一阶段
工具使用说明
系统工具会自动注册到Agent中,LLM可以根据需要调用:
EndPhaseTool.execute()
最佳实践
- 使用流式执行: 为了更好的用户体验,建议使用
runStream
方法而不是handleUserInput
- 合理使用知识库: 将常用信息添加到知识库,系统会自动将相关知识注入到用户输入中
- 监听关键事件: 通过事件系统监控Agent状态和工具调用,便于调试和监控
- 定期生成快照: 在关键节点保存Agent状态,支持状态恢复
- 插件模块化: 将不同功能封装为独立插件,使用
context.addTools()
添加工具
- 工具设计: 优先使用新的
BaseTool
类型,支持更好的上下文管理
- 事件命名: 使用
AgentEventName
枚举而不是字符串,避免拼写错误
性能优化建议
- 知识库条目过多时,可以选择性激活:
agent.knowledge.setActive(id, false)
- 定期清理不需要的记忆:
agent.context.getMemory().clear()
- 合理使用插件的
disconnect()
方法跳过不必要的阶段
故障排除
- LLM连接问题: 检查API密钥和baseURL配置,确保模型名称正确
- 工具调用失败: 查看AgentLogger日志,检查工具参数和执行上下文
- 记忆过载: 定期使用
agent.context.getMemory().clear()
清理或使用快照功能
- 事件监听问题: 使用
AgentEventName
枚举,确认事件名称正确
- 知识库不生效: 检查知识条目是否激活(
isActive: true
),内容格式是否正确
- 插件工具未注册: 确保在插件中正确调用
context.addTools()
调试技巧
import { AgentLogger } from './core/Agent';
console.log(AgentLogger.getLogs());
Object.values(AgentEventName).forEach(eventName => {
agent.eventHub.register(eventName, (event) => {
console.log(`事件触发: ${eventName}`, event.payload);
});
});
技术栈
- 语言: TypeScript
- 包管理: pnpm
- LLM支持: OpenAI兼容接口(支持阿里云、OpenAI等)
- 事件系统: 内置EventHub,支持同步和流式事件
- 流式处理: 内置流式执行引擎,支持实时Token输出
- 工具系统: 支持新旧两种工具类型(BaseTool和Tool)
- 存储: 内存存储,支持快照导入导出
WebSocket服务器示例
FluxAgent 提供了完整的WebSocket聊天服务器示例:
cd src/examples
ts-node chat-server.ts
open http://localhost:8080
聊天服务器支持:
- 实时流式对话
- 知识库管理界面
- 记忆查看和清理
- Agent状态监控
- 快照生成和恢复