说实话,在动手做 KikoAI 微应用之前,我电脑桌面活像一个 AI 工具集散地:浏览器开着三四个对话窗口,本地还跑着一个大模型,终端里挂着几个自动化脚本,备忘录里躺着十几条提示词。每天在工具之间来回切换光切换成本就吃掉一大截注意力——写周报要用 A 工具,回邮件切 B 工具,整理会议纪要又得换 C 工具。最烦的是每个工具都不记得我在别的工具里说过什么,同一个背景我要描述五六遍。后面我下定决心把这些乱七八糟的东西收敛成一个真正可用的 AI 个人工作台,这就是 KikoAI 微应用的由来。
这篇文章我想完整聊聊这个项目从想法到落地的全过程:为什么要做个人工作台、架构上怎么设计、为什么我坚持把 Python 应用融入 Spring Cloud Alibaba 微服务体系、AI Agent 引擎怎么设计、模型部署和推理优化怎么取舍,以及我在真机环境里踩过的一堆坑。内容偏技术向,但也照顾非后端背景的读者,涉及关键选型的地方我都会解释背后的理由。如果你是那种想给自己搭一套私有 AI 工作台的开发者,或者正在做类似微应用项目的技术负责人,这篇应该能帮你少走不少弯路。
1. AI 工作台的现实困境与破局思路:KikoAI 到底要解决什么问题
先说清楚我对"个人工作台"的定义。它不是一个聊天网页,也不是一个提示词收藏夹,而是把对话、任务、知识、工具、模型调度统一编排在一个入口里的产品形态。KikoAI 微应用的目标是让 AI 能力像操作系统里的"工作台"一样存在:你把这个工作台打开,所有跟 AI 相关的日常操作都在这里完成,所有上下文都集中管理,所有重复性工作都能被自动触发或半自动执行。
1.1 我遇到的真实痛点:工具碎片化、上下文真空、重复劳动
我把自己的日常工作梳理了一遍,发现浪费主要来自三个地方。
第一是工具碎片化。对话用 A,写作用 B,代码生成用 C,画图用 D,语音转录用 E。这些东西互不相通。我必须记住每个工具的特点,然后针对每个任务挑选合适的工具,这本身就是一个持续的精神负担。就像你的办公桌上摆了十台不同功能的机器,每台机器只能干一件事,干完还得把半成品搬到下一台。
第二是上下文真空。AI 对话服务天然是无状态的,每次新开会话都是"从零开始",我每次都要把项目背景、业务规则、格式要求从头交代一遍。有些工具支持自定义指令,但指令是死的,没法根据当前任务动态调整,更看不到我之前在其他工具里已经讨论过的内容。三个月前讨论过的技术方案,想找回来很难。
第三是重复劳动。每周写周报、每月做月度总结、每次会议后整理纪要、定期巡检系统日志,这些流程高度相似,我却要一遍一遍手动执行:复制数据、粘贴到对话窗口、等待生成、再手工调整格式。这些时间本可以省下来做真正的分析、决策和创造性工作。
1.2 KikoAI 的破局思路:把 AI 能力体系化、状态化、可编排
针对上面三个痛点,我给 KikoAI 定了几条设计原则。
第一,统一入口,服务化访问。工作台背后是一组微服务,前端只有一个界面。所有模型请求都走同一个模型网关,用户不关心也不应该关心背后接的是哪个大模型。
第二,状态化上下文。每一次对 AI 的请求都绑定到"会话"和"工作空间"两个维度上,会话提供连续对话能力,工作空间提供项目级的知识与文件上下文。这样用户上午和大模型讨论过的架构,下午直接说"按上午方案生成实施计划",模型能接上语义。
第三,工作流可编排。把常见重复动作沉淀为"模板"或"工作流",比如"每周五拉取本周提交记录并生成周报"。工作流由 Agent 引擎驱动,用户只需要审核生成结果,不再手动执行。
第四,私有部署优先。对话记录、文件、知识库都在自己的服务器上。这里不是说不信任云服务,而是有些事情放在本地更安心,比如内部技术方案、个人笔记、未公开的项目计划。
这套思路做出来之后,KikoAI 从"又一个聊天工具"变成了一个真正能扛日常工作的基础设施。下面说技术选型。
2. 技术选型:为什么把 Python 服务挂进 Spring Cloud Alibaba 而不是另起炉灶
很多做 AI 应用的朋友一上来就选纯 Python 技术栈,FastAPI + LangChain 一把梭,单独跑一个服务。这没问题,如果你只是做一个 Demo 或者单机脚本。但如果你要做的是一個长期演进、要对接已有系统、要支持多人使用的个人工作台,问题就复杂了。
2.1 我的背景和约束:已有 Java 微服务体系的现实
我在做的 KikoAI,一开始就不是一个孤立工具,它需要和日历、邮件、GitLab、监控系统、笔记系统交互。这些周边能力在我现有环境里已经有一套 Spring Cloud Alibaba 微服务体系在支撑:Nacos 做注册和配置管理,Spring Cloud Gateway 做统一入口,RocketMQ 做异步消息,Sentinel 做限流。这套体系已经稳定跑了很久,里面有各种经过验证的组件和运维经验。
如果我把 Python 服务完全独立在外,会出现两个问题:一是它和现有体系之间没有统一的注册发现和配置管理,服务地址要硬编码,密钥管理处处开洞;二是没有统一网关,鉴权、限流、审计都做不全,后期很难维护。
反过来,如果把 AI 能力强行用 Java 重写一遍,那就是灾难。整个 AI 生态的成熟库几乎都在 Python 这边:Transformers、LangChain、LlamaIndex、vLLM、FastAPI、sentence-transformers。用 Java 调这些生态,要么套一层 HTTP 壳,要么自己实现,成本高得离谱。
所以我的选择是:让 Python 应用以"一等公民"的身份融入 Spring Cloud Alibaba 微服务体系,Java 服务负责稳定与治理,Python 服务负责智能与推理。这是一个混合架构,但它是我在真实约束下能找到的最优解。
2.2 Python 融入微服务体系的落地方式
具体来说,KikoAI 里的 Python 服务是这样接入 Nacos 和网关的。
Nacos 服务注册。我使用 nacos-sdk-python 在服务启动时向 Nacos 注册实例,注册时指定服务名(比如 kiko-agent-engine)、IP、端口。为了让 Spring Cloud Gateway 能正确处理转发,服务名和 Java 服务保持相同的命名规范,都是"kiko-"开头,后面跟业务模块名。这样运维同学看服务列表的时候能一目了然。
健康检查。Nacos 默认会用 HTTP 请求来探测实例是否存活。Python 服务里我加了两个端点:/health返回 200 和{"status":"UP"},/info返回服务版本和启动时间。这两个端点的语义和 Spring Boot Actuator 保持一致,运维平台不需要额外适配。
配置中心。模型参数(模型名称、temperature、max_tokens、top_p)不要写死在代码里,推送到 Nacos 配置中心,Python 服务启动时拉取。改成服务运行过程中动态刷新,需要加一个监听器。具体做法是 nacos-sdk-python 的 add_config_watcher,配置变更时回调里更新全局配置对象,这样改温度参数不用重启服务。
网关路由。Spring Cloud Gateway 按照 Path 前缀做转发:/api/agent/**转发到 kiko-agent-engine 的 Python 服务,/api/model/**转发到 kiko-model-gateway,/api/workspace/**转发到 Java 的 workspace 服务。鉴权在网关层统一做,Python 服务本身不关心用户是谁,只从 Header 里取用户 ID 和租户 ID。
2.3 为什么这个"混合架构"是合理的
我经常被问到:为什么不用纯 Java + Spring AI 取代 Python?或者为什么不用纯 Python + 独立网关?
答案是:Spring AI 固然在演进,但它在工具调用、模型抽象、向量检索这些方面的生态成熟度还赶不上 Python 生态。而独立的 Python 网关虽然轻量,但你要自己解决服务发现、配置中心、统一鉴权、链路追踪、灰度发布,这些正是 Spring Cloud Alibaba 最擅长的事。
我把决策依据总结成一个表,方便做技术选型时对照:
| 维度 | 纯 Python | 纯 Java | Python + Spring Cloud Alibaba |
|---|---|---|---|
| AI 生态支持 | 强 | 较弱 | 强 |
| 微服务治理 | 需自建 | 强 | 强 |
| 与现有体系融合 | 差 | 好 | 好 |
| 模型部署运维 | 灵活 | 一般 | 灵活 |
| 团队技术成本 | 对 Java 团队高 | 对 Java 团队低 | 初期略高,中长期稳 |
所以这个方案不是"技术洁癖"的选择,而是现有资产和 AI 生态之间的最佳交汇点。
3. KikoAI 核心架构:AI Agent 引擎与工作台服务的边界划分
架构这个东西,一旦拆分不好,后面每个功能迭代都会很难受。KikoAI 的核心拆分逻辑就一条:把"状态管理"和"智能推理"分离。状态管理是 Java 的强项,智能推理是 Python 的强项,两边不越界,这决定了服务边界的划分方式。
3.1 服务划分全景
KikoAI 一共拆了五个核心服务,外加一个前端应用。
| 服务名 | 语言 | 职责 |
|---|---|---|
| kiko-gateway | Java | 统一入口、鉴权、限流、请求审计、SSE 透传 |
| kiko-workspace | Java | 会话管理、任务管理、笔记、知识库元数据、文件索引 |
| kiko-agent-engine | Python | Agent 对话主流程、工具调用编排、记忆管理、上下文构建 |
| kiko-model-gateway | Python | 多模型路由、提示词模板管理、Token 预算控制、推理日志 |
| kiko-workflow | Java | 工作流定义、定时触发、任务分发、执行状态跟踪 |
有人会问:agent-engine 和 model-gateway 都是 Python 服务,为什么不合并成一个?我一开始确实是合并的,后来拆开了,原因有两个:一是一起上线时模型加载和 Agent 循环会相互干扰,模型推理响应慢会拖累整个 Agent 会话;二是模型网关本身是一个独立的可复用能力,后续别的服务也要直接调用模型,拆开之后各调各的。
3.2 AI Agent 引擎的工作机制
agent-engine 是整个工作台的"大脑"。它的核心流程是一个循环:
- 接收用户输入,从 workspace 服务拉取当前会话的历史消息、当前工作空间的文件摘要和知识库命中片段。
- 将上下文拼装成提示词,附带当前可用的工具列表,发送给 model-gateway。
- 模型返回两种可能:直接回答用户,或者返回一个工具调用请求(包括工具名和参数)。
- 如果是工具调用请求,agent-engine 执行工具(比如生成周报草稿、查询日历、提交代码审查),把执行结果追加到消息序列里。
- 再回到第 2 步,循环执行,直到模型认为可以给出最终回答为止。设置最大循环次数(我设的是 5 次),避免 Agent 陷入无限工具调用。
这整个机制的核心是模型的 function calling,或者叫 tool use。关键设计在于:工具的接入要标准化。我把所有工具都用 OpenAPI 风格暴露,注册信息包含三个部分:工具名称、描述、参数 Schema。模型根据描述决定要不要调用这个工具、怎么填参数。agent-engine 不关心工具内部实现,只负责根据注册表路由到具体执行器。
实践中特别重要的一点是:工具执行结果必须做截断和结构化。比如查询数据库返回了 100 行结果,不能全部塞回给模型,否则 token 直接爆掉。我会让工具返回一个摘要,并附带一个原结果在 workspace 中的引用,模型需要更多细节时可以发起第二次调用。
3.3 工作台业务数据模型设计
workspace 服务是"记忆中枢",数据模型要覆盖三类对象:
会话。包含会话 ID、关联工作空间 ID、消息列表(用户消息、助手消息、工具调用记录)。每条消息记录 token 数和模型版本,方便统计和复盘。
任务。工作流触发后产生一条任务记录,包含任务类型、状态、输入参数、输出结果、执行历史。状态机是 CREATED -> RUNNING -> FINISHED / FAILED,失败时要保留失败原因,方便重试。
知识库。按工作空间隔离,支持文档上传、分段、向量化索引和关键字索引。Agent 检索时会先查 workspace 的知识库接口,拿到 TopK 片段后再拼进上下文。
这三个对象之间通过外键关联。Agent 在执行任务时会把中间结果、工具调用详情全部写回 workspace,这样即使后面模型换了、工具改了,历史记录仍然可追溯。这一步很重要,我之前遇到过"Agent 说做了但实际上没做成"的尴尬情况,就是因为没记录工具调用的具体结果。
3.4 Agent 与工作流的协同
KikoAI 里工作流和 Agent 的协同是这样的:workflow 服务负责任务编排和触发,真正干活的是 agent-engine。比如"每周五下午 5 点生成周报"这个工作流,workflow 到点后创建一条任务,通过 RocketMQ 发消息给 agent-engine,agent-engine 收到任务后先拉取本周提交记录和日历事件,再按模板生成周报草稿,最后把结果回写到任务记录里。
同步调用走 REST,异步任务走 RocketMQ。同步对话用 SSE,异步任务用消息队列。这是我在架构里反复强调的分界线:用户在现场等结果的必须走同步;用户不在现场等结果的必须走异步,否则长任务会把整个服务拖死。
4. 模型部署与推理优化:让 AI 真正快起来的关键
个人工作台最难的不是功能做出来,而是让 AI 响应快、成本可控、体验稳定。我在这部分花了大量时间做模型网关和推理优化。
4.1 模型部署方式:本地、云 API、混合路由
我测试过三种思路:全部走云 API、全部走本地模型、混合路由。全部走云 API 最省事,效果好,但数据要送到外部服务,且按量计费,月度成本可能不知不觉涨上去。全部走本地模型,数据安全、成本固定,但小参数模型的能力上限摆在那里,复杂指令容易翻车。
KikoAI 最终走的是混合路由:
| 部署方式 | 适用场景 | 优点 | 需要注意的点 |
|---|---|---|---|
| 云端大模型 API | 日常对话、写作、复杂推理 | 效果好、几乎没有维护成本 | 数据出境、按量计费 |
| 本地中小模型(Ollama/vLLM) | 知识库检索、简单任务、测试 | 数据可控、固定成本 | 需要 GPU、效果上限 |
| 混合路由 | 默认场景 | 兼顾质量与成本 | 路由策略要仔细调 |
混合路由逻辑在 model-gateway 里实现:普通场景默认走本地模型(比如 Qwen 或 GLM 量化版),当问题复杂度较高(通过长度或关键词判断)或者本地模型连续返回质量较差时,自动升级到云端大模型。同时支持用户在会话里手动指定模型,相当于给了一个"高级选项"。
4.2 模型网关的设计要点
model-gateway 是对外暴露的唯一模型接口,设计上参考了 OpenAI 的 API 风格,这样后面接新模型几乎零成本。核心功能有四块:
统一接口。一个/v1/chat/completions接口,支持流式和非流式,内部转换成不同模型的调用格式。
Provider 管理。每种模型对应一个 Provider(OpenAI、Ollama、vLLM、本地部署的 FastAPI 服务),每个 Provider 有自己的 API Key、Base URL、模型名映射和超时参数。Provider 配置存在 Nacos 配置中心,改配置无需重启。
自动降级与重试。当某个模型 Provider 连续失败或超时,网关自动把请求路由到备用模型,并记录一次降级事件。调用重试要区分错误类型:429 限流可以重试,4xx 参数错误不重试,5xx 服务器错误最多重试两次然后降级。
Token 预算控制。每个请求根据模型限制计算可用上下文窗口,agent-engine 拼装的上下文必须在此范围内。超长时不是直接截断,而是做摘要压缩,把历史消息用一次轻量模型调用压缩成摘要后继续。
4.3 推理加速的几个实操手段
我实践下来效果明显的优化排序如下:
第一,流式输出。所有面向用户的对话请求默认走 SSE 流式输出。用户第一帧通常在几百毫秒内就能收到,体感上比"转圈等 10 秒出整段"好太多。特别强调一下,SSE 只是协议,真正让 token 吐得快的核心在编排上:把历史消息、工具结果、系统提示词提前拼接好,避免 Agent 循环里每次都重新组装上下文。
第二,量化模型。本地模型我优先用 4bit 量化版,效果损失在可接受范围内,显存占用和推理速度却好了很多。至于选多大参数量的模型,我建议按显存来:8GB 以下跑 3~7B 量化版,16GB 左右可以上 14B 量化版,24GB 以上可以尝试 32B 量化版。别硬上超显存的大模型,换来的只是频繁 OOM。
第三,请求级缓存。对相似请求做 hash 缓存。知识库问答场景下,如果用户问的是同一个问题,直接把之前的答案返回,省一次模型调用。缓存 key 要加工作空间维度,避免不同上下文的用户拿到别人的答案。
第四,并发控制。本地模型的并发能力是有限的。vLLM 支持 Continuous Batching,能明显提升吞吐,但也要设置最大并发数,超限的请求排队而不是直接拒绝。model-gateway 里加了基于服务分组的队列,保证高优先级请求(用户实时对话)先走,低优先级任务(工作流生成)排队。
4.4 Token 成本核算与监控
最后说 token。个人工作台虽然体量不大,但长期用下来 token 费用也是一笔开销。我在 model-gateway 里对每次请求做了完整打点:模型名、输入 token 数、输出 token 数、耗时、是否命中缓存、是否降级。这些数据写入日志或直接上报监控,每周看一次报表就能发现哪些场景在浪费钱,比如某个月度总结任务每次都把三个月的历史消息全塞进去,实际上只需要最近一周的数据。
这块也是我推荐所有做 AI 应用的朋友尽早做的事:token 打点不能等到上线之后再补,后面补成本高得多。
5. 落地过程中的踩坑记录:从"能跑"到"稳定跑"的排查链路
KikoAI 这个项目里最烧时间的就是各种集成问题。很多问题在文档里根本搜不到,全靠从日志里一层层扒出来。这里我把最有代表性的五个坑完整梳理一遍,每个坑都有完整的排查思路。
5.1 坑一:Python 服务注册 Nacos 后总是被标记为不健康
现象:Python 服务启动后能被发现,但过一会儿 Nacos 就把实例标记为不健康,服务时好时坏。
排查链路:先从 Nacos 控制台看实例详情,发现健康检查方式是 HTTP,检查路径是默认的/health。而我的 Python 服务没提供 HTTP 健康检查接口,只有 gRPC 的 probe。Nacos 探活失败就标记不健康。
解决:用 FastAPI 加一个/health路由,返回{"status":"UP"},然后配置 Nacos 的 checkPath 为 http。另外要注意健康检查的超时时间,Python 服务偶尔因为 GC 卡顿超过 Nacos 设置的时间阈值会被误判,所以我把超时从默认 3 秒调到 5 秒,心跳间隔保持默认的 5 秒即可。
这个坑提示我一点:Python 服务接入 Java 体系时,不要上来写业务代码,先把 health 端点做好,否则后面排查问题第一站就找不到你。
5.2 坑二:Spring Cloud Gateway 转发流式接口被缓冲
现象:前端对接的是 SSE 流式接口,在直连 Python 服务时流式正常;走了 Spring Cloud Gateway 之后,前端要等很久才一次性拿到全部内容,流式效果完全丢失。
排查链路:第一反应是 CORS 问题,但浏览器控制台并没有跨域报错。接着看网关日志,发现响应不是分块的,而是 Content-Length 固定。翻文档定位到 Spring Cloud Gateway 在做代理时默认会对响应做缓冲,尤其是设置了 Route 级的ReadTimeout且响应内容不大时,会直接聚合完整响应再转发。
解决:在网关路由配置里针对/api/agent/**设置响应超时时间,并启用 SSE 透传相关配置。核心是避免网关把流式响应聚合成整体再转发,同时确保响应头里保留text/event-stream。另外不要在网关层做响应压缩,否则流式帧也会被缓冲。
这个坑的通用经验是:任何微服务网关要支持 AI 应用的流式接口,建议提前做好 SSE 透传演练,不要等联调时才暴露。
5.3 坑三:Agent 会话上下文越用越重,后来直接超限
现象:长对话进行到第 20 轮之后,请求突然报上下文超限,之前都能正常回答。
排查链路:翻 agent-engine 日志,发现发送给 model-gateway 的 prompt 里历史消息数一直在线性增长,token 数到了模型上限。我把历史消息全部保留在上下文里,没有做任何压缩。很多对话的前几轮已经完全没有参考价值了。
解决:实现了一套滑动窗口 + 摘要压缩策略:最近的 10 轮消息完整保留;更早的历史消息先做一次摘要,摘要也被当作文本片段保留;超过滑动窗口长度后,只要用户提问命中摘要中的关键词,就把对应片段取回。这个策略让长对话稳定跑到了百轮以上。
通用经验:Agent 应用不能把"对话历史"等同于"原始消息序列",上下文管理本身就应该是一个策略模块,而不是单纯往 prompt 里塞字符串。
5.4 坑四:RocketMQ 重试导致工具被重复执行
现象:工作流任务偶尔会出现重复结果,用户看到同一封邮件被生成了两遍。
排查链路:从任务记录里看到同一条任务出现了两次执行记录,时间戳差了十几秒,判断是消息重试导致的。RocketMQ 默认会对消费失败的消息进行重试,而我在消费者里没有做幂等处理,结果消息消费一次失败后重试,又执行了一遍工具。问题在于失败的原因不是工具本身出错,而是超时——工具执行时间超过了消费者默认的 maxReconsumeTimes。
解决:两件事。一是消费者端做幂等,基于任务 ID 在 workspace 服务里做去重,已存在的执行记录直接返回成功。二是给消费器设置合理的超时时间,长任务不要用同步事务消息,改用异步任务模式:消费者收到消息后先落库,再异步执行,执行结果回调更新状态。
这个坑提醒我一个原则:异步消息的消费者默认就要具备幂等性,哪怕当前任务看起来不重复也不要省略。
5.5 坑五:Python 长跑服务内存持续上涨
现象:agent-engine 服务连续运行一周后,内存占用从 1GB 涨到 4GB,最后触发 OOM 重启。
排查链路:先用ps看进程 RSS 确认上涨,再用 tracemalloc 和 py-spy dump 出内存占用堆栈。发现是全局缓存没有清理:agent-engine 里我缓存了每次会话的上下文快照,key 是会话 ID,但会话结束后没有及时删掉,缓存条目只增不减。加上一些旧工作流引用的对象也被扫不掉,内存越堆越高。
解决:给缓存增加过期策略,TTL 设为 30 分钟,超过时间自动清理;同时为所有大对象注册弱引用兜底。另一个措施是进程管理上用 supervisor 配置了内存超限自动重启,虽然这是兜底方案,但至少不会让服务一直睡死。
6. 从自用工具到真正可复用的个人工作台:部署与长期维护细节
功能做完只是第一步,真正让它变成一个能长期稳定运行的工作台,比我想象的琐碎得多。这一节分享部署和维护层面的细节。
6.1 部署拓扑与资源规划
以我目前的实际部署为例,一台 4 核 16GB 的服务器就能跑起整套体系,但如果你想跑本地模型,建议至少单独配一台带 GPU 的机器。
- 控制面(Java 体系):Nacos、Spring Cloud Gateway、workspace、workflow,用 Docker Compose 编排,分配 6GB 内存。
- 智能面(Python 体系):agent-engine、model-gateway,分配 4GB 内存。
- 模型推理:如果接云 API,不需要额外资源;如果接本地 Ollama/vLLM,单独分配 GPU 机器,避免和业务服务抢资源。
- 存储:MySQL 存会话、任务、元数据,Elasticsearch 或 Milvus 存知识库向量,Redis 做缓存和会话状态。
数据库初始化脚本要在第一次部署时就设计好,尤其是 workspace 的表结构有外键关联,后期改表会比较痛苦,建议先把核心表结构定下来再开始写业务逻辑。
6.2 数据备份与可观测性
个人工作台承载的是真实工作数据,丢数据的后果比丢代码严重得多。我每天凌晨对 MySQL 做全量备份,保留最近 7 天;知识库文件和向量索引每天同步一次到备份目录;对话记录和工具调用日志至少保留 30 天,既为了审计回溯,也为了后续对模型效果做调优分析。
日志监控方面,Python 服务和 Java 服务统一输出 JSON 日志并采集到同一套日志平台。我在几个关键环节打了 trace:网关入口、agent-engine 收到请求、model-gateway 发出模型请求、工具执行完成、最终响应发送。这样用户说"AI 回答很慢"时,我能快速看到慢在哪一环。
6.3 给后续扩展预留的接口
KikoAI 如果只停留在"自用",那它的价值就打折扣了。我一直在考虑给它扩展成团队可用的形态,所以在设计里留了几个口子:
插件机制。工具的注册表是天生的扩展点,任何人想新增一个外部工具(比如接 Jira、接飞书、接数据仓库),只需要写一个实现类并在注册表登记即可,agent-engine 的循环逻辑不用改。
多 Agent 协作。当前是单 Agent 单会话,后续可以扩展成"编排 Agent + 执行 Agent"的模式:编排 Agent 负责拆解任务,把子任务分发给多个专用 Agent(代码、写作、数据分析),再汇总结果。这个演进路径在现有服务划分下是自然的,因为每个 Agent 本质上是共享同一个 model-gateway 和 workspace 的不同配置实例。
模型与知识库的持续调优。每次请求的推理日志、用户反馈数据我都保留着,后续可以做模型打分和知识库召回率评估,用数据决定要不要换模型或调整检索参数。
最后再分享一点实际体会
KikoAI 微应用这个项目做了几个月,最大的感触是:技术选型关注的不是"哪个新"或"哪个快",而是哪个方案能在你的真实约束下持续演进。把 Python 应用融入 Spring Cloud Alibaba 体系,放弃一点"纯粹性",换来的是注册发现、配置管理、网关治理这些本来就要自己解决的问题被统一解决;放弃"把 AI 能力用 Java 重写"的执念,换来的是整个 AI 生态的现成能力。
项目上线稳定运行之后,我从"每天在多个工具之间反复横跳"变成了"打开工作台处理一切",这种体感上的改变是最直接的回报。最后给准备自己动手做 AI 工作台的朋友一个建议:不要追求第一步就把所有功能做完美,先把对话、上下文、一个工具调用和模型网关这四件事跑通,让工作台先"能用",然后再一点点加任务、工作流、知识库和自动触发。真的把这条路走通之后,你会发现 AI 的价值不是单次生成的质量,而是把整个工作流串起来之后带来的复利效应。