.Net C# AI智能体开发-AI智能体

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)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向 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,生成洞察报告,必要时调用计算工具进行指标聚合。

本节为概念性内容,不直接分析具体文件

相关推荐
Allen_LVyingbo42 分钟前
医疗AI可扩展网格信息系统中网格计算技术的智能优化
大数据·人工智能·python·算法·机器学习·django·健康医疗
MNLoser43 分钟前
AI agent开发——LangGraph接入持久化
linux·人工智能·windows·python
民乐团扒谱机1 小时前
【读论文】2005 一种旋律转录的分类方法A classification approach to melody transcription[C]
人工智能·分类·数据挖掘
程序员-李俞1 小时前
Coze 工作流调用异步 HTTP API 完整教程:任务 ID、循环轮询、状态判断与结果 URL 提取
网络·人工智能·网络协议·http·aigc·ai编程·ai写作
柠檬07111 小时前
图像亮暗不均匀,如何去除背景或者怎么处理可以让图像暗的地方亮一些,亮的地方暗一些
人工智能·opencv·计算机视觉
咕泡科技1 小时前
AI 前沿速递:OpenAI 开源 Codex 重构编程生态,人形机器人破纪录、迈入消费量产时代!
人工智能·机器人·开源·wrc2026·人形机器人运动会·启元机器人·辉羲智能
熊猫_豆豆1 小时前
黑洞的粒子产生(霍金1975年论文)第二部分
人工智能·数学·算法·机器学习·量子力学·大学物理·黑洞
jay神1 小时前
本科深度学习需要从零开始训练模型吗?
人工智能·深度学习·算法·机器学习·计算机视觉