Skip to content

Latest commit

 

History

History
310 lines (232 loc) · 15.2 KB

File metadata and controls

310 lines (232 loc) · 15.2 KB

Bindu

Bindu

Python Version PyPI version Coverage Tests Discord Contributors Hits

Die Identitäts-, Kommunikations- und Zahlungsschicht für KI-Agenten.

So sieht die Lage aus. Du hast einen Agenten gebaut. Er funktioniert. Aber damit du ihn wirklich von der Leine lässt — mit anderen Agenten reden, beweisen, wer er ist, Geld für seine Arbeit nehmen — wärst du für eine Menge langweiligen Klempnerkram zuständig. Eine DID-Bibliothek integrieren. Einen OAuth-Flow aufsetzen. Bezahl-Middleware. Eine HTTP-Schicht, die welches Protokoll auch immer der Rest der Agentenwelt gerade benutzt.

Bindu ist all dieser Klempnerkram, hinter einem einzigen Funktionsaufruf. Du wickelst deinen Handler mit bindufy() ein, und ein paar Sekunden später ist dein Agent online — mit seiner eigenen kryptografischen Identität, A2A sprechend (das Protokoll, das andere Agenten schon benutzen) und bereit, USDC auf jeder EVM-Chain einzufordern, bevor er irgendwas tut (x402). Dein Handler bleibt so klein wie (messages) -> response. Das Framework im Handler — Agno, LangChain, CrewAI, dein eigenes Ding — interessiert Bindu nicht.

Es gibt SDKs für Python, TypeScript und Kotlin, und sie alle teilen sich denselben gRPC-Kern. Die Sprache ist eine Wahl; das Protokoll und die Identität sind sowieso dieselben. Wenn du tiefer einsteigen willst, sind die Docs die nächste Station.

Installation

Du brauchst Python 3.12+ und uv.

uv add bindu

Wenn du an Bindu selbst rumbastelst statt es nur zu benutzen:

git clone https://github.com/getbindu/Bindu.git
cd Bindu
uv sync --dev

Um die Beispiele auszuführen, brauchst du einen API-Schlüssel für mindestens einen LLM-Anbieter — OPENROUTER_API_KEY, OPENAI_API_KEY oder MINIMAX_API_KEY.


Schnellstart

Bau den Agenten, den du willst, übergib ihn an bindufy(), und er ist online. Der Block unten ist das Ganze — kopier ihn in eine Datei, setz deinen OPENAI_API_KEY, lass ihn laufen.

import os
from bindu.penguin.bindufy import bindufy
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.duckduckgo import DuckDuckGoTools

agent = Agent(
    instructions="You are a research assistant.",
    model=OpenAIChat(id="gpt-4o"),
    tools=[DuckDuckGoTools()],
)

config = {
    "author": "you@example.com",
    "name": "research_agent",
    "description": "Research assistant with web search.",
    "deployment": {"url": "http://localhost:3773", "expose": True},
    "skills": ["skills/question-answering"],
}

def handler(messages: list[dict[str, str]]):
    return agent.run(input=messages)

bindufy(config, handler)

Der Agent ist jetzt live auf http://localhost:3773. expose: True öffnet einen FRP-Tunnel, damit der Rest des Internets ihn erreichen kann, ohne dass du Port-Forwarding einrichtest.

TypeScript-Äquivalent
import { bindufy } from "@bindu/sdk";
import OpenAI from "openai";

const openai = new OpenAI();

bindufy({
  author: "you@example.com",
  name: "research_agent",
  description: "Research assistant.",
  deployment: { url: "http://localhost:3773", expose: true },
  skills: ["skills/question-answering"],
}, async (messages) => {
  const response = await openai.chat.completions.create({
    model: "gpt-4o",
    messages: messages.map(m => ({ role: m.role as "user" | "assistant" | "system", content: m.content })),
  });
  return response.choices[0].message.content || "";
});

