Todea助理
Kubernetes原生AI平台,带有React聊天UI,用于通过自然语言安装、管理和诊断Linkerd服务网格。支持Google Gemini、Azure OpenAI或完全集群内的Ollama运行时——所有提供者都有相同的分层多代理行为。
Screenshot of the Todea-Assistant demo
______________________________________________________________________
建筑
| 服务 | 路径 | 端口 | 角色 |
|---|---|---|---|
| 网络 | web/ | 80 | React SPA+Express静态服务器 |
| 代理中心 | servers/agent-hub/ | 3100 | 统一LLM网关——通往谷歌、Azure或Ollama的路由;运行根调度程序代理和所有子代理循环 |
| MCP服务器 | servers/mcp/ | 3002 | FastMCP工具服务器;通过MCP公开所有原始工具并提供服务 GET /agents 使用子代理配置 |
| Helm代理 | servers/mcp/helm_agent/ | 3400 | HTTP包装器 helm 和 kubectl;由MCP服务器调用 |
| OpenSSL代理 | servers/mcp/openssl_agent/ | 3500 | X.509证书生成、检查和验证的HTTP包装器 |
| GitHub代理 | servers/mcp/github_agent/ | 3600 | 围绕GitHub REST API的HTTP包装器 |
| Kubernetes代理 | servers/mcp/kubernetes_agent/ | 3700 | HTTP包装器 kubectl |
| Linkerd代理 | servers/mcp/linkerd_agent/ | 3800 | 围绕BEL Helm操作和证书管理的HTTP包装器 |
| 对话中心 | servers/conversation-hub/ | 3300 | 所有提供商共享对话+消息存储 |
| 培训中心 | servers/training-hub/ | 3500 | REST+SSE服务,管理机器学习训练管道 |
| Ollama运行时 _(可选)_ | servers/ollama-runtime/ | 11434 | 带有预烤模型的定制Olama图像 |
多代理层次结构
该系统使用 模型无关的分层代理架构每个提供商(谷歌、Azure、Ollama)都有相同的行为:
Root Agent (any provider) — pure dispatcher
Sees only 5 virtual tools:
call_kubernetes_agent(task) — pod/log/event diagnostics
call_openssl_agent(task) — cert generate/inspect/verify
call_github_agent(task) — repo file/issue/PR lookups
call_helm_agent(task) — generic Helm/kubectl operations
call_linkerd_agent(task) — BEL install/upgrade/check
Sub-agents (nested loops in agent-hub, any provider):
kubernetes_agent — 9 kubectl tools
openssl_agent — 3 certificate tools
github_agent — 5 GitHub API tools
helm_agent — 8 generic helm/kubectl tools
linkerd_agent — 11 BEL-specific helm/linkerd tools它是如何工作的:
- 根代理接收用户的消息,并决定呼叫哪个专家。
agent-hub拦截call_*_agent工具调用和运行run_sub_agent()在sub_agent.py.sub_agent.py从以下位置获取子代理的指令和允许的工具列表GET /agents然后在MCP服务器上运行与根代理具有相同提供者和模型的非流式代理循环。- 子代理循环仅调用其拥有的MCP工具;结果以普通字符串的形式流回根代理。
关键文件:
| 文件 | 目的 |
|---|---|
servers/agent-hub/sub_agent.py | run_sub_agent(name, task, provider, model) --每个提供者嵌套循环 |
servers/agent-hub/mcp_utils.py | _list_mcp_tools() (根,过滤+虚拟)· _list_all_mcp_tools() (次级代理人) |
servers/agent-hub/config.py | DEFAULT_INSTRUCTION (根调度程序提示) |
servers/mcp/*/config.py | 每个代理人的 AGENT_CONFIG dict(名称、说明、工具列表) |
servers/mcp/app.py | FastMCP ASGI+Starlette GET /agents 路线 |
servers/mcp/helm_agent/mcp_tools.py | 通用舵MCP工具(HTTP包装器,而非子流程) |
工具所有权
| 子代理 | MCP工具 |
|---|---|
| Kubernetes | get_namespaces, get_nodes, get_pods, get_deployments, get_pod_containers, get_pod_logs, describe_pod, get_events, diagnose_pod_restarts |
| 开放式安全套接层 | generate_certificates, inspect_certificate, verify_certificate_chain |
| GitHub | github_get_file, github_list_directory, github_search_code, github_get_issue, github_get_pr |
| 舵 | helm_generic_repo_add, helm_generic_search, helm_generic_upgrade_install, helm_generic_status, helm_generic_list, helm_generic_uninstall, kubectl_apply, kubectl_pods |
| Linkerd | helm_search_bel_versions, helm_repo_add, install_gateway_api_crds, install_linkerd_control_plane, helm_install_linkerd_crds, helm_install_linkerd_control_plane, helm_upgrade_linkerd, helm_configure_linkerd, helm_uninstall_linkerd, helm_status, linkerd_check |
服务地图
Browser
│
│ HTTP (port 8080 via k3d load balancer)
▼
Ingress (Traefik)
├── / → todea-web :80 React SPA + Express
├── /mcp → todea-mcp :3002 MCP tool server + /agents
├── /chat → todea-agent-hub :3100 Unified hub (Google · Azure · Ollama)
├── /models → todea-agent-hub :3100
├── /conversations → todea-agent-hub :3100
├── /settings → todea-agent-hub :3100
└── /healthz → todea-agent-hub :3100
Internal only (no dedicated ingress):
todea-helm-agent :3400 ← called by todea-mcp for all helm/kubectl operations
todea-openssl-agent :3500 ← called by todea-mcp for certificate operations
todea-github-agent :3600 ← called by todea-mcp for GitHub API queries
todea-kubernetes-agent :3700 ← called by todea-mcp for kubectl diagnostics
todea-linkerd-agent :3800 ← called by todea-mcp for BEL Helm operations
todea-conversation-hub :3300 ← called by the agent-hub for conversation storage
todea-training-hub :3500 ← reached via the web pod's proxy at /training-hub调用图
所有提供程序都遵循相同的模式-区别仅在于调用哪个LLM API。
React UI ──► Agent Hub ──► LLM API (Google / Azure / Ollama)
│ │
│ Root agent sees 5 virtual tools
│ │
│ call_*_agent ──► sub_agent.py (nested loop)
│ │
│ sub-agent calls MCP tools
│ │
│ ┌─────────────────────┴──────────────────────┐
│ MCP Server :3002 (raw tools via FastMCP) │
│ │ │
│ ┌──────┼──────────────────────────────┐ │
│ Helm Kubernetes OpenSSL GitHub Linkerd │
│ :3400 :3700 :3500 :3600 :3800 │
│
└──► Conversation Hub :3300 (history store)联接台
| 呼叫者 | 被呼叫者 | 如果被呼叫者宕机,则失败? |
|---|---|---|
| Hub(任何提供商) | 对话Hub | 是--聊天和对话列表不可用 |
| Hub(任何提供商) | MCP服务器 | 否--工具调用已禁用,纯聊天仍然有效 |
| 枢纽(谷歌路径) | 谷歌API | 是-聊天不可用 |
| Hub(Azure路径) | Azure OpenAI | 是--聊天不可用 |
| Hub(Ollama路径) | Ollama运行时 | 是--聊天不可用 |
| MCP服务器 | Helm代理 | 是--所有Helm/kubectl工具都失败 |
| MCP服务器 | OpenSSL代理 | 否--cert工具失败,所有其他工具仍能工作 |
| MCP服务器 | GitHub代理 | 否——GitHub工具失败,所有其他工具仍能正常工作 |
| MCP服务器 | Kubernetes代理 | 否--kubectl诊断工具失败,所有其他工具仍能正常工作 |
| MCP服务器 | Linkerd代理 | 是--所有Linkerd/BEL安装工具都失败 |
______________________________________________________________________
文档
运营
| 指南 | 说明 |
|---|---|
| 部署(k3d) | k3d集群设置、Helm安装(Gemini、Azure和Ollama路径)、更新、重建单个服务 |
| 本地开发 | 在没有k3d的情况下在本地运行每个服务 |
| 代理商和MCP工具 | 多代理层次结构、工具参考和Linkerd安装顺序 |
| Ollama参考 | 模型管理、持久性、直播、外部Ollama、工具调用行为 |
Azure
| 指南 | 说明 |
|---|---|
| 基础设施 | 资源组、ACR、AKS集群、GPU点节点池、NVIDIA设备插件 |
| 构建和部署 | 构建映像并将其推送到ACR,创建命名空间和PVC,Helm部署(Gemini和Ollama路径) |
| 培训管道 | 跑步刮→ 火车→ 通过UI提供服务、更新部署、持续培训CronJob、有用的命令、成本估算 |
机器学习与培训
| 指南 | 说明 |
|---|---|
| 训练 | 训练UI、微调管道和提供自定义Linkerd模型 |
| 数据质量 | 对当前训练数据集的评估——来源、统计数据、关注点和建议 |
| 持续训练 | 计划和事件触发的再培训循环、管道架构、培训策略权衡 |
| 源代码之上的RAG | 为什么RAG在代码、向量存储选项、分块策略和新的MCP工具设计方面优于训练 |
| 模型选择和基础设施 | llama3.1:8b vs Qwen2.5-7B-Instruct,AKS vs家用GPU,MLOps工具环境和推荐堆栈 |
______________________________________________________________________
许可证
有关许可条款,请参阅各个目录。
