[控场AI]
产品DSupport项目

DSupport

一个基于Kotlin Multiplatform开发的AI客服系统开源项目,不使用Agent框架,从零手写RAG、MCP与多智能体编排,采用Clean Architecture将模型与确定性代码严格分离

时间轴 (近 90 天)

10月18日

DSupport 是一个使用 Kotlin Multiplatform 构建的 AI 客服项目,由开发者 Diego Ferreira Caetano 创建,项目从零手写 RAG、MCP 与多智能体编排,不使用任何 Agent 框架。

待验证50%
10月18日

DSupport 的架构将职责划分为:模型(非确定性)负责理解自然语言、决定调用哪个工具、起草回复、在专家之间路由;代码(确定性)负责校验类型与规则、隐藏敏感数据、拦截不可放行的操作、运行离线测试。

待验证50%
10月18日

DSupport 中 5 个角色使用模型,14 个组件是纯代码,后者包括护栏、验证器、TF-IDF 检索、工具、MCP 传输、追踪、评估打分等。

待验证50%
10月18日

DSupport 采用 Clean Architecture 与 Ports & Adapters,模块包括 contract、core、adapters、mcp-orders、mcp-tickets、cli、server、app、eval,依赖方向只向内。

待验证50%
10月18日

DSupport 的 core 模块通过 LlmClient 接口认知模型,该接口包含 next(返回文本或工具调用请求)与 structured(强制模型填充 JSON 表单)两个方法,更换 Claude 只需写一个新适配器。

待验证50%
10月18日

DSupport 拥有 380 多个测试,全部离线运行,没有一个测试消耗 API 额度。

待验证50%
10月18日

DSupport 的智能体循环使用 repeat(maxTurns) 设置轮次上限,防止模型无限调用;达到上限时由代码返回升级人工的消息,而非由模型自己决定。

待验证50%
10月18日

DSupport 的工具调用通过 async + awaitAll 并行执行,结果按请求顺序回填,因为模型 API 要求对应关系。

待验证50%
10月18日

DSupport 的 RAG 实现按段落切分文章,使用 TF-IDF 做词权重向量化,可选接入 VoyageEmbedder 做语义检索,SearchKbTool 中的相关性截断值为 minScore = 0.25。

待验证50%
10月18日

在 DSupport 中,当 RAG 过滤后结果为空时,工具返回 nothing_relevant_found,知识专家被要求回答 NO_ANSWER 而非编造答案。

待验证50%

还有 5 条时间轴事件

全部知识事实 (15)

待验证

DSupport 是一个使用 Kotlin Multiplatform 构建的 AI 客服项目,由开发者 Diego Ferreira Caetano 创建,项目从零手写 RAG、MCP 与多智能体编排,不使用任何 Agent 框架。

50%
待验证

DSupport 的架构将职责划分为:模型(非确定性)负责理解自然语言、决定调用哪个工具、起草回复、在专家之间路由;代码(确定性)负责校验类型与规则、隐藏敏感数据、拦截不可放行的操作、运行离线测试。

50%
待验证

DSupport 中 5 个角色使用模型,14 个组件是纯代码,后者包括护栏、验证器、TF-IDF 检索、工具、MCP 传输、追踪、评估打分等。

50%
待验证

DSupport 采用 Clean Architecture 与 Ports & Adapters,模块包括 contract、core、adapters、mcp-orders、mcp-tickets、cli、server、app、eval,依赖方向只向内。

50%
待验证

DSupport 的 core 模块通过 LlmClient 接口认知模型,该接口包含 next(返回文本或工具调用请求)与 structured(强制模型填充 JSON 表单)两个方法,更换 Claude 只需写一个新适配器。

50%
待验证

DSupport 拥有 380 多个测试,全部离线运行,没有一个测试消耗 API 额度。

50%
待验证

DSupport 的智能体循环使用 repeat(maxTurns) 设置轮次上限,防止模型无限调用;达到上限时由代码返回升级人工的消息,而非由模型自己决定。

50%
待验证

DSupport 的工具调用通过 async + awaitAll 并行执行,结果按请求顺序回填,因为模型 API 要求对应关系。

50%
待验证

DSupport 的 RAG 实现按段落切分文章,使用 TF-IDF 做词权重向量化,可选接入 VoyageEmbedder 做语义检索,SearchKbTool 中的相关性截断值为 minScore = 0.25。

50%
待验证

在 DSupport 中,当 RAG 过滤后结果为空时,工具返回 nothing_relevant_found,知识专家被要求回答 NO_ANSWER 而非编造答案。

50%
待验证

DSupport 的 MCP 部分基于官方 Kotlin SDK,通过 stdio 运行,客户端把服务端作为子进程启动,会话消息为 initialize、tools/list、tools/call。

50%
待验证

在 MCP 的 stdio 模式下,stdout 是协议通道本身,任何非协议内容混入都会导致对端解析失败,因此 DSupport 的服务端把 System.out 重定向到了 System.err。

50%
待验证

DSupport 的编排者不持有任何数据工具,只负责判断谁处理哪部分并始终委派给专家;若编排者持有工具,DSupportAssembly 会直接装配失败,用代码强制架构约束。

50%
待验证

DSupport 中每个专家被包装成 SubAgentTool,对编排者而言就是一个普通工具;SubAgentTool 接收的是 agent 工厂而非 agent 实例,因为每个 agent 持有自己的历史,并行调用不能共享实例。

50%
待验证

DSupport 的护栏是运行在智能体循环三个固定点的确定性代码,通过 Hook 接口暴露 beforeTool、afterTool、beforeFinal 三个切面,每个切面可以允许、拒绝或修改。

50%

来源文章