TAgent 是一个基于 Java 17、Spring Boot、Spring AI 和 DDD 分层构建的 AI Agent 工程实践项目。 它不是只封装一次模型调用,而是覆盖了一次 Agent 请求从接入、路由、运行时装配、规划执行、RAG、记忆、MCP 工具治理、人工审批、执行中干预,到 SSE 流式输出和全链路观测的完整过程。
# Add to your Claude Code skills
git clone https://github.com/pengmoubuaixuexi/TAgentTAgent is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by pengmoubuaixuexi. TAgent 是一个基于 Java 17、Spring Boot、Spring AI 和 DDD 分层构建的 AI Agent 工程实践项目。 它不是只封装一次模型调用,而是覆盖了一次 Agent 请求从接入、路由、运行时装配、规划执行、RAG、记忆、MCP 工具治理、人工审批、执行中干预,到 SSE 流式输出和全链路观测的完整过程。. It has 103 GitHub stars.
TAgent's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/pengmoubuaixuexi/TAgent" and add it to your Claude Code skills directory (see the Installation section above).
TAgent is primarily written in Java. It is open-source under pengmoubuaixuexi on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh TAgent against similar tools.
No comments yet. Be the first to share your thoughts!
Unlocks once the catalog security scan passes (runs nightly).
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
🚀 A Production-Grade AI Agent Engineering Framework
🇬🇧 English | 🇨🇳 中文
不只是简单的模型封装,而是覆盖 Agent 请求的完整生命周期:接入、路由、运行时装配、规划执行、RAG、记忆、MCP 工具治理、人工审批、执行中干预,到 SSE 流式输出和全链路观测。
TAgent 是一个基于 Java 17、Spring Boot、Spring AI 和 DDD 分层架构 构建的企业级 AI Agent 工程实践项目。
它覆盖了一次 Agent 请求从接入、路由、运行时装配、规划执行、RAG、记忆、MCP 工具治理、人工审批、执行中干预,到 SSE 流式输出和全链路观测的完整过程。
本仓库是脱敏后的公开版本,不包含真实密钥、运行日志、历史对话、临时报告、数据库备份和个人文件。

