AI智能体
**本文引用的文件** - AIAgentService.cs(file://Kevin/kevin.Module/kevin.AI.AgentFramework/AIAgentService.cs) - AISetting.cs(file://Kevin/kevin.Module/kevin.AI.AgentFramework/AISetting.cs) - ServiceCollectionExtensions.cs(file://Kevin/kevin.Module/kevin.AI.AgentFramework/ServiceCollectionExtensions.cs) - RAGService.cs(file://Kevin/kevin.Module/kevin.RAG/RAGService.cs) - IRAGStorageService.cs(file://Kevin/kevin.Module/kevin.RAG/Interfaces/IRAGStorageService.cs) - AliRerankService.cs(file://Kevin/kevin.Module/kevin.RAG/Rerank/AliRerankService.cs) - AIModelsService.cs(file://Kevin/Application/Services/AI/AIModelsService.cs) - TAIModels.cs(file://Kevin/Domain/Entities/AI/TAIModels.cs) - AISkillToolManagementService.cs(file://Kevin/Application/Services/AI/AISkillToolManagementService.cs) - TAISkillToolManagement.cs(file://Kevin/Domain/Entities/AI/TAISkillToolManagement.cs) - AIKmssService.cs(file://Kevin/Application/Services/AI/AIKmssService.cs) - TAIKmss.cs(file://Kevin/Domain/Entities/AI/TAIKmss.cs)
目录
简介
本文件面向 NetCoreKevin AI智能体系统,聚焦基于 AgentFramework 的智能代理能力:多步推理、任务自动化、技能与工具管理;知识库系统(Qdrant向量数据库、RAG检索增强、文档处理与索引构建);AI模型配置与管理(支持多种提供商与本地模型);从用户输入到AI响应的完整工作流;以及自定义工具开发、技能管理与性能优化建议,并给出实际应用场景与最佳实践。
项目结构
系统采用分层模块化组织:
- 应用服务层:AI相关服务(Agent、RAG、知识库、模型、技能工具等)
- 领域实体:AI模型、知识库、技能工具等数据模型
- RAG模块:存储抽象、重排序、Ollama嵌入、Qdrant客户端设置
- Agent框架:代理创建、流式输出、工具调用、重试与日志
- Web接口:控制器暴露AI能力(不在本次重点展开)
#mermaid-svg-kFngNcX0k8ElxFbB{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-kFngNcX0k8ElxFbB .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-kFngNcX0k8ElxFbB .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-kFngNcX0k8ElxFbB .error-icon{fill:#552222;}#mermaid-svg-kFngNcX0k8ElxFbB .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kFngNcX0k8ElxFbB .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-kFngNcX0k8ElxFbB .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kFngNcX0k8ElxFbB .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kFngNcX0k8ElxFbB .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-kFngNcX0k8ElxFbB .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kFngNcX0k8ElxFbB .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kFngNcX0k8ElxFbB .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kFngNcX0k8ElxFbB .marker.cross{stroke:#333333;}#mermaid-svg-kFngNcX0k8ElxFbB svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kFngNcX0k8ElxFbB p{margin:0;}#mermaid-svg-kFngNcX0k8ElxFbB .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-kFngNcX0k8ElxFbB .cluster-label text{fill:#333;}#mermaid-svg-kFngNcX0k8ElxFbB .cluster-label span{color:#333;}#mermaid-svg-kFngNcX0k8ElxFbB .cluster-label span p{background-color:transparent;}#mermaid-svg-kFngNcX0k8ElxFbB .label text,#mermaid-svg-kFngNcX0k8ElxFbB span{fill:#333;color:#333;}#mermaid-svg-kFngNcX0k8ElxFbB .node rect,#mermaid-svg-kFngNcX0k8ElxFbB .node circle,#mermaid-svg-kFngNcX0k8ElxFbB .node ellipse,#mermaid-svg-kFngNcX0k8ElxFbB .node polygon,#mermaid-svg-kFngNcX0k8ElxFbB .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kFngNcX0k8ElxFbB .rough-node .label text,#mermaid-svg-kFngNcX0k8ElxFbB .node .label text,#mermaid-svg-kFngNcX0k8ElxFbB .image-shape .label,#mermaid-svg-kFngNcX0k8ElxFbB .icon-shape .label{text-anchor:middle;}#mermaid-svg-kFngNcX0k8ElxFbB .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-kFngNcX0k8ElxFbB .rough-node .label,#mermaid-svg-kFngNcX0k8ElxFbB .node .label,#mermaid-svg-kFngNcX0k8ElxFbB .image-shape .label,#mermaid-svg-kFngNcX0k8ElxFbB .icon-shape .label{text-align:center;}#mermaid-svg-kFngNcX0k8ElxFbB .node.clickable{cursor:pointer;}#mermaid-svg-kFngNcX0k8ElxFbB .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-kFngNcX0k8ElxFbB .arrowheadPath{fill:#333333;}#mermaid-svg-kFngNcX0k8ElxFbB .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-kFngNcX0k8ElxFbB .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-kFngNcX0k8ElxFbB .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kFngNcX0k8ElxFbB .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-kFngNcX0k8ElxFbB .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kFngNcX0k8ElxFbB .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-kFngNcX0k8ElxFbB .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kFngNcX0k8ElxFbB .cluster text{fill:#333;}#mermaid-svg-kFngNcX0k8ElxFbB .cluster span{color:#333;}#mermaid-svg-kFngNcX0k8ElxFbB div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-kFngNcX0k8ElxFbB .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-kFngNcX0k8ElxFbB rect.text{fill:none;stroke-width:0;}#mermaid-svg-kFngNcX0k8ElxFbB .icon-shape,#mermaid-svg-kFngNcX0k8ElxFbB .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kFngNcX0k8ElxFbB .icon-shape p,#mermaid-svg-kFngNcX0k8ElxFbB .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-kFngNcX0k8ElxFbB .icon-shape .label rect,#mermaid-svg-kFngNcX0k8ElxFbB .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kFngNcX0k8ElxFbB .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-kFngNcX0k8ElxFbB .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-kFngNcX0k8ElxFbB :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 领域实体
RAG模块
应用服务
Agent框架
AI代理服务
AIAgentService
AI设置
AISetting
服务注册扩展
ServiceCollectionExtensions
AI模型服务
AIModelsService
知识库服务
AIKmssService
技能工具管理
AISkillToolManagementService
RAG服务
RAGService
存储接口
IRAGStorageService
重排序服务
AliRerankService
AI模型实体
TAIModels
知识库配置
TAIKmss
技能工具配置
TAISkillToolManagement
图表来源
- AIAgentService.cs:1-491(file://Kevin/kevin.Module/kevin.AI.AgentFramework/AIAgentService.cs#L1-L491)
- RAGService.cs:1-81(file://Kevin/kevin.Module/kevin.RAG/RAGService.cs#L1-L81)
- IRAGStorageService.cs:1-30(file://Kevin/kevin.Module/kevin.RAG/Interfaces/IRAGStorageService.cs#L1-L30)
- AliRerankService.cs:1-99(file://Kevin/kevin.Module/kevin.RAG/Rerank/AliRerankService.cs#L1-L99)
- AIModelsService.cs:1-160(file://Kevin/Application/Services/AI/AIModelsService.cs#L1-L160)
- TAIModels.cs:1-55(file://Kevin/Domain/Entities/AI/TAIModels.cs#L1-L55)
- AISkillToolManagementService.cs:1-254(file://Kevin/Application/Services/AI/AISkillToolManagementService.cs#L1-L254)
- TAISkillToolManagement.cs:1-93(file://Kevin/Domain/Entities/AI/TAISkillToolManagement.cs#L1-L93)
- AIKmssService.cs:1-449(file://Kevin/Application/Services/AI/AIKmssService.cs#L1-L449)
- TAIKmss.cs:1-47(file://Kevin/Domain/Entities/AI/TAIKmss.cs#L1-L47)
章节来源
- AIAgentService.cs:1-491(file://Kevin/kevin.Module/kevin.AI.AgentFramework/AIAgentService.cs#L1-L491)
- RAGService.cs:1-81(file://Kevin/kevin.Module/kevin.RAG/RAGService.cs#L1-L81)
- AIModelsService.cs:1-160(file://Kevin/Application/Services/AI/AIModelsService.cs#L1-L160)
- AIKmssService.cs:1-449(file://Kevin/Application/Services/AI/AIKmssService.cs#L1-L449)
核心组件
- AI代理与流式推理:通过AIAgentService创建OpenAI兼容的ChatClient并装配为AIAgent,支持流式文本、工具调用回调、思考过程提取与Token用量统计,具备重试与HTTP请求拦截日志能力。
- RAG检索增强:RAGService根据集合名与问题向量检索文档块,可选接入重排序服务提升相关性,最终组装上下文提示词供LLM使用。
- 知识库索引与入库:AIKmssService负责文档解析、分块、向量化(Ollama Embedding)、写入Qdrant(通过IRAGStorageService),并维护导入状态。
- 模型配置与管理:AIModelsService提供模型的增删改查,持久化至TAIModels,包含端点、名称、密钥、Embedding维度等。
- 技能与工具管理:AISkillToolManagementService管理内置/自定义技能与工具,支持MCP协议参数、附件包解压与启用控制。
章节来源
- AIAgentService.cs:1-491(file://Kevin/kevin.Module/kevin.AI.AgentFramework/AIAgentService.cs#L1-L491)
- RAGService.cs:1-81(file://Kevin/kevin.Module/kevin.RAG/RAGService.cs#L1-L81)
- AIKmssService.cs:1-449(file://Kevin/Application/Services/AI/AIKmssService.cs#L1-L449)
- AIModelsService.cs:1-160(file://Kevin/Application/Services/AI/AIModelsService.cs#L1-L160)
- AISkillToolManagementService.cs:1-254(file://Kevin/Application/Services/AI/AISkillToolManagementService.cs#L1-L254)
架构总览
下图展示从用户输入到AI响应的主流程,包括RAG检索、重排序、Agent执行、工具调用与流式输出。
"AI模型(OpenAI兼容)" "AIAgentService" "重排序(AliRerankService)" "IRAGStorageService(Qdrant)" "RAGService" "业务服务" "用户" "AI模型(OpenAI兼容)" "AIAgentService" "重排序(AliRerankService)" "IRAGStorageService(Qdrant)" "RAGService" "业务服务" "用户" #mermaid-svg-jUo4hYSgpIcD5tiX{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-jUo4hYSgpIcD5tiX .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-jUo4hYSgpIcD5tiX .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-jUo4hYSgpIcD5tiX .error-icon{fill:#552222;}#mermaid-svg-jUo4hYSgpIcD5tiX .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jUo4hYSgpIcD5tiX .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-jUo4hYSgpIcD5tiX .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jUo4hYSgpIcD5tiX .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jUo4hYSgpIcD5tiX .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-jUo4hYSgpIcD5tiX .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jUo4hYSgpIcD5tiX .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jUo4hYSgpIcD5tiX .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jUo4hYSgpIcD5tiX .marker.cross{stroke:#333333;}#mermaid-svg-jUo4hYSgpIcD5tiX svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jUo4hYSgpIcD5tiX p{margin:0;}#mermaid-svg-jUo4hYSgpIcD5tiX .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-jUo4hYSgpIcD5tiX text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-jUo4hYSgpIcD5tiX .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-jUo4hYSgpIcD5tiX .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-jUo4hYSgpIcD5tiX .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-jUo4hYSgpIcD5tiX .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-jUo4hYSgpIcD5tiX #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-jUo4hYSgpIcD5tiX .sequenceNumber{fill:white;}#mermaid-svg-jUo4hYSgpIcD5tiX #sequencenumber{fill:#333;}#mermaid-svg-jUo4hYSgpIcD5tiX #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-jUo4hYSgpIcD5tiX .messageText{fill:#333;stroke:none;}#mermaid-svg-jUo4hYSgpIcD5tiX .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-jUo4hYSgpIcD5tiX .labelText,#mermaid-svg-jUo4hYSgpIcD5tiX .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-jUo4hYSgpIcD5tiX .loopText,#mermaid-svg-jUo4hYSgpIcD5tiX .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-jUo4hYSgpIcD5tiX .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-jUo4hYSgpIcD5tiX .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-jUo4hYSgpIcD5tiX .noteText,#mermaid-svg-jUo4hYSgpIcD5tiX .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-jUo4hYSgpIcD5tiX .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-jUo4hYSgpIcD5tiX .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-jUo4hYSgpIcD5tiX .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-jUo4hYSgpIcD5tiX .actorPopupMenu{position:absolute;}#mermaid-svg-jUo4hYSgpIcD5tiX .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-jUo4hYSgpIcD5tiX .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-jUo4hYSgpIcD5tiX .actor-man circle,#mermaid-svg-jUo4hYSgpIcD5tiX line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-jUo4hYSgpIcD5tiX :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} alt "启用重排序" "发送问题" "GetRAGSystemPrompt(集合, 问题向量, topK, 阈值)" "Search(集合, 向量, limit)" "候选文档块列表" "RerankAsync(查询, 文档, topK)" "相关性分数" "过滤与排序" "上下文提示词 + 文档摘要" "CreateOpenAIAgentAndSendMSG(消息, 选项)" "RunStreamingAsync / RunAsync" "流式片段/结果" "文本 + Token用量" "返回答案"
图表来源
- RAGService.cs:1-81(file://Kevin/kevin.Module/kevin.RAG/RAGService.cs#L1-L81)
- IRAGStorageService.cs:1-30(file://Kevin/kevin.Module/kevin.RAG/Interfaces/IRAGStorageService.cs#L1-L30)
- AliRerankService.cs:1-99(file://Kevin/kevin.Module/kevin.RAG/Rerank/AliRerankService.cs#L1-L99)
- AIAgentService.cs:1-491(file://Kevin/kevin.Module/kevin.AI.AgentFramework/AIAgentService.cs#L1-L491)
详细组件分析
AI代理与服务编排(AIAgentService)
- 代理创建:基于OpenAI兼容客户端构造ChatClient并转换为AIAgent,装配工具自动审批规则,支持禁用工具/技能开关。
- 流式处理:支持流式文本输出、工具调用事件回调、思考过程提取(reasoning字段),并在更新中抽取Token用量。
- 容错与重试:异常时回退为非流式调用,支持最大重试次数与网络超时配置。
- 可观测性:可选HTTP请求拦截日志。
#mermaid-svg-HkpINrnvozC4V34v{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-HkpINrnvozC4V34v .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-HkpINrnvozC4V34v .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-HkpINrnvozC4V34v .error-icon{fill:#552222;}#mermaid-svg-HkpINrnvozC4V34v .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-HkpINrnvozC4V34v .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-HkpINrnvozC4V34v .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-HkpINrnvozC4V34v .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-HkpINrnvozC4V34v .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-HkpINrnvozC4V34v .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-HkpINrnvozC4V34v .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-HkpINrnvozC4V34v .marker{fill:#333333;stroke:#333333;}#mermaid-svg-HkpINrnvozC4V34v .marker.cross{stroke:#333333;}#mermaid-svg-HkpINrnvozC4V34v svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-HkpINrnvozC4V34v p{margin:0;}#mermaid-svg-HkpINrnvozC4V34v .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-HkpINrnvozC4V34v .cluster-label text{fill:#333;}#mermaid-svg-HkpINrnvozC4V34v .cluster-label span{color:#333;}#mermaid-svg-HkpINrnvozC4V34v .cluster-label span p{background-color:transparent;}#mermaid-svg-HkpINrnvozC4V34v .label text,#mermaid-svg-HkpINrnvozC4V34v span{fill:#333;color:#333;}#mermaid-svg-HkpINrnvozC4V34v .node rect,#mermaid-svg-HkpINrnvozC4V34v .node circle,#mermaid-svg-HkpINrnvozC4V34v .node ellipse,#mermaid-svg-HkpINrnvozC4V34v .node polygon,#mermaid-svg-HkpINrnvozC4V34v .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-HkpINrnvozC4V34v .rough-node .label text,#mermaid-svg-HkpINrnvozC4V34v .node .label text,#mermaid-svg-HkpINrnvozC4V34v .image-shape .label,#mermaid-svg-HkpINrnvozC4V34v .icon-shape .label{text-anchor:middle;}#mermaid-svg-HkpINrnvozC4V34v .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-HkpINrnvozC4V34v .rough-node .label,#mermaid-svg-HkpINrnvozC4V34v .node .label,#mermaid-svg-HkpINrnvozC4V34v .image-shape .label,#mermaid-svg-HkpINrnvozC4V34v .icon-shape .label{text-align:center;}#mermaid-svg-HkpINrnvozC4V34v .node.clickable{cursor:pointer;}#mermaid-svg-HkpINrnvozC4V34v .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-HkpINrnvozC4V34v .arrowheadPath{fill:#333333;}#mermaid-svg-HkpINrnvozC4V34v .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-HkpINrnvozC4V34v .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-HkpINrnvozC4V34v .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-HkpINrnvozC4V34v .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-HkpINrnvozC4V34v .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-HkpINrnvozC4V34v .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-HkpINrnvozC4V34v .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-HkpINrnvozC4V34v .cluster text{fill:#333;}#mermaid-svg-HkpINrnvozC4V34v .cluster span{color:#333;}#mermaid-svg-HkpINrnvozC4V34v div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-HkpINrnvozC4V34v .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-HkpINrnvozC4V34v rect.text{fill:none;stroke-width:0;}#mermaid-svg-HkpINrnvozC4V34v .icon-shape,#mermaid-svg-HkpINrnvozC4V34v .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-HkpINrnvozC4V34v .icon-shape p,#mermaid-svg-HkpINrnvozC4V34v .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-HkpINrnvozC4V34v .icon-shape .label rect,#mermaid-svg-HkpINrnvozC4V34v .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-HkpINrnvozC4V34v .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-HkpINrnvozC4V34v .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-HkpINrnvozC4V34v :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
否
是
否
开始
构建OpenAI客户端与AIAgent
是否流式?
RunStreamingAsync 循环处理
RunAsync 获取结果
出现工具调用?
触发工具回调/执行
继续流式接收
提取思考过程?
解析raw patch中的reasoning字段
尝试抽取usage信息
结束
图表来源
- AIAgentService.cs:1-491(file://Kevin/kevin.Module/kevin.AI.AgentFramework/AIAgentService.cs#L1-L491)
章节来源
- AIAgentService.cs:1-491(file://Kevin/kevin.Module/kevin.AI.AgentFramework/AIAgentService.cs#L1-L491)
- AISetting.cs:1-64(file://Kevin/kevin.Module/kevin.AI.AgentFramework/AISetting.cs#L1-L64)
- ServiceCollectionExtensions.cs:1-22(file://Kevin/kevin.Module/kevin.AI.AgentFramework/ServiceCollectionExtensions.cs#L1-L22)
RAG检索与重排序(RAGService + AliRerankService)
- 检索流程:按集合名与问题向量搜索文档块,支持topK与相似度阈值过滤。
- 重排序:可选接入外部重排序服务,对候选文档进行相关性打分与排序,再组装上下文提示词。
- 输出:返回布尔标志、拼接后的系统提示词与文档块列表。
#mermaid-svg-9gvcT3XxwZ8WGfHT{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-9gvcT3XxwZ8WGfHT .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-9gvcT3XxwZ8WGfHT .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-9gvcT3XxwZ8WGfHT .error-icon{fill:#552222;}#mermaid-svg-9gvcT3XxwZ8WGfHT .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-9gvcT3XxwZ8WGfHT .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-9gvcT3XxwZ8WGfHT .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-9gvcT3XxwZ8WGfHT .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-9gvcT3XxwZ8WGfHT .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-9gvcT3XxwZ8WGfHT .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-9gvcT3XxwZ8WGfHT .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-9gvcT3XxwZ8WGfHT .marker{fill:#333333;stroke:#333333;}#mermaid-svg-9gvcT3XxwZ8WGfHT .marker.cross{stroke:#333333;}#mermaid-svg-9gvcT3XxwZ8WGfHT svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-9gvcT3XxwZ8WGfHT p{margin:0;}#mermaid-svg-9gvcT3XxwZ8WGfHT .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-9gvcT3XxwZ8WGfHT .cluster-label text{fill:#333;}#mermaid-svg-9gvcT3XxwZ8WGfHT .cluster-label span{color:#333;}#mermaid-svg-9gvcT3XxwZ8WGfHT .cluster-label span p{background-color:transparent;}#mermaid-svg-9gvcT3XxwZ8WGfHT .label text,#mermaid-svg-9gvcT3XxwZ8WGfHT span{fill:#333;color:#333;}#mermaid-svg-9gvcT3XxwZ8WGfHT .node rect,#mermaid-svg-9gvcT3XxwZ8WGfHT .node circle,#mermaid-svg-9gvcT3XxwZ8WGfHT .node ellipse,#mermaid-svg-9gvcT3XxwZ8WGfHT .node polygon,#mermaid-svg-9gvcT3XxwZ8WGfHT .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-9gvcT3XxwZ8WGfHT .rough-node .label text,#mermaid-svg-9gvcT3XxwZ8WGfHT .node .label text,#mermaid-svg-9gvcT3XxwZ8WGfHT .image-shape .label,#mermaid-svg-9gvcT3XxwZ8WGfHT .icon-shape .label{text-anchor:middle;}#mermaid-svg-9gvcT3XxwZ8WGfHT .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-9gvcT3XxwZ8WGfHT .rough-node .label,#mermaid-svg-9gvcT3XxwZ8WGfHT .node .label,#mermaid-svg-9gvcT3XxwZ8WGfHT .image-shape .label,#mermaid-svg-9gvcT3XxwZ8WGfHT .icon-shape .label{text-align:center;}#mermaid-svg-9gvcT3XxwZ8WGfHT .node.clickable{cursor:pointer;}#mermaid-svg-9gvcT3XxwZ8WGfHT .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-9gvcT3XxwZ8WGfHT .arrowheadPath{fill:#333333;}#mermaid-svg-9gvcT3XxwZ8WGfHT .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-9gvcT3XxwZ8WGfHT .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-9gvcT3XxwZ8WGfHT .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-9gvcT3XxwZ8WGfHT .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-9gvcT3XxwZ8WGfHT .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-9gvcT3XxwZ8WGfHT .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-9gvcT3XxwZ8WGfHT .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-9gvcT3XxwZ8WGfHT .cluster text{fill:#333;}#mermaid-svg-9gvcT3XxwZ8WGfHT .cluster span{color:#333;}#mermaid-svg-9gvcT3XxwZ8WGfHT div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-9gvcT3XxwZ8WGfHT .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-9gvcT3XxwZ8WGfHT rect.text{fill:none;stroke-width:0;}#mermaid-svg-9gvcT3XxwZ8WGfHT .icon-shape,#mermaid-svg-9gvcT3XxwZ8WGfHT .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-9gvcT3XxwZ8WGfHT .icon-shape p,#mermaid-svg-9gvcT3XxwZ8WGfHT .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-9gvcT3XxwZ8WGfHT .icon-shape .label rect,#mermaid-svg-9gvcT3XxwZ8WGfHT .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-9gvcT3XxwZ8WGfHT .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-9gvcT3XxwZ8WGfHT .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-9gvcT3XxwZ8WGfHT :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
否
输入: 集合名, 问题向量, 问题文本, topK, 阈值
是否启用重排序?
搜索 topK*10 候选
搜索 topK 候选
调用重排序服务
按阈值过滤并取topK
拼接上下文提示词
返回 (成功/失败, 提示词, 文档列表)
图表来源
- RAGService.cs:1-81(file://Kevin/kevin.Module/kevin.RAG/RAGService.cs#L1-L81)
- AliRerankService.cs:1-99(file://Kevin/kevin.Module/kevin.RAG/Rerank/AliRerankService.cs#L1-L99)
- IRAGStorageService.cs:1-30(file://Kevin/kevin.Module/kevin.RAG/Interfaces/IRAGStorageService.cs#L1-L30)
章节来源
- RAGService.cs:1-81(file://Kevin/kevin.Module/kevin.RAG/RAGService.cs#L1-L81)
- AliRerankService.cs:1-99(file://Kevin/kevin.Module/kevin.RAG/Rerank/AliRerankService.cs#L1-L99)
- IRAGStorageService.cs:1-30(file://Kevin/kevin.Module/kevin.RAG/Interfaces/IRAGStorageService.cs#L1-L30)
知识库索引与入库(AIKmssService)
- 文档读取:支持本地文件与远程URL,按类型解析(文本、Markdown、PDF、Word、HTML、图片、Excel)。
- 分块与清洗:DocumentProcessor清理并分段,生成带元数据的文档块。
- 向量化:通过Ollama嵌入模型生成向量,记录维度大小。
- 入库:调用IRAGStorageService将文档块写入Qdrant集合(命名空间含知识库ID)。
- 并发控制:分布式锁避免重复处理同一知识库。
#mermaid-svg-2yrN8cdmZogIsH0C{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-2yrN8cdmZogIsH0C .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-2yrN8cdmZogIsH0C .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-2yrN8cdmZogIsH0C .error-icon{fill:#552222;}#mermaid-svg-2yrN8cdmZogIsH0C .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2yrN8cdmZogIsH0C .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-2yrN8cdmZogIsH0C .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2yrN8cdmZogIsH0C .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2yrN8cdmZogIsH0C .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-2yrN8cdmZogIsH0C .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2yrN8cdmZogIsH0C .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2yrN8cdmZogIsH0C .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2yrN8cdmZogIsH0C .marker.cross{stroke:#333333;}#mermaid-svg-2yrN8cdmZogIsH0C svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2yrN8cdmZogIsH0C p{margin:0;}#mermaid-svg-2yrN8cdmZogIsH0C .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-2yrN8cdmZogIsH0C .cluster-label text{fill:#333;}#mermaid-svg-2yrN8cdmZogIsH0C .cluster-label span{color:#333;}#mermaid-svg-2yrN8cdmZogIsH0C .cluster-label span p{background-color:transparent;}#mermaid-svg-2yrN8cdmZogIsH0C .label text,#mermaid-svg-2yrN8cdmZogIsH0C span{fill:#333;color:#333;}#mermaid-svg-2yrN8cdmZogIsH0C .node rect,#mermaid-svg-2yrN8cdmZogIsH0C .node circle,#mermaid-svg-2yrN8cdmZogIsH0C .node ellipse,#mermaid-svg-2yrN8cdmZogIsH0C .node polygon,#mermaid-svg-2yrN8cdmZogIsH0C .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2yrN8cdmZogIsH0C .rough-node .label text,#mermaid-svg-2yrN8cdmZogIsH0C .node .label text,#mermaid-svg-2yrN8cdmZogIsH0C .image-shape .label,#mermaid-svg-2yrN8cdmZogIsH0C .icon-shape .label{text-anchor:middle;}#mermaid-svg-2yrN8cdmZogIsH0C .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-2yrN8cdmZogIsH0C .rough-node .label,#mermaid-svg-2yrN8cdmZogIsH0C .node .label,#mermaid-svg-2yrN8cdmZogIsH0C .image-shape .label,#mermaid-svg-2yrN8cdmZogIsH0C .icon-shape .label{text-align:center;}#mermaid-svg-2yrN8cdmZogIsH0C .node.clickable{cursor:pointer;}#mermaid-svg-2yrN8cdmZogIsH0C .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-2yrN8cdmZogIsH0C .arrowheadPath{fill:#333333;}#mermaid-svg-2yrN8cdmZogIsH0C .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2yrN8cdmZogIsH0C .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2yrN8cdmZogIsH0C .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2yrN8cdmZogIsH0C .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-2yrN8cdmZogIsH0C .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2yrN8cdmZogIsH0C .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-2yrN8cdmZogIsH0C .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2yrN8cdmZogIsH0C .cluster text{fill:#333;}#mermaid-svg-2yrN8cdmZogIsH0C .cluster span{color:#333;}#mermaid-svg-2yrN8cdmZogIsH0C div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-2yrN8cdmZogIsH0C .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-2yrN8cdmZogIsH0C rect.text{fill:none;stroke-width:0;}#mermaid-svg-2yrN8cdmZogIsH0C .icon-shape,#mermaid-svg-2yrN8cdmZogIsH0C .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2yrN8cdmZogIsH0C .icon-shape p,#mermaid-svg-2yrN8cdmZogIsH0C .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-2yrN8cdmZogIsH0C .icon-shape .label rect,#mermaid-svg-2yrN8cdmZogIsH0C .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2yrN8cdmZogIsH0C .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-2yrN8cdmZogIsH0C .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-2yrN8cdmZogIsH0C :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 开始入库
读取文件/内容
按类型解析
清洗文档
段落分块
生成向量(Embedding)
写入Qdrant(集合: AIKmss-{id})
更新导入状态
完成
图表来源
- AIKmssService.cs:1-449(file://Kevin/Application/Services/AI/AIKmssService.cs#L1-L449)
- TAIKmss.cs:1-47(file://Kevin/Domain/Entities/AI/TAIKmss.cs#L1-L47)
章节来源
- AIKmssService.cs:1-449(file://Kevin/Application/Services/AI/AIKmssService.cs#L1-L449)
- TAIKmss.cs:1-47(file://Kevin/Domain/Entities/AI/TAIKmss.cs#L1-L47)
模型配置与管理(AIModelsService + TAIModels)
- 功能:分页查询、详情获取、新增/编辑、删除;支持按类型筛选。
- 字段:AI类型、模型类型(聊天/嵌入等)、端点、模型名、密钥、部署名、Embedding维度。
- 权限:支持租户隔离与数据权限控制。
#mermaid-svg-SyeKhp5QJp4VcrFI{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-SyeKhp5QJp4VcrFI .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-SyeKhp5QJp4VcrFI .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-SyeKhp5QJp4VcrFI .error-icon{fill:#552222;}#mermaid-svg-SyeKhp5QJp4VcrFI .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-SyeKhp5QJp4VcrFI .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-SyeKhp5QJp4VcrFI .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-SyeKhp5QJp4VcrFI .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-SyeKhp5QJp4VcrFI .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-SyeKhp5QJp4VcrFI .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-SyeKhp5QJp4VcrFI .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-SyeKhp5QJp4VcrFI .marker{fill:#333333;stroke:#333333;}#mermaid-svg-SyeKhp5QJp4VcrFI .marker.cross{stroke:#333333;}#mermaid-svg-SyeKhp5QJp4VcrFI svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-SyeKhp5QJp4VcrFI p{margin:0;}#mermaid-svg-SyeKhp5QJp4VcrFI g.classGroup text{fill:#9370DB;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-SyeKhp5QJp4VcrFI g.classGroup text .title{font-weight:bolder;}#mermaid-svg-SyeKhp5QJp4VcrFI .cluster-label text{fill:#333;}#mermaid-svg-SyeKhp5QJp4VcrFI .cluster-label span{color:#333;}#mermaid-svg-SyeKhp5QJp4VcrFI .cluster-label span p{background-color:transparent;}#mermaid-svg-SyeKhp5QJp4VcrFI .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-SyeKhp5QJp4VcrFI .cluster text{fill:#333;}#mermaid-svg-SyeKhp5QJp4VcrFI .cluster span{color:#333;}#mermaid-svg-SyeKhp5QJp4VcrFI .nodeLabel,#mermaid-svg-SyeKhp5QJp4VcrFI .edgeLabel{color:#131300;}#mermaid-svg-SyeKhp5QJp4VcrFI .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-SyeKhp5QJp4VcrFI .label text{fill:#131300;}#mermaid-svg-SyeKhp5QJp4VcrFI .labelBkg{background:#ECECFF;}#mermaid-svg-SyeKhp5QJp4VcrFI .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-SyeKhp5QJp4VcrFI .classTitle{font-weight:bolder;}#mermaid-svg-SyeKhp5QJp4VcrFI .node rect,#mermaid-svg-SyeKhp5QJp4VcrFI .node circle,#mermaid-svg-SyeKhp5QJp4VcrFI .node ellipse,#mermaid-svg-SyeKhp5QJp4VcrFI .node polygon,#mermaid-svg-SyeKhp5QJp4VcrFI .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-SyeKhp5QJp4VcrFI .divider{stroke:#9370DB;stroke-width:1;}#mermaid-svg-SyeKhp5QJp4VcrFI g.clickable{cursor:pointer;}#mermaid-svg-SyeKhp5QJp4VcrFI g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-SyeKhp5QJp4VcrFI g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-SyeKhp5QJp4VcrFI .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-SyeKhp5QJp4VcrFI .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-SyeKhp5QJp4VcrFI .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-SyeKhp5QJp4VcrFI .dashed-line{stroke-dasharray:3;}#mermaid-svg-SyeKhp5QJp4VcrFI .dotted-line{stroke-dasharray:1 2;}#mermaid-svg-SyeKhp5QJp4VcrFI #compositionStart,#mermaid-svg-SyeKhp5QJp4VcrFI .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-SyeKhp5QJp4VcrFI #compositionEnd,#mermaid-svg-SyeKhp5QJp4VcrFI .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-SyeKhp5QJp4VcrFI #dependencyStart,#mermaid-svg-SyeKhp5QJp4VcrFI .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-SyeKhp5QJp4VcrFI #dependencyStart,#mermaid-svg-SyeKhp5QJp4VcrFI .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-SyeKhp5QJp4VcrFI #extensionStart,#mermaid-svg-SyeKhp5QJp4VcrFI .extension{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-SyeKhp5QJp4VcrFI #extensionEnd,#mermaid-svg-SyeKhp5QJp4VcrFI .extension{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-SyeKhp5QJp4VcrFI #aggregationStart,#mermaid-svg-SyeKhp5QJp4VcrFI .aggregation{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-SyeKhp5QJp4VcrFI #aggregationEnd,#mermaid-svg-SyeKhp5QJp4VcrFI .aggregation{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-SyeKhp5QJp4VcrFI #lollipopStart,#mermaid-svg-SyeKhp5QJp4VcrFI .lollipop{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-SyeKhp5QJp4VcrFI #lollipopEnd,#mermaid-svg-SyeKhp5QJp4VcrFI .lollipop{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-SyeKhp5QJp4VcrFI .edgeTerminals{font-size:11px;line-height:initial;}#mermaid-svg-SyeKhp5QJp4VcrFI .classTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-SyeKhp5QJp4VcrFI .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-SyeKhp5QJp4VcrFI .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-SyeKhp5QJp4VcrFI :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} "CRUD"
TAIModels
+AIType AIType
+AIModelType AIModelType
+string EndPoint
+string ModelName
+string ModelKey
+string? ModelDescription
+int EmbeddingValueSize
AIModelsService
+GetPageData(dtoPage) : dtoPageData
+GetDetails(id) : AIModelsDto
+AddEdit(dto) : bool
+Delete(id) : bool
图表来源
- TAIModels.cs:1-55(file://Kevin/Domain/Entities/AI/TAIModels.cs#L1-L55)
- AIModelsService.cs:1-160(file://Kevin/Application/Services/AI/AIModelsService.cs#L1-L160)
章节来源
- AIModelsService.cs:1-160(file://Kevin/Application/Services/AI/AIModelsService.cs#L1-L160)
- TAIModels.cs:1-55(file://Kevin/Domain/Entities/AI/TAIModels.cs#L1-L55)
技能与工具管理(AISkillToolManagementService + TAISkillToolManagement)
- 能力:分页查询、按类型筛选(Skill/Tool/MCP)、唯一性校验、启用/停用、系统内置保护。
- 技能包:上传Zip后解压至磁盘目录,便于运行时加载。
- MCP集成:支持MCP地址、类型、Headers、命令、参数与环境变量配置。
#mermaid-svg-ghk8gNGHisOu5kMt{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ghk8gNGHisOu5kMt .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ghk8gNGHisOu5kMt .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ghk8gNGHisOu5kMt .error-icon{fill:#552222;}#mermaid-svg-ghk8gNGHisOu5kMt .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ghk8gNGHisOu5kMt .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ghk8gNGHisOu5kMt .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ghk8gNGHisOu5kMt .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ghk8gNGHisOu5kMt .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ghk8gNGHisOu5kMt .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ghk8gNGHisOu5kMt .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ghk8gNGHisOu5kMt .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ghk8gNGHisOu5kMt .marker.cross{stroke:#333333;}#mermaid-svg-ghk8gNGHisOu5kMt svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ghk8gNGHisOu5kMt p{margin:0;}#mermaid-svg-ghk8gNGHisOu5kMt g.classGroup text{fill:#9370DB;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-ghk8gNGHisOu5kMt g.classGroup text .title{font-weight:bolder;}#mermaid-svg-ghk8gNGHisOu5kMt .cluster-label text{fill:#333;}#mermaid-svg-ghk8gNGHisOu5kMt .cluster-label span{color:#333;}#mermaid-svg-ghk8gNGHisOu5kMt .cluster-label span p{background-color:transparent;}#mermaid-svg-ghk8gNGHisOu5kMt .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ghk8gNGHisOu5kMt .cluster text{fill:#333;}#mermaid-svg-ghk8gNGHisOu5kMt .cluster span{color:#333;}#mermaid-svg-ghk8gNGHisOu5kMt .nodeLabel,#mermaid-svg-ghk8gNGHisOu5kMt .edgeLabel{color:#131300;}#mermaid-svg-ghk8gNGHisOu5kMt .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-ghk8gNGHisOu5kMt .label text{fill:#131300;}#mermaid-svg-ghk8gNGHisOu5kMt .labelBkg{background:#ECECFF;}#mermaid-svg-ghk8gNGHisOu5kMt .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-ghk8gNGHisOu5kMt .classTitle{font-weight:bolder;}#mermaid-svg-ghk8gNGHisOu5kMt .node rect,#mermaid-svg-ghk8gNGHisOu5kMt .node circle,#mermaid-svg-ghk8gNGHisOu5kMt .node ellipse,#mermaid-svg-ghk8gNGHisOu5kMt .node polygon,#mermaid-svg-ghk8gNGHisOu5kMt .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ghk8gNGHisOu5kMt .divider{stroke:#9370DB;stroke-width:1;}#mermaid-svg-ghk8gNGHisOu5kMt g.clickable{cursor:pointer;}#mermaid-svg-ghk8gNGHisOu5kMt g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-ghk8gNGHisOu5kMt g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-ghk8gNGHisOu5kMt .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-ghk8gNGHisOu5kMt .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-ghk8gNGHisOu5kMt .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-ghk8gNGHisOu5kMt .dashed-line{stroke-dasharray:3;}#mermaid-svg-ghk8gNGHisOu5kMt .dotted-line{stroke-dasharray:1 2;}#mermaid-svg-ghk8gNGHisOu5kMt #compositionStart,#mermaid-svg-ghk8gNGHisOu5kMt .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-ghk8gNGHisOu5kMt #compositionEnd,#mermaid-svg-ghk8gNGHisOu5kMt .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-ghk8gNGHisOu5kMt #dependencyStart,#mermaid-svg-ghk8gNGHisOu5kMt .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-ghk8gNGHisOu5kMt #dependencyStart,#mermaid-svg-ghk8gNGHisOu5kMt .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-ghk8gNGHisOu5kMt #extensionStart,#mermaid-svg-ghk8gNGHisOu5kMt .extension{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-ghk8gNGHisOu5kMt #extensionEnd,#mermaid-svg-ghk8gNGHisOu5kMt .extension{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-ghk8gNGHisOu5kMt #aggregationStart,#mermaid-svg-ghk8gNGHisOu5kMt .aggregation{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-ghk8gNGHisOu5kMt #aggregationEnd,#mermaid-svg-ghk8gNGHisOu5kMt .aggregation{fill:transparent!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-ghk8gNGHisOu5kMt #lollipopStart,#mermaid-svg-ghk8gNGHisOu5kMt .lollipop{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-ghk8gNGHisOu5kMt #lollipopEnd,#mermaid-svg-ghk8gNGHisOu5kMt .lollipop{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-ghk8gNGHisOu5kMt .edgeTerminals{font-size:11px;line-height:initial;}#mermaid-svg-ghk8gNGHisOu5kMt .classTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ghk8gNGHisOu5kMt .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ghk8gNGHisOu5kMt .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ghk8gNGHisOu5kMt :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} "CRUD"
TAISkillToolManagement
+string Name
+string? ClassMethod
+string? Description
+bool IsSystem
+InActiveStatusEnums ActiveStatus
+AISkillToolTypeEnums SkillToolType
+string? McpUrl
+string? McpType
+string? McpHeaders
+string? McpCommand
+string? McpArguments
+string? McpEnvironment
AISkillToolManagementService
+GetPageData(dto) : dtoPageData
+AddEdit(dto) : bool
+Delete(id) : bool
+GetAllSkills() : List
+GetAllTools() : List
+GetAllMcps() : List
图表来源
- TAISkillToolManagement.cs:1-93(file://Kevin/Domain/Entities/AI/TAISkillToolManagement.cs#L1-L93)
- AISkillToolManagementService.cs:1-254(file://Kevin/Application/Services/AI/AISkillToolManagementService.cs#L1-L254)
章节来源
- AISkillToolManagementService.cs:1-254(file://Kevin/Application/Services/AI/AISkillToolManagementService.cs#L1-L254)
- TAISkillToolManagement.cs:1-93(file://Kevin/Domain/Entities/AI/TAISkillToolManagement.cs#L1-L93)
依赖关系分析
- AIAgentService依赖AISetting进行连接与行为配置,并通过服务注册扩展注入工具服务。
- RAGService依赖IRAGStorageService与可选的重排序服务,解耦存储实现。
- AIKmssService依赖AIModelsService(选择嵌入模型)、OllamaApiService(嵌入)、IRAGStorageService(Qdrant)与文件服务。
- 领域实体作为数据契约被服务层引用,保证一致性。
#mermaid-svg-SWcjka6pX4cC7B5B{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-SWcjka6pX4cC7B5B .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-SWcjka6pX4cC7B5B .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-SWcjka6pX4cC7B5B .error-icon{fill:#552222;}#mermaid-svg-SWcjka6pX4cC7B5B .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-SWcjka6pX4cC7B5B .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-SWcjka6pX4cC7B5B .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-SWcjka6pX4cC7B5B .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-SWcjka6pX4cC7B5B .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-SWcjka6pX4cC7B5B .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-SWcjka6pX4cC7B5B .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-SWcjka6pX4cC7B5B .marker{fill:#333333;stroke:#333333;}#mermaid-svg-SWcjka6pX4cC7B5B .marker.cross{stroke:#333333;}#mermaid-svg-SWcjka6pX4cC7B5B svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-SWcjka6pX4cC7B5B p{margin:0;}#mermaid-svg-SWcjka6pX4cC7B5B .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-SWcjka6pX4cC7B5B .cluster-label text{fill:#333;}#mermaid-svg-SWcjka6pX4cC7B5B .cluster-label span{color:#333;}#mermaid-svg-SWcjka6pX4cC7B5B .cluster-label span p{background-color:transparent;}#mermaid-svg-SWcjka6pX4cC7B5B .label text,#mermaid-svg-SWcjka6pX4cC7B5B span{fill:#333;color:#333;}#mermaid-svg-SWcjka6pX4cC7B5B .node rect,#mermaid-svg-SWcjka6pX4cC7B5B .node circle,#mermaid-svg-SWcjka6pX4cC7B5B .node ellipse,#mermaid-svg-SWcjka6pX4cC7B5B .node polygon,#mermaid-svg-SWcjka6pX4cC7B5B .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-SWcjka6pX4cC7B5B .rough-node .label text,#mermaid-svg-SWcjka6pX4cC7B5B .node .label text,#mermaid-svg-SWcjka6pX4cC7B5B .image-shape .label,#mermaid-svg-SWcjka6pX4cC7B5B .icon-shape .label{text-anchor:middle;}#mermaid-svg-SWcjka6pX4cC7B5B .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-SWcjka6pX4cC7B5B .rough-node .label,#mermaid-svg-SWcjka6pX4cC7B5B .node .label,#mermaid-svg-SWcjka6pX4cC7B5B .image-shape .label,#mermaid-svg-SWcjka6pX4cC7B5B .icon-shape .label{text-align:center;}#mermaid-svg-SWcjka6pX4cC7B5B .node.clickable{cursor:pointer;}#mermaid-svg-SWcjka6pX4cC7B5B .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-SWcjka6pX4cC7B5B .arrowheadPath{fill:#333333;}#mermaid-svg-SWcjka6pX4cC7B5B .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-SWcjka6pX4cC7B5B .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-SWcjka6pX4cC7B5B .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SWcjka6pX4cC7B5B .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-SWcjka6pX4cC7B5B .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SWcjka6pX4cC7B5B .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-SWcjka6pX4cC7B5B .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-SWcjka6pX4cC7B5B .cluster text{fill:#333;}#mermaid-svg-SWcjka6pX4cC7B5B .cluster span{color:#333;}#mermaid-svg-SWcjka6pX4cC7B5B div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-SWcjka6pX4cC7B5B .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-SWcjka6pX4cC7B5B rect.text{fill:none;stroke-width:0;}#mermaid-svg-SWcjka6pX4cC7B5B .icon-shape,#mermaid-svg-SWcjka6pX4cC7B5B .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SWcjka6pX4cC7B5B .icon-shape p,#mermaid-svg-SWcjka6pX4cC7B5B .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-SWcjka6pX4cC7B5B .icon-shape .label rect,#mermaid-svg-SWcjka6pX4cC7B5B .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SWcjka6pX4cC7B5B .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-SWcjka6pX4cC7B5B .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-SWcjka6pX4cC7B5B :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} AIAgentService
AISetting
工具服务(注册扩展)
RAGService
IRAGStorageService
AliRerankService
AIKmssService
AIModelsService
OllamaApiService
图表来源
- ServiceCollectionExtensions.cs:1-22(file://Kevin/kevin.Module/kevin.AI.AgentFramework/ServiceCollectionExtensions.cs#L1-L22)
- RAGService.cs:1-81(file://Kevin/kevin.Module/kevin.RAG/RAGService.cs#L1-L81)
- AIKmssService.cs:1-449(file://Kevin/Application/Services/AI/AIKmssService.cs#L1-L449)
章节来源
- ServiceCollectionExtensions.cs:1-22(file://Kevin/kevin.Module/kevin.AI.AgentFramework/ServiceCollectionExtensions.cs#L1-L22)
- RAGService.cs:1-81(file://Kevin/kevin.Module/kevin.RAG/RAGService.cs#L1-L81)
- AIKmssService.cs:1-449(file://Kevin/Application/Services/AI/AIKmssService.cs#L1-L449)
性能考量
- 流式输出与增量渲染:优先使用流式模式降低首字延迟,结合工具调用回调与思考过程提取提升交互体验。
- 重试与超时:合理设置最大重试次数与网络超时,避免瞬时抖动导致失败。
- 检索规模控制:RAG检索先扩大候选集(如topK*10)再重排序,减少漏检;同时设置相似度阈值过滤低质片段。
- 分块策略:依据文档类型与语义调整段落长度与重叠标记数,平衡召回与上下文窗口限制。
- 并发入库:使用分布式锁避免重复处理,批量写入向量库减少往返开销。
- 资源隔离:不同知识库使用独立集合命名空间,避免冲突与热点。
本节为通用指导,不直接分析具体文件
故障排查指南
- 流式异常回退:当流式调用抛出异常时,服务会回退为非流式调用并重试,检查日志定位网络或模型端问题。
- 思考过程为空:若未提取到reasoning字段,检查原始响应结构与字段名兼容性。
- 重排序失败:确认重排序服务URL、模型与鉴权头配置正确,捕获错误信息并提示。
- 知识库入库失败:查看导入状态与错误信息,核对文件类型、解析器与嵌入模型配置;必要时重新触发处理。
- 技能工具不可用:检查启用状态、系统内置保护与MCP参数完整性。
章节来源
- AIAgentService.cs:1-491(file://Kevin/kevin.Module/kevin.AI.AgentFramework/AIAgentService.cs#L1-L491)
- AliRerankService.cs:1-99(file://Kevin/kevin.Module/kevin.RAG/Rerank/AliRerankService.cs#L1-L99)
- AIKmssService.cs:1-449(file://Kevin/Application/Services/AI/AIKmssService.cs#L1-L449)
结论
NetCoreKevin AI智能体系统以AgentFramework为核心,结合RAG检索增强与知识库索引,形成从"问题→检索→重排→推理→工具"的闭环链路。通过灵活的模型配置、完善的技能工具管理与稳健的流式处理能力,满足企业级AI应用的多场景需求。建议在生产环境结合重试、超时、阈值与分块策略调优,以获得稳定高效的AI服务能力。
本节为总结,不直接分析具体文件
附录
- 自定义工具开发指南
- 在工具服务注册扩展中声明工具服务类型,确保依赖注入可用。
- 遵循统一接口约定,实现工具方法签名与参数校验。
- 通过AIAgent的工具自动审批规则控制执行策略,注意安全风险。
- 技能管理配置
- 上传技能Zip包并解压至指定目录,确保运行时可加载。
- 配置MCP参数(地址、类型、Headers、命令、参数、环境变量)以对接外部能力。
- 实际应用场景与最佳实践
- 客服问答:RAG检索企业内部文档,重排序提升准确性,Agent调用查询工具补充实时数据。
- 代码助手:结合代码仓库与文档,利用工具执行编译/测试,流式反馈逐步生成代码。
- 数据分析:读取Excel/CSV,生成洞察报告,必要时调用计算工具进行指标聚合。
本节为概念性内容,不直接分析具体文件