Die zwei Modi
Jede Chat-Anfrage in FIM One beginnt mit einer Frage: Ist ein Agent ausgewählt? Die Antwort bestimmt, wie Ressourcen — Konnektoren, Wissensdatenbanken, Skills und MCP-Server — entdeckt und in den Werkzeugsatz zusammengestellt werden, den das LLM verwenden kann. Agent-Constrained Mode wird aktiviert, wenn der Benutzer einen bestimmten Agent auswählt. Das System lädt nur die Ressourcen, die dieser Agent explizit konfiguriert hat:- Konnektoren: nur die an den Agent gebundenen
connector_idswerden als Tools geladen. - Wissensdatenbanken: nur die an den Agent gebundenen
kb_idswerden als Abruf-Tools injiziert. - Skills: global verfügbar — alle aktiven Skills, die für den Benutzer sichtbar sind, werden injiziert, da Skills organisatorische SOPs sind, keine Agent-spezifischen Kenntnisse. (Siehe Skills als globale SOPs unten.)
- MCP-Server: immer benutzer-scoped — alle aktiven MCP-Server, die für den Benutzer sichtbar sind, werden in beiden Modi geladen.
- Anweisungen: das Feld
instructionsdes Agenten definiert die Persona und Verhaltensrichtlinien, die in den System-Prompt injiziert werden.
- Konnektoren: alle Konnektoren, die für den Benutzer sichtbar sind (eigene + organisationsübergreifend geteilt + Marketplace-abonniert), werden geladen.
- Wissensdatenbanken: alle zugänglichen KBs sind für den Abruf über
kb_retrieveverfügbar. - Skills: alle aktiven Skills, die für den Benutzer sichtbar sind, werden als SOP-Stubs injiziert.
- MCP-Server: gleich wie Agent-Constrained — alle aktiven Server, die für den Benutzer sichtbar sind.
- Anweisungen: eine generische Assistent-Persona wird verwendet.
_resolve_tools(), die bei jeder Chat-Anfrage aufgerufen wird:
Der praktische Effekt: Benutzer können sofort mit dem Chatten beginnen, ohne einen Agent zu konfigurieren. Das System entdeckt verfügbare Ressourcen und stellt sie als Tools zur Verfügung. Die Auswahl eines Agenten verengt den Umfang — sie schaltet keine neuen Funktionen frei, sondern konzentriert die vorhandenen.
Was jeder Modus entdeckt
Die beiden Modi unterscheiden sich im Umfang, nicht in der Art. Beide erzeugen eineToolRegistry — sie füllen sie nur unterschiedlich.
Auto-Discovery-Modus (kein Agent ausgewählt):
| Ressource | Erkennung | Tool-Form |
|---|---|---|
| Konnektoren (API) | resolve_visibility() — alle für Benutzer sichtbar | ConnectorMetaTool (progressiv) |
| Konnektoren (DB) | resolve_visibility() — alle für Benutzer sichtbar | Einzelne DB-Tools pro Schema |
| Knowledge Bases | Alle zugänglichen KBs | kb_retrieve |
| Skills | resolve_visibility() — alle aktiv | read_skill (progressive Stubs) |
| MCP-Server | resolve_visibility() — alle für Benutzer sichtbar | {server}__{tool} |
| Agenten | resolve_visibility() — alle aktiv, nicht-Builder | call_agent (Katalog) |
| Integrierte Tools | discover_builtin_tools() — vollständiger Satz | Kein Kategoriefilter angewendet |
| Ressource | Erkennung | Tool-Form |
|---|---|---|
| Konnektoren | Nur agent.connector_ids | ConnectorMetaTool oder Legacy pro Aktion |
| Knowledge Bases | Nur agent.kb_ids | GroundedRetrieveTool / KBRetrieveTool |
| Skills | Global — nicht durch Agent eingeschränkt | read_skill |
| MCP-Server | Benutzer-scoped — nicht durch Agent eingeschränkt | {server}__{tool} |
| Agenten | Global — call_agent immer verfügbar | call_agent |
| Integrierte Tools | agent.tool_categories Filter | Teilmenge nach Kategorie |
Alles ist ein Werkzeug
Auf der LLM-Ebene konvergieren alle Ressourcentypen in eine flache Liste aufrufbarer Werkzeuge. Das LLM hat kein strukturelles Bewusstsein dafür, ob es einen Konnektor, einen MCP-Server oder eine Wissensdatenbank aufruft. Es sieht eineToolRegistry — eine Menge von Funktionen mit Namen, Beschreibungen und Parameterschemata.
| Ressourcentyp | Wird auf LLM-Ebene zu | Werkzeugnamen-Muster |
|---|---|---|
| Konnektor (progressiv) | Einzelnes Meta-Werkzeug | connector |
| Konnektor (Legacy) | N Werkzeuge pro Aktion | {connector}__{action} |
| MCP-Server | N Werkzeuge pro Server | {server}__{tool} |
| Wissensdatenbank | Abruf-Werkzeug | kb_retrieve oder grounded_retrieve |
| Fähigkeit (progressiv) | Lese-Werkzeug + System-Prompt-Stubs | read_skill |
| Fähigkeit (inline) | Nur System-Prompt-Text | (kein Werkzeug) |
| Agent selbst | Nicht als Werkzeug sichtbar | (Anweisungen + Werkzeugzusammensetzung) |
Tool-Protokoll zu implementieren (name, description, parameters_schema, run()). Die Ausführungs-Engines, das Kontextmanagement und die LLM-Interaktionsschicht bleiben unverändert.
Fähigkeiten als globale SOPs
Fähigkeiten befinden sich auf einer Ebene über Agenten. Sie sind organisatorische Richtlinien und Verfahren, die jeder Agent befolgen muss, unabhängig davon, welcher Agent ausgewählt ist.Warum Fähigkeiten nicht an Agenten gebunden sind
Eine Fähigkeit wie „Customer Complaint Handling SOP” gilt für jeden Agenten, der mit Kunden interagiert. Das Binden von Fähigkeiten an Agenten erzeugt ein bidirektionales Eigentumsproblem: Wenn eine Fähigkeit Agenten orchestriert und Agenten Fähigkeiten besitzen, wer kontrolliert wen? Fähigkeiten sind von Natur aus global — sie sind Unternehmensregeln, keine agentenspezifischen Kenntnisse. Die Funktion_resolve_tools() lädt alle aktiven Fähigkeiten, die für den Benutzer sichtbar sind, unabhängig von der Agentenwahl, wobei der gleiche resolve_visibility()-Filter verwendet wird, der auch für andere Ressourcen verwendet wird.
Zwei Injektionsmodi
Fähigkeiten unterstützen zwei Injektionsstrategien, gesteuert durchSKILL_TOOL_MODE (Umgebung) oder die model_config_json.skill_tool_mode des Agenten:
| Modus | Systemaufforderung | Werkzeug | Wann zu verwenden |
|---|---|---|---|
| Progressiv (Standard) | Name + Beschreibungsstubs nur | read_skill(name) lädt vollständigen Inhalt bei Bedarf | Viele Fähigkeiten oder Fähigkeiten mit großem Inhalt — spart Kontexttokens |
| Inline | Vollständiger Fähigkeitsinhalt eingebettet | Keine | Wenige, kleine Fähigkeiten — kein Werkzeugaufruf-Overhead |
read_skill("Customer Complaint SOP") nur auf, wenn es das vollständige Verfahren benötigt, um den Kontext während nicht verwandter Durchläufe schlank zu halten.
Agent als Persona, nicht als Container
Die Architektur von FIM One spiegelt eine bewusste Verschiebung von einem Agent-zentrierten Modell zu einem Ressourcen-zentrierten Modell wider. Vorheriges Modell: Der Agent war ein Container, der den Zugriff auf alle Ressourcen kontrollierte. Kein ausgewählter Agent bedeutete keine Konnektoren, keine Skills, keine spezialisierte KB. Der Agent war der obligatorische Einstiegspunkt für jede Fähigkeit. Aktuelles Modell: Der Agent ist eine Persona — ein Satz von Anweisungen und Verhaltensrichtlinien — kombiniert mit einer optionalen Ressourcenbeschränkung. Ressourcen existieren unabhängig von Agenten. Die Auswahl eines Agenten verengt den Umfang; die Nichtauswahl öffnet ihn vollständig. Dies bedeutet:- Benutzer können sofort mit dem Chatten beginnen, ohne einen Agent zu konfigurieren.
- Das System erkennt verfügbare Ressourcen automatisch und stellt sie als Tools zur Verfügung.
- Agenten werden zu leichten Personas, die schnell erstellt werden können — schreiben Sie einfach Anweisungen und binden Sie optional spezifische Konnektoren und KBs ein.
- Ressourcenverwaltung ist entkoppelt von der Agent-Verwaltung. Das Veröffentlichen eines Konnektors für eine Organisation macht ihn überall verfügbar — im Auto-Discovery-Modus, in Agent-Binding-Dropdowns und bei der Auflösung von Sub-Agent-Tools.
Multi-Agent-Orchestrierung
FIM One unterstützt die Delegierung von Aufgaben an spezialisierte Agenten überCallAgentTool. Dies ermöglicht es einem übergeordneten Agenten (oder dem Auto-Discovery-Modus), Unter-Agenten für fokussierte Aufgaben aufzurufen.
Agenten-Katalog
Zur Laufzeit werden alle aktiven, nicht-Builder-Agenten, die für den Benutzer sichtbar sind, in einem Katalog zusammengestellt. Der Name und die Beschreibung jedes Agenten sind im Parameterschema descall_agent-Tools aufgeführt, sodass das LLM den richtigen Spezialisten semantisch auswählen kann – ohne hartcodiertes Routing.
Vollständige Werkzeugererbung
Wenn ein Sub-Agent übercall_agent(agent_id, task) aufgerufen wird, erhält er eine vollständige ToolRegistry, die aus seiner eigenen Konfiguration erstellt wird – einschließlich seiner gebundenen Connectoren, KB und integrierten Werkzeuge. Sub-Agenten sind vollständige Ausführungseinheiten, keine reinen Text-Berater.
Delegation auf einer Ebene
Um unendliche Rekursion zu verhindern, erhalten Sub-Agenten das Toolcall_agent nicht. Die Delegation erfolgt immer auf einer Ebene: Der übergeordnete Agent ruft den untergeordneten Agent auf, der untergeordnete Agent führt aus und gibt ein Ergebnis zurück. Der übergeordnete Agent synthetisiert Ergebnisse von mehreren Sub-Agenten.
Parallele Ausführung
Im nativen Function-Calling-Modus kann das LLM mehrerecall_agent-Aufrufe in einer einzigen Runde ausführen. Diese werden gleichzeitig über asyncio.gather ausgeführt, was Muster wie „drei Quellen gleichzeitig durchsuchen” ermöglicht.
Sichtbarkeitsmodell
Die gesamte Ressourcenerkennung — in beiden Modi — wird durch ein einheitliches Sichtbarkeitsmodell mit drei Ebenen gesteuert:| Ebene | Beschreibung | Beispiel |
|---|---|---|
| Eigene | Vom Benutzer erstellt. Immer sichtbar. | Ein Konnektor, den Sie für die API Ihres Teams erstellt haben |
| Organisationsweit freigegeben | Ressourcen mit visibility: "org" aus der/den Organisation(en) des Benutzers. Sichtbar für alle genehmigten Organisationsmitglieder. | Ein unternehmensweiter ERP-Konnektor, der von der IT veröffentlicht wurde |
| Market-abonniert | Ressourcen, die vom FIM One Market installiert wurden. Sichtbar für den Abonnenten. | Ein von der Community erstellter Slack-Konnektor, den Sie installiert haben |
resolve_visibility() in web/visibility.py erstellt einen SQL-Filter, der alle drei Ebenen in einer einzigen Abfrage umfasst:
- Automatische Erkennung von Konnektoren im No-Agent-Modus
- Erstellung des Agent-Katalogs für
CallAgentTool - Laden sichtbarer Skills für die Systemaufforderungs-Injektion
- MCP-Server-Auflösung
- Agent-Konfigurationssuche (um sicherzustellen, dass ein Benutzer nur Agenten auswählen kann, die für ihn sichtbar sind)
Beziehungskarte
FIM One hat zwei parallele Ausführungsparadigmen — Chat (Agent-gesteuert) und Workflow (DAG-gesteuert) — die dieselben zugrunde liegenden Ressourcen nutzen, aber unterschiedlich orchestrieren. Wichtige Erkenntnisse aus dem Diagramm:- Agent und Workflow sind parallele Paradigmen. Beide können Konnektoren, Wissensdatenbanken und MCP-Server nutzen — aber durch unterschiedliche Mechanismen. Agenten verwenden sie als Tools in einer
ToolRegistry; Workflows verwenden sie als typisierte DAG-Knoten. - Workflow kann Agenten orchestrieren über den
AGENT-Knoten — ein Workflow-Schritt kann einen vollständigen Agenten mit seiner eigenen ReAct/DAG-Schleife aufrufen. Das Gegenteil ist nicht der Fall: Agenten können Workflows nicht direkt aufrufen (nur indirekt über API/Webhook-Trigger). - Skills werden nur in Agenten eingefügt. Skills sind System-Prompt-Text — sie leiten das Agent-Verhalten. Workflows verbrauchen Skills nicht, da Workflow-Knoten deterministische Logik ausführen, nicht LLM-gesteuerte Reasoning.
- Gemeinsame Ressourcen, unterschiedliche Zugriffsmuster. Ein Konnektor kann von einem Agenten aufgerufen werden (über
ConnectorToolAdapter), von einem Workflow (überCONNECTOR-Knoten) oder von beiden im gleichen Geschäftsprozess — z. B. ein Workflow löst einen Agenten aus, der denselben Konnektor abfragt, den der Workflow auch in einem späteren Schritt verwendet.
Workflow-Engine — das andere Ausführungsparadigma
Während sich dieses Dokument auf die Agent-gesteuerte Chat-Ausführung konzentriert, enthält FIM One eine vollständige Workflow-Engine — einen visuellen DAG-Editor mit 26 Knotentypen für die Automatisierung fester Prozesse.| Aspekt | Agent (Chat) | Workflow |
|---|---|---|
| Orchestrierung | LLM entscheidet dynamisch den nächsten Schritt | Fester DAG, der zur Entwurfszeit definiert wird |
| Am besten geeignet für | Explorative Aufgaben, Gespräche, flexible Argumentation | Genehmigungsketten, geplante ETL, mehrstufige Automatisierungen |
| Kann aufrufen | Konnektoren, KB, MCP, integrierte Tools, Sub-Agenten, Skills | Agenten, Konnektoren, KB, MCP, LLM, HTTP, Code, Menschliche Genehmigung, Sub-Workflows |
| Auslöser | Benutzernachricht im Chat | Manuell, Cron-Zeitplan oder API/Webhook |
| Verschachtelung | Einstufige Delegierung (übergeordneter Agent → untergeordneter Agent) | Beliebige DAG-Tiefe über SUB_WORKFLOW-Knoten |