/** * # agent-server SPI (Service Provider Interface) * * ## 核心设计原则 * * 1. **接口优先**:agent-server 核心只定义能力接口,不依赖具体实现 * 2. **参考实现可选**:提供常见框架的参考实现,业务层可选择使用或自己实现 * 3. **业务层自主**:完全控制实现细节,不受 agent-server 限制 * * ## 使用方式 * * ### 方式 1:直接使用参考实现(最简单) * * ```typescript * import { KoaSSEAdapter, createAgentServer } from '@cicctencent/agent-server'; * * const server = createAgentServer({ llmProvider: myProvider }); * * // MidwayJS/Koa 项目 * @Get('/chat/stream') * async chatStream(@Ctx() ctx: Context) { * const adapter = new KoaSSEAdapter(ctx); * await server.runAgentStream(adapter, { content: 'Hello' }); * } * ``` * * ### 方式 2:实现 SPI 接口(自定义存储) * * ```typescript * import { * createAgentServer, * type ChatStoreProvider, * type BaseThreadEntity, * type BaseMessageEntity, * } from '@cicctencent/agent-server'; * * // 定义你的实体类型(可以自定义字段) * interface MyThread extends BaseThreadEntity { * userId: string; * applicationId: number; * } * * // 实现 ChatStoreProvider 接口 * class MyChatStore implements ChatStoreProvider { * async getThreads(userId?: string): Promise { * // 使用任意存储技术:TypeORM / Prisma / Mongoose / ... * return this.database.query('SELECT * FROM threads WHERE userId = ?', [userId]); * } * * // ... 实现其他方法 * } * * // 注入自定义实现 * const server = createAgentServer({ * llmProvider: myProvider, * chatStoreProvider: new MyChatStore(), * }); * ``` * * ### 方式 3:只使用组件(不使用工厂) * * ```typescript * import { * KoaSSEAdapter, * writeSSE, * createBuiltinTools, * MemoryService, * } from '@cicctencent/agent-server'; * * // 只使用需要的组件,不依赖 createAgentServer * const tools = createBuiltinTools(); * const memoryService = new MemoryService('./data'); * * @Get('/stream') * async stream(@Ctx() ctx: Context) { * const adapter = new KoaSSEAdapter(ctx); * writeSSE(adapter, 'start', { message: 'Hello' }); * } * ``` * * ## 完整文档 * * 详见 [README.md](./README.md) */ export type { BaseThreadEntity, BaseMessageEntity, BaseWorkspaceEntity, BaseAgentProfileEntity, BaseSettingsEntity, TenantContext, KVStorageAdapter, ListStorageAdapter, QueryOptions, SettingsProvider, ChatStoreProvider, AgentProfileProvider, PromptBuilderProvider, ModelConfigResolver, SSEResponseAdapter, RequestContextAdapter, AgentServerSPIOptions, ThreadEntity, MessageEntity, WorkspaceEntity, AgentProfileEntity, SettingsEntity, } from './types.js'; export { JsonFileKVStorage, JsonFileListStorage, InMemoryKVStorage, InMemoryListStorage, DatabaseListStorage, createJsonFileStorage, createInMemoryStorage, } from './storage.js'; export { ExpressSSEAdapter, KoaSSEAdapter, FastifySSEAdapter, NativeHttpSSEAdapter, adaptSSE, ExpressRequestAdapter, KoaRequestAdapter, adaptRequest, CustomSSEAdapter, } from './adapters.js'; export * from './store-interfaces.js'; export type { PersistenceProvider, FileMeta, DataMeta, PersistedFile, PersistedData, PersistenceRoute, PersistenceConfig, LocalFsProviderConfig, S3ProviderConfig, DbProviderConfig, } from './persistence-interfaces.js'; export { PERSISTENCE_SPI_BINDINGS } from './persistence-interfaces.js'; export { InMemoryObservabilityStore, } from './observability-store.js'; export type { ObservabilityStoreProvider, } from './observability-store.js'; export { createStoreSink } from './store-sink-factory.js'; export * from './channel-types.js'; /** * ## SPI 使用示例 * * ### 1. 使用默认 JSON 文件存储 * * ```typescript * import { createAgentServer } from '@cicctencent/agent-server'; * * const server = createAgentServer({ * llmProvider: myProvider, * dataDir: './data', // 使用默认 JSON 文件存储 * }); * ``` * * ### 2. 自定义存储(数据库) * * ```typescript * import { createAgentServer, DatabaseListStorage, type ChatStoreProvider } from '@cicctencent/agent-server'; * * // 实现数据库存储 * class TypeORMThreadStorage extends DatabaseListStorage { * constructor(private repository: Repository) { * super(); * } * async list() { return this.repository.find(); } * async findById(id) { return this.repository.findOne({ where: { id } }); } * async add(entity) { return this.repository.save(entity); } * // ... * } * * // 实现 ChatStoreProvider * class TypeORMChatStoreProvider implements ChatStoreProvider { * constructor(private threadRepo: Repository, private msgRepo: Repository) {} * getThreads() { return this.threadRepo.find(); } * // ... * } * * const server = createAgentServer({ * llmProvider: myProvider, * chatStoreProvider: new TypeORMChatStoreProvider(threadRepo, msgRepo), * }); * ``` * * ### 3. 自定义框架适配(MidwayJS) * * ```typescript * import { createAgentServer, KoaSSEAdapter } from '@cicctencent/agent-server'; * * @Provide() * @Scope(ScopeEnum.Singleton) * export class AgentService { * private server: AgentServer; * * @Init() * async init() { * this.server = createAgentServer({ * llmProvider: await this.createProvider(), * // 使用 Koa 适配器 * createSSEResponseAdapter: (ctx) => new KoaSSEAdapter(ctx), * }); * } * * @Get('/chat/stream') * async chatStream(@Ctx() ctx: Context) { * const adapter = new KoaSSEAdapter(ctx); * await this.server.runAgentStream(adapter, { content: ctx.query.message }); * } * } * ``` * * ### 4. 自定义 Prompt 构建 * * ```typescript * import { createAgentServer, type PromptBuilderProvider } from '@cicctencent/agent-server'; * * class CustomPromptBuilder implements PromptBuilderProvider { * buildDefaultPrompt(profile, tools, memory, specialists, specialistResourceMap, skills) { * // 自定义 Prompt 构建逻辑 * return `你是一个专业的 BI 分析助手...\n${memory || ''}`; * } * // ... * } * * const server = createAgentServer({ * llmProvider: myProvider, * promptBuilder: new CustomPromptBuilder(), * }); * ``` * * ### 5. 组件级使用(不使用工厂) * * ```typescript * import { MemoryService, writeSSE, createBuiltinTools, KoaSSEAdapter } from '@cicctencent/agent-server'; * * // 只使用需要的组件,不依赖 createAgentServer * const memoryService = new MemoryService('./data'); * const tools = createBuiltinTools(); * * // 在 MidwayJS 中使用 SSE * @Get('/stream') * async stream(@Ctx() ctx: Context) { * const adapter = new KoaSSEAdapter(ctx); * writeSSE(adapter, 'start', { message: 'Hello' }); * } * ``` */ //# sourceMappingURL=index.d.ts.map