Das TypeScript-SDK startet den Python-Kern im Hintergrund — du siehst ihn nicht, und du brauchst auch kein Python in deinem eigenen Code. Gleiches Protokoll, gleiche DID. Vollständiges Beispiel in examples/typescript-openai-agent/.

Den Agenten mit curl aufrufen
curl -X POST http://localhost:3773/ \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "method": "message/send",
    "id": "<uuid>",
    "params": {
      "message": {
        "role": "user",
        "kind": "message",
        "parts": [{"kind": "text", "text": "Hello"}],
        "messageId": "<uuid>",
        "contextId": "<uuid>",
        "taskId": "<uuid>"
      }
    }
  }'

Dann poll tasks/get mit derselben taskId, bis der Zustand completed erreicht.


Features

Jede Zeile hier verlinkt auf den Leitfaden, der tatsächlich ins Detail geht.

Feature Was es macht Docs
A2A JSON-RPC Das Protokoll, das andere Agenten schon sprechen. message/send, tasks/get, message/stream auf Port 3773.
DID-Identität Jede Antwort, die dein Agent verschickt, ist mit einem Ed25519-Schlüssel signiert. Aufrufer verifizieren über eine W3C-DID — es gibt kein geteiltes Geheimnis, das durchsickern könnte. DID.md
OAuth2 via Hydra Scoped Tokens (agent:read, agent:write, agent:execute) statt eines Bearer, der jede Tür öffnet. AUTHENTICATION.md
x402-Zahlungen Setz ein Flag, und der Agent fordert USDC, bevor dein Handler die Anfrage überhaupt sieht. 5 Chains vorkonfiguriert — Base, Base Sepolia, Ethereum, Ethereum Sepolia, SKALE Europa — und jede andere EVM-Chain (Polygon, Avalanche, Arbitrum, …) braucht einen extra_networks-Eintrag. PAYMENT.md
Push-Benachrichtigungen Der Agent ruft dich per Webhook, wenn sich ein Task-Zustand ändert. Hör auf zu pollen. NOTIFICATIONS.md
Skills-System Deklariere, was dein Agent kann; Aufrufer sehen es auf der Agent Card, bevor sie einen Token ausgeben, um zu fragen. SKILLS.md
Private Skills Halte deine kommerziellen Skill-Beschreibungen aus dem öffentlichen Katalog raus. Öffentliche Crawler sehen ein generisches "wir machen X" — auf der Allowlist stehende Partner-DIDs sehen dein echtes Menü an einem zweiten, auth-geschützten Endpoint. Nützlich, wenn deine Skill-Beschreibungen DEINE Produkt-Roadmap SIND. PRIVATE_SKILLS.md
Agenten-Verhandlung Zwei Agenten einigen sich vorab auf Preis, Latenz und SLA. Keine Überraschungsrechnungen. NEGOTIATION.md
Speicher Postgres für Tasks und Nachrichten. Tausch das Backend, wenn du eine Vorliebe hast. STORAGE.md
Scheduler Redis-gestützte Retries, Timeouts und wiederkehrende Tasks. SCHEDULER.md
Öffentlicher Tunnel expose: true stellt deinen Laptop ins Internet. Kein Port-Forwarding, keine Router-Konfiguration. TUNNELING.md
Polyglot-SDKs Python, TypeScript, Kotlin — derselbe gRPC-Kern darunter, dieselbe DID, dieselbe Auth. GRPC_LANGUAGE_AGNOSTIC.md
Cloud-Deploy bindu deploy agent.py --runtime=boxd schickt dein Skript an eine MicroVM und gibt die HTTPS-URL aus. Kein Dockerfile. runtime/quickstart.md
Gateway Ein Planer-LLM, der eine Flotte von Agenten über A2A orchestriert und das Ergebnis zurückstreamt. GATEWAY.md
Observability OpenTelemetry-Traces, Sentry-Fehler, ein Health-Endpoint. Der langweilige Kram, der dich um 2 Uhr morgens rettet. OBSERVABILITY.md

