openapi: 3.1.0 info: title: "AI Service Admin Dependencies" description: "ai-service-admin 模块依赖的外部 API 契约(Consumer 需求侧)" version: "0.3.0" x-contract-level: L1 servers: - url: http://localhost:8000 description: 本地开发服务器 paths: /admin/embedding/providers: get: operationId: listEmbeddingProviders summary: 获取可用的嵌入模型提供者列表 tags: - Embedding Management parameters: - name: X-Tenant-Id in: header required: true schema: type: string responses: '200': description: 成功返回提供者列表 content: application/json: schema: type: object properties: providers: type: array items: $ref: '#/components/schemas/EmbeddingProviderInfo' /admin/embedding/config: get: operationId: getEmbeddingConfig summary: 获取当前嵌入模型配置 tags: - Embedding Management parameters: - name: X-Tenant-Id in: header required: true schema: type: string responses: '200': description: 成功返回当前配置 content: application/json: schema: $ref: '#/components/schemas/EmbeddingConfig' put: operationId: updateEmbeddingConfig summary: 更新嵌入模型配置 tags: - Embedding Management parameters: - name: X-Tenant-Id in: header required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EmbeddingConfigUpdate' responses: '200': description: 配置更新成功 content: application/json: schema: type: object properties: success: type: boolean message: type: string /admin/embedding/test: post: operationId: testEmbedding summary: 测试嵌入模型连接 tags: - Embedding Management parameters: - name: X-Tenant-Id in: header required: true schema: type: string requestBody: required: false content: application/json: schema: type: object properties: test_text: type: string description: 测试文本(可选) config: $ref: '#/components/schemas/EmbeddingConfigUpdate' responses: '200': description: 测试成功 content: application/json: schema: $ref: '#/components/schemas/EmbeddingTestResult' /admin/embedding/formats: get: operationId: getSupportedFormats summary: 获取支持的文档格式列表 tags: - Embedding Management parameters: - name: X-Tenant-Id in: header required: true schema: type: string responses: '200': description: 成功返回支持格式列表 content: application/json: schema: type: object properties: formats: type: array items: $ref: '#/components/schemas/DocumentFormat' /admin/llm/providers: get: operationId: listLLMProviders summary: 获取可用的 LLM 提供者列表 tags: - LLM Management parameters: - name: X-Tenant-Id in: header required: true schema: type: string responses: '200': description: 成功返回提供者列表 content: application/json: schema: type: object properties: providers: type: array items: $ref: '#/components/schemas/LLMProviderInfo' /admin/llm/config: get: operationId: getLLMConfig summary: 获取当前 LLM 配置 tags: - LLM Management parameters: - name: X-Tenant-Id in: header required: true schema: type: string responses: '200': description: 成功返回当前配置 content: application/json: schema: $ref: '#/components/schemas/LLMConfig' put: operationId: updateLLMConfig summary: 更新 LLM 配置 tags: - LLM Management parameters: - name: X-Tenant-Id in: header required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/LLMConfigUpdate' responses: '200': description: 配置更新成功 content: application/json: schema: type: object properties: success: type: boolean message: type: string /admin/llm/test: post: operationId: testLLM summary: 测试 LLM 连接 tags: - LLM Management parameters: - name: X-Tenant-Id in: header required: true schema: type: string requestBody: required: false content: application/json: schema: type: object properties: test_prompt: type: string description: 测试提示词(可选) example: "你好,请简单介绍一下自己。" config: $ref: '#/components/schemas/LLMConfigUpdate' responses: '200': description: 测试成功 content: application/json: schema: $ref: '#/components/schemas/LLMTestResult' /admin/rag/experiments/run: post: operationId: runRagExperiment summary: 运行 RAG 实验(含 AI 输出) tags: - RAG Lab parameters: - name: X-Tenant-Id in: header required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RagExperimentRequest' responses: '200': description: 实验完成 content: application/json: schema: $ref: '#/components/schemas/RagExperimentResult' /admin/rag/experiments/stream: post: operationId: runRagExperimentStream summary: 运行 RAG 实验(流式输出) tags: - RAG Lab parameters: - name: X-Tenant-Id in: header required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RagExperimentRequest' responses: '200': description: SSE 流式输出 content: text/event-stream: schema: type: string components: schemas: EmbeddingProviderInfo: type: object required: - name - display_name - config_schema properties: name: type: string description: 提供者唯一标识 example: "ollama" display_name: type: string description: 提供者显示名称 example: "Ollama 本地模型" description: type: string description: 提供者描述 example: "使用 Ollama 运行的本地嵌入模型" config_schema: type: object description: 配置参数定义(JSON Schema 格式) additionalProperties: true EmbeddingConfig: type: object required: - provider - config properties: provider: type: string description: 当前激活的提供者 example: "ollama" config: type: object description: 提供者配置参数 additionalProperties: true updated_at: type: string format: date-time description: 配置最后更新时间 EmbeddingConfigUpdate: type: object required: - provider properties: provider: type: string description: 提供者标识 example: "ollama" config: type: object description: 提供者配置参数 additionalProperties: true EmbeddingTestResult: type: object required: - success - dimension properties: success: type: boolean description: 测试是否成功 dimension: type: integer description: 返回的向量维度 example: 768 latency_ms: type: number description: 响应延迟(毫秒) example: 125.5 message: type: string description: 测试结果消息 example: "连接成功,向量维度: 768" error: type: string description: 错误信息(失败时) example: "连接超时" DocumentFormat: type: object required: - extension - name properties: extension: type: string description: 文件扩展名 example: ".pdf" name: type: string description: 格式名称 example: "PDF 文档" description: type: string description: 格式描述 example: "使用 PyMuPDF 解析 PDF 文档" LLMProviderInfo: type: object required: - name - display_name - config_schema properties: name: type: string description: 提供者唯一标识 example: "openai" display_name: type: string description: 提供者显示名称 example: "OpenAI" description: type: string description: 提供者描述 example: "OpenAI GPT 系列模型" config_schema: type: object description: 配置参数定义(JSON Schema 格式) additionalProperties: true LLMConfig: type: object required: - provider - config properties: provider: type: string description: 当前激活的提供者 example: "openai" config: type: object description: 提供者配置参数 additionalProperties: true example: api_key: "sk-xxx" base_url: "https://api.openai.com/v1" model: "gpt-4o-mini" updated_at: type: string format: date-time description: 配置最后更新时间 LLMConfigUpdate: type: object required: - provider properties: provider: type: string description: 提供者标识 example: "openai" config: type: object description: 提供者配置参数 additionalProperties: true LLMTestResult: type: object required: - success properties: success: type: boolean description: 测试是否成功 response: type: string description: LLM 响应内容 example: "你好!我是一个 AI 助手..." latency_ms: type: number description: 响应延迟(毫秒) example: 1250.5 prompt_tokens: type: integer description: 输入 Token 数 example: 15 completion_tokens: type: integer description: 输出 Token 数 example: 50 total_tokens: type: integer description: 总 Token 数 example: 65 message: type: string description: 测试结果消息 example: "连接成功" error: type: string description: 错误信息(失败时) example: "API Key 无效" RagExperimentRequest: type: object required: - query properties: query: type: string description: 查询文本 example: "什么是 RAG?" kb_ids: type: array items: type: string description: 知识库 ID 列表 top_k: type: integer description: 检索数量 default: 5 score_threshold: type: number description: 相似度阈值 default: 0.5 llm_provider: type: string description: 指定 LLM 提供者(可选) example: "openai" generate_response: type: boolean description: 是否生成 AI 回复 default: true RagExperimentResult: type: object properties: query: type: string description: 原始查询 retrieval_results: type: array items: $ref: '#/components/schemas/RetrievalResult' final_prompt: type: string description: 最终拼接的 Prompt ai_response: $ref: '#/components/schemas/AIResponse' total_latency_ms: type: number description: 总耗时(毫秒) RetrievalResult: type: object properties: content: type: string description: 检索到的内容 score: type: number description: 相似度分数 source: type: string description: 来源文档 metadata: type: object additionalProperties: true description: 元数据 AIResponse: type: object properties: content: type: string description: AI 回复内容 prompt_tokens: type: integer description: 输入 Token 数 completion_tokens: type: integer description: 输出 Token 数 total_tokens: type: integer description: 总 Token 数 latency_ms: type: number description: 生成耗时(毫秒) model: type: string description: 使用的模型