用户请求
-> Filter / SSE Controller
-> UnifiedAgentRouter
-> Fixed / Auto / Flow
-> Advisor + LLM
-> MCP 工具执行
-> SSE 流式响应
steer 重做当前步骤、answer_now 跳过剩余步骤、cancel 中止执行ask_user,通过 SSE 向用户收集补充信息,再回填继续执行| 能力 | 实现 |
|---|---|
| 三种 Agent 模式 | Fixed 单步直答、Auto 分析执行闭环、Flow DAG 编排 |
| 数据库驱动装配 | Agent、Client、Model、Prompt、Advisor、RAG、MCP 关系由数据库配置 |
| 统一 Agent 路由 | 一次模型调用选择 Agent,并输出可能缺失的工具能力 |
| 动态 MCP 工具 | 工具目录中文化、意图扩写、PgVector 语义匹配、按请求临时补挂 |
| MCP 自愈 | 懒探活、失败重试、超时重连、dead-client 重建、冷却与熔断 |
| 工具治理 | 非执行步禁工具、未知工具纠正、参数提示、轮次预算、跨 MCP 并行 |
| Agentic RAG | SIMPLE、HyDE、FUSION、DECOMPOSE 四种查询策略 |
| 四层记忆 | Working、Chat、Long-Term、Episodic Memory |
| 流式干预 | Auto、Flow、Fixed 均支持立即回答、引导与取消执行 |
| 主动追问 | ask_user 通过 SSE 向用户请求补充信息,默认关闭、按 session 限次和超时 |
| 人机协同 | 高风险工具调用通过 SSE 请求人工批准或拒绝 |
| 可解释输出 | 工具进度、RAG evidence、Memory evidence、步骤状态 |
| 全链路观测 | Prometheus、ELK、Jaeger、event_log、LLM 成本与 MCP 健康页 |
请求进入 POST /api/v1/agent/auto_agent 后依次经过:
MdcTraceFilter:写入 request、trace、user、tenant、session 等上下文RateLimitFilter:按用户、会话或 IP 进行限流IdempotencyFilter:同步请求支持幂等,SSE 长连接端点直接放行AiAgentController:创建 ResponseBodyEmitter、注册审批通道并立即发送 ackExecuteCommandEntity,交给 Dispatch 异步执行ack 会携带干预能力是否开启,前端据此决定是否显示执行中的操作栏。
AgentDispatchService 负责:
UnifiedAgentRouter 选择最合适的 agent_idmissing_tool_descs,用于后续动态补工具strategy,分派到 Fixed、Auto 或 Flow适合直接问答或单轮工具任务:
准备上下文 -> 注入 Advisor -> 合并工具 -> LLM 流式生成 -> 保存记忆 -> 输出
也支持 MCP 工具调用、RAG、长期记忆、steer 重做、answer_now 提前结束。
适合目标明确但需要自主分析、执行和检查的任务:
| 步骤 | 职责 | 是否开放工具 |
|---|---|---|
| Step1 | 分析任务、判断完成度 | ❌ |
| Step2 | 执行具体任务 | ✅ |
| Step3 | 质量检查与 Reflexion | ❌ |
| Step4 | 汇总最终结果 | ❌ |
Auto 会循环执行,直到任务完成或达到 maxStep。Step3 判断失败时,可携带结构化 critique 返回 Step2 修正。
适合可拆解、存在依赖关系的复杂任务:
| 步骤 | 职责 | 是否开放工具 |
|---|---|---|
| Step1 | 分析需要的工具能力 | ❌ |
| Step2 | 生成带 DEPENDS_ON 的步骤计划 |
❌ |
| Step3 | 将计划解析为 DAG | - |
| Step4 | 按依赖关系并行执行并最终整合 | ✅ |
DAG 中依赖已经满足的步骤可以并行,不同 MCP Server 的工具可以并行,同一个 MCP Server 复用同一连接时保持串行。
固定给每个 Agent 挂大量工具,会增加上下文、工具幻觉和选错工具的概率。TAgent 将工具拆成"常驻工具"和"按请求动态补充工具"。
UnifiedAgentRouter
-> missing_tool_descs
-> 每条能力描述生成 embedding
-> PgVector 查询 mcp_tool_vector
-> 每类能力取 Top-K
-> 相对距离阈值过滤
-> 多类结果并集去重
-> 懒创建或复用 MCP callback
-> 常驻工具 + 动态工具
-> 注入本次请求
工具资产由两部分组成:
ai_mcp_tool_catalog:真实工具名、MCP、原始描述、中文描述和中文意图mcp_tool_vector:用于语义检索的工具向量当前工具匹配采用 embedding-only,不回退 BM25 或 LLM rerank。向量服务不可用时宁可跳过动态补挂,也不盲目匹配无关工具。
MCP 调用不是直接执行裸 callback,而是经过 MeteredToolCallback、RobustToolCallingManager 和 McpClientRegistry 三层治理。
Registry 维护 MCP Client、工具与 MCP 的映射、重建工厂、最近成功时间、连续失败次数和熔断状态。
自愈路径包括:
MeteredToolCallback 内部 delegate重连后对模型暴露的 ToolDefinition 保持稳定,因此工具参数提示不会因 callback 切换而丢失。
Advisor 由数据库配置,并按 order 参与请求:
| Advisor | 作用 |
|---|---|
| Semantic Cache | 相似问题命中后直接短路后续链路 |
| Long-Term Memory | 注入长期画像和语义记忆,结束后异步抽取新记忆 |
| Episodic Memory | 注入当前会话或跨会话摘要 |
| Prompt Injection | 检测潜在提示词注入 |
| PII Mask | 对输入或输出中的敏感信息进行处理 |
| Agentic RAG | 判断是否检索以及选择查询策略 |
| Rag Answer | 执行混合检索、rerank、父子文档替换和引用组装 |
| Chat Memory | 只读历史上下文,完整回答由应用层写入 |
| CoVe | 对回答声明进行检索核验与观测 |
RAG Router 会先判断是否需要检索,再从四种策略中选择:
| 策略 | 说明 |
|---|---|
| SIMPLE | 重写原始查询后直接检索 |
| HYDE | 先生成假想文档,再用其语义进行检索 |
| FUSION | 生成多个查询变体,并通过 RRF 融合结果 |
| DECOMPOSE | 将多跳问题拆成多个子查询并行检索 |
检索链路:
Query Planning
-> PgVector 语义召回
-> Elasticsearch BM25
-> RRF 融合
-> Cross Encoder / LLM Rerank
-> Child 命中替换为 Parent Document
-> 注入编号引用
-> rag_evidence SSE
| 记忆层 | 存储 | 用途 |
|---|---|---|
| Working Memory | Redis | 保存 Auto/Flow 步骤中间产物,支持步骤间读取和断线后的完成态回放 |
| Chat Memory | MySQL + Redis Cache | 保存多轮聊天历史和滚动摘要 |
| Long-Term Memory | MySQL Meta + PgVector | 保存用户画像、技能、偏好、计划和情况,支持语义召回 |
| Episodic Memory | MySQL | 保存会话阶段性摘要和近期经历 |
长期记忆包含:
Auto、Flow、Fixed 三种模式均支持 steer、answer_now 和 cancel。
POST /api/v1/agent/steer
Content-Type: application/json
{
"sessionId": "session_demo_001",
"idea": "请重点从工程落地和风险控制角度分析"
}
行为:
当模型缺少完成任务所必需的信息,或用户意图存在多种合理理解需要拍板时,可以调用 ask_user 主动向用户追问。
流程:
Advisor + LLM
-> ask_user tool_call
-> user_input_required SSE
-> 用户补充回填
-> ask_user tool result
-> 继续下一轮推理
设计边界:
agent.user-input.enabled=false 时完全不广播 ask_user,默认不影响原链路UserInputGate 按 sessionId 限制追问次数,并支持超时自动放行ask_user 与人工审批互不复用 ID:审批管工具授权,ask_user 管需求澄清高风险工具可配置为执行前审批:
human_approval_required SSE 事件POST /api/v1/agent/approval
Content-Type: application/json
{
"approvalId": "approval-id-from-sse",
"approved": true
}
| 事件 | 用途 |
|---|---|
ack |
确认连接建立并返回干预开关 |
step_start / step_end |
展示 Agent 当前步骤 |
token |
逐 token 渲染回答 |
tool_call_start / tool_call_end / tool_call_error |
展示工具进度 |
human_approval_required |
请求人工审批 |
user_input_required |
模型通过 ask_user 请求用户补充信息 |
rag_evidence |
展示知识库引用依据 |
memory_evidence |
展示记忆召回依据 |
data |
返回步骤结果或最终结果 |
TAgent 同时记录模型、工具和 Agent 步骤:
LlmObservationRecorder:模型、耗时、Token、缓存 Token、billing scopeai_event_log:步骤输入输出、路由、工具、干预和最终结果WireTraceRecorder:在不消费下游响应体的前提下记录流式 wire 信息页面:
http://localhost:8099/observe.htmlhttp://localhost:8099/observe-mcp.html| 模块 | 说明 |
|---|---|
ai-agent-station-study-api |
接口、DTO 和统一响应 |
ai-agent-station-study-app |
Spring Boot 启动、配置、静态页面和 Mapper XML |
ai-agent-station-study-domain |
Agent 路由、执行策略、RAG、记忆、MCP 与安全治理 |
ai-agent-station-study-infrastructure |
DAO、Repository、缓存和外部存储适配 |
ai-agent-station-study-trigger |
HTTP Controller、管理接口和任务触发 |
ai-agent-station-study-types |
通用类型、异常和任务调度组件 |
docs/dev-ops |
Docker、SQL 迁移、Grafana、Prometheus 和 MCP 配置 |
mcp-server-hmdp / mcp-servers |
MCP Server 示例 |
默认地址:
| 服务 | 地址 |
|---|---|
| MySQL | 127.0.0.1:13306 |
| PostgreSQL + pgvector | 127.0.0.1:15432 |
| Redis | 127.0.0.1:16379 |
| Elasticsearch | 127.0.0.1:9200 |
| Logstash | 127.0.0.1:4560 |
| Jaeger OTLP | 127.0.0.1:4318 |
# LLM 配置
LLM_BASE_URL=https://your-openai-compatible-endpoint
LLM_API_KEY=your-llm-key
LLM_MODEL=your-model
# 向量模型配置
EMBEDDING_BASE_URL=https://your-embedding-endpoint
EMBEDDING_API_KEY=your-embedding-key
EMBEDDING_MODEL=BAAI/bge-m3
# 数据库凭据
MYSQL_USERNAME=root
MYSQL_PASSWORD=your-mysql-password
PGVECTOR_USERNAME=postgres
PGVECTOR_PASSWORD=your-postgres-password
按需设置 MCP 和观测凭据:
GITHUB_PERSONAL_ACCESS_TOKEN=your-github-token
GRAFANA_API_KEY=your-grafana-key
CSDN_API_COOKIE=your-csdn-cookie
WEIXIN_API_APP_SECRET=your-weixin-secret
增量脚本位于:
docs/dev-ops/sql-migrations
新环境应按版本顺序执行。动态工具功能至少需要 V041、V046、V047。
mvn "-Dmaven.test.skip=true" package
项目包含依赖外部服务和账号环境的集成测试。普通本地构建可跳过测试,验收时再运行指定测试类。
java -jar ai-agent-station-study-app/target/ai-agent-station-study-app.jar
默认端口:8099
http://localhost:8099/index.htmlhttp://localhost:8099/agent-config.htmlhttp://localhost:8099/actuator/health