Demo

Es gibt außerdem eine Gmail-artige Betreiber-Inbox in inbox/. Führe cd inbox && npm run dev aus und öffne http://localhost:3775.


Beispiele

Eine Auswahl aus examples/:

Beispiel Was es zeigt
Agent Swarm Eine kleine Gesellschaft aus Agno-Agenten, die sich gegenseitig Arbeit zuwerfen.
Premium Advisor x402 in der Praxis — der Aufrufer muss USDC zahlen, bevor irgendwas läuft.
Hermes über Bindu Der Hermes-Agent von Nous Research, in ~90 Zeilen bindufiziert.
Gateway Test Fleet Fünf Agenten und ein Gateway — die Multi-Agenten-Story von Anfang bis Ende.
TypeScript OpenAI Agent Ein reiner TS-Agent ohne Python in deinem Repo.

Es gibt 20+ weitere zu CSV-Analyse, PDF-Q&A, Speech-to-Text, Web-Scraping, mehrsprachiger Zusammenarbeit, Blog-Schreiben und so weiter. Stöber in examples/.


Warum wir Bindu gebaut haben

Wir setzen Bindu produktiv ein, um das Trade Compliance OS zu bauen — einen Schwarm Agenten, der CBAM, EUDR, HS-Codes und Digitale Produktpässe abwickelt, damit ein KMU Kaffee, Textilien oder Stahl über Grenzen schicken kann, ohne einen sechsstelligen Scheck an eine Anwaltskanzlei zu schreiben. Jeder Agent in diesem Schwarm ist bindufiziert. Das Protokoll, die Identität, die Bezahlschienen — genau das mussten wir mit Bindu zuerst lösen.

Wenn du einen Agenten gebaut hast, der irgendwas davon berührt — Zollpapiere, Lieferantenaudits, Materialbeschaffung, regulatorische Meldungen, irgendwas in der Nachbarschaft — hätten wir ihn gern im Netzwerk. Triff uns auf Discord, und lass uns reden.


Unterstützte Frameworks

Bring mit, was du sowieso schon gern zum Agenten-Schreiben benutzt. Bindu ist es egal, was im Handler steckt.

Sprache In diesem Repo getestete Frameworks
Python AG2, Agno, CrewAI, Hermes Agent, LangChain, LangGraph, Notte
TypeScript OpenAI SDK, LangChain.js
Kotlin OpenAI Kotlin SDK
Jede andere über den gRPC-Kern — ein neues SDK sind meistens ein paar hundert Zeilen

Wenn dein Modell-Anbieter die OpenAI- oder Anthropic-API spricht, funktioniert es — OpenRouter, OpenAI, MiniMax und der Rest.


Dokumentation


Tests

uv run pytest tests/unit/ -v                                    # schnelle Unit-Tests
uv run pytest tests/integration/grpc/ -v -m e2e                 # gRPC E2E
uv run pytest -n auto --cov=bindu --cov-report=term-missing     # volle Suite

Mitwirken

git clone https://github.com/getbindu/Bindu.git
cd Bindu
uv venv --python 3.12.9 && source .venv/bin/activate
uv sync --dev
pre-commit run --all-files

Der volle Leitfaden steht in .github/contributing.md. Das meiste Tagesgeschäft läuft auf Discord — komm vorbei und sag hallo.


Maintainer

Raahul Dutta
Raahul Dutta
Paras Chamoli
Paras Chamoli
Chandan
Chandan

Danksagungen

Bindu steht auf den Schultern von viel guter Open-Source-Software:

FastA2A · A2A · x402 · Hugging Face chat-ui · 12 Factor Agents · OpenCode · OpenMoji · ASCII Space Art


Star-Verlauf

Star-Verlauf

Lizenz

Apache 2.0. Siehe LICENSE.md.

"Wir glauben an die Sonnenblumen-Theorie — gemeinsam aufrecht stehen, Hoffnung und Licht ins Internet der Agenten bringen."