IT事件解决智能体

面向IT事件处理场景的自主智能体,基于多智能体协作与经验记忆,自动完成事件分诊与解决,并在每次交互中持续优化表现。

  • by jschuller
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 jschuller/hackathon-sia

使用说明

🔄 Self-Improving IT Incident Agent

Self-Improving Agents Hack NYC — Feb 21, 2026

An autonomous IT incident resolution agent that gets measurably better with every interaction. Built with Google ADK, Gemini 2.5 Flash, and MCP.

Architecture

Incident → [Triage Agent] → [Resolution Agent] → [Critic ↔ Refiner Loop] → Resolution
                                                         ↑
                                                  Experience Memory
                                                  (learns from past)

Reflexion pattern: The critic evaluates the resolution on 5 dimensions. If score < 0.85, the refiner improves it. Loop runs up to 5 iterations. Successful resolutions are stored and retrieved for future incidents.

Quick Start

# 1. Clone + bootstrap (ParrotOS / Debian / Ubuntu)
git clone git@github.com:jschuller/hackathon-sia.git
cd hackathon-sia
chmod +x bootstrap.sh && ./bootstrap.sh

# 2. Add your API keys
nano .env

# 3. Run the agent (from the repo root, then pick self_improving_agent in the UI)
uv run adk web .

# 4. Run with Datadog observability
bash scripts/run.sh

# 5. Run evals
uv run python -m eval.braintrust_eval

macOS Quick Start

uv sync                                    # install deps
cp .env.template .env && nano .env         # add keys
uv run adk web .                           # start; pick self_improving_agent

Sponsor Tools

Sponsor Role Integration
ServiceNow Incident/CMDB data MCP (STDIO via uvx, pinned)
ElevenLabs Voice narration MCP (STDIO via uvx, pinned)
Datadog LLM Observability ddtrace auto-instrument
Braintrust Eval scoring Python SDK (eval/braintrust_eval.py)
Perplexity Web search for triage and resolution MCP (STDIO via npx, pinned)

Known limitations

  • Read-only tools. Incident text, CMDB records and web results are untrusted input, so triage and resolution get only ServiceNow read tools (SERVICENOW_READ_ONLY=true plus a tool_filter) and Perplexity search. ElevenLabs is attached to the narrator alone, limited to text_to_speech. The agent proposes resolutions; it cannot create incidents, add work notes or change CIs.
  • Experience memory is untrusted. Stored resolutions are model output derived from incident and web text. They are stored verbatim (shell commands such as 2>&1 survive), except that characters which hide text (Unicode Tags block, bidi controls, variation selectors) are removed; they are capped at 2,000 characters, and categories are limited to [a-z0-9 _-]. Each retrieval wraps them in <untrusted_past_experience> blocks whose tags carry a fresh random id, and a notice says only the closing tag with that id ends a block. Tag-shaped spellings of the tag name (including fullwidth, entity-encoded and hyphenated ones) are replaced. The agents are told never to follow instructions inside them. That lowers the risk of a poisoned memory; it does not remove it.
  • The eval does not measure the agent. eval/braintrust_eval.py calls Gemini directly with a hand-written prompt; it never runs root_agent, the critic loop or the MCP tools. Its five incidents are the same ones scripts/seed_servicenow.py seeds, and v2 only adds stored experiences to the prompt, so the v1/v2 before/after numbers are not evidence that the agent improves.

License

MIT — Hackathon project