diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 30d2eb2608..0000000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,151 +0,0 @@ -name: Build and Publish Docker Image - -on: - push: - branches: [main, staging] - -jobs: - build-and-push: - strategy: - fail-fast: false - matrix: - include: - # AMD64 builds on x86 runners - - dockerfile: ./docker/app.Dockerfile - image: ghcr.io/simstudioai/simstudio - platform: linux/amd64 - arch: amd64 - runner: linux-x64-8-core - - dockerfile: ./docker/db.Dockerfile - image: ghcr.io/simstudioai/migrations - platform: linux/amd64 - arch: amd64 - runner: linux-x64-8-core - - dockerfile: ./docker/realtime.Dockerfile - image: ghcr.io/simstudioai/realtime - platform: linux/amd64 - arch: amd64 - runner: linux-x64-8-core - # ARM64 builds on native ARM64 runners - - dockerfile: ./docker/app.Dockerfile - image: ghcr.io/simstudioai/simstudio - platform: linux/arm64 - arch: arm64 - runner: linux-arm64-8-core - - dockerfile: ./docker/db.Dockerfile - image: ghcr.io/simstudioai/migrations - platform: linux/arm64 - arch: arm64 - runner: linux-arm64-8-core - - dockerfile: ./docker/realtime.Dockerfile - image: ghcr.io/simstudioai/realtime - platform: linux/arm64 - arch: arm64 - runner: linux-arm64-8-core - runs-on: ${{ matrix.runner }} - permissions: - contents: read - packages: write - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to the Container registry - if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main' - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ matrix.image }} - tags: | - type=raw,value=latest-${{ matrix.arch }},enable=${{ github.ref == 'refs/heads/main' }} - type=raw,value=staging-${{ github.sha }}-${{ matrix.arch }},enable=${{ github.ref == 'refs/heads/staging' }} - type=sha,format=long,suffix=-${{ matrix.arch }} - - - name: Build and push Docker image - uses: docker/build-push-action@v6 - with: - context: . - file: ${{ matrix.dockerfile }} - platforms: ${{ matrix.platform }} - push: ${{ github.event_name != 'pull_request' && github.ref == 'refs/heads/main' }} - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - cache-from: type=gha,scope=build-v3 - cache-to: type=gha,mode=max,scope=build-v3 - provenance: false - sbom: false - - create-manifests: - runs-on: ubuntu-latest - needs: build-and-push - if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main' - strategy: - matrix: - include: - - image: ghcr.io/simstudioai/simstudio - - image: ghcr.io/simstudioai/migrations - - image: ghcr.io/simstudioai/realtime - permissions: - contents: read - packages: write - - steps: - - name: Log in to the Container registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata for manifest - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ matrix.image }} - tags: | - type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }} - type=sha,format=long - - - name: Create and push manifest - run: | - # Extract the tags from metadata (these are the final manifest tags we want) - MANIFEST_TAGS="${{ steps.meta.outputs.tags }}" - - # Create manifest for each tag - for manifest_tag in $MANIFEST_TAGS; do - echo "Creating manifest for $manifest_tag" - - # The architecture-specific images have -amd64 and -arm64 suffixes - amd64_image="${manifest_tag}-amd64" - arm64_image="${manifest_tag}-arm64" - - echo "Looking for images: $amd64_image and $arm64_image" - - # Check if both architecture images exist - if docker manifest inspect "$amd64_image" >/dev/null 2>&1 && docker manifest inspect "$arm64_image" >/dev/null 2>&1; then - echo "Both images found, creating manifest..." - docker manifest create "$manifest_tag" \ - "$amd64_image" \ - "$arm64_image" - docker manifest push "$manifest_tag" - echo "Successfully created and pushed manifest for $manifest_tag" - else - echo "Error: One or both architecture images not found" - echo "Checking AMD64 image: $amd64_image" - docker manifest inspect "$amd64_image" || echo "AMD64 image not found" - echo "Checking ARM64 image: $arm64_image" - docker manifest inspect "$arm64_image" || echo "ARM64 image not found" - exit 1 - fi - done \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2d523dafb1..b1c9e8b753 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,74 +6,53 @@ on: pull_request: branches: [main, staging] +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: false + jobs: - test: + test-build: name: Test and Build - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: latest - - - name: Install dependencies - run: bun install --frozen-lockfile - - - name: Run tests with coverage - env: - NODE_OPTIONS: '--no-warnings' - NEXT_PUBLIC_APP_URL: 'https://www.sim.ai' - DATABASE_URL: 'postgresql://postgres:postgres@localhost:5432/simstudio' - ENCRYPTION_KEY: '7cf672e460e430c1fba707575c2b0e2ad5a99dddf9b7b7e3b5646e630861db1c' # dummy key for CI only - run: bun run test + uses: ./.github/workflows/test-build.yml + secrets: inherit - - name: Build application - env: - NODE_OPTIONS: '--no-warnings' - NEXT_PUBLIC_APP_URL: 'https://www.sim.ai' - DATABASE_URL: 'postgresql://postgres:postgres@localhost:5432/simstudio' - STRIPE_SECRET_KEY: 'dummy_key_for_ci_only' - STRIPE_WEBHOOK_SECRET: 'dummy_secret_for_ci_only' - RESEND_API_KEY: 'dummy_key_for_ci_only' - AWS_REGION: 'us-west-2' - ENCRYPTION_KEY: '7cf672e460e430c1fba707575c2b0e2ad5a99dddf9b7b7e3b5646e630861db1c' # dummy key for CI only - run: bun run build - - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v5 - with: - directory: ./apps/sim/coverage - fail_ci_if_error: false - verbose: true + # Build and push images (ECR for staging, ECR + GHCR for main) + build-images: + name: Build Images + needs: test-build + if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging') + uses: ./.github/workflows/images.yml + secrets: inherit + permissions: + contents: read + packages: write + id-token: write + + # Deploy Trigger.dev (after builds complete) + trigger-deploy: + name: Deploy Trigger.dev + needs: build-images + if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging') + uses: ./.github/workflows/trigger-deploy.yml + secrets: inherit + # Run database migrations (depends on build completion and trigger deployment) migrations: name: Apply Database Migrations - runs-on: ubuntu-latest + needs: [build-images, trigger-deploy] + if: | + always() && + github.event_name == 'push' && + (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging') && + needs.build-images.result == 'success' && + needs.trigger-deploy.result == 'success' + uses: ./.github/workflows/migrations.yml + secrets: inherit + + # Process docs embeddings if needed + process-docs: + name: Process Docs + needs: migrations if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging') - needs: test - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Bun - uses: oven-sh/setup-bun@v2 - with: - bun-version: latest - - - name: Install dependencies - run: bun install - - - name: Apply migrations - working-directory: ./packages/db - env: - DATABASE_URL: ${{ github.ref == 'refs/heads/main' && secrets.DATABASE_URL || secrets.STAGING_DATABASE_URL }} - run: bunx drizzle-kit migrate --config=./drizzle.config.ts + uses: ./.github/workflows/docs-embeddings.yml + secrets: inherit diff --git a/.github/workflows/docs-embeddings.yml b/.github/workflows/docs-embeddings.yml index f59da979ee..d61d866165 100644 --- a/.github/workflows/docs-embeddings.yml +++ b/.github/workflows/docs-embeddings.yml @@ -1,16 +1,13 @@ name: Process Docs Embeddings on: - push: - branches: [main, staging] - paths: - - 'apps/docs/**' + workflow_call: workflow_dispatch: # Allow manual triggering jobs: process-docs-embeddings: name: Process Documentation Embeddings - runs-on: ubuntu-latest + runs-on: blacksmith-4vcpu-ubuntu-2404 if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging' steps: diff --git a/.github/workflows/i18n.yml b/.github/workflows/i18n.yml index c7806facfd..5275b9444b 100644 --- a/.github/workflows/i18n.yml +++ b/.github/workflows/i18n.yml @@ -14,7 +14,7 @@ permissions: jobs: translate: - runs-on: ubuntu-latest + runs-on: blacksmith-4vcpu-ubuntu-2404 if: github.actor != 'github-actions[bot]' # Prevent infinite loops steps: @@ -55,7 +55,7 @@ jobs: with: token: ${{ secrets.GH_PAT }} commit-message: "feat(i18n): update translations" - title: "🌐 Auto-update translations" + title: "feat(i18n): update translations" body: | ## Summary Automated translation updates triggered by changes to documentation. @@ -76,8 +76,10 @@ jobs: ## Testing This PR includes automated translations for modified English documentation content: - 🇪🇸 Spanish (es) translations - - 🇫🇷 French (fr) translations + - 🇫🇷 French (fr) translations - 🇨🇳 Chinese (zh) translations + - 🇯🇵 Japanese (ja) translations + - 🇩🇪 German (de) translations **What reviewers should focus on:** - Verify translated content accuracy and context @@ -102,7 +104,7 @@ jobs: verify-translations: needs: translate - runs-on: ubuntu-latest + runs-on: blacksmith-4vcpu-ubuntu-2404 if: always() # Run even if translation fails steps: @@ -137,15 +139,21 @@ jobs: es_count=$(find content/docs/es -name "*.mdx" 2>/dev/null | wc -l || echo 0) fr_count=$(find content/docs/fr -name "*.mdx" 2>/dev/null | wc -l || echo 0) zh_count=$(find content/docs/zh -name "*.mdx" 2>/dev/null | wc -l || echo 0) + ja_count=$(find content/docs/ja -name "*.mdx" 2>/dev/null | wc -l || echo 0) + de_count=$(find content/docs/de -name "*.mdx" 2>/dev/null | wc -l || echo 0) es_percentage=$((es_count * 100 / en_count)) fr_percentage=$((fr_count * 100 / en_count)) zh_percentage=$((zh_count * 100 / en_count)) + ja_percentage=$((ja_count * 100 / en_count)) + de_percentage=$((de_count * 100 / en_count)) echo "### Coverage Statistics" >> $GITHUB_STEP_SUMMARY echo "- **🇬🇧 English**: $en_count files (source)" >> $GITHUB_STEP_SUMMARY echo "- **🇪🇸 Spanish**: $es_count/$en_count files ($es_percentage%)" >> $GITHUB_STEP_SUMMARY echo "- **🇫🇷 French**: $fr_count/$en_count files ($fr_percentage%)" >> $GITHUB_STEP_SUMMARY echo "- **🇨🇳 Chinese**: $zh_count/$en_count files ($zh_percentage%)" >> $GITHUB_STEP_SUMMARY + echo "- **🇯🇵 Japanese**: $ja_count/$en_count files ($ja_percentage%)" >> $GITHUB_STEP_SUMMARY + echo "- **🇩🇪 German**: $de_count/$en_count files ($de_percentage%)" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "🔄 **Auto-translation PR**: Check for new pull request with updated translations" >> $GITHUB_STEP_SUMMARY \ No newline at end of file diff --git a/.github/workflows/images.yml b/.github/workflows/images.yml new file mode 100644 index 0000000000..e55e227b8e --- /dev/null +++ b/.github/workflows/images.yml @@ -0,0 +1,184 @@ +name: Build and Push Images + +on: + workflow_call: + workflow_dispatch: + +permissions: + contents: read + packages: write + id-token: write + +jobs: + build-amd64: + name: Build AMD64 + runs-on: blacksmith-4vcpu-ubuntu-2404 + strategy: + fail-fast: false + matrix: + include: + - dockerfile: ./docker/app.Dockerfile + ghcr_image: ghcr.io/simstudioai/simstudio + ecr_repo_secret: ECR_APP + - dockerfile: ./docker/db.Dockerfile + ghcr_image: ghcr.io/simstudioai/migrations + ecr_repo_secret: ECR_MIGRATIONS + - dockerfile: ./docker/realtime.Dockerfile + ghcr_image: ghcr.io/simstudioai/realtime + ecr_repo_secret: ECR_REALTIME + outputs: + registry: ${{ steps.login-ecr.outputs.registry }} + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ github.ref == 'refs/heads/main' && secrets.AWS_ROLE_TO_ASSUME || secrets.STAGING_AWS_ROLE_TO_ASSUME }} + aws-region: ${{ github.ref == 'refs/heads/main' && secrets.AWS_REGION || secrets.STAGING_AWS_REGION }} + + - name: Login to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v2 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Login to GHCR + if: github.ref == 'refs/heads/main' + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up Docker Buildx + uses: useblacksmith/setup-docker-builder@v1 + + - name: Generate tags + id: meta + run: | + ECR_REGISTRY="${{ steps.login-ecr.outputs.registry }}" + ECR_REPO="${{ secrets[matrix.ecr_repo_secret] }}" + GHCR_IMAGE="${{ matrix.ghcr_image }}" + + # ECR tags (always build for ECR) + if [ "${{ github.ref }}" = "refs/heads/main" ]; then + ECR_TAG="latest" + else + ECR_TAG="staging" + fi + ECR_IMAGE="${ECR_REGISTRY}/${ECR_REPO}:${ECR_TAG}" + + # Build tags list + TAGS="${ECR_IMAGE}" + + # Add GHCR tags only for main branch + if [ "${{ github.ref }}" = "refs/heads/main" ]; then + GHCR_AMD64="${GHCR_IMAGE}:latest-amd64" + GHCR_SHA="${GHCR_IMAGE}:${{ github.sha }}-amd64" + TAGS="${TAGS},$GHCR_AMD64,$GHCR_SHA" + fi + + echo "tags=${TAGS}" >> $GITHUB_OUTPUT + + - name: Build and push images + uses: useblacksmith/build-push-action@v2 + with: + context: . + file: ${{ matrix.dockerfile }} + platforms: linux/amd64 + push: true + tags: ${{ steps.meta.outputs.tags }} + provenance: false + sbom: false + + build-ghcr-arm64: + name: Build ARM64 (GHCR Only) + runs-on: linux-arm64-8-core + if: github.ref == 'refs/heads/main' + strategy: + fail-fast: false + matrix: + include: + - dockerfile: ./docker/app.Dockerfile + image: ghcr.io/simstudioai/simstudio + - dockerfile: ./docker/db.Dockerfile + image: ghcr.io/simstudioai/migrations + - dockerfile: ./docker/realtime.Dockerfile + image: ghcr.io/simstudioai/realtime + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up Docker Buildx + uses: useblacksmith/setup-docker-builder@v1 + + - name: Generate ARM64 tags + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ matrix.image }} + tags: | + type=raw,value=latest-arm64 + type=sha,format=long,suffix=-arm64 + + - name: Build and push ARM64 to GHCR + uses: useblacksmith/build-push-action@v2 + with: + context: . + file: ${{ matrix.dockerfile }} + platforms: linux/arm64 + push: true + tags: ${{ steps.meta.outputs.tags }} + provenance: false + sbom: false + + create-ghcr-manifests: + name: Create GHCR Manifests + runs-on: blacksmith-4vcpu-ubuntu-2404 + needs: [build-amd64, build-ghcr-arm64] + if: github.ref == 'refs/heads/main' + strategy: + matrix: + include: + - image: ghcr.io/simstudioai/simstudio + - image: ghcr.io/simstudioai/migrations + - image: ghcr.io/simstudioai/realtime + + steps: + - name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Create and push manifests + run: | + IMAGE_BASE="${{ matrix.image }}" + + # Create latest manifest + docker manifest create "${IMAGE_BASE}:latest" \ + "${IMAGE_BASE}:latest-amd64" \ + "${IMAGE_BASE}:latest-arm64" + docker manifest push "${IMAGE_BASE}:latest" + + # Create SHA manifest + docker manifest create "${IMAGE_BASE}:${{ github.sha }}" \ + "${IMAGE_BASE}:${{ github.sha }}-amd64" \ + "${IMAGE_BASE}:${{ github.sha }}-arm64" + docker manifest push "${IMAGE_BASE}:${{ github.sha }}" \ No newline at end of file diff --git a/.github/workflows/migrations.yml b/.github/workflows/migrations.yml new file mode 100644 index 0000000000..191ee0fea2 --- /dev/null +++ b/.github/workflows/migrations.yml @@ -0,0 +1,28 @@ +name: Database Migrations + +on: + workflow_call: + workflow_dispatch: + +jobs: + migrate: + name: Apply Database Migrations + runs-on: blacksmith-4vcpu-ubuntu-2404 + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Install dependencies + run: bun install + + - name: Apply migrations + working-directory: ./packages/db + env: + DATABASE_URL: ${{ github.ref == 'refs/heads/main' && secrets.DATABASE_URL || secrets.STAGING_DATABASE_URL }} + run: bunx drizzle-kit migrate --config=./drizzle.config.ts \ No newline at end of file diff --git a/.github/workflows/publish-cli.yml b/.github/workflows/publish-cli.yml index 41bce6a7b6..88209378c9 100644 --- a/.github/workflows/publish-cli.yml +++ b/.github/workflows/publish-cli.yml @@ -8,7 +8,7 @@ on: jobs: publish-npm: - runs-on: ubuntu-latest + runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - name: Checkout repository uses: actions/checkout@v4 diff --git a/.github/workflows/publish-python-sdk.yml b/.github/workflows/publish-python-sdk.yml index 6892405de1..fdd208075a 100644 --- a/.github/workflows/publish-python-sdk.yml +++ b/.github/workflows/publish-python-sdk.yml @@ -8,7 +8,7 @@ on: jobs: publish-pypi: - runs-on: ubuntu-latest + runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - name: Checkout repository uses: actions/checkout@v4 diff --git a/.github/workflows/publish-ts-sdk.yml b/.github/workflows/publish-ts-sdk.yml index 360f5aa20a..b1e733355e 100644 --- a/.github/workflows/publish-ts-sdk.yml +++ b/.github/workflows/publish-ts-sdk.yml @@ -8,7 +8,7 @@ on: jobs: publish-npm: - runs-on: ubuntu-latest + runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - name: Checkout repository uses: actions/checkout@v4 diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml new file mode 100644 index 0000000000..2022aed361 --- /dev/null +++ b/.github/workflows/test-build.yml @@ -0,0 +1,54 @@ +name: Test and Build + +on: + workflow_call: + workflow_dispatch: + +jobs: + test-build: + name: Test and Build + runs-on: blacksmith-4vcpu-ubuntu-2404 + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: latest + + - name: Install dependencies + run: bun install --frozen-lockfile + + - name: Run tests with coverage + env: + NODE_OPTIONS: '--no-warnings' + NEXT_PUBLIC_APP_URL: 'https://www.sim.ai' + DATABASE_URL: 'postgresql://postgres:postgres@localhost:5432/simstudio' + ENCRYPTION_KEY: '7cf672e460e430c1fba707575c2b0e2ad5a99dddf9b7b7e3b5646e630861db1c' # dummy key for CI only + run: bun run test + + - name: Build application + env: + NODE_OPTIONS: '--no-warnings' + NEXT_PUBLIC_APP_URL: 'https://www.sim.ai' + DATABASE_URL: 'postgresql://postgres:postgres@localhost:5432/simstudio' + STRIPE_SECRET_KEY: 'dummy_key_for_ci_only' + STRIPE_WEBHOOK_SECRET: 'dummy_secret_for_ci_only' + RESEND_API_KEY: 'dummy_key_for_ci_only' + AWS_REGION: 'us-west-2' + ENCRYPTION_KEY: '7cf672e460e430c1fba707575c2b0e2ad5a99dddf9b7b7e3b5646e630861db1c' # dummy key for CI only + run: bun run build + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v5 + with: + directory: ./apps/sim/coverage + fail_ci_if_error: false + verbose: true \ No newline at end of file diff --git a/.github/workflows/trigger-deploy.yml b/.github/workflows/trigger-deploy.yml index 2ff92647bf..e8a47275d8 100644 --- a/.github/workflows/trigger-deploy.yml +++ b/.github/workflows/trigger-deploy.yml @@ -1,28 +1,27 @@ name: Trigger.dev Deploy on: - push: - branches: - - main - - staging + workflow_call: + workflow_dispatch: jobs: deploy: - name: Trigger.dev Deploy - runs-on: ubuntu-latest + name: Deploy to Trigger.dev + runs-on: blacksmith-4vcpu-ubuntu-2404 concurrency: group: trigger-deploy-${{ github.ref }} cancel-in-progress: false env: TRIGGER_ACCESS_TOKEN: ${{ secrets.TRIGGER_ACCESS_TOKEN }} + steps: - - name: Checkout repository + - name: Checkout code uses: actions/checkout@v4 - - name: Setup Node.js + - name: Setup Node uses: actions/setup-node@v4 with: - node-version: 'lts/*' + node-version: latest - name: Setup Bun uses: oven-sh/setup-bun@v2 @@ -32,13 +31,12 @@ jobs: - name: Install dependencies run: bun install - - name: Deploy to Staging + - name: Deploy to Trigger.dev (Staging) if: github.ref == 'refs/heads/staging' working-directory: ./apps/sim run: npx --yes trigger.dev@4.0.4 deploy -e staging - - name: Deploy to Production + - name: Deploy to Trigger.dev (Production) if: github.ref == 'refs/heads/main' working-directory: ./apps/sim - run: npx --yes trigger.dev@4.0.4 deploy - + run: npx --yes trigger.dev@4.0.4 deploy \ No newline at end of file diff --git a/apps/docs/components/ui/language-dropdown.tsx b/apps/docs/components/ui/language-dropdown.tsx index 8067c96f56..0a474a491f 100644 --- a/apps/docs/components/ui/language-dropdown.tsx +++ b/apps/docs/components/ui/language-dropdown.tsx @@ -2,12 +2,14 @@ import { useEffect, useState } from 'react' import { Check, ChevronDown } from 'lucide-react' -import { useParams, usePathname } from 'next/navigation' +import { useParams, usePathname, useRouter } from 'next/navigation' const languages = { en: { name: 'English', flag: '🇺🇸' }, es: { name: 'Español', flag: '🇪🇸' }, fr: { name: 'Français', flag: '🇫🇷' }, + de: { name: 'Deutsch', flag: '🇩🇪' }, + ja: { name: '日本語', flag: '🇯🇵' }, zh: { name: '简体中文', flag: '🇨🇳' }, } @@ -15,6 +17,7 @@ export function LanguageDropdown() { const [isOpen, setIsOpen] = useState(false) const pathname = usePathname() const params = useParams() + const router = useRouter() const [currentLang, setCurrentLang] = useState(() => { const langFromParams = params?.lang as string @@ -56,9 +59,18 @@ export function LanguageDropdown() { newPath = `/${locale}${segments.length > 0 ? `/${segments.join('/')}` : '/introduction'}` } - window.location.href = newPath + router.push(newPath) } + useEffect(() => { + if (!isOpen) return + const onKey = (e: KeyboardEvent) => { + if (e.key === 'Escape') setIsOpen(false) + } + window.addEventListener('keydown', onKey) + return () => window.removeEventListener('keydown', onKey) + }, [isOpen]) + return (
))}
diff --git a/apps/docs/content/docs/de/blocks/agent.mdx b/apps/docs/content/docs/de/blocks/agent.mdx new file mode 100644 index 0000000000..b9c1773576 --- /dev/null +++ b/apps/docs/content/docs/de/blocks/agent.mdx @@ -0,0 +1,306 @@ +--- +title: Agent +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Image } from '@/components/ui/image' +import { Video } from '@/components/ui/video' + +Der Agent-Block dient als Schnittstelle zwischen Ihrem Workflow und Large Language Models (LLMs). Er führt Inferenzanfragen an verschiedene KI-Anbieter aus, verarbeitet natürlichsprachliche Eingaben gemäß definierten Anweisungen und erzeugt strukturierte oder unstrukturierte Ausgaben für die nachgelagerte Verarbeitung. + +
+ Agent-Block-Konfiguration +
+ +## Überblick + +Der Agent-Block ermöglicht Ihnen: + + + + Natürliche Sprache verarbeiten: Benutzereingaben analysieren und kontextbezogene Antworten generieren + + + KI-gestützte Aufgaben ausführen: Inhaltsanalyse, -erstellung und Entscheidungsfindung durchführen + + + Externe Tools aufrufen: Während der Verarbeitung auf APIs, Datenbanken und Dienste zugreifen + + + Strukturierte Ausgabe erzeugen: JSON-Daten zurückgeben, die Ihren Schema-Anforderungen entsprechen + + + +## Konfigurationsoptionen + +### System-Prompt + +Der System-Prompt legt die Betriebsparameter und Verhaltenseinschränkungen des Agenten fest. Diese Konfiguration definiert die Rolle des Agenten, die Antwortmethodik und die Verarbeitungsgrenzen für alle eingehenden Anfragen. + +```markdown +You are a helpful assistant that specializes in financial analysis. +Always provide clear explanations and cite sources when possible. +When responding to questions about investments, include risk disclaimers. +``` + +### Benutzer-Prompt + +Der Benutzer-Prompt stellt die primären Eingabedaten für die Inferenzverarbeitung dar. Dieser Parameter akzeptiert natürlichsprachlichen Text oder strukturierte Daten, die der Agent analysieren und auf die er reagieren wird. Zu den Eingabequellen gehören: + +- **Statische Konfiguration**: Direkte Texteingabe, die in der Block-Konfiguration angegeben ist +- **Dynamische Eingabe**: Daten, die von vorgelagerten Blöcken über Verbindungsschnittstellen übergeben werden +- **Laufzeitgenerierung**: Programmatisch erzeugte Inhalte während der Workflow-Ausführung + +### Modellauswahl + +Der Agent-Block unterstützt mehrere LLM-Anbieter über eine einheitliche Inferenzschnittstelle. Verfügbare Modelle umfassen: + +**OpenAI-Modelle**: GPT-5, GPT-4o, o1, o3, o4-mini, gpt-4.1 (API-basierte Inferenz) +**Anthropic-Modelle**: Claude 3.7 Sonnet (API-basierte Inferenz) +**Google-Modelle**: Gemini 2.5 Pro, Gemini 2.0 Flash (API-basierte Inferenz) +**Alternative Anbieter**: Groq, Cerebras, xAI, DeepSeek (API-basierte Inferenz) +**Lokale Bereitstellung**: Ollama-kompatible Modelle (selbst gehostete Inferenz) + +
+
+ +### Temperatur + +Steuern Sie die Kreativität und Zufälligkeit der Antworten: + + + + Deterministische, fokussierte Antworten. Am besten für faktische Aufgaben, Kundensupport und + Situationen, in denen Genauigkeit entscheidend ist. + + + Ausgewogene Kreativität und Fokus. Geeignet für allgemeine Anwendungen, die sowohl + Genauigkeit als auch etwas Kreativität erfordern. + + + Kreativere, abwechslungsreichere Antworten. Ideal für kreatives Schreiben, Brainstorming und das Generieren + vielfältiger Ideen. + + + +
+ Der Temperaturbereich (0-1 oder 0-2) variiert je nach ausgewähltem Modell. +
+ +### API-Schlüssel + +Ihr API-Schlüssel für den ausgewählten LLM-Anbieter. Dieser wird sicher gespeichert und für die Authentifizierung verwendet. + +### Tools + +Tools erweitern die Fähigkeiten des Agenten durch externe API-Integrationen und Service-Verbindungen. Das Tool-System ermöglicht Funktionsaufrufe, sodass der Agent Operationen über die Texterstellung hinaus ausführen kann. + +**Tool-Integrationsprozess**: +1. Zugriff auf den Tools-Konfigurationsbereich innerhalb des Agent-Blocks +2. Auswahl aus über 60 vorgefertigten Integrationen oder Definition benutzerdefinierter Funktionen +3. Konfiguration von Authentifizierungsparametern und Betriebseinschränkungen + +
+
+ +**Verfügbare Tool-Kategorien**: +- **Kommunikation**: Gmail, Slack, Telegram, WhatsApp, Microsoft Teams +- **Datenquellen**: Notion, Google Sheets, Airtable, Supabase, Pinecone +- **Webdienste**: Firecrawl, Google Search, Exa AI, Browser-Automatisierung +- **Entwicklung**: GitHub, Jira, Linear Repository- und Issue-Management +- **KI-Dienste**: OpenAI, Perplexity, Hugging Face, ElevenLabs + +**Steuerung der Tool-Ausführung**: +- **Auto**: Modell bestimmt Tool-Aufruf basierend auf Kontext und Notwendigkeit +- **Required**: Tool muss bei jeder Inferenzanfrage aufgerufen werden +- **None**: Tool-Definition verfügbar, aber vom Modellkontext ausgeschlossen + +
+
+ +### Antwortformat + +Der Parameter für das Antwortformat erzwingt eine strukturierte Ausgabegenerierung durch JSON-Schema-Validierung. Dies gewährleistet konsistente, maschinenlesbare Antworten, die vordefinierten Datenstrukturen entsprechen: + +```json +{ + "name": "user_analysis", + "schema": { + "type": "object", + "properties": { + "sentiment": { + "type": "string", + "enum": ["positive", "negative", "neutral"] + }, + "confidence": { + "type": "number", + "minimum": 0, + "maximum": 1 + } + }, + "required": ["sentiment", "confidence"] + } +} +``` + +Diese Konfiguration beschränkt die Ausgabe des Modells auf die Einhaltung des angegebenen Schemas, verhindert Freitext-Antworten und stellt eine strukturierte Datengenerierung sicher. + +### Zugriff auf Ergebnisse + +Nach Abschluss eines Agenten können Sie auf seine Ausgaben zugreifen: + +- **``**: Der Antworttext oder die strukturierten Daten des Agenten +- **``**: Token-Nutzungsstatistiken (Prompt, Completion, Gesamt) +- **``**: Details zu allen Tools, die der Agent während der Ausführung verwendet hat +- **``**: Geschätzte Kosten des API-Aufrufs (falls verfügbar) + +## Erweiterte Funktionen + +### Memory + Agent: Gesprächsverlauf + +Verwenden Sie einen `Memory`Block mit einer konsistenten `id` (zum Beispiel `chat`), um Nachrichten zwischen Durchläufen zu speichern und diesen Verlauf in den Prompt des Agenten einzubeziehen. + +- Fügen Sie die Nachricht des Benutzers vor dem Agenten hinzu +- Lesen Sie den Gesprächsverlauf für den Kontext +- Hängen Sie die Antwort des Agenten nach dessen Ausführung an + +```yaml +# 1) Add latest user message +- Memory (operation: add) + id: chat + role: user + content: {{input}} + +# 2) Load conversation history +- Memory (operation: get) + id: chat + +# 3) Run the agent with prior messages available +- Agent + System Prompt: ... + User Prompt: | + Use the conversation so far: + {{memory_get.memories}} + Current user message: {{input}} + +# 4) Store the agent reply +- Memory (operation: add) + id: chat + role: assistant + content: {{agent.content}} +``` + +Siehe die `Memory`Block-Referenz für Details: [/tools/memory](/tools/memory). + +## Eingaben und Ausgaben + + + +
    +
  • + System Prompt: Anweisungen, die das Verhalten und die Rolle des Agenten definieren +
  • +
  • + User Prompt: Eingabetext oder -daten zur Verarbeitung +
  • +
  • + Model: KI-Modellauswahl (OpenAI, Anthropic, Google, etc.) +
  • +
  • + Temperature: Steuerung der Antwort-Zufälligkeit (0-2) +
  • +
  • + Tools: Array verfügbarer Tools für Funktionsaufrufe +
  • +
  • + Response Format: JSON-Schema für strukturierte Ausgabe +
  • +
+
+ +
    +
  • + agent.content: Antworttext oder strukturierte Daten des Agenten +
  • +
  • + agent.tokens: Token-Nutzungsstatistik-Objekt +
  • +
  • + agent.tool_calls: Array mit Details zur Tool-Ausführung +
  • +
  • + agent.cost: Geschätzte API-Aufrufkosten (falls verfügbar) +
  • +
+
+ +
    +
  • + Content: Primäre Antwortausgabe vom Agenten +
  • +
  • + Metadata: Nutzungsstatistiken und Ausführungsdetails +
  • +
  • + Access: Verfügbar in Blöcken nach dem Agenten +
  • +
+
+
+ +## Beispielanwendungsfälle + +### Automatisierung des Kundendienstes + +
+

Szenario: Bearbeitung von Kundenanfragen mit Datenbankzugriff

+
    +
  1. Benutzer reicht ein Support-Ticket über den API-Block ein
  2. +
  3. Agent prüft Bestellungen/Abonnements in Postgres und durchsucht die Wissensdatenbank nach Anleitungen
  4. +
  5. Falls eine Eskalation erforderlich ist, erstellt der Agent ein Linear-Ticket mit relevantem Kontext
  6. +
  7. Agent verfasst eine klare E-Mail-Antwort
  8. +
  9. Gmail sendet die Antwort an den Kunden
  10. +
  11. Konversation wird im Speicher gesichert, um den Verlauf für zukünftige Nachrichten zu erhalten
  12. +
+
+ +### Multi-Modell-Inhaltsanalyse + +
+

Szenario: Analyse von Inhalten mit verschiedenen KI-Modellen

+
    +
  1. Funktionsblock verarbeitet hochgeladenes Dokument
  2. +
  3. Agent mit GPT-4o führt technische Analyse durch
  4. +
  5. Agent mit Claude analysiert Stimmung und Tonfall
  6. +
  7. Funktionsblock kombiniert Ergebnisse für den Abschlussbericht
  8. +
+
+ +### Werkzeuggestützter Rechercheassistent + +
+

Szenario: Rechercheassistent mit Websuche und Dokumentenzugriff

+
    +
  1. Benutzeranfrage über Eingabe erhalten
  2. +
  3. Agent durchsucht das Web mit dem Google Search-Tool
  4. +
  5. Agent greift auf Notion-Datenbank für interne Dokumente zu
  6. +
  7. Agent erstellt umfassenden Recherchebericht
  8. +
+
+ +## Best Practices + +- **Sei spezifisch in System-Prompts**: Definiere die Rolle, den Tonfall und die Einschränkungen des Agenten klar. Je spezifischer deine Anweisungen sind, desto besser kann der Agent seinen vorgesehenen Zweck erfüllen. +- **Wähle die richtige Temperatureinstellung**: Verwende niedrigere Temperatureinstellungen (0-0,3), wenn Genauigkeit wichtig ist, oder erhöhe die Temperatur (0,7-2,0) für kreativere oder abwechslungsreichere Antworten +- **Nutze Tools effektiv**: Integriere Tools, die den Zweck des Agenten ergänzen und seine Fähigkeiten erweitern. Sei selektiv bei der Auswahl der Tools, um den Agenten nicht zu überfordern. Für Aufgaben mit wenig Überschneidung verwende einen anderen Agent-Block für die besten Ergebnisse. diff --git a/apps/docs/content/docs/de/blocks/api.mdx b/apps/docs/content/docs/de/blocks/api.mdx new file mode 100644 index 0000000000..5238204549 --- /dev/null +++ b/apps/docs/content/docs/de/blocks/api.mdx @@ -0,0 +1,232 @@ +--- +title: API +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Image } from '@/components/ui/image' + +Der API-Block ermöglicht es Ihnen, Ihren Workflow über API-Endpunkte mit externen Diensten zu verbinden, indem HTTP-Anfragen verwendet werden. Er unterstützt verschiedene Methoden wie GET, POST, PUT, DELETE und PATCH, wodurch Sie mit praktisch jedem API-Endpunkt interagieren können. + +
+ API-Block +
+ +## Überblick + +Der API-Block ermöglicht Ihnen: + + + + Verbindung zu externen Diensten: HTTP-Anfragen an REST-APIs und Webdienste stellen + + + Daten senden und empfangen: Antworten verarbeiten und Daten aus externen Quellen transformieren + + + Integration von Drittanbieter-Plattformen: Verbindung mit Diensten wie Stripe, Slack oder benutzerdefinierten APIs + + + Authentifizierung verwalten: Unterstützung verschiedener Authentifizierungsmethoden einschließlich Bearer-Tokens und API-Schlüssel + + + +## Funktionsweise + +Der API-Block verarbeitet HTTP-Anfragen durch einen strukturierten Ansatz: + +1. **Anfrage konfigurieren** - URL, Methode, Header und Body-Parameter festlegen +2. **Anfrage ausführen** - HTTP-Anfrage an den angegebenen Endpunkt senden +3. **Antwort verarbeiten** - Antwortdaten, Statuscodes und Header verarbeiten +4. **Fehlerbehandlung** - Timeouts, Wiederholungsversuche und Fehlerbedingungen verwalten + +## Konfigurationsoptionen + +### URL + +Die Endpunkt-URL für die API-Anfrage. Dies kann sein: + +- Eine statische URL, die direkt im Block eingegeben wird +- Eine dynamische URL, die mit der Ausgabe eines anderen Blocks verbunden ist +- Eine URL mit Pfadparametern + +### Methode + +Wählen Sie die HTTP-Methode für Ihre Anfrage: + +- **GET**: Daten vom Server abrufen +- **POST**: Daten an den Server senden, um eine Ressource zu erstellen +- **PUT**: Eine bestehende Ressource auf dem Server aktualisieren +- **DELETE**: Eine Ressource vom Server entfernen +- **PATCH**: Eine bestehende Ressource teilweise aktualisieren + +### Abfrageparameter + +Definieren Sie Schlüssel-Wert-Paare, die als Abfrageparameter an die URL angehängt werden. Zum Beispiel: + +``` +Key: apiKey +Value: your_api_key_here + +Key: limit +Value: 10 +``` + +Diese würden der URL als `?apiKey=your_api_key_here&limit=10` hinzugefügt werden. + +### Header + +Konfigurieren Sie HTTP-Header für Ihre Anfrage. Häufige Header sind: + +``` +Key: Content-Type +Value: application/json + +Key: Authorization +Value: Bearer your_token_here +``` + +### Anfrage-Body + +Für Methoden, die einen Anfrage-Body unterstützen (POST, PUT, PATCH), können Sie die zu sendenden Daten definieren. Der Body kann sein: + +- JSON-Daten, die direkt im Block eingegeben werden +- Daten, die mit der Ausgabe eines anderen Blocks verbunden sind +- Dynamisch während der Workflow-Ausführung generierte Daten + +### Zugriff auf Ergebnisse + +Nach Abschluss einer API-Anfrage können Sie auf folgende Ausgaben zugreifen: + +- **``**: Die Antwortdaten vom API +- **``**: HTTP-Statuscode (200, 404, 500, usw.) +- **``**: Antwort-Header vom Server +- **``**: Fehlerdetails, falls die Anfrage fehlgeschlagen ist + +## Erweiterte Funktionen + +### Dynamische URL-Konstruktion + +Bauen Sie URLs dynamisch mit Variablen aus vorherigen Blöcken: + +```javascript +// In a Function block before the API +const userId = ; +const apiUrl = `https://api.example.com/users/${userId}/profile`; +``` + +### Anfrage-Wiederholungen + +Der API-Block behandelt automatisch: +- Netzwerk-Timeouts mit exponentiellem Backoff +- Rate-Limit-Antworten (429-Statuscodes) +- Serverfehler (5xx-Statuscodes) mit Wiederholungslogik +- Verbindungsfehler mit Wiederverbindungsversuchen + +### Antwortvalidierung + +Validieren Sie API-Antworten vor der Verarbeitung: + +```javascript +// In a Function block after the API +if ( === 200) { + const data = ; + // Process successful response +} else { + // Handle error response + console.error(`API Error: ${}`); +} +``` + +## Eingaben und Ausgaben + + + +
    +
  • + URL: Der Endpunkt, an den die Anfrage gesendet werden soll +
  • +
  • + Method: HTTP-Methode (GET, POST, PUT, DELETE, PATCH) +
  • +
  • + Query Parameters: Schlüssel-Wert-Paare für URL-Parameter +
  • +
  • + Headers: HTTP-Header für Authentifizierung und Inhaltstyp +
  • +
  • + Body: Anfrage-Payload für POST/PUT/PATCH-Methoden +
  • +
+
+ +
    +
  • + api.data: Antwortdaten vom API-Aufruf +
  • +
  • + api.status: Vom Server zurückgegebener HTTP-Statuscode +
  • +
  • + api.headers: Antwort-Header vom Server +
  • +
  • + api.error: Fehlerdetails, falls die Anfrage fehlgeschlagen ist +
  • +
+
+ +
    +
  • + Response Data: Primärer API-Antwortinhalt +
  • +
  • + Status Information: HTTP-Status und Fehlerdetails +
  • +
  • + Access: Verfügbar in Blöcken nach dem API-Aufruf +
  • +
+
+
+ +## Beispielanwendungsfälle + +### Benutzerprofildaten abrufen + +
+

Szenario: Benutzerinformationen von externem Dienst abrufen

+
    +
  1. Funktionsblock erstellt Benutzer-ID aus Eingabe
  2. +
  3. API-Block ruft GET /users/{id} Endpunkt auf
  4. +
  5. Funktionsblock verarbeitet und formatiert Benutzerdaten
  6. +
  7. Antwortblock gibt formatiertes Profil zurück
  8. +
+
+ +### Zahlungsabwicklung + +
+

Szenario: Zahlung über Stripe API verarbeiten

+
    +
  1. Funktionsblock validiert Zahlungsdaten
  2. +
  3. API-Block erstellt Zahlungsabsicht über Stripe
  4. +
  5. Bedingungsblock behandelt Zahlungserfolg/-fehler
  6. +
  7. Supabase-Block aktualisiert Bestellstatus in der Datenbank
  8. +
+
+ +## Best Practices + +- **Umgebungsvariablen für sensible Daten verwenden**: Keine API-Schlüssel oder Anmeldedaten im Code hinterlegen +- **Fehler elegant behandeln**: Fehlerbehandlungslogik für fehlgeschlagene Anfragen einbinden +- **Antworten validieren**: Statuscodes und Antwortformate vor der Datenverarbeitung prüfen +- **Ratenbegrenzungen beachten**: Auf API-Ratenbegrenzungen achten und angemessene Drosselung implementieren diff --git a/apps/docs/content/docs/de/blocks/condition.mdx b/apps/docs/content/docs/de/blocks/condition.mdx new file mode 100644 index 0000000000..921d34a66b --- /dev/null +++ b/apps/docs/content/docs/de/blocks/condition.mdx @@ -0,0 +1,242 @@ +--- +title: Bedingung +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Accordion, Accordions } from 'fumadocs-ui/components/accordion' +import { Image } from '@/components/ui/image' + +Der Bedingungsblock ermöglicht es Ihnen, den Ausführungspfad Ihres Workflows basierend auf booleschen Ausdrücken zu verzweigen und so dynamische, reaktionsfähige Workflows mit unterschiedlichen Ausführungspfaden zu erstellen. Er wertet Bedingungen aus und leitet den Workflow entsprechend weiter, sodass Sie den Ausführungsfluss basierend auf Daten oder Logik steuern können, ohne ein LLM zu benötigen. + +
+ Bedingungsblock +
+ + + Bedingungsblöcke ermöglichen deterministische Entscheidungsfindung ohne ein LLM zu benötigen, was sie ideal + für unkomplizierte Verzweigungslogik macht. + + +## Überblick + +Der Bedingungsblock ermöglicht Ihnen: + + + + Verzweigungslogik erstellen: Workflows basierend auf booleschen Ausdrücken leiten + + + Datengesteuerte Entscheidungen treffen: Bedingungen anhand von Ausgaben vorheriger Blöcke auswerten + + + Mehrere Szenarien behandeln: Mehrere Bedingungen mit unterschiedlichen Pfaden definieren + + + Deterministische Weiterleitung bieten: Entscheidungen ohne ein LLM treffen + + + +## Funktionsweise + +Der Bedingungsblock arbeitet durch einen sequentiellen Auswertungsprozess: + +1. **Ausdruck auswerten** - Verarbeitet den JavaScript/TypeScript-booleschen Ausdruck mit aktuellen Workflow-Daten +2. **Ergebnis bestimmen** - Gibt basierend auf der Ausdrucksauswertung true oder false zurück +3. **Workflow weiterleiten** - Leitet die Ausführung basierend auf dem Ergebnis an den entsprechenden Zielblock weiter +4. **Kontext bereitstellen** - Generiert Metadaten über die Entscheidung für Debugging und Überwachung + +## Konfigurationsoptionen + +### Bedingungen + +Definieren Sie eine oder mehrere Bedingungen, die ausgewertet werden. Jede Bedingung umfasst: + +- **Ausdruck**: Ein JavaScript/TypeScript-Ausdruck, der zu true oder false ausgewertet wird +- **Pfad**: Der Zielblock, zu dem weitergeleitet werden soll, wenn die Bedingung true ist +- **Beschreibung**: Optionale Erklärung, was die Bedingung prüft + +Sie können mehrere Bedingungen erstellen, die der Reihe nach ausgewertet werden, wobei die erste übereinstimmende Bedingung den Ausführungspfad bestimmt. + +### Format für Bedingungsausdrücke + +Bedingungen verwenden JavaScript-Syntax und können auf Eingabewerte aus vorherigen Blöcken verweisen. + + + + + ```javascript + // Check if a score is above a threshold + > 75 + ``` + + + + + ```javascript + // Check if a text contains specific keywords + .includes('urgent') || .includes('emergency') + ``` + + + + + ```javascript + // Check multiple conditions + >= 18 && === 'US' + ``` + + + + +### Zugriff auf Ergebnisse + +Nach der Auswertung einer Bedingung können Sie auf folgende Ausgaben zugreifen: + +- **``**: Boolesches Ergebnis der Bedingungsauswertung +- **``**: ID der übereinstimmenden Bedingung +- **``**: Beschreibung des Auswertungsergebnisses +- **``**: Details zum gewählten Routing-Ziel + +## Erweiterte Funktionen + +### Komplexe Ausdrücke + +Verwenden Sie JavaScript-Operatoren und -Funktionen in Bedingungen: + +```javascript +// String operations +.endsWith('@company.com') + +// Array operations +.includes('urgent') + +// Mathematical operations + * 100 > 85 + +// Date comparisons +new Date() > new Date('2024-01-01') +``` + +### Auswertung mehrerer Bedingungen + +Bedingungen werden der Reihe nach ausgewertet, bis eine übereinstimmt: + +```javascript +// Condition 1: Check for high priority + === 'high' + +// Condition 2: Check for urgent keywords +.toLowerCase().includes('urgent') + +// Condition 3: Default fallback +true +``` + +### Fehlerbehandlung + +Bedingungen behandeln automatisch: +- Undefinierte oder Null-Werte mit sicherer Auswertung +- Typabweichungen mit geeigneten Fallbacks +- Ungültige Ausdrücke mit Fehlerprotokollierung +- Fehlende Variablen mit Standardwerten + +## Eingaben und Ausgaben + + + +
    +
  • + Bedingungen: Array von booleschen Ausdrücken zur Auswertung +
  • +
  • + Ausdrücke: JavaScript/TypeScript-Bedingungen mit Block-Ausgaben +
  • +
  • + Routing-Pfade: Zielblöcke für jedes Bedingungsergebnis +
  • +
+
+ +
    +
  • + condition.result: Boolesches Ergebnis der Bedingungsauswertung +
  • +
  • + condition.matched_condition: ID der übereinstimmenden Bedingung +
  • +
  • + condition.content: Beschreibung des Auswertungsergebnisses +
  • +
  • + condition.path: Details zum gewählten Routing-Ziel +
  • +
+
+ +
    +
  • + Boolesches Ergebnis: Primäres Ergebnis der Bedingungsauswertung +
  • +
  • + Routing-Informationen: Pfadauswahl und Bedingungsdetails +
  • +
  • + Zugriff: Verfügbar in Blöcken nach der Bedingung +
  • +
+
+
+ +## Beispielanwendungsfälle + +### Routing im Kundenservice + +
+

Szenario: Support-Tickets nach Priorität weiterleiten

+
    +
  1. API-Block ruft Support-Ticket-Daten ab
  2. +
  3. Bedingung prüft, ob `` gleich 'high' ist
  4. +
  5. Tickets mit hoher Priorität → Mitarbeiter mit Eskalationswerkzeugen
  6. +
  7. Tickets mit normaler Priorität → Standard-Support-Mitarbeiter
  8. +
+
+ +### Inhaltsmoderation + +
+

Szenario: Inhalte basierend auf Analyseergebnissen filtern

+
    +
  1. Agent analysiert nutzergenerierte Inhalte
  2. +
  3. Bedingung prüft, ob `` > 0.7
  4. +
  5. Toxische Inhalte → Moderationsworkflow
  6. +
  7. Unbedenkliche Inhalte → Veröffentlichungsworkflow
  8. +
+
+ +### Benutzer-Onboarding-Prozess + +
+

Szenario: Onboarding basierend auf Benutzertyp personalisieren

+
    +
  1. Funktionsblock verarbeitet Benutzerregistrierungsdaten
  2. +
  3. Bedingung prüft, ob `` === 'enterprise'
  4. +
  5. Unternehmensbenutzer → Erweiterter Einrichtungsworkflow
  6. +
  7. Einzelbenutzer → Einfacher Onboarding-Workflow
  8. +
+
+ +## Best Practices + +- **Bedingungen richtig anordnen**: Platzieren Sie spezifischere Bedingungen vor allgemeinen, damit spezifische Logik Vorrang vor Fallbacks hat +- **Standardbedingung einfügen**: Fügen Sie eine Auffangbedingung (`true`) als letzte Bedingung hinzu, um nicht übereinstimmende Fälle zu behandeln und zu verhindern, dass die Workflow-Ausführung stecken bleibt +- **Ausdrücke einfach halten**: Verwenden Sie klare, unkomplizierte boolesche Ausdrücke für bessere Lesbarkeit und einfachere Fehlersuche +- **Dokumentieren Sie Ihre Bedingungen**: Fügen Sie Beschreibungen hinzu, um den Zweck jeder Bedingung für bessere Teamzusammenarbeit und Wartung zu erklären +- **Testen Sie Grenzfälle**: Überprüfen Sie, ob Bedingungen Grenzwerte korrekt behandeln, indem Sie mit Werten an den Grenzen Ihrer Bedingungsbereiche testen diff --git a/apps/docs/content/docs/de/blocks/evaluator.mdx b/apps/docs/content/docs/de/blocks/evaluator.mdx new file mode 100644 index 0000000000..ff072030f7 --- /dev/null +++ b/apps/docs/content/docs/de/blocks/evaluator.mdx @@ -0,0 +1,199 @@ +--- +title: Evaluator +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Image } from '@/components/ui/image' +import { Video } from '@/components/ui/video' + +Der Evaluator-Block nutzt KI, um die Inhaltsqualität anhand anpassbarer Bewertungsmetriken zu bewerten, die du selbst definierst. Perfekt für Qualitätskontrolle, A/B-Tests und um sicherzustellen, dass deine KI-Ausgaben bestimmte Standards erfüllen. + +
+ Evaluator-Block-Konfiguration +
+ +## Überblick + +Mit dem Evaluator-Block kannst du: + + + + Inhaltsqualität bewerten: Nutze KI, um Inhalte anhand benutzerdefinierter Metriken mit numerischen Werten zu bewerten + + + Benutzerdefinierte Metriken erstellen: Erstelle spezifische Bewertungskriterien, die auf deinen Anwendungsfall zugeschnitten sind + + + Qualitätskontrolle automatisieren: Erstelle Workflows, die Inhalte automatisch bewerten und filtern + + + Leistung verfolgen: Überwache Verbesserungen und Konsistenz im Laufe der Zeit mit objektiver Bewertung + + + +## Funktionsweise + +Der Evaluator-Block verarbeitet Inhalte durch KI-gestützte Bewertung: + +1. **Inhalte empfangen** - Nimmt Eingabeinhalte von vorherigen Blöcken in deinem Workflow entgegen +2. **Metriken anwenden** - Bewertet Inhalte anhand deiner definierten benutzerdefinierten Metriken +3. **Bewertungen generieren** - KI-Modell weist numerische Werte für jede Metrik zu +4. **Zusammenfassung bereitstellen** - Liefert detaillierte Auswertung mit Bewertungen und Erklärungen + +## Konfigurationsoptionen + +### Bewertungsmetriken + +Definiere benutzerdefinierte Metriken, anhand derer Inhalte bewertet werden. Jede Metrik umfasst: + +- **Name**: Eine kurze Bezeichnung für die Metrik +- **Beschreibung**: Eine detaillierte Erklärung dessen, was die Metrik misst +- **Bereich**: Der numerische Bereich für die Bewertung (z.B. 1-5, 0-10) + +Beispielmetriken: + +``` +Accuracy (1-5): How factually accurate is the content? +Clarity (1-5): How clear and understandable is the content? +Relevance (1-5): How relevant is the content to the original query? +``` + +### Inhalt + +Der zu bewertende Inhalt. Dies kann sein: + +- Direkt in der Blockkonfiguration bereitgestellt +- Verbunden mit der Ausgabe eines anderen Blocks (typischerweise ein Agent-Block) +- Dynamisch während der Workflow-Ausführung generiert + +### Modellauswahl + +Wählen Sie ein KI-Modell für die Durchführung der Bewertung: + +**OpenAI**: GPT-4o, o1, o3, o4-mini, gpt-4.1 +**Anthropic**: Claude 3.7 Sonnet +**Google**: Gemini 2.5 Pro, Gemini 2.0 Flash +**Andere Anbieter**: Groq, Cerebras, xAI, DeepSeek +**Lokale Modelle**: Jedes Modell, das auf Ollama läuft + +
+
+ +**Empfehlung**: Verwenden Sie Modelle mit starken Argumentationsfähigkeiten wie GPT-4o oder Claude 3.7 Sonnet für genauere Bewertungen. + +### API-Schlüssel + +Ihr API-Schlüssel für den ausgewählten LLM-Anbieter. Dieser wird sicher gespeichert und für die Authentifizierung verwendet. + +## Funktionsweise + +1. Der Evaluator-Block nimmt den bereitgestellten Inhalt und Ihre benutzerdefinierten Metriken +2. Er generiert einen spezialisierten Prompt, der das LLM anweist, den Inhalt zu bewerten +3. Der Prompt enthält klare Richtlinien zur Bewertung jeder Metrik +4. Das LLM bewertet den Inhalt und gibt numerische Werte für jede Metrik zurück +5. Der Evaluator-Block formatiert diese Werte als strukturierte Ausgabe zur Verwendung in Ihrem Workflow + +## Beispielanwendungsfälle + +### Bewertung der Inhaltsqualität + +
+

Szenario: Bewertung der Blogpost-Qualität vor der Veröffentlichung

+
    +
  1. Agent-Block generiert Blogpost-Inhalte
  2. +
  3. Evaluator bewertet Genauigkeit, Lesbarkeit und Engagement
  4. +
  5. Bedingungsblock prüft, ob die Werte Mindestschwellen erreichen
  6. +
  7. Hohe Werte → Veröffentlichen, Niedrige Werte → Überarbeiten und erneut versuchen
  8. +
+
+ +### A/B-Testing von Inhalten + +
+

Szenario: Vergleich mehrerer KI-generierter Antworten

+
    +
  1. Parallelblock generiert mehrere Antwortvarianten
  2. +
  3. Evaluator bewertet jede Variante nach Klarheit und Relevanz
  4. +
  5. Funktionsblock wählt die Antwort mit der höchsten Bewertung aus
  6. +
  7. Antwortblock gibt das beste Ergebnis zurück
  8. +
+
+ +### Qualitätskontrolle im Kundensupport + +
+

Szenario: Sicherstellen, dass Support-Antworten den Qualitätsstandards entsprechen

+
    +
  1. Support-Mitarbeiter generiert Antwort auf Kundenanfrage
  2. +
  3. Evaluator bewertet Hilfsbereitschaft, Einfühlungsvermögen und Genauigkeit
  4. +
  5. Bewertungen werden für Training und Leistungsüberwachung protokolliert
  6. +
  7. Niedrige Bewertungen lösen einen manuellen Überprüfungsprozess aus
  8. +
+
+ +## Eingaben und Ausgaben + + + +
    +
  • + Inhalt: Der zu bewertende Text oder strukturierte Daten +
  • +
  • + Bewertungsmetriken: Benutzerdefinierte Kriterien mit Bewertungsbereichen +
  • +
  • + Modell: KI-Modell für die Bewertungsanalyse +
  • +
  • + API-Schlüssel: Authentifizierung für den ausgewählten LLM-Anbieter +
  • +
+
+ +
    +
  • + evaluator.content: Zusammenfassung der Bewertung +
  • +
  • + evaluator.model: Für die Bewertung verwendetes Modell +
  • +
  • + evaluator.tokens: Token-Nutzungsstatistiken +
  • +
  • + evaluator.cost: Kostenübersicht für den Bewertungsaufruf +
  • +
+
+ +
    +
  • + Metrik-Bewertungen: Numerische Bewertungen für jede definierte Metrik +
  • +
  • + Bewertungszusammenfassung: Detaillierte Beurteilung mit Erläuterungen +
  • +
  • + Zugriff: Verfügbar in Blöcken nach dem Evaluator +
  • +
+
+
+ +## Best Practices + +- **Verwenden Sie spezifische Metrikbeschreibungen**: Definieren Sie klar, was jede Metrik misst, um genauere Bewertungen zu erhalten +- **Wählen Sie geeignete Bereiche**: Wählen Sie Bewertungsbereiche, die ausreichend Granularität bieten, ohne übermäßig komplex zu sein +- **Verbinden Sie mit Agent-Blöcken**: Verwenden Sie Evaluator-Blöcke, um die Ausgaben von Agent-Blöcken zu bewerten und Feedback-Schleifen zu erstellen +- **Verwenden Sie konsistente Metriken**: Für vergleichende Analysen sollten Sie konsistente Metriken über ähnliche Bewertungen hinweg beibehalten +- **Kombinieren Sie mehrere Metriken**: Verwenden Sie mehrere Metriken, um eine umfassende Bewertung zu erhalten diff --git a/apps/docs/content/docs/de/blocks/function.mdx b/apps/docs/content/docs/de/blocks/function.mdx new file mode 100644 index 0000000000..515c9ac9b5 --- /dev/null +++ b/apps/docs/content/docs/de/blocks/function.mdx @@ -0,0 +1,156 @@ +--- +title: Funktion +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Image } from '@/components/ui/image' + +Der Funktionsblock ermöglicht die Ausführung von benutzerdefiniertem JavaScript- oder TypeScript-Code in Ihren Workflows. Verwenden Sie ihn, um Daten zu transformieren, Berechnungen durchzuführen oder benutzerdefinierte Logik zu implementieren, die in anderen Blöcken nicht verfügbar ist. + +
+ Funktionsblock mit Code-Editor +
+ +## Überblick + +Der Funktionsblock ermöglicht Ihnen: + + + + Daten transformieren: Formate konvertieren, Text analysieren, Arrays und Objekte manipulieren + + + Berechnungen durchführen: Mathematische Operationen, Statistiken, Finanzberechnungen + + + Benutzerdefinierte Logik implementieren: Komplexe Bedingungen, Schleifen und Algorithmen + + + Externe Daten verarbeiten: Antworten parsen, Anfragen formatieren, Authentifizierung verwalten + + + +## Funktionsweise + +Der Funktionsblock führt Ihren Code in einer sicheren, isolierten Umgebung aus: + +1. **Eingabe empfangen**: Zugriff auf Daten aus vorherigen Blöcken über das `input` Objekt +2. **Code ausführen**: Führen Sie Ihren JavaScript/Python-Code aus +3. **Ergebnisse zurückgeben**: Verwenden Sie `return`, um Daten an den nächsten Block zu übergeben +4. **Fehler behandeln**: Integrierte Fehlerbehandlung und Protokollierung + +## Remote-Ausführung (E2B) + + - **Sprachen**: JavaScript und Python in einer isolierten E2B-Sandbox ausführen. + - **Aktivierung**: Schalten Sie “Remote Code Execution” im Funktionsblock ein. + - **Einsatzbereich**: Schwerere Logik, externe Bibliotheken oder Python-spezifischer Code. + - **Leistung**: Langsamer als lokales JS aufgrund von Sandbox-Start und Netzwerk-Overhead. + - **Hinweise**: Erfordert `E2B_API_KEY` bei lokaler Ausführung. Für niedrigste Latenz verwenden Sie nativ lokales JS (Fast Mode). + +## Eingaben und Ausgaben + + + +
    +
  • + Code: Ihr JavaScript/Python-Code zur Ausführung +
  • +
  • + Timeout: Maximale Ausführungszeit (standardmäßig 30 Sekunden) +
  • +
  • + Eingabedaten: Alle verbundenen Block-Ausgaben sind über Variablen verfügbar +
  • +
+
+ +
    +
  • + function.result: Der von Ihrer Funktion zurückgegebene Wert +
  • +
  • + function.stdout: Console.log()-Ausgabe aus Ihrem Code +
  • +
+
+
+ +## Beispielanwendungsfälle + +### Datenverarbeitungspipeline + +
+

Szenario: API-Antwort in strukturierte Daten umwandeln

+
    +
  1. API-Block ruft Rohdaten der Kunden ab
  2. +
  3. Funktionsblock verarbeitet und validiert Daten
  4. +
  5. Funktionsblock berechnet abgeleitete Metriken
  6. +
  7. Antwortblock gibt formatierte Ergebnisse zurück
  8. +
+
+ +### Implementierung von Geschäftslogik + +
+

Szenario: Berechnung von Treuepunkten und Stufen

+
    +
  1. Agent ruft Kaufhistorie des Kunden ab
  2. +
  3. Funktionsblock berechnet Treuemetriken
  4. +
  5. Funktionsblock bestimmt Kundenstufe
  6. +
  7. Bedingungsblock leitet basierend auf der Stufenhöhe weiter
  8. +
+
+ +### Datenvalidierung und -bereinigung + +
+

Szenario: Benutzereingaben validieren und bereinigen

+
    +
  1. Benutzereingabe aus Formularübermittlung erhalten
  2. +
  3. Funktionsblock validiert E-Mail-Format und Telefonnummern
  4. +
  5. Funktionsblock bereinigt und normalisiert Daten
  6. +
  7. API-Block speichert validierte Daten in der Datenbank
  8. +
+
+ +### Beispiel: Treuepunkte-Rechner + +```javascript title="loyalty-calculator.js" +// Process customer data and calculate loyalty score +const { purchaseHistory, accountAge, supportTickets } = ; + +// Calculate metrics +const totalSpent = purchaseHistory.reduce((sum, purchase) => sum + purchase.amount, 0); +const purchaseFrequency = purchaseHistory.length / (accountAge / 365); +const ticketRatio = supportTickets.resolved / supportTickets.total; + +// Calculate loyalty score (0-100) +const spendScore = Math.min(totalSpent / 1000 * 30, 30); +const frequencyScore = Math.min(purchaseFrequency * 20, 40); +const supportScore = ticketRatio * 30; + +const loyaltyScore = Math.round(spendScore + frequencyScore + supportScore); + +return { + customer: , + loyaltyScore, + loyaltyTier: loyaltyScore >= 80 ? "Platinum" : loyaltyScore >= 60 ? "Gold" : "Silver", + metrics: { spendScore, frequencyScore, supportScore } +}; +``` + +## Best Practices + +- **Funktionen fokussiert halten**: Schreiben Sie Funktionen, die eine Sache gut erledigen, um die Wartbarkeit und Fehlersuche zu verbessern +- **Fehler elegant behandeln**: Verwenden Sie try/catch-Blöcke, um potenzielle Fehler zu behandeln und aussagekräftige Fehlermeldungen bereitzustellen +- **Grenzfälle testen**: Stellen Sie sicher, dass Ihr Code ungewöhnliche Eingaben, Null-Werte und Grenzbedingungen korrekt behandelt +- **Auf Leistung optimieren**: Achten Sie bei großen Datensätzen auf die Berechnungskomplexität und den Speicherverbrauch +- **console.log() zum Debuggen verwenden**: Nutzen Sie die Stdout-Ausgabe zum Debuggen und Überwachen der Funktionsausführung diff --git a/apps/docs/content/docs/de/blocks/index.mdx b/apps/docs/content/docs/de/blocks/index.mdx new file mode 100644 index 0000000000..3424d974d8 --- /dev/null +++ b/apps/docs/content/docs/de/blocks/index.mdx @@ -0,0 +1,129 @@ +--- +title: Blöcke +description: Die Bausteine deiner KI-Workflows +--- + +import { Card, Cards } from 'fumadocs-ui/components/card' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Video } from '@/components/ui/video' + +Blöcke sind die Bausteine, die du miteinander verbindest, um KI-Workflows zu erstellen. Betrachte sie als spezialisierte Module, die jeweils eine bestimmte Aufgabe übernehmen – vom Chatten mit KI-Modellen über API-Aufrufe bis hin zur Datenverarbeitung. + +
+
+ +## Grundlegende Blocktypen + +Sim bietet sieben grundlegende Blocktypen, die die wesentlichen Funktionen von KI-Workflows abdecken: + +### Verarbeitungsblöcke +- **[Agent](/blocks/agent)** - Chatte mit KI-Modellen (OpenAI, Anthropic, Google, lokale Modelle) +- **[Function](/blocks/function)** - Führe benutzerdefinierten JavaScript/TypeScript-Code aus +- **[API](/blocks/api)** - Verbinde dich mit externen Diensten über HTTP-Anfragen + +### Logikblöcke +- **[Condition](/blocks/condition)** - Verzweige Workflow-Pfade basierend auf booleschen Ausdrücken +- **[Router](/blocks/router)** - Nutze KI, um Anfragen intelligent auf verschiedene Pfade zu leiten +- **[Evaluator](/blocks/evaluator)** - Bewerte und beurteile die Inhaltsqualität mit KI + +### Ausgabeblöcke +- **[Response](/blocks/response)** - Formatiere und gib endgültige Ergebnisse aus deinem Workflow zurück + +## Wie Blöcke funktionieren + +Jeder Block hat drei Hauptkomponenten: + +**Eingaben**: Daten, die in den Block von anderen Blöcken oder Benutzereingaben kommen +**Konfiguration**: Einstellungen, die das Verhalten des Blocks steuern +**Ausgaben**: Daten, die der Block für andere Blöcke produziert + + + + Eingabe empfangen: Block erhält Daten von verbundenen Blöcken oder Benutzereingaben + + + Verarbeiten: Block verarbeitet die Eingabe gemäß seiner Konfiguration + + + Ergebnisse ausgeben: Block erzeugt Ausgabedaten für die nächsten Blöcke im Workflow + + + +## Blöcke verbinden + +Sie erstellen Workflows, indem Sie Blöcke miteinander verbinden. Die Ausgabe eines Blocks wird zur Eingabe eines anderen: + +- **Ziehen zum Verbinden**: Ziehen Sie von einem Ausgabeport zu einem Eingabeport +- **Mehrfachverbindungen**: Eine Ausgabe kann mit mehreren Eingängen verbunden werden +- **Verzweigende Pfade**: Einige Blöcke können basierend auf Bedingungen zu verschiedenen Pfaden weiterleiten + +
+
+ +## Häufige Muster + +### Sequentielle Verarbeitung +Verbinden Sie Blöcke in einer Kette, wobei jeder Block die Ausgabe des vorherigen verarbeitet: + +``` +User Input → Agent → Function → Response +``` + +### Bedingte Verzweigung +Verwenden Sie Bedingungsblöcke oder Router-Blöcke, um verschiedene Pfade zu erstellen: + +``` +User Input → Router → Agent A (for questions) + → Agent B (for commands) +``` + +### Qualitätskontrolle +Verwenden Sie Evaluator-Blöcke, um Ausgaben zu bewerten und zu filtern: + +``` +Agent → Evaluator → Condition → Response (if good) + → Agent (retry if bad) +``` + +## Block-Konfiguration + +Jeder Blocktyp hat spezifische Konfigurationsoptionen: + +**Alle Blöcke**: +- Ein-/Ausgabeverbindungen +- Fehlerbehandlungsverhalten +- Zeitüberschreitungseinstellungen für die Ausführung + +**KI-Blöcke** (Agent, Router, Evaluator): +- Modellauswahl (OpenAI, Anthropic, Google, lokal) +- API-Schlüssel und Authentifizierung +- Temperature und andere Modellparameter +- Systemaufforderungen und Anweisungen + +**Logikblöcke** (Bedingung, Funktion): +- Benutzerdefinierte Ausdrücke oder Code +- Variablenreferenzen +- Einstellungen für die Ausführungsumgebung + +**Integrationsblöcke** (API, Antwort): +- Endpunktkonfiguration +- Header und Authentifizierung +- Anfrage-/Antwortformatierung + + + + Verbindung zu KI-Modellen herstellen und intelligente Antworten erzeugen + + + Benutzerdefinierten Code ausführen, um Daten zu verarbeiten und zu transformieren + + + Integration mit externen Diensten und APIs + + + Verzweigende Logik basierend auf Datenbewertung erstellen + + diff --git a/apps/docs/content/docs/de/blocks/loop.mdx b/apps/docs/content/docs/de/blocks/loop.mdx new file mode 100644 index 0000000000..399031850f --- /dev/null +++ b/apps/docs/content/docs/de/blocks/loop.mdx @@ -0,0 +1,211 @@ +--- +title: Loop +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Image } from '@/components/ui/image' + +Der Loop-Block ist ein Container-Block in Sim, der es ermöglicht, iterative Workflows zu erstellen, indem eine Gruppe von Blöcken wiederholt ausgeführt wird. Loops ermöglichen iterative Verarbeitung in deinen Workflows. + +Der Loop-Block unterstützt zwei Arten der Iteration: + + + Loop-Blöcke sind Container-Knoten, die andere Blöcke enthalten können. Die Blöcke innerhalb einer Schleife werden basierend auf deiner Konfiguration mehrfach ausgeführt. + + +## Überblick + +Der Loop-Block ermöglicht dir: + + + + Über Sammlungen iterieren: Arrays oder Objekte Element für Element verarbeiten + + + Operationen wiederholen: Blöcke eine festgelegte Anzahl von Malen ausführen + + + Sequentielle Verarbeitung: Datentransformation in geordneten Iterationen durchführen + + + Ergebnisse aggregieren: Ausgaben aus allen Schleifeniterationen sammeln + + + +## Funktionsweise + +Der Loop-Block führt enthaltene Blöcke durch sequentielle Iteration aus: + +1. **Schleife initialisieren** - Iterationsparameter festlegen (Anzahl oder Sammlung) +2. **Iteration ausführen** - Enthaltene Blöcke für aktuelle Iteration ausführen +3. **Ergebnisse sammeln** - Ausgabe jeder Iteration speichern +4. **Fortfahren oder abschließen** - Zur nächsten Iteration übergehen oder Schleife beenden + +## Konfigurationsoptionen + +### Schleifentyp + +Wähle zwischen zwei Arten von Schleifen: + + + + **For Loop (Iterationen)** - Eine numerische Schleife, die eine feste Anzahl von Malen ausgeführt wird: + +
+ For Loop mit Iterationen +
+ + Verwende diese Option, wenn du eine Operation eine bestimmte Anzahl von Malen wiederholen musst. + + + ``` + Example: Run 5 times + - Iteration 1 + - Iteration 2 + - Iteration 3 + - Iteration 4 + - Iteration 5 + ``` + +
+ + **ForEach-Schleife (Sammlung)** - Eine sammlungsbasierte Schleife, die über jedes Element in einem Array oder Objekt iteriert: + +
+ ForEach-Schleife mit Sammlung +
+ + Verwende diese, wenn du eine Sammlung von Elementen verarbeiten musst. + + + ``` + Example: Process ["apple", "banana", "orange"] + - Iteration 1: Process "apple" + - Iteration 2: Process "banana" + - Iteration 3: Process "orange" + ``` + +
+
+ +## Wie man Schleifen verwendet + +### Eine Schleife erstellen + +1. Ziehe einen Schleifenblock aus der Werkzeugleiste auf deine Leinwand +2. Konfiguriere den Schleifentyp und die Parameter +3. Ziehe andere Blöcke in den Schleifencontainer +4. Verbinde die Blöcke nach Bedarf + +### Auf Ergebnisse zugreifen + +Nach Abschluss einer Schleife kannst du auf aggregierte Ergebnisse zugreifen: + +- **``**: Array von Ergebnissen aus allen Schleifendurchläufen + +## Beispielanwendungsfälle + +### Verarbeitung von API-Ergebnissen + +
+

Szenario: Mehrere Kundendatensätze verarbeiten

+
    +
  1. API-Block ruft Kundenliste ab
  2. +
  3. ForEach-Schleife iteriert über jeden Kunden
  4. +
  5. Innerhalb der Schleife: Agent analysiert Kundendaten
  6. +
  7. Innerhalb der Schleife: Funktion speichert Analyseergebnisse
  8. +
+
+ +### Iterative Inhaltserstellung + +
+

Szenario: Mehrere Variationen generieren

+
    +
  1. For-Schleife auf 5 Iterationen einstellen
  2. +
  3. Innerhalb der Schleife: Agent generiert Inhaltsvariante
  4. +
  5. Innerhalb der Schleife: Evaluator bewertet den Inhalt
  6. +
  7. Nach der Schleife: Funktion wählt die beste Variante aus
  8. +
+
+ +## Erweiterte Funktionen + +### Einschränkungen + + + Container-Blöcke (Schleifen und Parallele) können nicht ineinander verschachtelt werden. Das bedeutet: + - Du kannst keinen Schleifenblock in einen anderen Schleifenblock platzieren + - Du kannst keinen Parallelblock in einen Schleifenblock platzieren + - Du kannst keinen Container-Block in einen anderen Container-Block platzieren + + Wenn du mehrdimensionale Iterationen benötigst, erwäge eine Umstrukturierung deines Workflows, um sequentielle Schleifen zu verwenden oder Daten in Stufen zu verarbeiten. + + + + Schleifen werden sequentiell ausgeführt, nicht parallel. Wenn Sie eine gleichzeitige Ausführung benötigen, verwenden Sie stattdessen den Parallel-Block. + + +## Eingaben und Ausgaben + + + +
    +
  • + Schleifentyp: Wählen Sie zwischen 'for' oder 'forEach' +
  • +
  • + Iterationen: Anzahl der Ausführungen (für for-Schleifen) +
  • +
  • + Sammlung: Array oder Objekt zum Durchlaufen (für forEach-Schleifen) +
  • +
+
+ +
    +
  • + loop.currentItem: Aktuell verarbeitetes Element +
  • +
  • + loop.index: Aktuelle Iterationsnummer (0-basiert) +
  • +
  • + loop.items: Vollständige Sammlung (forEach-Schleifen) +
  • +
+
+ +
    +
  • + loop.results: Array aller Iterationsergebnisse +
  • +
  • + Struktur: Ergebnisse behalten die Iterationsreihenfolge bei +
  • +
  • + Zugriff: Verfügbar in Blöcken nach der Schleife +
  • +
+
+
+ +## Best Practices + +- **Setzen Sie vernünftige Grenzen**: Halten Sie die Anzahl der Iterationen in einem vernünftigen Rahmen, um lange Ausführungszeiten zu vermeiden +- **Verwenden Sie ForEach für Sammlungen**: Verwenden Sie ForEach statt For-Schleifen, wenn Sie Arrays oder Objekte verarbeiten +- **Behandeln Sie Fehler angemessen**: Erwägen Sie, Fehlerbehandlung innerhalb von Schleifen einzubauen, um robuste Workflows zu gewährleisten diff --git a/apps/docs/content/docs/de/blocks/parallel.mdx b/apps/docs/content/docs/de/blocks/parallel.mdx new file mode 100644 index 0000000000..e3a3c03564 --- /dev/null +++ b/apps/docs/content/docs/de/blocks/parallel.mdx @@ -0,0 +1,231 @@ +--- +title: Parallel +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Image } from '@/components/ui/image' + +Der Parallel-Block ist ein Container-Block in Sim, der es ermöglicht, mehrere Instanzen von Blöcken gleichzeitig auszuführen, um Workflows schneller zu verarbeiten. + +Der Parallel-Block unterstützt zwei Arten der gleichzeitigen Ausführung: + + + Parallel-Blöcke sind Container-Knoten, die ihre Inhalte mehrfach gleichzeitig ausführen, im Gegensatz zu Schleifen, die sequentiell ausgeführt werden. + + +## Überblick + +Der Parallel-Block ermöglicht es dir: + + + + Arbeit zu verteilen: Mehrere Elemente gleichzeitig zu verarbeiten + + + Ausführung zu beschleunigen: Unabhängige Operationen gleichzeitig auszuführen + + + Massenoperationen zu bewältigen: Große Datensätze effizient zu verarbeiten + + + Ergebnisse zu aggregieren: Ausgaben aus allen parallelen Ausführungen zu sammeln + + + +## Konfigurationsoptionen + +### Parallel-Typ + +Wähle zwischen zwei Arten der parallelen Ausführung: + + + + **Anzahlbasierte Parallelität** - Führe eine feste Anzahl paralleler Instanzen aus: + +
+ Anzahlbasierte parallele Ausführung +
+ + Verwende dies, wenn du dieselbe Operation mehrmals gleichzeitig ausführen musst. + + + ``` + Example: Run 5 parallel instances + - Instance 1 ┐ + - Instance 2 ├─ All execute simultaneously + - Instance 3 │ + - Instance 4 │ + - Instance 5 ┘ + ``` + +
+ + **Sammlungsbasierte Parallelität** - Verteile eine Sammlung auf parallele Instanzen: + +
+ Sammlungsbasierte parallele Ausführung +
+ + Jede Instanz verarbeitet gleichzeitig ein Element aus der Sammlung. + + + ``` + Example: Process ["task1", "task2", "task3"] in parallel + - Instance 1: Process "task1" ┐ + - Instance 2: Process "task2" ├─ All execute simultaneously + - Instance 3: Process "task3" ┘ + ``` + +
+
+ +## Wie man Parallel-Blöcke verwendet + +### Einen Parallel-Block erstellen + +1. Ziehe einen Parallel-Block aus der Werkzeugleiste auf deine Leinwand +2. Konfiguriere den Parallel-Typ und die Parameter +3. Ziehe einen einzelnen Block in den Parallel-Container +4. Verbinde den Block nach Bedarf + +### Auf Ergebnisse zugreifen + +Nach Abschluss eines parallelen Blocks können Sie auf aggregierte Ergebnisse zugreifen: + +- **``**: Array mit Ergebnissen aus allen parallelen Instanzen + +## Beispielanwendungsfälle + +### Batch-API-Verarbeitung + +
+

Szenario: Mehrere API-Aufrufe gleichzeitig verarbeiten

+
    +
  1. Paralleler Block mit einer Sammlung von API-Endpunkten
  2. +
  3. Innerhalb des parallelen Blocks: API-Block ruft jeden Endpunkt auf
  4. +
  5. Nach dem parallelen Block: Alle Antworten gemeinsam verarbeiten
  6. +
+
+ +### Multi-Modell-KI-Verarbeitung + +
+

Szenario: Antworten von mehreren KI-Modellen erhalten

+
    +
  1. Sammlungsbasierte Parallelverarbeitung über eine Liste von Modell-IDs (z.B. ["gpt-4o", "claude-3.7-sonnet", "gemini-2.5-pro"])
  2. +
  3. Innerhalb des parallelen Blocks: Das Modell des Agenten wird auf das aktuelle Element aus der Sammlung gesetzt
  4. +
  5. Nach dem parallelen Block: Vergleichen und Auswählen der besten Antwort
  6. +
+
+ +## Erweiterte Funktionen + +### Ergebnisaggregation + +Ergebnisse aus allen parallelen Instanzen werden automatisch gesammelt: + +```javascript +// In a Function block after the parallel +const allResults = input.parallel.results; +// Returns: [result1, result2, result3, ...] +``` + +### Instanzisolierung + +Jede parallele Instanz läuft unabhängig: +- Separate Variablenbereiche +- Kein gemeinsamer Zustand zwischen Instanzen +- Fehler in einer Instanz beeinflussen andere nicht + +### Einschränkungen + + + Container-Blöcke (Schleifen und Parallele) können nicht ineinander verschachtelt werden. Das bedeutet: + - Sie können keinen Schleifenblock in einen parallelen Block platzieren + - Sie können keinen weiteren parallelen Block in einen parallelen Block platzieren + - Sie können keinen Container-Block in einen anderen Container-Block platzieren + + + + Parallele Blöcke können nur einen einzigen Block enthalten. Sie können nicht mehrere Blöcke haben, die innerhalb eines parallelen Blocks miteinander verbunden sind - in diesem Fall würde nur der erste Block ausgeführt werden. + + + + Obwohl die parallele Ausführung schneller ist, sollten Sie Folgendes beachten: + - API-Ratenbegrenzungen bei gleichzeitigen Anfragen + - Speichernutzung bei großen Datensätzen + - Maximum von 20 gleichzeitigen Instanzen, um Ressourcenerschöpfung zu vermeiden + + +## Parallel vs. Loop + +Verstehen, wann was zu verwenden ist: + +| Funktion | Parallel | Loop | +|---------|----------|------| +| Ausführung | Gleichzeitig | Sequentiell | +| Geschwindigkeit | Schneller für unabhängige Operationen | Langsamer, aber geordnet | +| Reihenfolge | Keine garantierte Reihenfolge | Behält Reihenfolge bei | +| Anwendungsfall | Unabhängige Operationen | Abhängige Operationen | +| Ressourcennutzung | Höher | Niedriger | + +## Eingaben und Ausgaben + + + +
    +
  • + Parallel-Typ: Wählen Sie zwischen 'count' oder 'collection' +
  • +
  • + Count: Anzahl der auszuführenden Instanzen (anzahlbasiert) +
  • +
  • + Collection: Array oder Objekt zur Verteilung (sammlungsbasiert) +
  • +
+
+ +
    +
  • + parallel.currentItem: Element für diese Instanz +
  • +
  • + parallel.index: Instanznummer (0-basiert) +
  • +
  • + parallel.items: Vollständige Sammlung (sammlungsbasiert) +
  • +
+
+ +
    +
  • + parallel.results: Array aller Instanzergebnisse +
  • +
  • + Access: Verfügbar in Blöcken nach dem Parallel +
  • +
+
+
+ +## Best Practices + +- **Nur unabhängige Operationen**: Stellen Sie sicher, dass Operationen nicht voneinander abhängen +- **Rate-Limits berücksichtigen**: Fügen Sie Verzögerungen oder Drosselungen für API-intensive Workflows hinzu +- **Fehlerbehandlung**: Jede Instanz sollte ihre eigenen Fehler angemessen behandeln diff --git a/apps/docs/content/docs/de/blocks/response.mdx b/apps/docs/content/docs/de/blocks/response.mdx new file mode 100644 index 0000000000..1b1efe4103 --- /dev/null +++ b/apps/docs/content/docs/de/blocks/response.mdx @@ -0,0 +1,246 @@ +--- +title: Antwort +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Image } from '@/components/ui/image' + +Der Antwort-Block ist der letzte Schritt in deinem Workflow, der eine strukturierte Antwort formatiert und an API-Aufrufe zurücksendet. Er funktioniert wie eine "return"-Anweisung für deinen gesamten Workflow – er verpackt Ergebnisse und sendet sie zurück. + +
+ Konfiguration des Antwort-Blocks +
+ + + Antwort-Blöcke sind terminale Blöcke - sie beenden die Workflow-Ausführung und können nicht mit anderen Blöcken verbunden werden. + + +## Überblick + +Der Antwort-Block ermöglicht dir: + + + + API-Antworten formatieren: Strukturierung von Workflow-Ergebnissen in korrekte HTTP-Antworten + + + Statuscodes festlegen: Konfiguration passender HTTP-Statuscodes basierend auf Workflow-Ergebnissen + + + Header kontrollieren: Hinzufügen benutzerdefinierter Header für API-Antworten und Webhooks + + + Daten transformieren: Umwandlung von Workflow-Variablen in client-freundliche Antwortformate + + + +## Wie es funktioniert + +Der Antwort-Block schließt die Workflow-Ausführung ab: + +1. **Daten sammeln** - Sammelt Variablen und Ausgaben von vorherigen Blöcken +2. **Antwort formatieren** - Strukturiert Daten gemäß deiner Konfiguration +3. **HTTP-Details festlegen** - Wendet Statuscodes und Header an +4. **Antwort senden** - Gibt die formatierte Antwort an den API-Aufrufer zurück + +## Wann du Antwort-Blöcke benötigst + +- **API-Endpunkte**: Wenn dein Workflow über eine API aufgerufen wird, formatieren Antwort-Blöcke die Rückgabedaten +- **Webhooks**: Rückgabe von Bestätigungen oder Daten an das aufrufende System +- **Testen**: Anzeige formatierter Ergebnisse beim Testen deines Workflows + +## Zwei Möglichkeiten zum Erstellen von Antworten + +### Builder-Modus (Empfohlen) +Visuelle Oberfläche zum Erstellen der Antwortstruktur: +- Felder per Drag-and-Drop einfügen +- Einfache Referenzierung von Workflow-Variablen +- Visuelle Vorschau der Antwortstruktur + +### Editor-Modus (Fortgeschritten) +JSON direkt schreiben: +- Volle Kontrolle über das Antwortformat +- Unterstützung für komplexe verschachtelte Strukturen +- Verwendung der ``Syntax für dynamische Werte + +## Konfigurationsoptionen + +### Antwortdaten + +Die Antwortdaten sind der Hauptinhalt, der an den API-Aufrufer zurückgesendet wird. Diese sollten als JSON formatiert sein und können Folgendes enthalten: + +- Statische Werte +- Dynamische Verweise auf Workflow-Variablen mit der ``Syntax +- Verschachtelte Objekte und Arrays +- Jede gültige JSON-Struktur + +### Statuscode + +Legen Sie den HTTP-Statuscode für die Antwort fest. Häufige Statuscodes sind: + + + +
    +
  • 200: OK - Standard-Erfolgsantwort
  • +
  • 201: Erstellt - Ressource erfolgreich erstellt
  • +
  • 204: Kein Inhalt - Erfolg ohne Antworttext
  • +
+
+ +
    +
  • 400: Ungültige Anfrage - Ungültige Anfrageparameter
  • +
  • 401: Nicht autorisiert - Authentifizierung erforderlich
  • +
  • 404: Nicht gefunden - Ressource existiert nicht
  • +
  • 422: Nicht verarbeitbare Entität - Validierungsfehler
  • +
+
+ +
    +
  • 500: Interner Serverfehler - Serverseitiger Fehler
  • +
  • 502: Bad Gateway - Fehler eines externen Dienstes
  • +
  • 503: Dienst nicht verfügbar - Dienst vorübergehend nicht erreichbar
  • +
+
+
+ +
+ Der Standard-Statuscode ist 200, wenn nicht anders angegeben. +
+ +### Antwort-Header + +Konfigurieren Sie zusätzliche HTTP-Header, die in die Antwort aufgenommen werden sollen. + +Header werden als Schlüssel-Wert-Paare konfiguriert: + +| Schlüssel | Wert | +|-----|-------| +| Content-Type | application/json | +| Cache-Control | no-cache | +| X-API-Version | 1.0 | + +## Beispielanwendungsfälle + +### API-Endpunkt-Antwort + +
+

Szenario: Strukturierte Daten von einer Such-API zurückgeben

+
    +
  1. Workflow verarbeitet Suchanfrage und ruft Ergebnisse ab
  2. +
  3. Funktionsblock formatiert und paginiert Ergebnisse
  4. +
  5. Antwortblock gibt JSON mit Daten, Paginierung und Metadaten zurück
  6. +
  7. Client erhält strukturierte Antwort mit Status 200
  8. +
+
+ +### Webhook-Bestätigung + +
+

Szenario: Bestätigung des Webhook-Empfangs und der Verarbeitung

+
    +
  1. Webhook-Trigger empfängt Daten vom externen System
  2. +
  3. Workflow verarbeitet die eingehenden Daten
  4. +
  5. Antwortblock gibt Bestätigung mit Verarbeitungsstatus zurück
  6. +
  7. Externes System erhält Bestätigung
  8. +
+
+ +### Fehlerantwort-Behandlung + +
+

Szenario: Angemessene Fehlerantworten zurückgeben

+
    +
  1. Bedingungsblock erkennt Validierungsfehler oder Systemfehler
  2. +
  3. Router leitet zum Fehlerbehandlungspfad weiter
  4. +
  5. Antwortblock gibt Status 400/500 mit Fehlerdetails zurück
  6. +
  7. Client erhält strukturierte Fehlerinformationen
  8. +
+
+ +## Eingaben und Ausgaben + + + +
    +
  • + Antwortdaten: JSON-Struktur für den Antworttext +
  • +
  • + Statuscode: HTTP-Statuscode (Standard: 200) +
  • +
  • + Header: Benutzerdefinierte HTTP-Header als Schlüssel-Wert-Paare +
  • +
  • + Modus: Builder- oder Editor-Modus für die Antworterstellung +
  • +
+
+ +
    +
  • + response.data: Der strukturierte Antworttext +
  • +
  • + response.status: Gesendeter HTTP-Statuscode +
  • +
  • + response.headers: In der Antwort enthaltene Header +
  • +
  • + response.success: Boolescher Wert, der erfolgreichen Abschluss anzeigt +
  • +
+
+ +
    +
  • + HTTP-Antwort: Vollständige Antwort an den API-Aufrufer +
  • +
  • + Workflow-Beendigung: Beendet die Workflow-Ausführung +
  • +
  • + Zugriff: Antwortblöcke sind terminal - keine nachfolgenden Blöcke +
  • +
+
+
+ +## Variablenreferenzen + +Verwenden Sie die `` Syntax, um Workflow-Variablen dynamisch in Ihre Antwort einzufügen: + +```json +{ + "user": { + "id": "", + "name": "", + "email": "" + }, + "query": "", + "results": "", + "totalFound": "", + "processingTime": "ms" +} +``` + + + Variablennamen sind Groß- und Kleinschreibung sensitiv und müssen exakt mit den in Ihrem Workflow verfügbaren Variablen übereinstimmen. + + +## Best Practices + +- **Verwenden Sie aussagekräftige Statuscodes**: Wählen Sie passende HTTP-Statuscodes, die das Ergebnis des Workflows genau widerspiegeln +- **Strukturieren Sie Ihre Antworten einheitlich**: Behalten Sie eine konsistente JSON-Struktur über alle API-Endpunkte hinweg für eine bessere Entwicklererfahrung bei +- **Fügen Sie relevante Metadaten hinzu**: Ergänzen Sie Zeitstempel und Versionsinformationen, um bei der Fehlersuche und Überwachung zu helfen +- **Behandeln Sie Fehler elegant**: Verwenden Sie bedingte Logik in Ihrem Workflow, um angemessene Fehlerantworten mit aussagekräftigen Meldungen zu setzen +- **Validieren Sie Variablenreferenzen**: Stellen Sie sicher, dass alle referenzierten Variablen existieren und die erwarteten Datentypen enthalten, bevor der Response-Block ausgeführt wird diff --git a/apps/docs/content/docs/de/blocks/router.mdx b/apps/docs/content/docs/de/blocks/router.mdx new file mode 100644 index 0000000000..1f269ea899 --- /dev/null +++ b/apps/docs/content/docs/de/blocks/router.mdx @@ -0,0 +1,225 @@ +--- +title: Router +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Accordion, Accordions } from 'fumadocs-ui/components/accordion' +import { Image } from '@/components/ui/image' +import { Video } from '@/components/ui/video' + +Der Router-Block nutzt KI, um intelligent zu entscheiden, welchen Pfad Ihr Workflow als nächstes nehmen sollte, indem er die Workflow-Ausführung basierend auf spezifischen Bedingungen oder Logik leitet. Im Gegensatz zu Bedingungsblöcken, die einfache Regeln verwenden, können Router-Blöcke den Kontext verstehen und intelligente Routing-Entscheidungen auf Basis von Inhaltsanalysen treffen. + +
+ Router-Block mit mehreren Pfaden +
+ +## Überblick + +Der Router-Block ermöglicht Ihnen: + + + + Intelligentes Content-Routing: Nutzung von KI zum Verständnis von Absicht und Kontext + + + Dynamische Pfadauswahl: Routing von Workflows basierend auf unstrukturierter Inhaltsanalyse + + + Kontextbewusste Entscheidungen: Treffen intelligenter Routing-Entscheidungen über einfache Regeln hinaus + + + Multi-Pfad-Management: Verwaltung komplexer Workflows mit mehreren potenziellen Zielen + + + +## Router vs. Bedingungsblöcke + + + + - KI-gestützte Inhaltsanalyse erforderlich + - Unstrukturierte oder variierende Inhaltstypen + - Absichtsbasiertes Routing (z.B. "Support-Tickets an Abteilungen weiterleiten") + - Kontextbewusste Entscheidungsfindung erforderlich + + + - Einfache, regelbasierte Entscheidungen + - Strukturierte Daten oder numerische Vergleiche + - Schnelles, deterministisches Routing erforderlich + - Boolesche Logik ausreichend + + + +## Funktionsweise + +Der Router-Block: + + + + Analysiert Inhalte: Verwendet ein LLM, um Eingabeinhalte und Kontext zu verstehen + + + Bewertet Ziele: Vergleicht Inhalte mit verfügbaren Zielblöcken + + + Wählt Ziel aus: Identifiziert den am besten geeigneten Pfad basierend auf der Absicht + + + Leitet Ausführung: Dirigiert den Workflow zum ausgewählten Block + + + +## Konfigurationsoptionen + +### Inhalt/Prompt + +Der Inhalt oder Prompt, den der Router analysiert, um Routing-Entscheidungen zu treffen. Dies kann sein: + +- Eine direkte Benutzeranfrage oder -eingabe +- Ausgabe aus einem vorherigen Block +- Eine vom System generierte Nachricht + +### Zielblöcke + +Die möglichen Zielblöcke, aus denen der Router auswählen kann. Der Router erkennt automatisch verbundene Blöcke, aber Sie können auch: + +- Die Beschreibungen der Zielblöcke anpassen, um die Routing-Genauigkeit zu verbessern +- Routing-Kriterien für jeden Zielblock festlegen +- Bestimmte Blöcke von der Berücksichtigung als Routing-Ziele ausschließen + +### Modellauswahl + +Wählen Sie ein KI-Modell für die Routing-Entscheidung: + +**OpenAI**: GPT-4o, o1, o3, o4-mini, gpt-4.1 \ +**Anthropic**: Claude 3.7 Sonnet \ +**Google**: Gemini 2.5 Pro, Gemini 2.0 Flash \ +**Andere Anbieter**: Groq, Cerebras, xAI, DeepSeek \ +**Lokale Modelle**: Jedes Modell, das auf Ollama läuft + +
+
+ +**Empfehlung**: Verwenden Sie Modelle mit starken Reasoning-Fähigkeiten wie GPT-4o oder Claude 3.7 Sonnet für genauere Routing-Entscheidungen. + +### API-Schlüssel + +Ihr API-Schlüssel für den ausgewählten LLM-Anbieter. Dieser wird sicher gespeichert und für die Authentifizierung verwendet. + +### Zugriff auf Ergebnisse + +Nachdem ein Router eine Entscheidung getroffen hat, können Sie auf seine Ausgaben zugreifen: + +- **``**: Zusammenfassung des verwendeten Routing-Prompts +- **``**: Details zum ausgewählten Zielblock +- **``**: Token-Nutzungsstatistiken vom LLM +- **``**: Kostenübersicht für den Routing-Aufruf (Eingabe, Ausgabe, Gesamt) +- **``**: Das für die Entscheidungsfindung verwendete Modell + +## Erweiterte Funktionen + +### Benutzerdefinierte Routing-Kriterien + +Definieren Sie spezifische Kriterien für jeden Zielblock: + +```javascript +// Example routing descriptions +Target Block 1: "Technical support issues, API problems, integration questions" +Target Block 2: "Billing inquiries, subscription changes, payment issues" +Target Block 3: "General questions, feedback, feature requests" +``` + +## Eingaben und Ausgaben + + + +
    +
  • + Inhalt/Prompt: Zu analysierender Text für Routing-Entscheidungen +
  • +
  • + Zielblöcke: Verbundene Blöcke als potenzielle Ziele +
  • +
  • + Modell: KI-Modell für Routing-Analyse +
  • +
  • + API-Schlüssel: Authentifizierung für ausgewählten LLM-Anbieter +
  • +
+
+ +
    +
  • + router.prompt: Zusammenfassung des verwendeten Routing-Prompts +
  • +
  • + router.selected_path: Details zum gewählten Ziel +
  • +
  • + router.tokens: Token-Nutzungsstatistiken +
  • +
  • + router.cost: Kostenübersicht für den Routing-Aufruf (Eingabe, Ausgabe, Gesamt) +
  • +
  • + router.model: Für die Entscheidungsfindung verwendetes Modell +
  • +
+
+
+ +## Beispielanwendungsfälle + +### Kundensupport-Triage + +
+

Szenario: Support-Tickets an spezialisierte Abteilungen weiterleiten

+
    +
  1. Benutzer reicht Supportanfrage über Formular ein
  2. +
  3. Router analysiert Ticket-Inhalt und Kontext
  4. +
  5. Technische Probleme → Engineering-Support-Mitarbeiter
  6. +
  7. Abrechnungsfragen → Finanz-Support-Mitarbeiter
  8. +
+
+ +### Inhaltsklassifizierung + +
+

Szenario: Benutzergenerierte Inhalte klassifizieren und weiterleiten

+
    +
  1. Benutzer reicht Inhalt oder Feedback ein
  2. +
  3. Router analysiert Inhaltstyp und Stimmung
  4. +
  5. Feature-Anfragen → Produkt-Team-Workflow
  6. +
  7. Fehlerberichte → Technischer Support-Workflow
  8. +
+
+ +### Lead-Qualifizierung + +
+

Szenario: Leads basierend auf Qualifizierungskriterien weiterleiten

+
    +
  1. Lead-Informationen aus Formular erfasst
  2. +
  3. Router analysiert Unternehmensgröße, Branche und Bedürfnisse
  4. +
  5. Enterprise-Leads → Vertriebsteam mit individueller Preisgestaltung
  6. +
  7. KMU-Leads → Self-Service-Onboarding-Prozess
  8. +
+
+ +## Best Practices + +- **Klare Zielbeschreibungen bereitstellen**: Helfen Sie dem Router zu verstehen, wann jedes Ziel mit spezifischen, detaillierten Beschreibungen ausgewählt werden soll +- **Spezifische Routing-Kriterien verwenden**: Definieren Sie klare Bedingungen und Beispiele für jeden Pfad, um die Genauigkeit zu verbessern +- **Fallback-Pfade implementieren**: Verbinden Sie ein Standardziel für Fälle, in denen kein spezifischer Pfad geeignet ist +- **Mit verschiedenen Eingaben testen**: Stellen Sie sicher, dass der Router verschiedene Eingabetypen, Grenzfälle und unerwartete Inhalte verarbeiten kann +- **Routing-Leistung überwachen**: Überprüfen Sie Routing-Entscheidungen regelmäßig und verfeinern Sie Kriterien basierend auf tatsächlichen Nutzungsmustern +- **Geeignete Modelle auswählen**: Verwenden Sie Modelle mit starken Argumentationsfähigkeiten für komplexe Routing-Entscheidungen diff --git a/apps/docs/content/docs/de/blocks/workflow.mdx b/apps/docs/content/docs/de/blocks/workflow.mdx new file mode 100644 index 0000000000..e00991cee2 --- /dev/null +++ b/apps/docs/content/docs/de/blocks/workflow.mdx @@ -0,0 +1,40 @@ +--- +title: Workflow-Block +description: Führe einen anderen Workflow innerhalb des aktuellen Ablaufs aus +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Image } from '@/components/ui/image' + +## Was er macht + +
+ Workflow-Block-Konfiguration +
+ +Füge einen Workflow-Block hinzu, wenn du einen untergeordneten Workflow als Teil eines größeren Ablaufs aufrufen möchtest. Der Block führt die neueste bereitgestellte Version dieses Workflows aus, wartet auf dessen Abschluss und setzt dann mit dem übergeordneten Workflow fort. + +## Konfiguration + +1. **Wähle einen Workflow** aus dem Dropdown-Menü (Selbstreferenzen sind blockiert, um Schleifen zu verhindern). +2. **Eingaben zuordnen**: Wenn der untergeordnete Workflow einen Eingabeformular-Trigger hat, siehst du jedes Feld und kannst übergeordnete Variablen verbinden. Die zugeordneten Werte sind das, was der untergeordnete Workflow erhält. +3. **Ausgaben**: Nach Abschluss des untergeordneten Workflows stellt der Block folgendes bereit: + - `result` – die endgültige Antwort des untergeordneten Workflows + - `success` – ob er ohne Fehler ausgeführt wurde + - `error` – Nachricht, wenn die Ausführung fehlschlägt + +## Ausführungshinweise + +- Untergeordnete Workflows laufen im gleichen Workspace-Kontext, sodass Umgebungsvariablen und Tools übernommen werden. +- Der Block verwendet Deployment-Versionierung: Jede API-, Zeitplan-, Webhook-, manuelle oder Chat-Ausführung ruft den bereitgestellten Snapshot auf. Stelle den untergeordneten Workflow neu bereit, wenn du ihn änderst. +- Wenn der untergeordnete Workflow fehlschlägt, löst der Block einen Fehler aus, es sei denn, du behandelst ihn nachgelagert. + + +Halte untergeordnete Workflows fokussiert. Kleine, wiederverwendbare Abläufe machen es einfacher, sie zu kombinieren, ohne tiefe Verschachtelungen zu erzeugen. + diff --git a/apps/docs/content/docs/de/connections/basics.mdx b/apps/docs/content/docs/de/connections/basics.mdx new file mode 100644 index 0000000000..d69538fe47 --- /dev/null +++ b/apps/docs/content/docs/de/connections/basics.mdx @@ -0,0 +1,42 @@ +--- +title: Verbindungsgrundlagen +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Step, Steps } from 'fumadocs-ui/components/steps' + +## Wie Verbindungen funktionieren + +Verbindungen sind die Pfade, die den Datenfluss zwischen Blöcken in Ihrem Workflow ermöglichen. In Sim definieren Verbindungen, wie Informationen von einem Block zum anderen übertragen werden und ermöglichen so den Datenfluss durch Ihren gesamten Workflow. + + + Jede Verbindung stellt eine gerichtete Beziehung dar, bei der Daten vom Ausgang eines Quellblocks + zum Eingang eines Zielblocks fließen. + + +### Verbindungen erstellen + + + + Quellblock auswählen: Klicken Sie auf den Ausgangsport des Blocks, von dem aus Sie verbinden möchten + + + Verbindung ziehen: Ziehen Sie zum Eingangsport des Zielblocks + + + Verbindung bestätigen: Loslassen, um die Verbindung zu erstellen + + + +### Verbindungsfluss + +Der Datenfluss durch Verbindungen folgt diesen Prinzipien: + +1. **Gerichteter Fluss**: Daten fließen immer von Ausgängen zu Eingängen +2. **Ausführungsreihenfolge**: Blöcke werden basierend auf ihren Verbindungen der Reihe nach ausgeführt +3. **Datentransformation**: Daten können beim Übergang zwischen Blöcken transformiert werden +4. **Bedingte Pfade**: Einige Blöcke (wie Router und Bedingung) können den Fluss auf verschiedene Pfade leiten + + + Das Löschen einer Verbindung stoppt sofort den Datenfluss zwischen den Blöcken. Stellen Sie sicher, dass dies beabsichtigt ist, bevor Sie Verbindungen entfernen. + diff --git a/apps/docs/content/docs/de/connections/data-structure.mdx b/apps/docs/content/docs/de/connections/data-structure.mdx new file mode 100644 index 0000000000..75a2745497 --- /dev/null +++ b/apps/docs/content/docs/de/connections/data-structure.mdx @@ -0,0 +1,194 @@ +--- +title: Verbindungsdatenstruktur +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' + +Wenn Sie Blöcke verbinden, ist das Verständnis der Datenstruktur verschiedener Block-Ausgaben wichtig, da die Ausgabedatenstruktur des Quellblocks bestimmt, welche Werte im Zielblock verfügbar sind. Jeder Blocktyp erzeugt eine spezifische Ausgabestruktur, auf die Sie in nachgelagerten Blöcken verweisen können. + + + Das Verständnis dieser Datenstrukturen ist wesentlich für die effektive Nutzung von Verbindungs-Tags und + den Zugriff auf die richtigen Daten in Ihren Workflows. + + +## Block-Ausgabestrukturen + +Verschiedene Blocktypen erzeugen unterschiedliche Ausgabestrukturen. Hier ist, was Sie von jedem Blocktyp erwarten können: + + + + + ```json + { + "content": "The generated text response", + "model": "gpt-4o", + "tokens": { + "prompt": 120, + "completion": 85, + "total": 205 + }, + "toolCalls": [...], + "cost": [...], + "usage": [...] + } + ``` + + ### Ausgabefelder des Agent-Blocks + + - **content**: Die vom Agenten generierte Haupttextantwort + - **model**: Das verwendete KI-Modell (z.B. "gpt-4o", "claude-3-opus") + - **tokens**: Token-Nutzungsstatistiken + - **prompt**: Anzahl der Token in der Eingabeaufforderung + - **completion**: Anzahl der Token in der Vervollständigung + - **total**: Insgesamt verwendete Token + - **toolCalls**: Array von Werkzeugaufrufen des Agenten (falls vorhanden) + - **cost**: Array von Kostenobjekten für jeden Werkzeugaufruf (falls vorhanden) + - **usage**: Token-Nutzungsstatistiken für die gesamte Antwort + + + + + ```json + { + "data": "Response data", + "status": 200, + "headers": { + "content-type": "application/json", + "cache-control": "no-cache" + } + } + ``` + + ### Ausgabefelder des API-Blocks + + - **data**: Die Antwortdaten von der API (kann jeden Typ haben) + - **status**: HTTP-Statuscode der Antwort + - **headers**: Von der API zurückgegebene HTTP-Header + + + + + ```json + { + "result": "Function return value", + "stdout": "Console output", + } + ``` + + ### Ausgabefelder des Funktionsblocks + + - **result**: Der Rückgabewert der Funktion (kann jeden Typ haben) + - **stdout**: Während der Funktionsausführung erfasste Konsolenausgabe + + + + + ```json + { + "content": "Evaluation summary", + "model": "gpt-5", + "tokens": { + "prompt": 120, + "completion": 85, + "total": 205 + }, + "metric1": 8.5, + "metric2": 7.2, + "metric3": 9.0 + } + ``` + + ### Ausgabefelder des Evaluator-Blocks + + - **content**: Zusammenfassung der Auswertung + - **model**: Das für die Auswertung verwendete KI-Modell + - **tokens**: Statistiken zur Token-Nutzung + - **[metricName]**: Bewertung für jede im Evaluator definierte Metrik (dynamische Felder) + + + + + ```json + { + "content": "Original content passed through", + "conditionResult": true, + "selectedPath": { + "blockId": "2acd9007-27e8-4510-a487-73d3b825e7c1", + "blockType": "agent", + "blockTitle": "Follow-up Agent" + }, + "selectedConditionId": "condition-1" + } + ``` + + ### Ausgabefelder des Condition-Blocks + + - **content**: Der ursprüngliche, durchgeleitete Inhalt + - **conditionResult**: Boolesches Ergebnis der Bedingungsauswertung + - **selectedPath**: Informationen über den ausgewählten Pfad + - **blockId**: ID des nächsten Blocks im ausgewählten Pfad + - **blockType**: Typ des nächsten Blocks + - **blockTitle**: Titel des nächsten Blocks + - **selectedConditionId**: ID der ausgewählten Bedingung + + + + + ```json + { + "content": "Routing decision", + "model": "gpt-4o", + "tokens": { + "prompt": 120, + "completion": 85, + "total": 205 + }, + "selectedPath": { + "blockId": "2acd9007-27e8-4510-a487-73d3b825e7c1", + "blockType": "agent", + "blockTitle": "Customer Service Agent" + } + } + ``` + + ### Ausgabefelder des Router-Blocks + + - **content**: Der Routing-Entscheidungstext + - **model**: Das für das Routing verwendete KI-Modell + - **tokens**: Statistiken zur Token-Nutzung + - **selectedPath**: Informationen über den ausgewählten Pfad + - **blockId**: ID des ausgewählten Zielblocks + - **blockType**: Typ des ausgewählten Blocks + - **blockTitle**: Titel des ausgewählten Blocks + + + + +## Benutzerdefinierte Ausgabestrukturen + +Einige Blöcke können basierend auf ihrer Konfiguration benutzerdefinierte Ausgabestrukturen erzeugen: + +1. **Agent-Blöcke mit Antwortformat**: Bei Verwendung eines Antwortformats in einem Agent-Block entspricht die Ausgabestruktur dem definierten Schema anstelle der Standardstruktur. + +2. **Function-Blöcke**: Das Feld `result` kann jede Datenstruktur enthalten, die von Ihrem Funktionscode zurückgegeben wird. + +3. **API-Blöcke**: Das Feld `data` enthält die Rückgabe der API, die jede gültige JSON-Struktur sein kann. + + + Überprüfen Sie während der Entwicklung immer die tatsächliche Ausgabestruktur Ihrer Blöcke, um sicherzustellen, dass Sie in Ihren Verbindungen auf die richtigen Felder verweisen. + + +## Verschachtelte Datenstrukturen + +Viele Block-Ausgaben enthalten verschachtelte Datenstrukturen. Du kannst auf diese mit Punktnotation in Verbindungs-Tags zugreifen: + +``` + +``` + +Zum Beispiel: + +- `` - Greife auf die Gesamtzahl der Tokens aus einem Agent-Block zu +- `` - Greife auf die ID des ersten Ergebnisses einer API-Antwort zu +- `` - Greife auf ein verschachteltes Feld im Ergebnis eines Funktionsblocks zu diff --git a/apps/docs/content/docs/de/connections/index.mdx b/apps/docs/content/docs/de/connections/index.mdx new file mode 100644 index 0000000000..ffdf7d1157 --- /dev/null +++ b/apps/docs/content/docs/de/connections/index.mdx @@ -0,0 +1,42 @@ +--- +title: Verbindungen +description: Verbinde deine Blöcke miteinander. +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Card, Cards } from 'fumadocs-ui/components/card' +import { ConnectIcon } from '@/components/icons' +import { Video } from '@/components/ui/video' + +Verbindungen sind die Pfade, die den Datenfluss zwischen Blöcken in deinem Workflow ermöglichen. Sie definieren, wie Informationen von einem Block zum anderen weitergegeben werden und ermöglichen dir, komplexe, mehrstufige Prozesse zu erstellen. + + + Richtig konfigurierte Verbindungen sind entscheidend für die Erstellung effektiver Workflows. Sie bestimmen, wie + Daten durch dein System fließen und wie Blöcke miteinander interagieren. + + +
+
+ +## Verbindungstypen + +Sim unterstützt verschiedene Arten von Verbindungen, die verschiedene Workflow-Muster ermöglichen: + + + + Lerne, wie Verbindungen funktionieren und wie du sie in deinen Workflows erstellst + + + Verstehe, wie du Verbindungs-Tags verwendest, um auf Daten zwischen Blöcken zu verweisen + + + Erkunde die Ausgabedatenstrukturen verschiedener Blocktypen + + + Lerne Techniken für den Zugriff und die Manipulation verbundener Daten + + + Folge empfohlenen Mustern für effektives Verbindungsmanagement + + diff --git a/apps/docs/content/docs/de/connections/tags.mdx b/apps/docs/content/docs/de/connections/tags.mdx new file mode 100644 index 0000000000..56e2dd266b --- /dev/null +++ b/apps/docs/content/docs/de/connections/tags.mdx @@ -0,0 +1,109 @@ +--- +title: Verbindungs-Tags +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Video } from '@/components/ui/video' + +Verbindungs-Tags sind visuelle Darstellungen der verfügbaren Daten aus verbundenen Blöcken und bieten eine einfache Möglichkeit, auf Daten zwischen Blöcken und Ausgaben aus vorherigen Blöcken in Ihrem Workflow zu verweisen. + +
+
+ +### Was sind Verbindungs-Tags? + +Verbindungs-Tags sind interaktive Elemente, die erscheinen, wenn Blöcke verbunden werden. Sie repräsentieren die Daten, die von einem Block zum anderen fließen können und ermöglichen es Ihnen: + +- Verfügbare Daten aus Quellblöcken zu visualisieren +- Auf bestimmte Datenfelder in Zielblöcken zu verweisen +- Dynamische Datenflüsse zwischen Blöcken zu erstellen + + + Verbindungs-Tags machen es einfach zu sehen, welche Daten aus vorherigen Blöcken verfügbar sind und diese in Ihrem + aktuellen Block zu verwenden, ohne sich komplexe Datenstrukturen merken zu müssen. + + +## Verwendung von Verbindungs-Tags + +Es gibt zwei Hauptmethoden, um Verbindungs-Tags in Ihren Workflows zu verwenden: + +
+
+

Drag and Drop

+
+ Klicken Sie auf einen Verbindungs-Tag und ziehen Sie ihn in Eingabefelder von Zielblöcken. Ein Dropdown-Menü wird + angezeigt, das verfügbare Werte zeigt. +
+
    +
  1. Fahren Sie mit dem Mauszeiger über einen Verbindungs-Tag, um verfügbare Daten zu sehen
  2. +
  3. Klicken und ziehen Sie den Tag in ein Eingabefeld
  4. +
  5. Wählen Sie das spezifische Datenfeld aus dem Dropdown-Menü
  6. +
  7. Die Referenz wird automatisch eingefügt
  8. +
+
+ +
+

Spitze-Klammer-Syntax

+
+ Geben Sie <> in Eingabefeldern ein, um ein Dropdown-Menü mit verfügbaren Verbindungswerten + aus vorherigen Blöcken zu sehen. +
+
    +
  1. Klicken Sie in ein beliebiges Eingabefeld, in dem Sie verbundene Daten verwenden möchten
  2. +
  3. + Geben Sie <> ein, um das Verbindungs-Dropdown-Menü aufzurufen +
  4. +
  5. Durchsuchen und wählen Sie die Daten aus, auf die Sie verweisen möchten
  6. +
  7. Tippen Sie weiter oder wählen Sie aus dem Dropdown-Menü, um die Referenz zu vervollständigen
  8. +
+
+
+ +## Tag-Syntax + +Verbindungs-Tags verwenden eine einfache Syntax, um auf Daten zu verweisen: + +``` + +``` + +Wobei: + +- `blockName` ist der Name des Quellblocks +- `path.to.data` ist der Pfad zum spezifischen Datenfeld + +Zum Beispiel: + +- `` - Verweist auf das Inhaltsfeld eines Blocks mit der ID "agent1" +- `` - Verweist auf den Namen des ersten Benutzers im Benutzer-Array aus dem Datenfeld eines Blocks mit der ID "api2" + +## Dynamische Tag-Referenzen + +Verbindungs-Tags werden zur Laufzeit ausgewertet, was bedeutet: + +1. Sie verweisen immer auf die aktuellsten Daten +2. Sie können in Ausdrücken verwendet und mit statischem Text kombiniert werden +3. Sie können in andere Datenstrukturen eingebettet werden + +### Beispiele + +```javascript +// Reference in text +"The user's name is " + +// Reference in JSON +{ + "userName": "", + "orderTotal": +} + +// Reference in code +const greeting = "Hello, !"; +const total = * 1.1; // Add 10% tax +``` + + + Wenn Sie Verbindungs-Tags in numerischen Kontexten verwenden, stellen Sie sicher, dass die referenzierten Daten tatsächlich eine Zahl sind, + um Typkonvertierungsprobleme zu vermeiden. + diff --git a/apps/docs/content/docs/de/copilot/index.mdx b/apps/docs/content/docs/de/copilot/index.mdx new file mode 100644 index 0000000000..9347148b58 --- /dev/null +++ b/apps/docs/content/docs/de/copilot/index.mdx @@ -0,0 +1,161 @@ +--- +title: Copilot +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Card, Cards } from 'fumadocs-ui/components/card' +import { Image } from '@/components/ui/image' +import { MessageCircle, Package, Zap, Infinity as InfinityIcon, Brain, BrainCircuit } from 'lucide-react' + +Copilot ist dein Assistent im Editor, der dir hilft, Workflows mit Sim Copilot zu erstellen und zu bearbeiten sowie diese zu verstehen und zu verbessern. Er kann: + +- **Erklären**: Beantwortet Fragen zu Sim und deinem aktuellen Workflow +- **Anleiten**: Schlägt Bearbeitungen und Best Practices vor +- **Bearbeiten**: Nimmt Änderungen an Blöcken, Verbindungen und Einstellungen vor, wenn du zustimmst + + + Copilot ist ein von Sim verwalteter Dienst. Für selbst gehostete Installationen generiere einen Copilot API-Schlüssel in der gehosteten App (sim.ai → Einstellungen → Copilot) + 1. Gehe zu [sim.ai](https://sim.ai) → Einstellungen → Copilot und generiere einen Copilot API-Schlüssel + 2. Setze `COPILOT_API_KEY` in deiner selbst gehosteten Umgebung auf diesen Wert + + +## Kontextmenü (@) + +Verwende das `@` Symbol, um auf verschiedene Ressourcen zu verweisen und Copilot mehr Kontext über deinen Arbeitsbereich zu geben: + +Copilot-Kontextmenü mit verfügbaren Referenzoptionen + +Das `@` Menü bietet Zugriff auf: +- **Chats**: Verweise auf vorherige Copilot-Gespräche +- **Alle Workflows**: Verweise auf beliebige Workflows in deinem Arbeitsbereich +- **Workflow-Blöcke**: Verweise auf bestimmte Blöcke aus Workflows +- **Blöcke**: Verweise auf Blocktypen und Vorlagen +- **Wissen**: Verweise auf deine hochgeladenen Dokumente und Wissensdatenbank +- **Dokumentation**: Verweise auf Sim-Dokumentation +- **Vorlagen**: Verweise auf Workflow-Vorlagen +- **Logs**: Verweise auf Ausführungsprotokolle und Ergebnisse + +Diese kontextbezogenen Informationen helfen Copilot, genauere und relevantere Unterstützung für deinen spezifischen Anwendungsfall zu bieten. + +## Modi + + + + + Fragen + + } + > +
+ Frage-Antwort-Modus für Erklärungen, Anleitungen und Vorschläge ohne Änderungen an deinem Workflow vorzunehmen. +
+
+ + + Agent + + } + > +
+ Erstellen-und-Bearbeiten-Modus. Copilot schlägt spezifische Änderungen vor (Blöcke hinzufügen, Variablen verbinden, Einstellungen anpassen) und wendet sie an, wenn du zustimmst. +
+
+
+ +## Tiefenebenen + + + + + Schnell + + } + > +
Am schnellsten und günstigsten. Ideal für kleine Änderungen, einfache Workflows und geringfügige Anpassungen.
+
+ + + Auto + + } + > +
Ausgewogene Geschwindigkeit und Denkleistung. Empfohlene Standardeinstellung für die meisten Aufgaben.
+
+ + + Erweitert + + } + > +
Mehr Denkleistung für umfangreichere Workflows und komplexe Änderungen bei gleichzeitiger Leistungsfähigkeit.
+
+ + + Behemoth + + } + > +
Maximale Denkleistung für tiefgreifende Planung, Fehlerbehebung und komplexe architektonische Änderungen.
+
+
+ +### Modusauswahl-Oberfläche + +Du kannst einfach zwischen verschiedenen Denkmodi über den Modusauswähler in der Copilot-Oberfläche wechseln: + +Copilot-Modusauswahl zeigt den erweiterten Modus mit MAX-Umschalter + +Die Oberfläche ermöglicht dir: +- **Denkebene auswählen**: Wähle zwischen Schnell, Auto, Erweitert oder Behemoth +- **MAX-Modus aktivieren**: Umschalten für maximale Denkfähigkeiten, wenn du die gründlichste Analyse benötigst +- **Modusbeschreibungen anzeigen**: Verstehe, wofür jeder Modus optimiert ist + +Wähle deinen Modus basierend auf der Komplexität deiner Aufgabe - verwende Schnell für einfache Fragen und Behemoth für komplexe architektonische Änderungen. + +## Abrechnung und Kostenberechnung + +### Wie Kosten berechnet werden + +Die Copilot-Nutzung wird pro Token vom zugrundeliegenden LLM abgerechnet: + +- **Eingabe-Tokens**: werden zum Basistarif des Anbieters berechnet (**zum Selbstkostenpreis**) +- **Ausgabe-Tokens**: werden mit dem **1,5-fachen** des Basisausgabepreises des Anbieters berechnet + +```javascript +copilotCost = (inputTokens × inputPrice + outputTokens × (outputPrice × 1.5)) / 1,000,000 +``` + +| Komponente | Angewendeter Tarif | +|------------|------------------------| +| Input | inputPrice | +| Output | outputPrice × 1,5 | + + + Die angezeigten Preise spiegeln die Tarife vom 4. September 2025 wider. Überprüfen Sie die Anbieterdokumentation für aktuelle Preise. + + + + Modellpreise werden pro Million Token berechnet. Die Berechnung teilt durch 1.000.000, um die tatsächlichen Kosten zu ermitteln. Siehe die Seite zur Kostenberechnung für Hintergründe und Beispiele. + diff --git a/apps/docs/content/docs/de/execution/api.mdx b/apps/docs/content/docs/de/execution/api.mdx new file mode 100644 index 0000000000..8abcf741a4 --- /dev/null +++ b/apps/docs/content/docs/de/execution/api.mdx @@ -0,0 +1,551 @@ +--- +title: Externe API +--- + +import { Accordion, Accordions } from 'fumadocs-ui/components/accordion' +import { Callout } from 'fumadocs-ui/components/callout' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { CodeBlock } from 'fumadocs-ui/components/codeblock' +import { Video } from '@/components/ui/video' + +Sim bietet eine umfassende externe API zum Abfragen von Workflow-Ausführungsprotokollen und zum Einrichten von Webhooks für Echtzeit-Benachrichtigungen, wenn Workflows abgeschlossen werden. + +## Authentifizierung + +Alle API-Anfragen erfordern einen API-Schlüssel, der im Header `x-api-key` übergeben wird: + +```bash +curl -H "x-api-key: YOUR_API_KEY" \ + https://sim.ai/api/v1/logs?workspaceId=YOUR_WORKSPACE_ID +``` + +Sie können API-Schlüssel in Ihren Benutzereinstellungen im Sim-Dashboard generieren. + +## Logs-API + +Alle API-Antworten enthalten Informationen über Ihre Workflow-Ausführungslimits und -nutzung: + +```json +"limits": { + "workflowExecutionRateLimit": { + "sync": { + "limit": 60, // Max sync workflow executions per minute + "remaining": 58, // Remaining sync workflow executions + "resetAt": "..." // When the window resets + }, + "async": { + "limit": 60, // Max async workflow executions per minute + "remaining": 59, // Remaining async workflow executions + "resetAt": "..." // When the window resets + } + }, + "usage": { + "currentPeriodCost": 1.234, // Current billing period usage in USD + "limit": 10, // Usage limit in USD + "plan": "pro", // Current subscription plan + "isExceeded": false // Whether limit is exceeded + } +} +``` + +**Hinweis:** Die Ratenbegrenzungen in der Antwort beziehen sich auf Workflow-Ausführungen. Die Ratenbegrenzungen für den Aufruf dieses API-Endpunkts befinden sich in den Antwort-Headern (`X-RateLimit-*`). + +### Logs abfragen + +Fragen Sie Workflow-Ausführungsprotokolle mit umfangreichen Filteroptionen ab. + + + + + ```http + GET /api/v1/logs + ``` + + **Erforderliche Parameter:** + - `workspaceId` - Ihre Workspace-ID + + **Optionale Filter:** + - `workflowIds` - Kommagetrennte Workflow-IDs + - `folderIds` - Kommagetrennte Ordner-IDs + - `triggers` - Kommagetrennte Auslösertypen: `api`, `webhook`, `schedule`, `manual`, `chat` + - `level` - Nach Level filtern: `info`, `error` + - `startDate` - ISO-Zeitstempel für den Beginn des Datumsbereichs + - `endDate` - ISO-Zeitstempel für das Ende des Datumsbereichs + - `executionId` - Exakte Übereinstimmung der Ausführungs-ID + - `minDurationMs` - Minimale Ausführungsdauer in Millisekunden + - `maxDurationMs` - Maximale Ausführungsdauer in Millisekunden + - `minCost` - Minimale Ausführungskosten + - `maxCost` - Maximale Ausführungskosten + - `model` - Nach verwendetem KI-Modell filtern + + **Paginierung:** + - `limit` - Ergebnisse pro Seite (Standard: 100) + - `cursor` - Cursor für die nächste Seite + - `order` - Sortierreihenfolge: `desc`, `asc` (Standard: desc) + + **Detailebene:** + - `details` - Detailebene der Antwort: `basic`, `full` (Standard: basic) + - `includeTraceSpans` - Trace-Spans einschließen (Standard: false) + - `includeFinalOutput` - Endgültige Ausgabe einschließen (Standard: false) + + + + ```json + { + "data": [ + { + "id": "log_abc123", + "workflowId": "wf_xyz789", + "executionId": "exec_def456", + "level": "info", + "trigger": "api", + "startedAt": "2025-01-01T12:34:56.789Z", + "endedAt": "2025-01-01T12:34:57.123Z", + "totalDurationMs": 334, + "cost": { + "total": 0.00234 + }, + "files": null + } + ], + "nextCursor": "eyJzIjoiMjAyNS0wMS0wMVQxMjozNDo1Ni43ODlaIiwiaWQiOiJsb2dfYWJjMTIzIn0", + "limits": { + "workflowExecutionRateLimit": { + "sync": { + "limit": 60, + "remaining": 58, + "resetAt": "2025-01-01T12:35:56.789Z" + }, + "async": { + "limit": 60, + "remaining": 59, + "resetAt": "2025-01-01T12:35:56.789Z" + } + }, + "usage": { + "currentPeriodCost": 1.234, + "limit": 10, + "plan": "pro", + "isExceeded": false + } + } + } + ``` + + + + +### Log-Details abrufen + +Rufen Sie detaillierte Informationen zu einem bestimmten Logeintrag ab. + + + + + ```http + GET /api/v1/logs/{id} + ``` + + + + + ```json + { + "data": { + "id": "log_abc123", + "workflowId": "wf_xyz789", + "executionId": "exec_def456", + "level": "info", + "trigger": "api", + "startedAt": "2025-01-01T12:34:56.789Z", + "endedAt": "2025-01-01T12:34:57.123Z", + "totalDurationMs": 334, + "workflow": { + "id": "wf_xyz789", + "name": "My Workflow", + "description": "Process customer data" + }, + "executionData": { + "traceSpans": [...], + "finalOutput": {...} + }, + "cost": { + "total": 0.00234, + "tokens": { + "prompt": 123, + "completion": 456, + "total": 579 + }, + "models": { + "gpt-4o": { + "input": 0.001, + "output": 0.00134, + "total": 0.00234, + "tokens": { + "prompt": 123, + "completion": 456, + "total": 579 + } + } + } + }, + "limits": { + "workflowExecutionRateLimit": { + "sync": { + "limit": 60, + "remaining": 58, + "resetAt": "2025-01-01T12:35:56.789Z" + }, + "async": { + "limit": 60, + "remaining": 59, + "resetAt": "2025-01-01T12:35:56.789Z" + } + }, + "usage": { + "currentPeriodCost": 1.234, + "limit": 10, + "plan": "pro", + "isExceeded": false + } + } + } + } + ``` + + + + +### Ausführungsdetails abrufen + +Rufen Sie Ausführungsdetails einschließlich des Workflow-Zustandsschnappschusses ab. + + + + + ```http + GET /api/v1/logs/executions/{executionId} + ``` + + + + + ```json + { + "executionId": "exec_def456", + "workflowId": "wf_xyz789", + "workflowState": { + "blocks": {...}, + "edges": [...], + "loops": {...}, + "parallels": {...} + }, + "executionMetadata": { + "trigger": "api", + "startedAt": "2025-01-01T12:34:56.789Z", + "endedAt": "2025-01-01T12:34:57.123Z", + "totalDurationMs": 334, + "cost": {...} + } + } + ``` + + + + +## Webhook-Abonnements + +Erhalten Sie Echtzeitbenachrichtigungen, wenn Workflow-Ausführungen abgeschlossen werden. Webhooks werden über die Sim-Benutzeroberfläche im Workflow-Editor konfiguriert. + +### Konfiguration + +Webhooks können für jeden Workflow über die Benutzeroberfläche des Workflow-Editors konfiguriert werden. Klicken Sie auf das Webhook-Symbol in der Kontrollleiste, um Ihre Webhook-Abonnements einzurichten. + +
+
+ +**Verfügbare Konfigurationsoptionen:** +- `url`: Ihre Webhook-Endpunkt-URL +- `secret`: Optionales Geheimnis für die HMAC-Signaturverifizierung +- `includeFinalOutput`: Die endgültige Ausgabe des Workflows in die Nutzlast einschließen +- `includeTraceSpans`: Detaillierte Ausführungs-Trace-Spans einschließen +- `includeRateLimits`: Informationen zum Ratelimit des Workflow-Besitzers einschließen +- `includeUsageData`: Nutzungs- und Abrechnungsdaten des Workflow-Besitzers einschließen +- `levelFilter`: Array von Log-Ebenen, die empfangen werden sollen (`info`, `error`) +- `triggerFilter`: Array von Auslösertypen, die empfangen werden sollen (`api`, `webhook`, `schedule`, `manual`, `chat`) +- `active`: Webhook-Abonnement aktivieren/deaktivieren + +### Webhook-Nutzlast + +Wenn eine Workflow-Ausführung abgeschlossen ist, sendet Sim eine POST-Anfrage an Ihre Webhook-URL: + +```json +{ + "id": "evt_123", + "type": "workflow.execution.completed", + "timestamp": 1735925767890, + "data": { + "workflowId": "wf_xyz789", + "executionId": "exec_def456", + "status": "success", + "level": "info", + "trigger": "api", + "startedAt": "2025-01-01T12:34:56.789Z", + "endedAt": "2025-01-01T12:34:57.123Z", + "totalDurationMs": 334, + "cost": { + "total": 0.00234, + "tokens": { + "prompt": 123, + "completion": 456, + "total": 579 + }, + "models": { + "gpt-4o": { + "input": 0.001, + "output": 0.00134, + "total": 0.00234, + "tokens": { + "prompt": 123, + "completion": 456, + "total": 579 + } + } + } + }, + "files": null, + "finalOutput": {...}, // Only if includeFinalOutput=true + "traceSpans": [...], // Only if includeTraceSpans=true + "rateLimits": {...}, // Only if includeRateLimits=true + "usage": {...} // Only if includeUsageData=true + }, + "links": { + "log": "/v1/logs/log_abc123", + "execution": "/v1/logs/executions/exec_def456" + } +} +``` + +### Webhook-Header + +Jede Webhook-Anfrage enthält diese Header: + +- `sim-event`: Ereignistyp (immer `workflow.execution.completed`) +- `sim-timestamp`: Unix-Zeitstempel in Millisekunden +- `sim-delivery-id`: Eindeutige Lieferungs-ID für Idempotenz +- `sim-signature`: HMAC-SHA256-Signatur zur Verifizierung (falls Secret konfiguriert) +- `Idempotency-Key`: Identisch mit der Lieferungs-ID zur Erkennung von Duplikaten + +### Signaturverifizierung + +Wenn Sie ein Webhook-Secret konfigurieren, überprüfen Sie die Signatur, um sicherzustellen, dass der Webhook von Sim stammt: + + + + + ```javascript + import crypto from 'crypto'; + + function verifyWebhookSignature(body, signature, secret) { + const [timestampPart, signaturePart] = signature.split(','); + const timestamp = timestampPart.replace('t=', ''); + const expectedSignature = signaturePart.replace('v1=', ''); + + const signatureBase = `${timestamp}.${body}`; + const hmac = crypto.createHmac('sha256', secret); + hmac.update(signatureBase); + const computedSignature = hmac.digest('hex'); + + return computedSignature === expectedSignature; + } + + // In your webhook handler + app.post('/webhook', (req, res) => { + const signature = req.headers['sim-signature']; + const body = JSON.stringify(req.body); + + if (!verifyWebhookSignature(body, signature, process.env.WEBHOOK_SECRET)) { + return res.status(401).send('Invalid signature'); + } + + // Process the webhook... + }); + ``` + + + + + ```python + import hmac + import hashlib + import json + + def verify_webhook_signature(body: str, signature: str, secret: str) -> bool: + timestamp_part, signature_part = signature.split(',') + timestamp = timestamp_part.replace('t=', '') + expected_signature = signature_part.replace('v1=', '') + + signature_base = f"{timestamp}.{body}" + computed_signature = hmac.new( + secret.encode(), + signature_base.encode(), + hashlib.sha256 + ).hexdigest() + + return hmac.compare_digest(computed_signature, expected_signature) + + # In your webhook handler + @app.route('/webhook', methods=['POST']) + def webhook(): + signature = request.headers.get('sim-signature') + body = json.dumps(request.json) + + if not verify_webhook_signature(body, signature, os.environ['WEBHOOK_SECRET']): + return 'Invalid signature', 401 + + # Process the webhook... + ``` + + + + +### Wiederholungsrichtlinie + +Fehlgeschlagene Webhook-Zustellungen werden mit exponentiellem Backoff und Jitter wiederholt: + +- Maximale Versuche: 5 +- Wiederholungsverzögerungen: 5 Sekunden, 15 Sekunden, 1 Minute, 3 Minuten, 10 Minuten +- Jitter: Bis zu 10% zusätzliche Verzögerung, um Überlastungen zu vermeiden +- Nur HTTP 5xx und 429 Antworten lösen Wiederholungen aus +- Zustellungen haben ein Timeout nach 30 Sekunden + + + Webhook-Zustellungen werden asynchron verarbeitet und beeinträchtigen nicht die Leistung der Workflow-Ausführung. + + +## Best Practices + +1. **Polling-Strategie**: Verwenden Sie beim Abfragen von Logs die cursorbasierte Paginierung mit `order=asc` und `startDate`, um neue Logs effizient abzurufen. + +2. **Webhook-Sicherheit**: Konfigurieren Sie immer ein Webhook-Secret und überprüfen Sie Signaturen, um sicherzustellen, dass Anfragen von Sim stammen. + +3. **Idempotenz**: Verwenden Sie den `Idempotency-Key`Header, um doppelte Webhook-Zustellungen zu erkennen und zu behandeln. + +4. **Datenschutz**: Standardmäßig werden `finalOutput` und `traceSpans` von den Antworten ausgeschlossen. Aktivieren Sie diese nur, wenn Sie die Daten benötigen und die Datenschutzauswirkungen verstehen. + +5. **Rate-Limiting**: Implementieren Sie exponentielles Backoff, wenn Sie 429-Antworten erhalten. Überprüfen Sie den `Retry-After`Header für die empfohlene Wartezeit. + +## Rate-Limiting + +Die API implementiert Rate-Limiting, um eine faire Nutzung zu gewährleisten: + +- **Kostenloser Plan**: 10 Anfragen pro Minute +- **Pro-Plan**: 30 Anfragen pro Minute +- **Team-Plan**: 60 Anfragen pro Minute +- **Enterprise-Plan**: Individuelle Limits + +Informationen zum Rate-Limit sind in den Antwort-Headern enthalten: +- `X-RateLimit-Limit`: Maximale Anfragen pro Zeitfenster +- `X-RateLimit-Remaining`: Verbleibende Anfragen im aktuellen Zeitfenster +- `X-RateLimit-Reset`: ISO-Zeitstempel, wann das Zeitfenster zurückgesetzt wird + +## Beispiel: Abfragen neuer Logs + +```javascript +let cursor = null; +const workspaceId = 'YOUR_WORKSPACE_ID'; +const startDate = new Date().toISOString(); + +async function pollLogs() { + const params = new URLSearchParams({ + workspaceId, + startDate, + order: 'asc', + limit: '100' + }); + + if (cursor) { + params.append('cursor', cursor); + } + + const response = await fetch( + `https://sim.ai/api/v1/logs?${params}`, + { + headers: { + 'x-api-key': 'YOUR_API_KEY' + } + } + ); + + if (response.ok) { + const data = await response.json(); + + // Process new logs + for (const log of data.data) { + console.log(`New execution: ${log.executionId}`); + } + + // Update cursor for next poll + if (data.nextCursor) { + cursor = data.nextCursor; + } + } +} + +// Poll every 30 seconds +setInterval(pollLogs, 30000); +``` + +## Beispiel: Verarbeitung von Webhooks + +```javascript +import express from 'express'; +import crypto from 'crypto'; + +const app = express(); +app.use(express.json()); + +app.post('/sim-webhook', (req, res) => { + // Verify signature + const signature = req.headers['sim-signature']; + const body = JSON.stringify(req.body); + + if (!verifyWebhookSignature(body, signature, process.env.WEBHOOK_SECRET)) { + return res.status(401).send('Invalid signature'); + } + + // Check timestamp to prevent replay attacks + const timestamp = parseInt(req.headers['sim-timestamp']); + const fiveMinutesAgo = Date.now() - (5 * 60 * 1000); + + if (timestamp < fiveMinutesAgo) { + return res.status(401).send('Timestamp too old'); + } + + // Process the webhook + const event = req.body; + + switch (event.type) { + case 'workflow.execution.completed': + const { workflowId, executionId, status, cost } = event.data; + + if (status === 'error') { + console.error(`Workflow ${workflowId} failed: ${executionId}`); + // Handle error... + } else { + console.log(`Workflow ${workflowId} completed: ${executionId}`); + console.log(`Cost: ${cost.total}`); + // Process successful execution... + } + break; + } + + // Return 200 to acknowledge receipt + res.status(200).send('OK'); +}); + +app.listen(3000, () => { + console.log('Webhook server listening on port 3000'); +}); +``` diff --git a/apps/docs/content/docs/de/execution/basics.mdx b/apps/docs/content/docs/de/execution/basics.mdx new file mode 100644 index 0000000000..1353b99267 --- /dev/null +++ b/apps/docs/content/docs/de/execution/basics.mdx @@ -0,0 +1,132 @@ +--- +title: Ausführungsgrundlagen +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Card, Cards } from 'fumadocs-ui/components/card' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Image } from '@/components/ui/image' +import { Video } from '@/components/ui/video' + +Das Verständnis der Workflow-Ausführung in Sim ist entscheidend für die Erstellung effizienter und zuverlässiger Automatisierungen. Die Ausführungs-Engine verwaltet automatisch Abhängigkeiten, Parallelität und Datenfluss, um sicherzustellen, dass Ihre Workflows reibungslos und vorhersehbar ablaufen. + +## Wie Workflows ausgeführt werden + +Die Ausführungs-Engine von Sim verarbeitet Workflows intelligent, indem sie Abhängigkeiten analysiert und Blöcke in der effizientesten Reihenfolge ausführt. + +### Parallele Ausführung als Standard + +Mehrere Blöcke werden gleichzeitig ausgeführt, wenn sie nicht voneinander abhängig sind. Diese parallele Ausführung verbessert die Leistung erheblich, ohne dass eine manuelle Konfiguration erforderlich ist. + +Mehrere Blöcke, die nach dem Start-Block parallel ausgeführt werden + +In diesem Beispiel werden sowohl der Kundensupport- als auch der Deep-Researcher-Agentenblock gleichzeitig nach dem Start-Block ausgeführt, was die Effizienz maximiert. + +### Automatische Ausgabekombination + +Wenn Blöcke mehrere Abhängigkeiten haben, wartet die Ausführungs-Engine automatisch auf den Abschluss aller Abhängigkeiten und stellt dann ihre kombinierten Ausgaben dem nächsten Block zur Verfügung. Keine manuelle Kombination erforderlich. + +Funktionsblock, der automatisch Ausgaben von mehreren vorherigen Blöcken empfängt + +Der Funktionsblock erhält Ausgaben von beiden Agentenblöcken, sobald diese abgeschlossen sind, sodass Sie die kombinierten Ergebnisse verarbeiten können. + +### Intelligentes Routing + +Workflows können sich in mehrere Richtungen verzweigen, indem sie Routing-Blöcke verwenden. Die Ausführungs-Engine unterstützt sowohl deterministisches Routing (mit Bedingungsblöcken) als auch KI-gesteuertes Routing (mit Router-Blöcken). + +Workflow, der sowohl bedingte als auch router-basierte Verzweigungen zeigt + +Dieser Workflow zeigt, wie die Ausführung unterschiedlichen Pfaden basierend auf Bedingungen oder KI-Entscheidungen folgen kann, wobei jeder Pfad unabhängig ausgeführt wird. + +## Blocktypen + +Sim bietet verschiedene Arten von Blöcken, die spezifische Zwecke in Ihren Workflows erfüllen: + + + + **Starter-Blöcke** initiieren Workflows und **Webhook-Blöcke** reagieren auf externe Ereignisse. Jeder Workflow benötigt einen Auslöser, um die Ausführung zu beginnen. + + + + **Agent-Blöcke** interagieren mit KI-Modellen, **Funktionsblöcke** führen benutzerdefinierten Code aus und **API-Blöcke** verbinden sich mit externen Diensten. Diese Blöcke transformieren und verarbeiten Ihre Daten. + + + + **Router-Blöcke** nutzen KI, um Pfade zu wählen, **Bedingungsblöcke** verzweigen basierend auf Logik und **Schleifen-/Parallelblöcke** handhaben Iterationen und Nebenläufigkeit. + + + + **Antwortblöcke** formatieren endgültige Ausgaben für APIs und Chat-Schnittstellen und liefern strukturierte Ergebnisse aus Ihren Workflows. + + + +Alle Blöcke werden automatisch basierend auf ihren Abhängigkeiten ausgeführt - Sie müssen die Ausführungsreihenfolge oder das Timing nicht manuell verwalten. + +## Ausführungsauslöser + +Workflows können auf verschiedene Weise ausgelöst werden, abhängig von Ihrem Anwendungsfall: + +### Manuelles Testen +Klicken Sie im Workflow-Editor auf "Ausführen", um Ihren Workflow während der Entwicklung zu testen. Perfekt für Debugging und Validierung. + +### Geplante Ausführung +Richten Sie wiederkehrende Ausführungen mit Cron-Ausdrücken ein. Ideal für regelmäßige Datenverarbeitung, Berichte oder Wartungsaufgaben. + +### API-Bereitstellung +Stellen Sie Workflows als HTTP-Endpunkte bereit, die programmatisch von Ihren Anwendungen aufgerufen werden können. + +### Webhook-Integration +Reagieren Sie in Echtzeit auf Ereignisse von externen Diensten wie GitHub, Stripe oder benutzerdefinierten Systemen. + +### Chat-Schnittstelle +Erstellen Sie Konversationsschnittstellen, die auf benutzerdefinierten Subdomains für benutzerorientierte KI-Anwendungen gehostet werden. + + + Erfahren Sie mehr über jeden Auslösertyp im [Abschnitt Auslöser](/triggers) der Dokumentation. + + +## Ausführungsüberwachung + +Wenn Workflows ausgeführt werden, bietet Sim Echtzeit-Einblick in den Ausführungsprozess: + +- **Live-Block-Status**: Sehen Sie, welche Blöcke gerade ausgeführt werden, abgeschlossen sind oder fehlgeschlagen sind +- **Ausführungsprotokolle**: Detaillierte Protokolle erscheinen in Echtzeit und zeigen Eingaben, Ausgaben und eventuelle Fehler +- **Leistungskennzahlen**: Verfolgen Sie die Ausführungszeit und Kosten für jeden Block +- **Pfadvisualisierung**: Verstehen Sie, welche Ausführungspfade durch Ihren Workflow genommen wurden + + + Alle Ausführungsdetails werden erfasst und sind auch nach Abschluss der Workflows zur Überprüfung verfügbar, was bei der Fehlerbehebung und Optimierung hilft. + + +## Wichtige Ausführungsprinzipien + +Das Verständnis dieser Grundprinzipien wird Ihnen helfen, bessere Workflows zu erstellen: + +1. **Abhängigkeitsbasierte Ausführung**: Blöcke werden nur ausgeführt, wenn alle ihre Abhängigkeiten abgeschlossen sind +2. **Automatische Parallelisierung**: Unabhängige Blöcke laufen gleichzeitig ohne Konfiguration +3. **Intelligenter Datenfluss**: Ausgaben fließen automatisch zu verbundenen Blöcken +4. **Fehlerbehandlung**: Fehlgeschlagene Blöcke stoppen ihren Ausführungspfad, beeinflussen aber keine unabhängigen Pfade +5. **Zustandspersistenz**: Alle Blockausgaben und Ausführungsdetails werden für die Fehlerbehebung gespeichert + +## Nächste Schritte + +Nachdem Sie die Grundlagen der Ausführung verstanden haben, erkunden Sie: +- **[Blocktypen](/blocks)** - Erfahren Sie mehr über spezifische Block-Funktionen +- **[Protokollierung](/execution/logging)** - Überwachen Sie Workflow-Ausführungen und beheben Sie Probleme +- **[Kostenberechnung](/execution/costs)** - Verstehen und optimieren Sie Workflow-Kosten +- **[Auslöser](/triggers)** - Richten Sie verschiedene Möglichkeiten ein, Ihre Workflows auszuführen diff --git a/apps/docs/content/docs/de/execution/costs.mdx b/apps/docs/content/docs/de/execution/costs.mdx new file mode 100644 index 0000000000..385ebd6699 --- /dev/null +++ b/apps/docs/content/docs/de/execution/costs.mdx @@ -0,0 +1,186 @@ +--- +title: Kostenberechnung +--- + +import { Accordion, Accordions } from 'fumadocs-ui/components/accordion' +import { Callout } from 'fumadocs-ui/components/callout' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Image } from '@/components/ui/image' + +Sim berechnet automatisch die Kosten für alle Workflow-Ausführungen und bietet transparente Preise basierend auf der Nutzung von KI-Modellen und Ausführungsgebühren. Das Verständnis dieser Kosten hilft Ihnen, Workflows zu optimieren und Ihr Budget effektiv zu verwalten. + +## Wie Kosten berechnet werden + +Jede Workflow-Ausführung umfasst zwei Kostenkomponenten: + +**Basis-Ausführungsgebühr**: 0,001 $ pro Ausführung + +**KI-Modellnutzung**: Variable Kosten basierend auf dem Token-Verbrauch + +```javascript +modelCost = (inputTokens × inputPrice + outputTokens × outputPrice) / 1,000,000 +totalCost = baseExecutionCharge + modelCost +``` + + + KI-Modellpreise werden pro Million Token berechnet. Die Berechnung teilt durch 1.000.000, um die tatsächlichen Kosten zu ermitteln. Workflows ohne KI-Blöcke verursachen nur die Basis-Ausführungsgebühr. + + +## Modellaufschlüsselung in Logs + +Für Workflows mit KI-Blöcken können Sie detaillierte Kosteninformationen in den Logs einsehen: + +
+ Modellaufschlüsselung +
+ +Die Modellaufschlüsselung zeigt: +- **Token-Nutzung**: Eingabe- und Ausgabe-Token-Anzahl für jedes Modell +- **Kostenaufschlüsselung**: Einzelkosten pro Modell und Operation +- **Modellverteilung**: Welche Modelle verwendet wurden und wie oft +- **Gesamtkosten**: Gesamtkosten für die gesamte Workflow-Ausführung + +## Preisoptionen + + + + **Gehostete Modelle** - Sim stellt API-Schlüssel mit einem 2,5-fachen Preismultiplikator bereit: + + | Modell | Basispreis (Eingabe/Ausgabe) | Gehosteter Preis (Eingabe/Ausgabe) | + |-------|---------------------------|----------------------------| + | GPT-4o | 2,50 $ / 10,00 $ | 6,25 $ / 25,00 $ | + | GPT-4.1 | 2,00 $ / 8,00 $ | 5,00 $ / 20,00 $ | + | o1 | 15,00 $ / 60,00 $ | 37,50 $ / 150,00 $ | + | o3 | 2,00 $ / 8,00 $ | 5,00 $ / 20,00 $ | + | Claude 3.5 Sonnet | 3,00 $ / 15,00 $ | 7,50 $ / 37,50 $ | + | Claude Opus 4.0 | 15,00 $ / 75,00 $ | 37,50 $ / 187,50 $ | + + *Der 2,5-fache Multiplikator deckt Infrastruktur- und API-Verwaltungskosten ab.* + + + + **Ihre eigenen API-Schlüssel** - Nutzen Sie jedes Modell zum Basispreis: + + | Anbieter | Modelle | Eingabe / Ausgabe | + |----------|---------|----------------| + | Google | Gemini 2.5 | 0,15 $ / 0,60 $ | + | Deepseek | V3, R1 | 0,75 $ / 1,00 $ | + | xAI | Grok 4, Grok 3 | 5,00 $ / 25,00 $ | + | Groq | Llama 4 Scout | 0,40 $ / 0,60 $ | + | Cerebras | Llama 3.3 70B | 0,94 $ / 0,94 $ | + | Ollama | Lokale Modelle | Kostenlos | + + *Bezahlen Sie Anbieter direkt ohne Aufschlag* + + + + + Die angezeigten Preise spiegeln die Tarife vom 10. September 2025 wider. Überprüfen Sie die Anbieterdokumentation für aktuelle Preise. + + +## Kostenoptimierungsstrategien + + + + Wählen Sie Modelle basierend auf der Komplexität der Aufgabe. Einfache Aufgaben können GPT-4.1-nano ($0,10/$0,40) verwenden, während komplexes Denken möglicherweise o1 oder Claude Opus erfordert. + + + + Gut strukturierte, präzise Prompts reduzieren den Token-Verbrauch ohne Qualitätseinbußen. + + + + Verwenden Sie Ollama für unkritische Aufgaben, um API-Kosten vollständig zu eliminieren. + + + + Speichern Sie häufig verwendete Ergebnisse in Variablen oder Dateien, um wiederholte KI-Modellaufrufe zu vermeiden. + + + + Verarbeiten Sie mehrere Elemente in einer einzigen KI-Anfrage anstatt einzelne Aufrufe zu tätigen. + + + +## Nutzungsüberwachung + +Überwachen Sie Ihre Nutzung und Abrechnung unter Einstellungen → Abonnement: + +- **Aktuelle Nutzung**: Echtzeit-Nutzung und Kosten für den aktuellen Zeitraum +- **Nutzungslimits**: Plangrenzen mit visuellen Fortschrittsanzeigen +- **Abrechnungsdetails**: Prognostizierte Gebühren und Mindestverpflichtungen +- **Planverwaltung**: Upgrade-Optionen und Abrechnungsverlauf + +### Programmatische Nutzungsverfolgung + +Sie können Ihre aktuelle Nutzung und Limits programmatisch über die API abfragen: + +**Endpunkt:** + +```text +GET /api/users/me/usage-limits +``` + +**Authentifizierung:** +- Fügen Sie Ihren API-Schlüssel im `X-API-Key` Header hinzu + +**Beispielanfrage:** + +```bash +curl -X GET -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" https://sim.ai/api/users/me/usage-limits +``` + +**Beispielantwort:** + +```json +{ + "success": true, + "rateLimit": { + "sync": { "isLimited": false, "limit": 10, "remaining": 10, "resetAt": "2025-09-08T22:51:55.999Z" }, + "async": { "isLimited": false, "limit": 50, "remaining": 50, "resetAt": "2025-09-08T22:51:56.155Z" }, + "authType": "api" + }, + "usage": { + "currentPeriodCost": 12.34, + "limit": 100, + "plan": "pro" + } +} +``` + +**Antwortfelder:** +- `currentPeriodCost` spiegelt die Nutzung im aktuellen Abrechnungszeitraum wider +- `limit` wird aus individuellen Limits (Free/Pro) oder gepoolten Organisationslimits (Team/Enterprise) abgeleitet +- `plan` ist der aktive Plan mit der höchsten Priorität, der mit Ihrem Benutzer verknüpft ist + +## Planlimits + +Verschiedene Abonnementpläne haben unterschiedliche Nutzungslimits: + +| Plan | Monatliches Nutzungslimit | Ratengrenze (pro Minute) | +|------|-------------------|-------------------------| +| **Free** | $10 | 5 sync, 10 async | +| **Pro** | $100 | 10 sync, 50 async | +| **Team** | $500 (gepoolt) | 50 sync, 100 async | +| **Enterprise** | Individuell | Individuell | + +## Best Practices für Kostenmanagement + +1. **Regelmäßig überwachen**: Prüfen Sie Ihr Nutzungs-Dashboard häufig, um Überraschungen zu vermeiden +2. **Budgets festlegen**: Nutzen Sie Planlimits als Leitplanken für Ihre Ausgaben +3. **Workflows optimieren**: Überprüfen Sie kostenintensive Ausführungen und optimieren Sie Prompts oder Modellauswahl +4. **Passende Modelle verwenden**: Stimmen Sie die Modellkomplexität auf die Aufgabenanforderungen ab +5. **Ähnliche Aufgaben bündeln**: Kombinieren Sie wenn möglich mehrere Anfragen, um den Overhead zu reduzieren + +## Nächste Schritte + +- Überprüfen Sie Ihre aktuelle Nutzung unter [Einstellungen → Abonnement](https://sim.ai/settings/subscription) +- Erfahren Sie mehr über [Logging](/execution/logging), um Ausführungsdetails zu verfolgen +- Erkunden Sie die [Externe API](/execution/api) für programmatische Kostenüberwachung +- Sehen Sie sich [Workflow-Optimierungstechniken](/blocks) an, um Kosten zu reduzieren \ No newline at end of file diff --git a/apps/docs/content/docs/de/execution/index.mdx b/apps/docs/content/docs/de/execution/index.mdx new file mode 100644 index 0000000000..226dd062d0 --- /dev/null +++ b/apps/docs/content/docs/de/execution/index.mdx @@ -0,0 +1,153 @@ +--- +title: Ausführung +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Card, Cards } from 'fumadocs-ui/components/card' +import { Image } from '@/components/ui/image' + +Die Ausführungs-Engine von Sim bringt Ihre Workflows zum Leben, indem sie Blöcke in der richtigen Reihenfolge verarbeitet, den Datenfluss verwaltet und Fehler elegant behandelt, sodass Sie genau verstehen können, wie Workflows in Sim ausgeführt werden. + + + Jede Workflow-Ausführung folgt einem deterministischen Pfad, der auf Ihren Blockverbindungen und Ihrer Logik basiert, um vorhersehbare und zuverlässige Ergebnisse zu gewährleisten. + + +## Dokumentationsübersicht + + + + Erfahren Sie mehr über den grundlegenden Ausführungsablauf, Blocktypen und wie Daten durch Ihren + Workflow fließen + + + + Überwachen Sie Workflow-Ausführungen mit umfassender Protokollierung und Echtzeit-Sichtbarkeit + + + + Verstehen Sie, wie die Kosten für Workflow-Ausführungen berechnet und optimiert werden + + + + Greifen Sie programmgesteuert über REST-API auf Ausführungsprotokolle zu und richten Sie Webhooks ein + + + +## Schlüsselkonzepte + +### Topologische Ausführung +Blöcke werden in Abhängigkeitsreihenfolge ausgeführt, ähnlich wie eine Tabellenkalkulation Zellen neu berechnet. Die Ausführungs-Engine bestimmt automatisch, welche Blöcke basierend auf abgeschlossenen Abhängigkeiten ausgeführt werden können. + +### Pfadverfolgung +Die Engine verfolgt aktiv Ausführungspfade durch Ihren Workflow. Router- und Bedingungsblöcke aktualisieren diese Pfade dynamisch und stellen sicher, dass nur relevante Blöcke ausgeführt werden. + +### Schichtbasierte Verarbeitung +Anstatt Blöcke einzeln auszuführen, identifiziert die Engine Schichten von Blöcken, die parallel ausgeführt werden können, und optimiert so die Leistung für komplexe Workflows. + +### Ausführungskontext +Jeder Workflow behält während der Ausführung einen umfangreichen Kontext bei, der Folgendes enthält: +- Block-Ausgaben und -Zustände +- Aktive Ausführungspfade +- Verfolgung von Schleifen- und Paralleliterationen +- Umgebungsvariablen +- Routing-Entscheidungen + +## Ausführungsauslöser + +Workflows können über mehrere Kanäle ausgeführt werden: + +- **Manuell**: Testen und debuggen direkt im Editor +- **Als API bereitstellen**: Einen HTTP-Endpunkt erstellen, der mit API-Schlüsseln gesichert ist +- **Als Chat bereitstellen**: Eine Konversationsschnittstelle auf einer benutzerdefinierten Subdomain erstellen +- **Webhooks**: Auf externe Ereignisse von Drittanbieterdiensten reagieren +- **Geplant**: Nach einem wiederkehrenden Zeitplan mit Cron-Ausdrücken ausführen + +### Als API bereitstellen + +Wenn Sie einen Workflow als API bereitstellen, macht Sim Folgendes: +- Erstellt einen eindeutigen HTTP-Endpunkt: `https://sim.ai/api/workflows/{workflowId}/execute` +- Generiert einen API-Schlüssel zur Authentifizierung +- Akzeptiert POST-Anfragen mit JSON-Payloads +- Gibt Workflow-Ausführungsergebnisse als JSON zurück + +Beispiel für einen API-Aufruf: + +```bash +curl -X POST https://sim.ai/api/workflows/your-workflow-id/execute \ + -H "X-API-Key: your-api-key" \ + -H "Content-Type: application/json" \ + -d '{"input": "your data here"}' +``` + +### Als Chat bereitstellen + +Die Chat-Bereitstellung erstellt eine Konversationsschnittstelle für Ihren Workflow: +- Gehostet auf einer benutzerdefinierten Subdomain: `https://your-name.sim.ai` +- Optionale Authentifizierung (öffentlich, passwortgeschützt oder E-Mail-basiert) +- Anpassbare Benutzeroberfläche mit Ihrem Branding +- Streaming-Antworten für Echtzeit-Interaktion +- Perfekt für KI-Assistenten, Support-Bots oder interaktive Tools + +Jede Bereitstellungsmethode übergibt Daten an den Starter-Block Ihres Workflows und beginnt so den Ausführungsfluss. + +## Deployment-Snapshots + +Alle öffentlichen Einstiegspunkte—API, Chat, Zeitplan, Webhook und manuelle Ausführungen—führen den aktiven Deployment-Snapshot des Workflows aus. Veröffentliche ein neues Deployment, wann immer du die Arbeitsfläche änderst, damit jeder Trigger die aktualisierte Version verwendet. + +
+ Tabelle mit Deployment-Versionen +
+ +Das Deploy-Modal behält eine vollständige Versionshistorie bei—inspiziere jeden Snapshot, vergleiche ihn mit deinem Entwurf und führe Upgrades oder Rollbacks mit einem Klick durch, wenn du eine frühere Version wiederherstellen musst. + +## Programmatische Ausführung + +Führe Workflows aus deinen Anwendungen mit unseren offiziellen SDKs aus: + +```bash +# TypeScript/JavaScript +npm install simstudio-ts-sdk + +# Python +pip install simstudio-sdk +``` + +```typescript +// TypeScript Example +import { SimStudioClient } from 'simstudio-ts-sdk'; + +const client = new SimStudioClient({ + apiKey: 'your-api-key' +}); + +const result = await client.executeWorkflow('workflow-id', { + input: { message: 'Hello' } +}); +``` + +## Best Practices + +### Design für Zuverlässigkeit +- Behandle Fehler elegant mit geeigneten Fallback-Pfaden +- Verwende Umgebungsvariablen für sensible Daten +- Füge Logging zu Funktionsblöcken für Debugging hinzu + +### Leistung optimieren +- Minimiere externe API-Aufrufe wo möglich +- Nutze parallele Ausführung für unabhängige Operationen +- Cache Ergebnisse mit Memory-Blöcken, wenn angemessen + +### Ausführungen überwachen +- Überprüfe Logs regelmäßig, um Leistungsmuster zu verstehen +- Verfolge Kosten für KI-Modellnutzung +- Verwende Workflow-Snapshots zur Fehlerbehebung + +## Was kommt als nächstes? + +Beginne mit [Ausführungsgrundlagen](/execution/basics), um zu verstehen, wie Workflows laufen, und erkunde dann [Logging](/execution/logging), um deine Ausführungen zu überwachen, sowie [Kostenberechnung](/execution/costs), um deine Ausgaben zu optimieren. diff --git a/apps/docs/content/docs/de/execution/logging.mdx b/apps/docs/content/docs/de/execution/logging.mdx new file mode 100644 index 0000000000..7a004c28a5 --- /dev/null +++ b/apps/docs/content/docs/de/execution/logging.mdx @@ -0,0 +1,150 @@ +--- +title: Protokollierung +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { Image } from '@/components/ui/image' + +Sim bietet umfassende Protokollierung für alle Workflow-Ausführungen und gibt Ihnen vollständige Transparenz darüber, wie Ihre Workflows laufen, welche Daten durch sie fließen und wo möglicherweise Probleme auftreten. + +## Protokollierungssystem + +Sim bietet zwei komplementäre Protokollierungsschnittstellen, die verschiedenen Workflows und Anwendungsfällen entsprechen: + +### Echtzeit-Konsole + +Während der manuellen oder Chat-Workflow-Ausführung erscheinen Protokolle in Echtzeit im Konsolen-Panel auf der rechten Seite des Workflow-Editors: + +
+ Echtzeit-Konsolen-Panel +
+ +Die Konsole zeigt: +- Fortschritt der Blockausführung mit Hervorhebung des aktiven Blocks +- Echtzeit-Ausgaben nach Abschluss der Blöcke +- Ausführungszeit für jeden Block +- Erfolgs-/Fehlerstatusanzeigen + +### Protokollseite + +Alle Workflow-Ausführungen – ob manuell ausgelöst, über API, Chat, Zeitplan oder Webhook – werden auf der dedizierten Protokollseite protokolliert: + +
+ Protokollseite +
+ +Die Protokollseite bietet: +- Umfassende Filterung nach Zeitraum, Status, Auslösertyp, Ordner und Workflow +- Suchfunktion über alle Protokolle +- Live-Modus für Echtzeit-Updates +- 7-tägige Protokollaufbewahrung (erweiterbar für längere Aufbewahrung) + +## Protokolldetails-Seitenleiste + +Durch Klicken auf einen Protokolleintrag öffnet sich eine detaillierte Seitenleistenansicht: + +
+ Protokoll-Seitenleiste mit Details +
+ +### Block-Eingabe/Ausgabe + +Sehen Sie den vollständigen Datenfluss für jeden Block mit Tabs zum Umschalten zwischen: + + + + **Output-Tab** zeigt das Ausführungsergebnis des Blocks: + - Strukturierte Daten mit JSON-Formatierung + - Markdown-Rendering für KI-generierte Inhalte + - Kopierschaltfläche für einfache Datenextraktion + + + + **Input-Tab** zeigt, was an den Block übergeben wurde: + - Aufgelöste Variablenwerte + - Referenzierte Ausgaben anderer Blöcke + - Verwendete Umgebungsvariablen + - API-Schlüssel werden aus Sicherheitsgründen automatisch unkenntlich gemacht + + + +### Ausführungszeitlinie + +Für Workflow-übergreifende Protokolle, sehen Sie detaillierte Ausführungsmetriken: +- Start- und Endzeitstempel +- Gesamtdauer des Workflows +- Ausführungszeiten einzelner Blöcke +- Identifikation von Leistungsengpässen + +## Workflow-Snapshots + +Für jede protokollierte Ausführung klicken Sie auf "Snapshot anzeigen", um den exakten Workflow-Zustand zum Ausführungszeitpunkt zu sehen: + +
+ Workflow-Snapshot +
+ +Der Snapshot bietet: +- Eingefrorene Arbeitsfläche, die die Workflow-Struktur zeigt +- Block-Zustände und Verbindungen, wie sie während der Ausführung waren +- Klicken Sie auf einen beliebigen Block, um dessen Ein- und Ausgaben zu sehen +- Nützlich zum Debuggen von Workflows, die seitdem geändert wurden + + + Workflow-Snapshots sind nur für Ausführungen verfügbar, die nach der Einführung des erweiterten Protokollierungssystems durchgeführt wurden. Ältere migrierte Protokolle zeigen die Meldung "Protokollierter Zustand nicht gefunden". + + +## Protokollaufbewahrung + +- **Kostenloser Plan**: 7 Tage Protokollaufbewahrung +- **Pro-Plan**: 30 Tage Protokollaufbewahrung +- **Team-Plan**: 90 Tage Protokollaufbewahrung +- **Enterprise-Plan**: Individuelle Aufbewahrungszeiträume verfügbar + +## Best Practices + +### Für die Entwicklung +- Verwenden Sie die Echtzeit-Konsole für sofortiges Feedback während des Testens +- Überprüfen Sie Block-Ein- und Ausgaben, um den Datenfluss zu verifizieren +- Nutzen Sie Workflow-Snapshots, um funktionierende mit fehlerhaften Versionen zu vergleichen + +### Für die Produktion +- Überwachen Sie die Protokollseite regelmäßig auf Fehler oder Leistungsprobleme +- Richten Sie Filter ein, um sich auf bestimmte Workflows oder Zeiträume zu konzentrieren +- Verwenden Sie den Live-Modus während kritischer Bereitstellungen, um Ausführungen in Echtzeit zu beobachten + +### Für das Debugging +- Überprüfen Sie immer die Ausführungszeitlinie, um langsame Blöcke zu identifizieren +- Vergleichen Sie Eingaben zwischen funktionierenden und fehlerhaften Ausführungen +- Verwenden Sie Workflow-Snapshots, um den genauen Zustand zu sehen, wenn Probleme aufgetreten sind + +## Nächste Schritte + +- Erfahren Sie mehr über die [Kostenberechnung](/execution/costs), um die Preisgestaltung von Workflows zu verstehen +- Erkunden Sie die [externe API](/execution/api) für programmatischen Zugriff auf Protokolle +- Richten Sie [Webhook-Benachrichtigungen](/execution/api#webhook-subscriptions) für Echtzeit-Warnungen ein \ No newline at end of file diff --git a/apps/docs/content/docs/de/getting-started/index.mdx b/apps/docs/content/docs/de/getting-started/index.mdx new file mode 100644 index 0000000000..2ee184405f --- /dev/null +++ b/apps/docs/content/docs/de/getting-started/index.mdx @@ -0,0 +1,193 @@ +--- +title: Erste Schritte +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Card, Cards } from 'fumadocs-ui/components/card' +import { File, Files, Folder } from 'fumadocs-ui/components/files' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' +import { + AgentIcon, + ApiIcon, + ChartBarIcon, + CodeIcon, + ConditionalIcon, + ConnectIcon, + ExaAIIcon, + FirecrawlIcon, + GmailIcon, + NotionIcon, + PerplexityIcon, + SlackIcon, +} from '@/components/icons' +import { Video } from '@/components/ui/video' +import { Image } from '@/components/ui/image' + +Dieses Tutorial führt dich durch den Aufbau deines ersten KI-Workflows in Sim. Wir erstellen einen Personen-Recherche-Agenten, der Informationen über Personen mithilfe modernster LLM-Suchwerkzeuge finden kann. + + + Dieses Tutorial dauert etwa 10 Minuten und behandelt die wesentlichen Konzepte zum Erstellen von Workflows in Sim. + + +## Was wir erstellen + +Einen Personen-Recherche-Agenten, der: +1. Den Namen einer Person über eine Chat-Schnittstelle empfängt +2. Einen KI-Agenten mit erweiterten Suchfähigkeiten nutzt +3. Das Web mithilfe modernster LLM-Suchwerkzeuge (Exa und Linkup) durchsucht +4. Strukturierte Informationen mithilfe eines Antwortformats extrahiert +5. Umfassende Daten über die Person zurückgibt + +Beispiel für erste Schritte + +## Schritt-für-Schritt-Anleitung + + + + Öffne Sim und klicke im Dashboard auf "Neuer Workflow". Benenne ihn "Erste Schritte". + + Wenn du einen neuen Workflow erstellst, enthält er automatisch einen **Start-Block** - dies ist der Einstiegspunkt, der Eingaben von Benutzern empfängt. Für dieses Beispiel werden wir den Workflow über den Chat auslösen, daher müssen wir am Start-Block nichts konfigurieren. + + Ziehe nun einen **Agenten-Block** aus dem Blockbereich auf der linken Seite auf die Arbeitsfläche. + + Konfiguriere den Agenten-Block: + - **Modell**: Wähle "OpenAI GPT-4o" + - **System-Prompt**: "Du bist ein Personen-Recherche-Agent. Wenn dir ein Personenname gegeben wird, nutze deine verfügbaren Suchwerkzeuge, um umfassende Informationen über diese Person zu finden, einschließlich ihres Standorts, Berufs, Bildungshintergrunds und anderer relevanter Details." + - **Benutzer-Prompt**: Ziehe die Verbindung vom Ausgabefeld des Start-Blocks in dieses Feld (dies verbindet `` mit dem Benutzer-Prompt) + +
+
+
+ + + Verbessern wir unseren Agenten mit Werkzeugen für bessere Fähigkeiten. Klicke auf den Agenten-Block, um ihn auszuwählen. + + Im Bereich **Werkzeuge**: + - Klicke auf **Werkzeug hinzufügen** + - Wähle **Exa** aus den verfügbaren Werkzeugen + - Wähle **Linkup** aus den verfügbaren Werkzeugen + - Füge deine API-Schlüssel für beide Werkzeuge hinzu (dies ermöglicht dem Agenten, das Web zu durchsuchen und auf zusätzliche Informationen zuzugreifen) + +
+
+
+ + + Jetzt testen wir unseren Workflow. Gehe zum **Chat-Panel** auf der rechten Seite des Bildschirms. + + Im Chat-Panel: + - Klicke auf das Dropdown-Menü und wähle `agent1.content` (dies zeigt uns die Ausgabe unseres Agenten) + - Gib eine Testnachricht ein, wie: "John ist ein Softwareentwickler aus San Francisco, der Informatik an der Stanford University studiert hat." + - Klicke auf "Senden", um den Workflow auszuführen + + Du solltest die Antwort des Agenten sehen, der die in deinem Text beschriebene Person analysiert. + +
+
+
+ + + Jetzt lassen wir unseren Agenten strukturierte Daten zurückgeben. Klicke auf den Agenten-Block, um ihn auszuwählen. + + Im Bereich **Antwortformat**: + - Klicke auf das **Zauberstab-Symbol** (✨) neben dem Schema-Feld + - Gib in der erscheinenden Aufforderung ein: "Erstelle ein Schema namens Person, das Standort, Beruf und Bildung enthält" + - Die KI generiert automatisch ein JSON-Schema für dich + +
+
+
+ + + Gehe zurück zum **Chat-Panel**. + + Da wir ein Antwortformat hinzugefügt haben, sind jetzt neue Ausgabeoptionen verfügbar: + - Klicke auf das Dropdown-Menü und wähle die neue Option für strukturierte Ausgabe (das Schema, das wir gerade erstellt haben) + - Gib eine neue Testnachricht ein, wie: "Sarah ist eine Marketing-Managerin aus New York, die einen MBA von der Harvard Business School hat." + - Klicke auf "Senden", um den Workflow erneut auszuführen + + Du solltest jetzt eine strukturierte JSON-Ausgabe sehen, bei der die Informationen der Person in die Felder Standort, Beruf und Bildung gegliedert sind. + +
+
+
+
+ +## Was du gerade erstellt hast + +Herzlichen Glückwunsch! Du hast deinen ersten KI-Workflow erstellt, der: +- ✅ Texteingaben über eine Chat-Schnittstelle empfängt +- ✅ KI nutzt, um Informationen aus unstrukturiertem Text zu extrahieren +- ✅ Externe Tools (Exa und Linkup) für erweiterte Funktionen integriert +- ✅ Strukturierte JSON-Daten mit KI-generierten Schemas zurückgibt +- ✅ Workflow-Tests und Iterationen demonstriert +- ✅ Die Leistungsfähigkeit des visuellen Workflow-Aufbaus zeigt + +## Wichtige Konzepte, die du gelernt hast + +### Verwendete Block-Typen + + + } + annotation="Einstiegspunkt für Benutzereingaben (automatisch enthalten)" + /> + } + annotation="KI-Modell für Textverarbeitung und -analyse" + /> + + +### Grundlegende Workflow-Konzepte + +**Datenfluss**: Variablen fließen zwischen Blöcken durch das Ziehen von Verbindungen + +**Chat-Schnittstelle**: Teste Workflows in Echtzeit mit dem Chat-Panel mit verschiedenen Ausgabeoptionen + +**Tool-Integration**: Erweitere die Fähigkeiten des Agenten durch Hinzufügen externer Tools wie Exa und Linkup + +**Variablenreferenzen**: Greife auf Block-Ausgaben mit der `` Syntax zu + +**Strukturierte Ausgabe**: Verwende JSON-Schemas, um konsistente, strukturierte Daten von der KI zu erhalten + +**KI-generierte Schemas**: Nutze den Zauberstab (✨), um Schemas mit natürlicher Sprache zu generieren + +**Iterative Entwicklung**: Teste, modifiziere und teste Workflows einfach erneut + +## Nächste Schritte + + + + Erfahre mehr über API-, Funktions- und Bedingungsblöcke + + + Integration mit externen Diensten wie Gmail, Slack und Notion + + + Verwende Funktionsblöcke für benutzerdefinierte Datenverarbeitung + + + Mache deinen Workflow über REST API zugänglich + + + +## Brauchst du Hilfe? + +**Bei einem Schritt hängengeblieben?** Schau in unserer [Blocks-Dokumentation](/blocks) nach detaillierten Erklärungen zu jeder Komponente. + +**Möchten Sie mehr Beispiele sehen?** Durchsuchen Sie unsere [Tools-Dokumentation](/tools), um zu sehen, welche Integrationen verfügbar sind. + +**Bereit für die Bereitstellung?** Erfahren Sie mehr über [Ausführung und Bereitstellung](/execution), um Ihre Workflows zu aktivieren. diff --git a/apps/docs/content/docs/de/index.mdx b/apps/docs/content/docs/de/index.mdx new file mode 100644 index 0000000000..d3231f65b9 --- /dev/null +++ b/apps/docs/content/docs/de/index.mdx @@ -0,0 +1,60 @@ +--- +title: Dokumentation +--- + +import { Card, Cards } from 'fumadocs-ui/components/card' + +# Sim Dokumentation + +Willkommen bei Sim, einem visuellen Workflow-Builder für KI-Anwendungen. Erstellen Sie leistungsstarke KI-Agenten, Automatisierungs-Workflows und Datenverarbeitungs-Pipelines, indem Sie Blöcke auf einer Leinwand verbinden. + +## Schnellstart + + + + Erfahren Sie, was Sie mit Sim erstellen können + + + Erstellen Sie Ihren ersten Workflow in 10 Minuten + + + Lernen Sie die Bausteine kennen + + + Entdecken Sie über 80 integrierte Schnittstellen + + + +## Kernkonzepte + + + + Verstehen Sie, wie Daten zwischen Blöcken fließen + + + Arbeiten Sie mit Workflow- und Umgebungsvariablen + + + Überwachen Sie Workflow-Ausführungen und verwalten Sie Kosten + + + Starten Sie Workflows über API, Webhooks oder Zeitpläne + + + +## Erweiterte Funktionen + + + + Richten Sie Workspace-Rollen und Berechtigungen ein + + + Definieren Sie Workflows als Code + + + Verbinden Sie externe Dienste mit dem Model Context Protocol + + + Integrieren Sie Sim in Ihre Anwendungen + + \ No newline at end of file diff --git a/apps/docs/content/docs/de/introduction/index.mdx b/apps/docs/content/docs/de/introduction/index.mdx new file mode 100644 index 0000000000..f97907fe80 --- /dev/null +++ b/apps/docs/content/docs/de/introduction/index.mdx @@ -0,0 +1,85 @@ +--- +title: Einführung +--- + +import { Card, Cards } from 'fumadocs-ui/components/card' +import { Callout } from 'fumadocs-ui/components/callout' +import { Image } from '@/components/ui/image' + +Sim ist ein visueller Workflow-Builder für KI-Anwendungen, mit dem Sie KI-Agenten-Workflows visuell erstellen können. Erstellen Sie leistungsstarke KI-Agenten, Automatisierungs-Workflows und Datenverarbeitungs-Pipelines, indem Sie Blöcke auf einer Leinwand verbinden – ganz ohne Programmierung. + +
+ Sim visuelle Workflow-Leinwand +
+ +## Was Sie erstellen können + +**KI-Assistenten & Chatbots** +Erstellen Sie intelligente Agenten, die im Web suchen, auf Ihren Kalender zugreifen, E-Mails senden und mit Ihren Geschäftstools interagieren können. + +**Geschäftsprozessautomatisierung** +Automatisieren Sie wiederkehrende Aufgaben wie Dateneingabe, Berichtserstellung, Kundenservice-Antworten und Content-Erstellung. + +**Datenverarbeitung & -analyse** +Gewinnen Sie Erkenntnisse aus Dokumenten, analysieren Sie Datensätze, erstellen Sie Berichte und synchronisieren Sie Daten zwischen Systemen. + +**API-Integrations-Workflows** +Verbinden Sie mehrere Dienste zu einheitlichen Endpunkten, orchestrieren Sie komplexe Geschäftslogik und verwalten Sie ereignisgesteuerte Automatisierung. + +## Wie es funktioniert + +**Visuelle Leinwand** +Ziehen Sie Blöcke per Drag-and-drop, um Workflows zu erstellen. Verbinden Sie KI-Modelle, Datenbanken, APIs und Geschäftstools mit einfachen Point-and-Click-Verbindungen. + +**Intelligente Blöcke** +Wählen Sie aus Verarbeitungsblöcken (KI-Agenten, APIs, Funktionen), Logikblöcken (Bedingungen, Schleifen, Router) und Ausgabeblöcken (Antworten, Evaluatoren). + +**Mehrere Auslöser** +Starten Sie Workflows über Chat-Schnittstelle, REST API, Webhooks, geplante Jobs oder externe Ereignisse von Diensten wie Slack und GitHub. + +**Team-Zusammenarbeit** +Arbeiten Sie gleichzeitig mit Teammitgliedern am selben Workflow mit Echtzeit-Bearbeitung und Berechtigungsverwaltung. + +## Integrierte Anbindungen + +Sim verbindet sich von Haus aus mit über 80 Diensten: + +- **KI-Modelle**: OpenAI, Anthropic, Google, Groq, Cerebras, lokale Ollama-Modelle +- **Kommunikation**: Gmail, Slack, Teams, Telegram, WhatsApp +- **Produktivität**: Notion, Google Sheets, Airtable, Monday.com +- **Entwicklung**: GitHub, Jira, Linear, Browser-Automatisierung +- **Suche & Web**: Google Search, Perplexity, Firecrawl, Exa AI +- **Datenbanken**: PostgreSQL, MySQL, Supabase, Pinecone, Qdrant + +Benötigen Sie etwas Maßgeschneidertes? Nutzen Sie unsere [MCP-Integration](/mcp), um jeden externen Dienst anzubinden. + +## Bereitstellungsoptionen + +**Cloud-gehostet**: Starten Sie sofort bei [sim.ai](https://sim.ai) mit verwalteter Infrastruktur, automatischer Skalierung und integriertem Monitoring. + +**Selbst-gehostet**: Stellen Sie die Anwendung auf Ihrer eigenen Infrastruktur mit Docker bereit, mit Unterstützung für lokale KI-Modelle über Ollama für vollständige Datenprivatsphäre. + +## Nächste Schritte + +Bereit, Ihren ersten KI-Workflow zu erstellen? + + + + Erstellen Sie Ihren ersten Workflow in 10 Minuten + + + Erfahren Sie mehr über die Bausteine + + + Entdecken Sie über 60 integrierte Schnittstellen + + + Richten Sie Workspace-Rollen und Berechtigungen ein + + diff --git a/apps/docs/content/docs/de/knowledgebase/index.mdx b/apps/docs/content/docs/de/knowledgebase/index.mdx new file mode 100644 index 0000000000..ad1f61d802 --- /dev/null +++ b/apps/docs/content/docs/de/knowledgebase/index.mdx @@ -0,0 +1,113 @@ +--- +title: Wissensdatenbank +--- + +import { Video } from '@/components/ui/video' +import { Image } from '@/components/ui/image' + +Die Wissensdatenbank ermöglicht es Ihnen, Ihre Dokumente hochzuladen, zu verarbeiten und mit intelligenter Vektorsuche und Chunking zu durchsuchen. Dokumente verschiedener Typen werden automatisch verarbeitet, eingebettet und durchsuchbar gemacht. Ihre Dokumente werden intelligent in Chunks aufgeteilt, und Sie können sie mit natürlichsprachlichen Abfragen anzeigen, bearbeiten und durchsuchen. + +## Upload und Verarbeitung + +Laden Sie einfach Ihre Dokumente hoch, um zu beginnen. Sim verarbeitet sie automatisch im Hintergrund, extrahiert Text, erstellt Embeddings und teilt sie in durchsuchbare Chunks auf. + +
+
+ +Das System übernimmt den gesamten Verarbeitungsprozess für Sie: + +1. **Textextraktion**: Inhalte werden aus Ihren Dokumenten mit spezialisierten Parsern für jeden Dateityp extrahiert +2. **Intelligentes Chunking**: Dokumente werden in sinnvolle Chunks mit konfigurierbarer Größe und Überlappung aufgeteilt +3. **Embedding-Generierung**: Vektoreinbettungen werden für semantische Suchfunktionen erstellt +4. **Verarbeitungsstatus**: Verfolgen Sie den Fortschritt während Ihre Dokumente verarbeitet werden + +## Unterstützte Dateitypen + +Sim unterstützt PDF, Word (DOC/DOCX), Klartext (TXT), Markdown (MD), HTML, Excel (XLS/XLSX), PowerPoint (PPT/PPTX) und CSV-Dateien. Dateien können bis zu 100MB groß sein, wobei die optimale Leistung bei Dateien unter 50MB liegt. Sie können mehrere Dokumente gleichzeitig hochladen, und PDF-Dateien werden mit OCR-Verarbeitung für gescannte Dokumente unterstützt. + +## Anzeigen und Bearbeiten von Chunks + +Sobald Ihre Dokumente verarbeitet sind, können Sie die einzelnen Chunks anzeigen und bearbeiten. Dies gibt Ihnen volle Kontrolle darüber, wie Ihre Inhalte organisiert und durchsucht werden. + +Dokumentchunk-Ansicht mit verarbeiteten Inhalten + +### Chunk-Konfiguration +- **Standardgröße der Chunks**: 1.024 Zeichen +- **Konfigurierbarer Bereich**: 100-4.000 Zeichen pro Chunk +- **Intelligente Überlappung**: Standardmäßig 200 Zeichen zur Kontexterhaltung +- **Hierarchische Aufteilung**: Respektiert Dokumentstruktur (Abschnitte, Absätze, Sätze) + +### Bearbeitungsfunktionen +- **Chunk-Inhalt bearbeiten**: Textinhalt einzelner Chunks ändern +- **Chunk-Grenzen anpassen**: Chunks bei Bedarf zusammenführen oder teilen +- **Metadaten hinzufügen**: Chunks mit zusätzlichem Kontext anreichern +- **Massenoperationen**: Effiziente Verwaltung mehrerer Chunks + +## Erweiterte PDF-Verarbeitung + +Für PDF-Dokumente bietet Sim erweiterte Verarbeitungsfunktionen: + +### OCR-Unterstützung +Bei Konfiguration mit Azure oder [Mistral OCR](https://docs.mistral.ai/ocr/): +- **Verarbeitung gescannter Dokumente**: Text aus bildbasierten PDFs extrahieren +- **Umgang mit gemischten Inhalten**: Verarbeitung von PDFs mit Text und Bildern +- **Hohe Genauigkeit**: Fortschrittliche KI-Modelle gewährleisten präzise Textextraktion + +## Verwendung des Wissensblocks in Workflows + +Sobald Ihre Dokumente verarbeitet sind, können Sie sie in Ihren KI-Workflows über den Wissensblock nutzen. Dies ermöglicht Retrieval-Augmented Generation (RAG), wodurch Ihre KI-Agenten auf Ihre Dokumentinhalte zugreifen und darüber nachdenken können, um genauere, kontextbezogene Antworten zu liefern. + +Verwendung des Wissensblocks in Workflows + +### Funktionen des Wissensblocks +- **Semantische Suche**: Relevante Inhalte mit natürlichsprachlichen Abfragen finden +- **Kontextintegration**: Automatisches Einbinden relevanter Chunks in Agenten-Prompts +- **Dynamischer Abruf**: Suche erfolgt in Echtzeit während der Workflow-Ausführung +- **Relevanzbewertung**: Ergebnisse nach semantischer Ähnlichkeit geordnet + +### Integrationsoptionen +- **System-Prompts**: Kontext für Ihre KI-Agenten bereitstellen +- **Dynamischer Kontext**: Suche und Einbindung relevanter Informationen während Gesprächen +- **Dokumentübergreifende Suche**: Abfrage über Ihre gesamte Wissensdatenbank +- **Gefilterte Suche**: Kombination mit Tags für präzisen Inhaltsabruf + +## Vektorsuchtechnologie + +Sim verwendet Vektorsuche, die von [pgvector](https://github.com/pgvector/pgvector) unterstützt wird, um die Bedeutung und den Kontext Ihrer Inhalte zu verstehen: + +### Semantisches Verständnis +- **Kontextuelle Suche**: Findet relevante Inhalte, auch wenn exakte Schlüsselwörter nicht übereinstimmen +- **Konzeptbasierte Abfrage**: Versteht Beziehungen zwischen Ideen +- **Mehrsprachige Unterstützung**: Funktioniert über verschiedene Sprachen hinweg +- **Synonymerkennung**: Findet verwandte Begriffe und Konzepte + +### Suchfunktionen +- **Natürlichsprachige Abfragen**: Stellen Sie Fragen in natürlicher Sprache +- **Ähnlichkeitssuche**: Finden Sie konzeptionell ähnliche Inhalte +- **Hybridsuche**: Kombiniert Vektor- und traditionelle Schlüsselwortsuche +- **Konfigurierbare Ergebnisse**: Steuern Sie die Anzahl und den Relevanz-Schwellenwert der Ergebnisse + +## Dokumentenverwaltung + +### Organisationsfunktionen +- **Massenupload**: Laden Sie mehrere Dateien gleichzeitig über die asynchrone API hoch +- **Verarbeitungsstatus**: Echtzeit-Updates zum Dokumentenverarbeitungsprozess +- **Suchen und Filtern**: Finden Sie Dokumente schnell in großen Sammlungen +- **Metadaten-Tracking**: Automatische Erfassung von Dateiinformationen und Verarbeitungsdetails + +### Sicherheit und Datenschutz +- **Sichere Speicherung**: Dokumente werden mit Sicherheit auf Unternehmensniveau gespeichert +- **Zugriffskontrolle**: Workspace-basierte Berechtigungen +- **Verarbeitungsisolierung**: Jeder Workspace hat eine isolierte Dokumentenverarbeitung +- **Datenaufbewahrung**: Konfigurieren Sie Richtlinien zur Dokumentenaufbewahrung + +## Erste Schritte + +1. **Navigieren Sie zu Ihrer Wissensdatenbank**: Zugriff über Ihre Workspace-Seitenleiste +2. **Dokumente hochladen**: Drag & Drop oder wählen Sie Dateien zum Hochladen aus +3. **Verarbeitung überwachen**: Beobachten Sie, wie Dokumente verarbeitet und in Chunks aufgeteilt werden +4. **Chunks erkunden**: Sehen und bearbeiten Sie die verarbeiteten Inhalte +5. **Zu Workflows hinzufügen**: Verwenden Sie den Wissensblock, um ihn in Ihre KI-Agenten zu integrieren + +Die Wissensdatenbank verwandelt Ihre statischen Dokumente in eine intelligente, durchsuchbare Ressource, die Ihre KI-Workflows für fundiertere und kontextbezogenere Antworten nutzen können. \ No newline at end of file diff --git a/apps/docs/content/docs/de/knowledgebase/tags.mdx b/apps/docs/content/docs/de/knowledgebase/tags.mdx new file mode 100644 index 0000000000..ac942e529c --- /dev/null +++ b/apps/docs/content/docs/de/knowledgebase/tags.mdx @@ -0,0 +1,108 @@ +--- +title: Tags und Filterung +--- + +import { Video } from '@/components/ui/video' + +Tags bieten eine leistungsstarke Möglichkeit, Ihre Dokumente zu organisieren und präzise Filterungen für Ihre Vektorsuchen zu erstellen. Durch die Kombination von tag-basierter Filterung mit semantischer Suche können Sie genau die Inhalte aus Ihrer Wissensdatenbank abrufen, die Sie benötigen. + +## Tags zu Dokumenten hinzufügen + +Sie können jedem Dokument in Ihrer Wissensdatenbank benutzerdefinierte Tags hinzufügen, um Ihre Inhalte zu organisieren und zu kategorisieren und so leichter auffindbar zu machen. + +
+
+ +### Tag-Verwaltung +- **Benutzerdefinierte Tags**: Erstellen Sie Ihr eigenes Tag-System, das zu Ihrem Arbeitsablauf passt +- **Mehrere Tags pro Dokument**: Wenden Sie so viele Tags wie nötig auf jedes Dokument an, es stehen 7 Tag-Slots pro Wissensdatenbank zur Verfügung, die von allen Dokumenten in der Wissensdatenbank gemeinsam genutzt werden +- **Tag-Organisation**: Gruppieren Sie verwandte Dokumente mit einheitlichen Tags + +### Best Practices für Tags +- **Einheitliche Benennung**: Verwenden Sie standardisierte Tag-Namen für alle Ihre Dokumente +- **Beschreibende Tags**: Verwenden Sie klare, aussagekräftige Tag-Namen +- **Regelmäßige Bereinigung**: Entfernen Sie ungenutzte oder veraltete Tags regelmäßig + +## Verwendung von Tags in Wissensblöcken + +Tags werden besonders leistungsstark, wenn sie mit dem Wissensblock in Ihren Workflows kombiniert werden. Sie können Ihre Suchen auf bestimmte getaggte Inhalte filtern und so sicherstellen, dass Ihre KI-Agenten die relevantesten Informationen erhalten. + +
+
+ +## Suchmodi + +Der Wissensblock unterstützt drei verschiedene Suchmodi, abhängig davon, was Sie angeben: + +### 1. Nur-Tag-Suche +Wenn Sie **nur Tags angeben** (keine Suchanfrage): +- **Direkter Abruf**: Ruft alle Dokumente ab, die die angegebenen Tags haben +- **Keine Vektorsuche**: Ergebnisse basieren ausschließlich auf Tag-Übereinstimmung +- **Schnelle Leistung**: Schneller Abruf ohne semantische Verarbeitung +- **Exakte Übereinstimmung**: Nur Dokumente mit allen angegebenen Tags werden zurückgegeben + +**Anwendungsfall**: Wenn du alle Dokumente aus einer bestimmten Kategorie oder einem Projekt benötigst + +### 2. Nur Vektorsuche +Wenn du **nur eine Suchanfrage angibst** (keine Tags): +- **Semantische Suche**: Findet Inhalte basierend auf Bedeutung und Kontext +- **Vollständige Wissensdatenbank**: Durchsucht alle Dokumente +- **Relevanz-Ranking**: Ergebnisse nach semantischer Ähnlichkeit geordnet +- **Natürliche Sprache**: Verwende Fragen oder Phrasen, um relevante Inhalte zu finden + +**Anwendungsfall**: Wenn du die relevantesten Inhalte unabhängig von der Organisation benötigst + +### 3. Kombinierte Tag-Filterung + Vektorsuche +Wenn du **sowohl Tags als auch eine Suchanfrage angibst**: +1. **Zuerst**: Filtere Dokumente auf solche mit den angegebenen Tags +2. **Dann**: Führe eine Vektorsuche innerhalb dieser gefilterten Teilmenge durch +3. **Ergebnis**: Semantisch relevante Inhalte nur aus deinen getaggten Dokumenten + +**Anwendungsfall**: Wenn du relevante Inhalte aus einer bestimmten Kategorie oder einem Projekt benötigst + +### Suchkonfiguration + +#### Tag-Filterung +- **Mehrere Tags**: Verwende mehrere Tags für ODER-Logik (Dokument muss einen oder mehrere der Tags haben) +- **Tag-Kombinationen**: Mische verschiedene Tag-Typen für präzise Filterung +- **Groß-/Kleinschreibung**: Tag-Abgleich ist unabhängig von Groß-/Kleinschreibung +- **Teilabgleich**: Exakte Übereinstimmung des Tag-Namens erforderlich + +#### Vektorsuche-Parameter +- **Abfragekomplexität**: Fragen in natürlicher Sprache funktionieren am besten +- **Ergebnislimits**: Konfiguriere, wie viele Chunks abgerufen werden sollen +- **Relevanzschwelle**: Lege minimale Ähnlichkeitswerte fest +- **Kontextfenster**: Passe die Chunk-Größe an deinen Anwendungsfall an + +## Integration mit Workflows + +### Konfiguration des Wissensblocks +1. **Wissensdatenbank auswählen**: Wähle aus, welche Wissensdatenbank durchsucht werden soll +2. **Tags hinzufügen**: Gib Filterungs-Tags an (optional) +3. **Anfrage eingeben**: Füge deine Suchanfrage hinzu (optional) +4. **Ergebnisse konfigurieren**: Lege die Anzahl der abzurufenden Chunks fest +5. **Suche testen**: Sieh dir die Ergebnisse an, bevor du sie im Workflow verwendest + +### Dynamische Tag-Nutzung +- **Variable Tags**: Verwenden Sie Workflow-Variablen als Tag-Werte +- **Bedingte Filterung**: Wenden Sie verschiedene Tags basierend auf Workflow-Logik an +- **Kontextbezogene Suche**: Passen Sie Tags basierend auf dem Gesprächskontext an +- **Mehrstufige Filterung**: Verfeinern Sie Suchen durch Workflow-Schritte + +### Leistungsoptimierung +- **Effiziente Filterung**: Tag-Filterung erfolgt vor der Vektorsuche für bessere Leistung +- **Caching**: Häufig verwendete Tag-Kombinationen werden für Geschwindigkeit zwischengespeichert +- **Parallele Verarbeitung**: Mehrere Tag-Suchen können gleichzeitig ausgeführt werden +- **Ressourcenmanagement**: Automatische Optimierung der Suchressourcen + +## Erste Schritte mit Tags + +1. **Planen Sie Ihre Tag-Struktur**: Entscheiden Sie sich für einheitliche Namenskonventionen +2. **Beginnen Sie mit dem Taggen**: Fügen Sie Ihren vorhandenen Dokumenten relevante Tags hinzu +3. **Testen Sie Kombinationen**: Experimentieren Sie mit Tag- und Suchanfragekombinationen +4. **Integration in Workflows**: Verwenden Sie den Knowledge-Block mit Ihrer Tagging-Strategie +5. **Verfeinern Sie im Laufe der Zeit**: Passen Sie Ihren Tagging-Ansatz basierend auf Suchergebnissen an + +Tags verwandeln Ihre Wissensdatenbank von einem einfachen Dokumentenspeicher in ein präzise organisiertes, durchsuchbares Intelligenzsystem, das Ihre KI-Workflows mit chirurgischer Präzision navigieren können. \ No newline at end of file diff --git a/apps/docs/content/docs/de/mcp/index.mdx b/apps/docs/content/docs/de/mcp/index.mdx new file mode 100644 index 0000000000..94e5c7d48a --- /dev/null +++ b/apps/docs/content/docs/de/mcp/index.mdx @@ -0,0 +1,140 @@ +--- +title: MCP (Model Context Protocol) +--- + +import { Video } from '@/components/ui/video' +import { Callout } from 'fumadocs-ui/components/callout' + +Das Model Context Protocol ([MCP](https://modelcontextprotocol.com/)) ermöglicht es Ihnen, externe Tools und Dienste über ein standardisiertes Protokoll zu verbinden, wodurch Sie APIs und Dienste direkt in Ihre Workflows integrieren können. Mit MCP können Sie die Fähigkeiten von Sim erweitern, indem Sie benutzerdefinierte Integrationen hinzufügen, die nahtlos mit Ihren Agenten und Workflows zusammenarbeiten. + +## Was ist MCP? + +MCP ist ein offener Standard, der es KI-Assistenten ermöglicht, sich sicher mit externen Datenquellen und Tools zu verbinden. Es bietet eine standardisierte Methode, um: + +- Verbindungen zu Datenbanken, APIs und Dateisystemen herzustellen +- Auf Echtzeitdaten von externen Diensten zuzugreifen +- Benutzerdefinierte Tools und Skripte auszuführen +- Sicheren, kontrollierten Zugriff auf externe Ressourcen zu gewährleisten + +## Hinzufügen von MCP-Servern + +MCP-Server stellen Sammlungen von Tools bereit, die Ihre Agenten nutzen können. Sie können MCP-Server auf zwei Arten hinzufügen: + +### Über die Workspace-Einstellungen + +Konfigurieren Sie MCP-Server auf Workspace-Ebene, damit alle Teammitglieder sie nutzen können: + +
+
+ +1. Navigieren Sie zu Ihren Workspace-Einstellungen +2. Gehen Sie zum Abschnitt **MCP-Server** +3. Klicken Sie auf **MCP-Server hinzufügen** +4. Geben Sie die Server-Konfigurationsdetails ein +5. Speichern Sie die Konfiguration + + +MCP-Server, die in den Workspace-Einstellungen konfiguriert sind, stehen allen Workspace-Mitgliedern entsprechend ihrer Berechtigungsstufen zur Verfügung. + + +### Über die Agenten-Konfiguration + +Sie können MCP-Server auch direkt innerhalb eines Agenten-Blocks hinzufügen und konfigurieren: + +
+
+ +Dies ist nützlich, wenn Sie schnell eine bestimmte Integration für einen speziellen Workflow einrichten müssen. + +## Verwendung von MCP-Tools in Agenten + +Sobald MCP-Server konfiguriert sind, werden ihre Tools innerhalb Ihrer Agentenblöcke verfügbar: + +
+
+ +1. Öffnen Sie einen **Agenten**-Block +2. Im Abschnitt **Tools** sehen Sie verfügbare MCP-Tools +3. Wählen Sie die Tools aus, die der Agent verwenden soll +4. Der Agent kann nun während der Ausführung auf diese Tools zugreifen + +## Eigenständiger MCP-Tool-Block + +Für eine genauere Kontrolle können Sie den dedizierten MCP-Tool-Block verwenden, um bestimmte MCP-Tools auszuführen: + +
+
+ +Der MCP-Tool-Block ermöglicht es Ihnen: +- Jedes konfigurierte MCP-Tool direkt auszuführen +- Spezifische Parameter an das Tool zu übergeben +- Die Ausgabe des Tools in nachfolgenden Workflow-Schritten zu verwenden +- Mehrere MCP-Tools miteinander zu verketten + +### Wann MCP-Tool vs. Agent verwenden + +**Verwenden Sie einen Agenten mit MCP-Tools, wenn:** +- Sie möchten, dass die KI entscheidet, welche Tools zu verwenden sind +- Sie komplexe Überlegungen benötigen, wann und wie Tools eingesetzt werden sollen +- Sie eine natürlichsprachliche Interaktion mit den Tools wünschen + +**Verwenden Sie den MCP-Tool-Block, wenn:** +- Sie eine deterministische Tool-Ausführung benötigen +- Sie ein bestimmtes Tool mit bekannten Parametern ausführen möchten +- Sie strukturierte Workflows mit vorhersehbaren Schritten erstellen + +## Berechtigungsanforderungen + +MCP-Funktionalität erfordert spezifische Workspace-Berechtigungen: + +| Aktion | Erforderliche Berechtigung | +|--------|-------------------| +| MCP-Server in den Einstellungen konfigurieren | **Admin** | +| MCP-Tools in Agenten verwenden | **Schreiben** oder **Admin** | +| Verfügbare MCP-Tools anzeigen | **Lesen**, **Schreiben** oder **Admin** | +| MCP-Tool-Blöcke ausführen | **Schreiben** oder **Admin** | + +## Häufige Anwendungsfälle + +### Datenbankintegration +Verbinden Sie sich mit Datenbanken, um Daten innerhalb Ihrer Workflows abzufragen, einzufügen oder zu aktualisieren. + +### API-Integrationen +Greifen Sie auf externe APIs und Webdienste zu, die keine integrierten Sim-Integrationen haben. + +### Dateisystemzugriff +Lesen, schreiben und bearbeiten Sie Dateien auf lokalen oder entfernten Dateisystemen. + +### Benutzerdefinierte Geschäftslogik +Führen Sie benutzerdefinierte Skripte oder Tools aus, die auf die Bedürfnisse Ihrer Organisation zugeschnitten sind. + +### Echtzeit-Datenzugriff +Rufen Sie während der Workflow-Ausführung Live-Daten von externen Systemen ab. + +## Sicherheitsüberlegungen + +- MCP-Server laufen mit den Berechtigungen des Benutzers, der sie konfiguriert hat +- Überprüfen Sie immer die Quellen von MCP-Servern vor der Installation +- Verwenden Sie Umgebungsvariablen für sensible Konfigurationsdaten +- Überprüfen Sie die Fähigkeiten des MCP-Servers, bevor Sie Agenten Zugriff gewähren + +## Fehlerbehebung + +### MCP-Server erscheint nicht +- Überprüfen Sie, ob die Serverkonfiguration korrekt ist +- Prüfen Sie, ob Sie die erforderlichen Berechtigungen haben +- Stellen Sie sicher, dass der MCP-Server läuft und zugänglich ist + +### Fehler bei der Tool-Ausführung +- Überprüfen Sie, ob die Tool-Parameter korrekt formatiert sind +- Prüfen Sie die MCP-Server-Logs auf Fehlermeldungen +- Stellen Sie sicher, dass die erforderliche Authentifizierung konfiguriert ist + +### Berechtigungsfehler +- Bestätigen Sie Ihre Workspace-Berechtigungsstufe +- Prüfen Sie, ob der MCP-Server zusätzliche Authentifizierung erfordert +- Überprüfen Sie, ob der Server für Ihren Workspace richtig konfiguriert ist \ No newline at end of file diff --git a/apps/docs/content/docs/de/permissions/roles-and-permissions.mdx b/apps/docs/content/docs/de/permissions/roles-and-permissions.mdx new file mode 100644 index 0000000000..d898e45596 --- /dev/null +++ b/apps/docs/content/docs/de/permissions/roles-and-permissions.mdx @@ -0,0 +1,161 @@ +--- +title: Rollen und Berechtigungen +--- + +import { Video } from '@/components/ui/video' + +Wenn Sie Teammitglieder zu Ihrer Organisation oder Ihrem Workspace einladen, müssen Sie entscheiden, welche Zugriffsebene Sie ihnen gewähren möchten. Dieser Leitfaden erklärt, was Benutzer mit jeder Berechtigungsstufe tun können, und hilft Ihnen, Teamrollen und die Zugriffsrechte jeder Berechtigungsstufe zu verstehen. + +## Wie man jemanden zu einem Workspace einlädt + +
+
+ +## Berechtigungsstufen für Workspaces + +Beim Einladen einer Person zu einem Workspace können Sie eine von drei Berechtigungsstufen zuweisen: + +| Berechtigung | Was sie tun können | +|------------|------------------| +| **Lesen** | Workflows ansehen, Ausführungsergebnisse sehen, aber keine Änderungen vornehmen | +| **Schreiben** | Workflows erstellen und bearbeiten, Workflows ausführen, Umgebungsvariablen verwalten | +| **Admin** | Alles, was Schreiben kann, plus Benutzer einladen/entfernen und Workspace-Einstellungen verwalten | + +## Was jede Berechtigungsstufe tun kann + +Hier ist eine detaillierte Aufschlüsselung dessen, was Benutzer mit jeder Berechtigungsstufe tun können: + +### Leseberechtigung +**Perfekt für:** Stakeholder, Beobachter oder Teammitglieder, die Einblick benötigen, aber keine Änderungen vornehmen sollten + +**Was sie tun können:** +- Alle Workflows im Workspace ansehen +- Workflow-Ausführungsergebnisse und Protokolle einsehen +- Workflow-Konfigurationen und Einstellungen durchsuchen +- Umgebungsvariablen anzeigen (aber nicht bearbeiten) + +**Was sie nicht tun können:** +- Workflows erstellen, bearbeiten oder löschen +- Workflows ausführen oder bereitstellen +- Workspace-Einstellungen ändern +- Andere Benutzer einladen + +### Schreibberechtigung +**Perfekt für:** Entwickler, Content-Ersteller oder Teammitglieder, die aktiv an Automatisierungen arbeiten + +**Was sie tun können:** +- Alles, was Benutzer mit Leseberechtigung können, plus: +- Workflows erstellen, bearbeiten und löschen +- Workflows ausführen und bereitstellen +- Workspace-Umgebungsvariablen hinzufügen, bearbeiten und löschen +- Alle verfügbaren Tools und Integrationen nutzen +- In Echtzeit bei der Workflow-Bearbeitung zusammenarbeiten + +**Was sie nicht können:** +- Benutzer zum Workspace einladen oder daraus entfernen +- Workspace-Einstellungen ändern +- Den Workspace löschen + +### Admin-Berechtigung +**Perfekt für:** Teamleiter, Projektmanager oder technische Leiter, die den Workspace verwalten müssen + +**Was sie können:** +- Alles, was Benutzer mit Schreibrechten können, plus: +- Neue Benutzer mit beliebiger Berechtigungsstufe zum Workspace einladen +- Benutzer aus dem Workspace entfernen +- Workspace-Einstellungen und Integrationen verwalten +- Verbindungen zu externen Tools konfigurieren +- Von anderen Benutzern erstellte Workflows löschen + +**Was sie nicht können:** +- Den Workspace löschen (das kann nur der Workspace-Besitzer) +- Den Workspace-Besitzer aus dem Workspace entfernen + +--- + +## Workspace-Besitzer vs. Admin + +Jeder Workspace hat einen **Besitzer** (die Person, die ihn erstellt hat) sowie eine beliebige Anzahl von **Admins**. + +### Workspace-Besitzer +- Hat alle Admin-Berechtigungen +- Kann den Workspace löschen +- Kann nicht aus dem Workspace entfernt werden +- Kann die Eigentümerschaft an einen anderen Benutzer übertragen + +### Workspace-Admin +- Kann alles tun außer den Workspace löschen oder den Besitzer entfernen +- Kann vom Besitzer oder anderen Admins aus dem Workspace entfernt werden + +--- + +## Häufige Szenarien + +### Einen neuen Entwickler zum Team hinzufügen +1. **Organisationsebene**: Laden Sie ihn als **Organisationsmitglied** ein +2. **Workspace-Ebene**: Geben Sie ihm **Schreib**-Berechtigung, damit er Workflows erstellen und bearbeiten kann + +### Einen Projektmanager hinzufügen +1. **Organisationsebene**: Laden Sie ihn als **Organisationsmitglied** ein +2. **Workspace-Ebene**: Geben Sie ihm **Admin**-Berechtigung, damit er das Team verwalten und alles einsehen kann + +### Einen Stakeholder oder Kunden hinzufügen +1. **Organisationsebene**: Laden Sie ihn als **Organisationsmitglied** ein +2. **Workspace-Ebene**: Geben Sie ihm **Lese**-Berechtigung, damit er den Fortschritt sehen, aber keine Änderungen vornehmen kann + +--- + +## Umgebungsvariablen + +Benutzer können zwei Arten von Umgebungsvariablen erstellen: + +### Persönliche Umgebungsvariablen +- Nur für den einzelnen Benutzer sichtbar +- Verfügbar in allen Workflows, die sie ausführen +- Werden in den Benutzereinstellungen verwaltet + +### Workspace-Umgebungsvariablen +- **Leserecht**: Kann Variablennamen und -werte sehen +- **Schreib-/Administratorrecht**: Kann Variablen hinzufügen, bearbeiten und löschen +- Verfügbar für alle Workspace-Mitglieder +- Wenn eine persönliche Variable denselben Namen wie eine Workspace-Variable hat, hat die persönliche Variable Vorrang + +--- + +## Best Practices + +### Mit minimalen Berechtigungen beginnen +Geben Sie Benutzern die niedrigste Berechtigungsstufe, die sie für ihre Arbeit benötigen. Sie können die Berechtigungen später immer erhöhen. + +### Organisationsstruktur klug nutzen +- Machen Sie vertrauenswürdige Teamleiter zu **Organisationsadministratoren** +- Die meisten Teammitglieder sollten **Organisationsmitglieder** sein +- Reservieren Sie Workspace-**Admin**-Berechtigungen für Personen, die Benutzer verwalten müssen + +### Berechtigungen regelmäßig überprüfen +Überprüfen Sie regelmäßig, wer Zugriff auf was hat, besonders wenn Teammitglieder ihre Rollen wechseln oder das Unternehmen verlassen. + +### Sicherheit von Umgebungsvariablen +- Verwenden Sie persönliche Umgebungsvariablen für sensible API-Schlüssel +- Verwenden Sie Workspace-Umgebungsvariablen für gemeinsame Konfigurationen +- Überprüfen Sie regelmäßig, wer Zugriff auf sensible Variablen hat + +--- + +## Organisationsrollen + +Wenn Sie jemanden zu Ihrer Organisation einladen, können Sie eine von zwei Rollen zuweisen: + +### Organisationsadministrator +**Was sie tun können:** +- Teammitglieder zur Organisation einladen und entfernen +- Neue Workspaces erstellen +- Abrechnungs- und Abonnementeinstellungen verwalten +- Zugriff auf alle Workspaces innerhalb der Organisation + +### Organisationsmitglied +**Was sie tun können:** +- Zugriff auf Workspaces, zu denen sie speziell eingeladen wurden +- Liste der Organisationsmitglieder anzeigen +- Können keine neuen Personen einladen oder Organisationseinstellungen verwalten \ No newline at end of file diff --git a/apps/docs/content/docs/de/sdks/python.mdx b/apps/docs/content/docs/de/sdks/python.mdx new file mode 100644 index 0000000000..9068055b44 --- /dev/null +++ b/apps/docs/content/docs/de/sdks/python.mdx @@ -0,0 +1,412 @@ +--- +title: Python SDK +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Card, Cards } from 'fumadocs-ui/components/card' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' + +Das offizielle Python SDK für Sim ermöglicht es Ihnen, Workflows programmatisch aus Ihren Python-Anwendungen mithilfe des offiziellen Python SDKs auszuführen. + + + Das Python SDK unterstützt Python 3.8+ und bietet synchrone Workflow-Ausführung. Alle Workflow-Ausführungen sind derzeit synchron. + + +## Installation + +Installieren Sie das SDK mit pip: + +```bash +pip install simstudio-sdk +``` + +## Schnellstart + +Hier ist ein einfaches Beispiel für den Einstieg: + +```python +from simstudio import SimStudioClient + +# Initialize the client +client = SimStudioClient( + api_key="your-api-key-here", + base_url="https://sim.ai" # optional, defaults to https://sim.ai +) + +# Execute a workflow +try: + result = client.execute_workflow("workflow-id") + print("Workflow executed successfully:", result) +except Exception as error: + print("Workflow execution failed:", error) +``` + +## API-Referenz + +### SimStudioClient + +#### Konstruktor + +```python +SimStudioClient(api_key: str, base_url: str = "https://sim.ai") +``` + +**Parameter:** +- `api_key` (str): Ihr Sim API-Schlüssel +- `base_url` (str, optional): Basis-URL für die Sim API + +#### Methoden + +##### execute_workflow() + +Führt einen Workflow mit optionalen Eingabedaten aus. + +```python +result = client.execute_workflow( + "workflow-id", + input_data={"message": "Hello, world!"}, + timeout=30.0 # 30 seconds +) +``` + +**Parameter:** +- `workflow_id` (str): Die ID des auszuführenden Workflows +- `input_data` (dict, optional): Eingabedaten, die an den Workflow übergeben werden +- `timeout` (float, optional): Timeout in Sekunden (Standard: 30.0) + +**Rückgabewert:** `WorkflowExecutionResult` + +##### get_workflow_status() + +Ruft den Status eines Workflows ab (Deployment-Status usw.). + +```python +status = client.get_workflow_status("workflow-id") +print("Is deployed:", status.is_deployed) +``` + +**Parameter:** +- `workflow_id` (str): Die ID des Workflows + +**Rückgabe:** `WorkflowStatus` + +##### validate_workflow() + +Überprüft, ob ein Workflow für die Ausführung bereit ist. + +```python +is_ready = client.validate_workflow("workflow-id") +if is_ready: + # Workflow is deployed and ready + pass +``` + +**Parameter:** +- `workflow_id` (str): Die ID des Workflows + +**Rückgabe:** `bool` + +##### execute_workflow_sync() + + + Derzeit ist diese Methode identisch mit `execute_workflow()`, da alle Ausführungen synchron sind. Diese Methode wird für zukünftige Kompatibilität bereitgestellt, wenn asynchrone Ausführung hinzugefügt wird. + + +Führt einen Workflow aus (derzeit synchron, identisch mit `execute_workflow()`). + +```python +result = client.execute_workflow_sync( + "workflow-id", + input_data={"data": "some input"}, + timeout=60.0 +) +``` + +**Parameter:** +- `workflow_id` (str): Die ID des auszuführenden Workflows +- `input_data` (dict, optional): Eingabedaten, die an den Workflow übergeben werden +- `timeout` (float): Timeout für die initiale Anfrage in Sekunden + +**Rückgabe:** `WorkflowExecutionResult` + +##### set_api_key() + +Aktualisiert den API-Schlüssel. + +```python +client.set_api_key("new-api-key") +``` + +##### set_base_url() + +Aktualisiert die Basis-URL. + +```python +client.set_base_url("https://my-custom-domain.com") +``` + +##### close() + +Schließt die zugrunde liegende HTTP-Sitzung. + +```python +client.close() +``` + +## Datenklassen + +### WorkflowExecutionResult + +```python +@dataclass +class WorkflowExecutionResult: + success: bool + output: Optional[Any] = None + error: Optional[str] = None + logs: Optional[List[Any]] = None + metadata: Optional[Dict[str, Any]] = None + trace_spans: Optional[List[Any]] = None + total_duration: Optional[float] = None +``` + +### WorkflowStatus + +```python +@dataclass +class WorkflowStatus: + is_deployed: bool + deployed_at: Optional[str] = None + is_published: bool = False + needs_redeployment: bool = False +``` + +### SimStudioError + +```python +class SimStudioError(Exception): + def __init__(self, message: str, code: Optional[str] = None, status: Optional[int] = None): + super().__init__(message) + self.code = code + self.status = status +``` + +## Beispiele + +### Grundlegende Workflow-Ausführung + + + + Richten Sie den SimStudioClient mit Ihrem API-Schlüssel ein. + + + Prüfen Sie, ob der Workflow bereitgestellt und für die Ausführung bereit ist. + + + Führen Sie den Workflow mit Ihren Eingabedaten aus. + + + Verarbeiten Sie das Ausführungsergebnis und behandeln Sie eventuelle Fehler. + + + +```python +import os +from simstudio import SimStudioClient + +client = SimStudioClient(api_key=os.getenv("SIMSTUDIO_API_KEY")) + +def run_workflow(): + try: + # Check if workflow is ready + is_ready = client.validate_workflow("my-workflow-id") + if not is_ready: + raise Exception("Workflow is not deployed or ready") + + # Execute the workflow + result = client.execute_workflow( + "my-workflow-id", + input_data={ + "message": "Process this data", + "user_id": "12345" + } + ) + + if result.success: + print("Output:", result.output) + print("Duration:", result.metadata.get("duration") if result.metadata else None) + else: + print("Workflow failed:", result.error) + + except Exception as error: + print("Error:", error) + +run_workflow() +``` + +### Fehlerbehandlung + +Behandeln Sie verschiedene Fehlertypen, die während der Workflow-Ausführung auftreten können: + +```python +from simstudio import SimStudioClient, SimStudioError +import os + +client = SimStudioClient(api_key=os.getenv("SIMSTUDIO_API_KEY")) + +def execute_with_error_handling(): + try: + result = client.execute_workflow("workflow-id") + return result + except SimStudioError as error: + if error.code == "UNAUTHORIZED": + print("Invalid API key") + elif error.code == "TIMEOUT": + print("Workflow execution timed out") + elif error.code == "USAGE_LIMIT_EXCEEDED": + print("Usage limit exceeded") + elif error.code == "INVALID_JSON": + print("Invalid JSON in request body") + else: + print(f"Workflow error: {error}") + raise + except Exception as error: + print(f"Unexpected error: {error}") + raise +``` + +### Verwendung des Kontextmanagers + +Verwenden Sie den Client als Kontextmanager, um die Ressourcenbereinigung automatisch zu handhaben: + +```python +from simstudio import SimStudioClient +import os + +# Using context manager to automatically close the session +with SimStudioClient(api_key=os.getenv("SIMSTUDIO_API_KEY")) as client: + result = client.execute_workflow("workflow-id") + print("Result:", result) +# Session is automatically closed here +``` + +### Batch-Workflow-Ausführung + +Führen Sie mehrere Workflows effizient aus: + +```python +from simstudio import SimStudioClient +import os + +client = SimStudioClient(api_key=os.getenv("SIMSTUDIO_API_KEY")) + +def execute_workflows_batch(workflow_data_pairs): + """Execute multiple workflows with different input data.""" + results = [] + + for workflow_id, input_data in workflow_data_pairs: + try: + # Validate workflow before execution + if not client.validate_workflow(workflow_id): + print(f"Skipping {workflow_id}: not deployed") + continue + + result = client.execute_workflow(workflow_id, input_data) + results.append({ + "workflow_id": workflow_id, + "success": result.success, + "output": result.output, + "error": result.error + }) + + except Exception as error: + results.append({ + "workflow_id": workflow_id, + "success": False, + "error": str(error) + }) + + return results + +# Example usage +workflows = [ + ("workflow-1", {"type": "analysis", "data": "sample1"}), + ("workflow-2", {"type": "processing", "data": "sample2"}), +] + +results = execute_workflows_batch(workflows) +for result in results: + print(f"Workflow {result['workflow_id']}: {'Success' if result['success'] else 'Failed'}") +``` + +### Umgebungskonfiguration + +Konfigurieren Sie den Client mit Umgebungsvariablen: + + + + + ```python + import os + from simstudio import SimStudioClient + + # Development configuration + client = SimStudioClient( + api_key=os.getenv("SIMSTUDIO_API_KEY"), + base_url=os.getenv("SIMSTUDIO_BASE_URL", "https://sim.ai") + ) + ``` + + + + + ```python + import os + from simstudio import SimStudioClient + + # Production configuration with error handling + api_key = os.getenv("SIMSTUDIO_API_KEY") + if not api_key: + raise ValueError("SIMSTUDIO_API_KEY environment variable is required") + + client = SimStudioClient( + api_key=api_key, + base_url=os.getenv("SIMSTUDIO_BASE_URL", "https://sim.ai") + ) + ``` + + + + +## API-Schlüssel erhalten + + + + Navigieren Sie zu [Sim](https://sim.ai) und melden Sie sich bei Ihrem Konto an. + + + Navigieren Sie zu dem Workflow, den Sie programmatisch ausführen möchten. + + + Klicken Sie auf "Deploy", um Ihren Workflow bereitzustellen, falls dies noch nicht geschehen ist. + + + Wählen Sie während des Bereitstellungsprozesses einen API-Schlüssel aus oder erstellen Sie einen neuen. + + + Kopieren Sie den API-Schlüssel zur Verwendung in Ihrer Python-Anwendung. + + + + + Halte deinen API-Schlüssel sicher und committe ihn niemals in die Versionskontrolle. Verwende Umgebungsvariablen oder sicheres Konfigurationsmanagement. + + +## Anforderungen + +- Python 3.8+ +- requests >= 2.25.0 + +## Lizenz + +Apache-2.0 \ No newline at end of file diff --git a/apps/docs/content/docs/de/sdks/typescript.mdx b/apps/docs/content/docs/de/sdks/typescript.mdx new file mode 100644 index 0000000000..f60279d25f --- /dev/null +++ b/apps/docs/content/docs/de/sdks/typescript.mdx @@ -0,0 +1,607 @@ +--- +title: TypeScript/JavaScript SDK +--- + +import { Callout } from 'fumadocs-ui/components/callout' +import { Card, Cards } from 'fumadocs-ui/components/card' +import { Step, Steps } from 'fumadocs-ui/components/steps' +import { Tab, Tabs } from 'fumadocs-ui/components/tabs' + +Das offizielle TypeScript/JavaScript SDK für Sim bietet vollständige Typsicherheit und unterstützt sowohl Node.js- als auch Browser-Umgebungen, sodass Sie Workflows programmatisch aus Ihren Node.js-Anwendungen, Webanwendungen und anderen JavaScript-Umgebungen ausführen können. Alle Workflow-Ausführungen sind derzeit synchron. + + + Das TypeScript SDK bietet vollständige Typsicherheit und unterstützt sowohl Node.js- als auch Browser-Umgebungen. Alle Workflow-Ausführungen sind derzeit synchron. + + +## Installation + +Installieren Sie das SDK mit Ihrem bevorzugten Paketmanager: + + + + + ```bash + npm install simstudio-ts-sdk + ``` + + + + + ```bash + yarn add simstudio-ts-sdk + ``` + + + + + ```bash + bun add simstudio-ts-sdk + ``` + + + + +## Schnellstart + +Hier ist ein einfaches Beispiel für den Einstieg: + +```typescript +import { SimStudioClient } from 'simstudio-ts-sdk'; + +// Initialize the client +const client = new SimStudioClient({ + apiKey: 'your-api-key-here', + baseUrl: 'https://sim.ai' // optional, defaults to https://sim.ai +}); + +// Execute a workflow +try { + const result = await client.executeWorkflow('workflow-id'); + console.log('Workflow executed successfully:', result); +} catch (error) { + console.error('Workflow execution failed:', error); +} +``` + +## API-Referenz + +### SimStudioClient + +#### Konstruktor + +```typescript +new SimStudioClient(config: SimStudioConfig) +``` + +**Konfiguration:** +- `config.apiKey` (string): Ihr Sim API-Schlüssel +- `config.baseUrl` (string, optional): Basis-URL für die Sim API (standardmäßig `https://sim.ai`) + +#### Methoden + +##### executeWorkflow() + +Führen Sie einen Workflow mit optionalen Eingabedaten aus. + +```typescript +const result = await client.executeWorkflow('workflow-id', { + input: { message: 'Hello, world!' }, + timeout: 30000 // 30 seconds +}); +``` + +**Parameter:** +- `workflowId` (string): Die ID des auszuführenden Workflows +- `options` (ExecutionOptions, optional): + - `input` (any): Eingabedaten, die an den Workflow übergeben werden + - `timeout` (number): Timeout in Millisekunden (Standard: 30000) + +**Rückgabewert:** `Promise` + +##### getWorkflowStatus() + +Den Status eines Workflows abrufen (Bereitstellungsstatus usw.). + +```typescript +const status = await client.getWorkflowStatus('workflow-id'); +console.log('Is deployed:', status.isDeployed); +``` + +**Parameter:** +- `workflowId` (string): Die ID des Workflows + +**Rückgabewert:** `Promise` + +##### validateWorkflow() + +Überprüfen, ob ein Workflow für die Ausführung bereit ist. + +```typescript +const isReady = await client.validateWorkflow('workflow-id'); +if (isReady) { + // Workflow is deployed and ready +} +``` + +**Parameter:** +- `workflowId` (string): Die ID des Workflows + +**Rückgabewert:** `Promise` + +##### executeWorkflowSync() + + + Derzeit ist diese Methode identisch mit `executeWorkflow()`, da alle Ausführungen synchron sind. Diese Methode wird für zukünftige Kompatibilität bereitgestellt, wenn asynchrone Ausführung hinzugefügt wird. + + +Einen Workflow ausführen (derzeit synchron, identisch mit `executeWorkflow()`). + +```typescript +const result = await client.executeWorkflowSync('workflow-id', { + input: { data: 'some input' }, + timeout: 60000 +}); +``` + +**Parameter:** +- `workflowId` (string): Die ID des auszuführenden Workflows +- `options` (ExecutionOptions, optional): + - `input` (any): Eingabedaten, die an den Workflow übergeben werden + - `timeout` (number): Timeout für die initiale Anfrage in Millisekunden + +**Rückgabewert:** `Promise` + +##### setApiKey() + +Den API-Schlüssel aktualisieren. + +```typescript +client.setApiKey('new-api-key'); +``` + +##### setBaseUrl() + +Die Basis-URL aktualisieren. + +```typescript +client.setBaseUrl('https://my-custom-domain.com'); +``` + +## Typen + +### WorkflowExecutionResult + +```typescript +interface WorkflowExecutionResult { + success: boolean; + output?: any; + error?: string; + logs?: any[]; + metadata?: { + duration?: number; + executionId?: string; + [key: string]: any; + }; + traceSpans?: any[]; + totalDuration?: number; +} +``` + +### WorkflowStatus + +```typescript +interface WorkflowStatus { + isDeployed: boolean; + deployedAt?: string; + isPublished: boolean; + needsRedeployment: boolean; +} +``` + +### SimStudioError + +```typescript +class SimStudioError extends Error { + code?: string; + status?: number; +} +``` + +## Beispiele + +### Grundlegende Workflow-Ausführung + + + + Richten Sie den SimStudioClient mit Ihrem API-Schlüssel ein. + + + Prüfen Sie, ob der Workflow bereitgestellt und für die Ausführung bereit ist. + + + Führen Sie den Workflow mit Ihren Eingabedaten aus. + + + Verarbeiten Sie das Ausführungsergebnis und behandeln Sie eventuelle Fehler. + + + +```typescript +import { SimStudioClient } from 'simstudio-ts-sdk'; + +const client = new SimStudioClient({ + apiKey: process.env.SIMSTUDIO_API_KEY! +}); + +async function runWorkflow() { + try { + // Check if workflow is ready + const isReady = await client.validateWorkflow('my-workflow-id'); + if (!isReady) { + throw new Error('Workflow is not deployed or ready'); + } + + // Execute the workflow + const result = await client.executeWorkflow('my-workflow-id', { + input: { + message: 'Process this data', + userId: '12345' + } + }); + + if (result.success) { + console.log('Output:', result.output); + console.log('Duration:', result.metadata?.duration); + } else { + console.error('Workflow failed:', result.error); + } + } catch (error) { + console.error('Error:', error); + } +} + +runWorkflow(); +``` + +### Fehlerbehandlung + +Behandeln Sie verschiedene Fehlertypen, die während der Workflow-Ausführung auftreten können: + +```typescript +import { SimStudioClient, SimStudioError } from 'simstudio-ts-sdk'; + +const client = new SimStudioClient({ + apiKey: process.env.SIMSTUDIO_API_KEY! +}); + +async function executeWithErrorHandling() { + try { + const result = await client.executeWorkflow('workflow-id'); + return result; + } catch (error) { + if (error instanceof SimStudioError) { + switch (error.code) { + case 'UNAUTHORIZED': + console.error('Invalid API key'); + break; + case 'TIMEOUT': + console.error('Workflow execution timed out'); + break; + case 'USAGE_LIMIT_EXCEEDED': + console.error('Usage limit exceeded'); + break; + case 'INVALID_JSON': + console.error('Invalid JSON in request body'); + break; + default: + console.error('Workflow error:', error.message); + } + } else { + console.error('Unexpected error:', error); + } + throw error; + } +} +``` + +### Umgebungskonfiguration + +Konfigurieren Sie den Client mit Umgebungsvariablen: + + + + + ```typescript + import { SimStudioClient } from 'simstudio-ts-sdk'; + + // Development configuration + const apiKey = process.env.SIMSTUDIO_API_KEY; + if (!apiKey) { + throw new Error('SIMSTUDIO_API_KEY environment variable is required'); + } + + const client = new SimStudioClient({ + apiKey, + baseUrl: process.env.SIMSTUDIO_BASE_URL // optional + }); + ``` + + + + + ```typescript + import { SimStudioClient } from 'simstudio-ts-sdk'; + + // Production configuration with validation + const apiKey = process.env.SIMSTUDIO_API_KEY; + if (!apiKey) { + throw new Error('SIMSTUDIO_API_KEY environment variable is required'); + } + + const client = new SimStudioClient({ + apiKey, + baseUrl: process.env.SIMSTUDIO_BASE_URL || 'https://sim.ai' + }); + ``` + + + + +### Node.js Express-Integration + +Integration mit einem Express.js-Server: + +```typescript +import express from 'express'; +import { SimStudioClient } from 'simstudio-ts-sdk'; + +const app = express(); +const client = new SimStudioClient({ + apiKey: process.env.SIMSTUDIO_API_KEY! +}); + +app.use(express.json()); + +app.post('/execute-workflow', async (req, res) => { + try { + const { workflowId, input } = req.body; + + const result = await client.executeWorkflow(workflowId, { + input, + timeout: 60000 + }); + + res.json({ + success: true, + data: result + }); + } catch (error) { + console.error('Workflow execution error:', error); + res.status(500).json({ + success: false, + error: error instanceof Error ? error.message : 'Unknown error' + }); + } +}); + +app.listen(3000, () => { + console.log('Server running on port 3000'); +}); +``` + +### Next.js API-Route + +Verwendung mit Next.js API-Routen: + +```typescript +// pages/api/workflow.ts or app/api/workflow/route.ts +import { NextApiRequest, NextApiResponse } from 'next'; +import { SimStudioClient } from 'simstudio-ts-sdk'; + +const client = new SimStudioClient({ + apiKey: process.env.SIMSTUDIO_API_KEY! +}); + +export default async function handler( + req: NextApiRequest, + res: NextApiResponse +) { + if (req.method !== 'POST') { + return res.status(405).json({ error: 'Method not allowed' }); + } + + try { + const { workflowId, input } = req.body; + + const result = await client.executeWorkflow(workflowId, { + input, + timeout: 30000 + }); + + res.status(200).json(result); + } catch (error) { + console.error('Error executing workflow:', error); + res.status(500).json({ + error: 'Failed to execute workflow' + }); + } +} +``` + +### Browser-Nutzung + +Verwendung im Browser (mit korrekter CORS-Konfiguration): + +```typescript +import { SimStudioClient } from 'simstudio-ts-sdk'; + +// Note: In production, use a proxy server to avoid exposing API keys +const client = new SimStudioClient({ + apiKey: 'your-public-api-key', // Use with caution in browser + baseUrl: 'https://sim.ai' +}); + +async function executeClientSideWorkflow() { + try { + const result = await client.executeWorkflow('workflow-id', { + input: { + userInput: 'Hello from browser' + } + }); + + console.log('Workflow result:', result); + + // Update UI with result + document.getElementById('result')!.textContent = + JSON.stringify(result.output, null, 2); + } catch (error) { + console.error('Error:', error); + } +} + +// Attach to button click +document.getElementById('executeBtn')?.addEventListener('click', executeClientSideWorkflow); +``` + + + Bei der Verwendung des SDK im Browser sollten Sie darauf achten, keine sensiblen API-Schlüssel offenzulegen. Erwägen Sie die Verwendung eines Backend-Proxys oder öffentlicher API-Schlüssel mit eingeschränkten Berechtigungen. + + +### React Hook Beispiel + +Erstellen Sie einen benutzerdefinierten React Hook für die Workflow-Ausführung: + +```typescript +import { useState, useCallback } from 'react'; +import { SimStudioClient, WorkflowExecutionResult } from 'simstudio-ts-sdk'; + +const client = new SimStudioClient({ + apiKey: process.env.NEXT_PUBLIC_SIMSTUDIO_API_KEY! +}); + +interface UseWorkflowResult { + result: WorkflowExecutionResult | null; + loading: boolean; + error: Error | null; + executeWorkflow: (workflowId: string, input?: any) => Promise; +} + +export function useWorkflow(): UseWorkflowResult { + const [result, setResult] = useState(null); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(null); + + const executeWorkflow = useCallback(async (workflowId: string, input?: any) => { + setLoading(true); + setError(null); + setResult(null); + + try { + const workflowResult = await client.executeWorkflow(workflowId, { + input, + timeout: 30000 + }); + setResult(workflowResult); + } catch (err) { + setError(err instanceof Error ? err : new Error('Unknown error')); + } finally { + setLoading(false); + } + }, []); + + return { + result, + loading, + error, + executeWorkflow + }; +} + +// Usage in component +function WorkflowComponent() { + const { result, loading, error, executeWorkflow } = useWorkflow(); + + const handleExecute = () => { + executeWorkflow('my-workflow-id', { + message: 'Hello from React!' + }); + }; + + return ( +
+ + + {error &&
Error: {error.message}
} + {result && ( +
+

Result:

+
{JSON.stringify(result, null, 2)}
+
+ )} +
+ ); +} +``` + +## Ihren API-Schlüssel erhalten + + + + Navigieren Sie zu [Sim](https://sim.ai) und melden Sie sich bei Ihrem Konto an. + + + Navigieren Sie zu dem Workflow, den Sie programmatisch ausführen möchten. + + + Klicken Sie auf "Deploy", um Ihren Workflow zu deployen, falls dies noch nicht geschehen ist. + + + Wählen Sie während des Deployment-Prozesses einen API-Schlüssel aus oder erstellen Sie einen neuen. + + + Kopieren Sie den API-Schlüssel zur Verwendung in Ihrer TypeScript/JavaScript-Anwendung. + + + + + Halten Sie Ihren API-Schlüssel sicher und committen Sie ihn niemals in die Versionskontrolle. Verwenden Sie Umgebungsvariablen oder sicheres Konfigurationsmanagement. + + +## Anforderungen + +- Node.js 16+ +- TypeScript 5.0+ (für TypeScript-Projekte) + +## TypeScript-Unterstützung + +Das SDK ist in TypeScript geschrieben und bietet vollständige Typsicherheit: + +```typescript +import { + SimStudioClient, + WorkflowExecutionResult, + WorkflowStatus, + SimStudioError +} from 'simstudio-ts-sdk'; + +// Type-safe client initialization +const client: SimStudioClient = new SimStudioClient({ + apiKey: process.env.SIMSTUDIO_API_KEY! +}); + +// Type-safe workflow execution +const result: WorkflowExecutionResult = await client.executeWorkflow('workflow-id', { + input: { + message: 'Hello, TypeScript!' + } +}); + +// Type-safe status checking +const status: WorkflowStatus = await client.getWorkflowStatus('workflow-id'); +``` + +## Lizenz + +Apache-2.0 \ No newline at end of file diff --git a/apps/docs/content/docs/de/tools/airtable.mdx b/apps/docs/content/docs/de/tools/airtable.mdx new file mode 100644 index 0000000000..078c57cbff --- /dev/null +++ b/apps/docs/content/docs/de/tools/airtable.mdx @@ -0,0 +1,161 @@ +--- +title: Airtable +description: Airtable lesen, erstellen und aktualisieren +--- + +import { BlockInfoCard } from "@/components/ui/block-info-card" + + + + + + + + + `} +/> + +{/* MANUAL-CONTENT-START:intro */} +[Airtable](https://airtable.com/) ist eine leistungsstarke cloudbasierte Plattform, die die Funktionalität einer Datenbank mit der Einfachheit einer Tabellenkalkulation verbindet. Sie ermöglicht Benutzern, flexible Datenbanken zur Organisation, Speicherung und Zusammenarbeit an Informationen zu erstellen. + +Mit Airtable können Sie: + +- **Benutzerdefinierte Datenbanken erstellen**: Maßgeschneiderte Lösungen für Projektmanagement, Content-Kalender, Bestandsverfolgung und mehr entwickeln +- **Daten visualisieren**: Ihre Informationen als Raster, Kanban-Board, Kalender oder Galerie anzeigen +- **Arbeitsabläufe automatisieren**: Auslöser und Aktionen einrichten, um wiederkehrende Aufgaben zu automatisieren +- **Mit anderen Tools integrieren**: Verbindung zu Hunderten anderer Anwendungen durch native Integrationen und APIs herstellen + +In Sim ermöglicht die Airtable-Integration Ihren Agenten, programmatisch mit Ihren Airtable-Basen zu interagieren. Dies erlaubt nahtlose Datenoperationen wie das Abrufen von Informationen, Erstellen neuer Datensätze und Aktualisieren vorhandener Daten - alles innerhalb Ihrer Agenten-Workflows. Nutzen Sie Airtable als dynamische Datenquelle oder -ziel für Ihre Agenten, sodass sie im Rahmen ihrer Entscheidungsfindung und Aufgabenausführung auf strukturierte Informationen zugreifen und diese bearbeiten können. +{/* MANUAL-CONTENT-END */} + +## Nutzungsanweisungen + +Integriert Airtable in den Workflow. Kann Airtable-Datensätze erstellen, abrufen, auflisten oder aktualisieren. Erfordert OAuth. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn eine Aktualisierung an einer Airtable-Tabelle vorgenommen wird. + +## Tools + +### `airtable_list_records` + +Datensätze aus einer Airtable-Tabelle lesen + +#### Eingabe + +| Parameter | Typ | Erforderlich | Beschreibung | +| --------- | ---- | -------- | ----------- | +| `baseId` | string | Ja | ID der Airtable-Basis | +| `tableId` | string | Ja | ID der Tabelle | +| `maxRecords` | number | Nein | Maximale Anzahl der zurückzugebenden Datensätze | +| `filterFormula` | string | Nein | Formel zum Filtern von Datensätzen \(z.B. "\(\{Feldname\} = \'Wert\'\)"\) | + +#### Ausgabe + +| Parameter | Typ | Beschreibung | +| --------- | ---- | ----------- | +| `records` | json | Array der abgerufenen Airtable-Datensätze | + +### `airtable_get_record` + +Einen einzelnen Datensatz aus einer Airtable-Tabelle anhand seiner ID abrufen + +#### Eingabe + +| Parameter | Typ | Erforderlich | Beschreibung | +| --------- | ---- | -------- | ----------- | +| `baseId` | string | Ja | ID der Airtable-Basis | +| `tableId` | string | Ja | ID oder Name der Tabelle | +| `recordId` | string | Ja | ID des abzurufenden Datensatzes | + +#### Ausgabe + +| Parameter | Typ | Beschreibung | +| --------- | ---- | ----------- | +| `record` | json | Abgerufener Airtable-Datensatz mit id, createdTime und fields | +| `metadata` | json | Operationsmetadaten einschließlich Datensatzanzahl | + +### `airtable_create_records` + +Neue Datensätze in eine Airtable-Tabelle schreiben + +#### Eingabe + +| Parameter | Typ | Erforderlich | Beschreibung | +| --------- | ---- | -------- | ----------- | +| `baseId` | string | Ja | ID der Airtable-Basis | +| `tableId` | string | Ja | ID oder Name der Tabelle | +| `records` | json | Ja | Array von zu erstellenden Datensätzen, jeder mit einem `fields` Objekt | +| `fields` | string | Nein | Keine Beschreibung | + +#### Ausgabe + +| Parameter | Typ | Beschreibung | +| --------- | ---- | ----------- | +| `records` | json | Array der erstellten Airtable-Datensätze | + +### `airtable_update_record` + +Einen vorhandenen Datensatz in einer Airtable-Tabelle nach ID aktualisieren + +#### Eingabe + +| Parameter | Typ | Erforderlich | Beschreibung | +| --------- | ---- | -------- | ----------- | +| `baseId` | string | Ja | ID der Airtable-Basis | +| `tableId` | string | Ja | ID oder Name der Tabelle | +| `recordId` | string | Ja | ID des zu aktualisierenden Datensatzes | +| `fields` | json | Ja | Ein Objekt, das die Feldnamen und ihre neuen Werte enthält | + +#### Ausgabe + +| Parameter | Typ | Beschreibung | +| --------- | ---- | ----------- | +| `record` | json | Aktualisierter Airtable-Datensatz mit ID, Erstellungszeit und Feldern | +| `metadata` | json | Operationsmetadaten einschließlich Datensatzanzahl und aktualisierter Feldnamen | + +### `airtable_update_multiple_records` + +Mehrere vorhandene Datensätze in einer Airtable-Tabelle aktualisieren + +#### Eingabe + +| Parameter | Typ | Erforderlich | Beschreibung | +| --------- | ---- | -------- | ----------- | +| `baseId` | string | Ja | ID der Airtable-Basis | +| `tableId` | string | Ja | ID oder Name der Tabelle | +| `records` | json | Ja | Array von zu aktualisierenden Datensätzen, jeder mit einer `id` und einem `fields`-Objekt | + +#### Ausgabe + +| Parameter | Typ | Beschreibung | +| --------- | ---- | ----------- | +| `records` | json | Array der aktualisierten Airtable-Datensätze | + +## Hinweise + +- Kategorie: `tools` +- Typ: `airtable` diff --git a/apps/docs/content/docs/de/tools/arxiv.mdx b/apps/docs/content/docs/de/tools/arxiv.mdx new file mode 100644 index 0000000000..a06ee5e9a6 --- /dev/null +++ b/apps/docs/content/docs/de/tools/arxiv.mdx @@ -0,0 +1,109 @@ +--- +title: ArXiv +description: Suche und rufe wissenschaftliche Arbeiten von ArXiv ab +--- + +import { BlockInfoCard } from "@/components/ui/block-info-card" + + + + + + + + `} +/> + +{/* MANUAL-CONTENT-START:intro */} +[ArXiv](https://arxiv.org/) ist ein kostenfreies, frei zugängliches Repository für wissenschaftliche Forschungsarbeiten in Bereichen wie Physik, Mathematik, Informatik, quantitative Biologie, quantitative Finanzwissenschaft, Statistik, Elektrotechnik, Systemwissenschaften und Wirtschaftswissenschaften. ArXiv bietet eine umfangreiche Sammlung von Preprints und veröffentlichten Artikeln und ist damit eine primäre Ressource für Forscher und Praktiker weltweit. + +Mit ArXiv können Sie: + +- **Nach wissenschaftlichen Arbeiten suchen**: Finden Sie Forschungsarbeiten anhand von Schlüsselwörtern, Autorennamen, Titeln, Kategorien und mehr +- **Metadaten von Arbeiten abrufen**: Zugriff auf Abstracts, Autorenlisten, Veröffentlichungsdaten und andere bibliografische Informationen +- **Volltext-PDFs herunterladen**: Erhalten Sie den vollständigen Text der meisten Arbeiten für eingehende Studien +- **Autorenbeiträge erkunden**: Sehen Sie alle Arbeiten eines bestimmten Autors +- **Auf dem Laufenden bleiben**: Entdecken Sie die neuesten Einreichungen und Trendthemen in Ihrem Fachgebiet + +In Sim ermöglicht die ArXiv-Integration Ihren Agenten, wissenschaftliche Arbeiten von ArXiv programmatisch zu suchen, abzurufen und zu analysieren. Dies erlaubt Ihnen, Literaturrecherchen zu automatisieren, Forschungsassistenten zu erstellen oder aktuelles wissenschaftliches Wissen in Ihre agentischen Workflows einzubinden. Nutzen Sie ArXiv als dynamische Datenquelle für Forschung, Entdeckung und Wissensextraktion innerhalb Ihrer Sim-Projekte. +{/* MANUAL-CONTENT-END */} + +## Nutzungsanleitung + +Integriert ArXiv in den Workflow. Kann nach Arbeiten suchen, Arbeitsdetails abrufen und Autorenarbeiten finden. Benötigt kein OAuth oder einen API-Schlüssel. + +## Tools + +### `arxiv_search` + +Suche nach wissenschaftlichen Artikeln auf ArXiv nach Schlüsselwörtern, Autoren, Titeln oder anderen Feldern. + +#### Eingabe + +| Parameter | Typ | Erforderlich | Beschreibung | +| --------- | ---- | -------- | ----------- | +| `searchQuery` | string | Ja | Die auszuführende Suchanfrage | +| `searchField` | string | Nein | Feld, in dem gesucht werden soll: all, ti \(Titel\), au \(Autor\), abs \(Abstract\), co \(Kommentar\), jr \(Journal\), cat \(Kategorie\), rn \(Berichtsnummer\) | +| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Ergebnisse \(Standard: 10, max: 2000\) | +| `sortBy` | string | Nein | Sortieren nach: relevance, lastUpdatedDate, submittedDate \(Standard: relevance\) | +| `sortOrder` | string | Nein | Sortierreihenfolge: ascending, descending \(Standard: descending\) | + +#### Ausgabe + +| Parameter | Typ | Beschreibung | +| --------- | ---- | ----------- | +| `papers` | json | Array von Artikeln, die der Suchanfrage entsprechen | + +### `arxiv_get_paper` + +Erhalte detaillierte Informationen über einen bestimmten ArXiv-Artikel anhand seiner ID. + +#### Eingabe + +| Parameter | Typ | Erforderlich | Beschreibung | +| --------- | ---- | -------- | ----------- | +| `paperId` | string | Ja | ArXiv-Artikel-ID \(z.B. "1706.03762"\) | + +#### Ausgabe + +| Parameter | Typ | Beschreibung | +| --------- | ---- | ----------- | +| `paper` | json | Detaillierte Informationen über den angeforderten ArXiv-Artikel | + +### `arxiv_get_author_papers` + +Suche nach Artikeln eines bestimmten Autors auf ArXiv. + +#### Eingabe + +| Parameter | Typ | Erforderlich | Beschreibung | +| --------- | ---- | -------- | ----------- | +| `authorName` | string | Ja | Zu suchender Autorenname | +| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Ergebnisse \(Standard: 10, max: 2000\) | + +#### Ausgabe + +| Parameter | Typ | Beschreibung | +| --------- | ---- | ----------- | +| `authorPapers` | json | Array von Publikationen, die vom angegebenen Autor verfasst wurden | + +## Hinweise + +- Kategorie: `tools` +- Typ: `arxiv` diff --git a/apps/docs/content/docs/de/tools/browser_use.mdx b/apps/docs/content/docs/de/tools/browser_use.mdx new file mode 100644 index 0000000000..8bd6d253dc --- /dev/null +++ b/apps/docs/content/docs/de/tools/browser_use.mdx @@ -0,0 +1,90 @@ +--- +title: Browser-Nutzung +description: Browser-Automatisierungsaufgaben ausführen +--- + +import { BlockInfoCard } from "@/components/ui/block-info-card" + + + + + + `} +/> + +{/* MANUAL-CONTENT-START:intro */} +[BrowserUse](https://browser-use.com/) ist eine leistungsstarke Browser-Automatisierungsplattform, die es ermöglicht, Browser-Aufgaben programmatisch zu erstellen und auszuführen. Sie bietet eine Möglichkeit, Webinteraktionen durch natürlichsprachliche Anweisungen zu automatisieren, sodass Sie Websites navigieren, Formulare ausfüllen, Daten extrahieren und komplexe Aktionssequenzen durchführen können, ohne Code zu schreiben. + +Mit BrowserUse können Sie: + +- **Webinteraktionen automatisieren**: Zu Websites navigieren, Buttons klicken, Formulare ausfüllen und andere Browser-Aktionen durchführen +- **Daten extrahieren**: Inhalte von Websites extrahieren, einschließlich Text, Bilder und strukturierte Daten +- **Komplexe Workflows ausführen**: Mehrere Aktionen verketten, um anspruchsvolle Web-Aufgaben zu erledigen +- **Aufgabenausführung überwachen**: Browser-Aufgaben in Echtzeit mit visuellem Feedback beobachten +- **Ergebnisse programmatisch verarbeiten**: Strukturierte Ausgaben von Web-Automatisierungsaufgaben erhalten + +In Sim ermöglicht die BrowserUse-Integration Ihren Agenten, mit dem Web zu interagieren, als wären sie menschliche Benutzer. Dies ermöglicht Szenarien wie Recherche, Datenerfassung, Formularübermittlung und Web-Tests - alles durch einfache natürlichsprachliche Anweisungen. Ihre Agenten können Informationen von Websites sammeln, mit Webanwendungen interagieren und Aktionen durchführen, die normalerweise manuelles Browsen erfordern würden, wodurch ihre Fähigkeiten erweitert werden, um das gesamte Web als Ressource einzubeziehen. +{/* MANUAL-CONTENT-END */} + +## Nutzungsanleitung + +Integrieren Sie Browser Use in den Workflow. Kann im Web navigieren und Aktionen ausführen, als ob ein echter Benutzer mit dem Browser interagieren würde. Erfordert API-Schlüssel. + +## Tools + +### `browser_use_run_task` + +Führt eine Browser-Automatisierungsaufgabe mit BrowserUse aus + +#### Eingabe + +| Parameter | Typ | Erforderlich | Beschreibung | +| --------- | ---- | -------- | ----------- | +| `task` | string | Ja | Was der Browser-Agent tun soll | +| `variables` | json | Nein | Optionale Variablen zur Verwendung als Secrets \(Format: \{key: value\}\) | +| `format` | string | Nein | Keine Beschreibung | +| `save_browser_data` | boolean | Nein | Ob Browser-Daten gespeichert werden sollen | +| `model` | string | Nein | Zu verwendende LLM-Modell \(Standard: gpt-4o\) | +| `apiKey` | string | Ja | API-Schlüssel für die BrowserUse API | + +#### Ausgabe + +| Parameter | Typ | Beschreibung | +| --------- | ---- | ----------- | +| `id` | string | Aufgabenausführungskennung | +| `success` | boolean | Status der Aufgabenfertigstellung | +| `output` | json | Ausgabedaten der Aufgabe | +| `steps` | json | Ausgeführte Schritte | + +## Hinweise + +- Kategorie: `tools` +- Typ: `browser_use` diff --git a/apps/docs/content/docs/de/tools/confluence.mdx b/apps/docs/content/docs/de/tools/confluence.mdx new file mode 100644 index 0000000000..09a054f036 --- /dev/null +++ b/apps/docs/content/docs/de/tools/confluence.mdx @@ -0,0 +1,97 @@ +--- +title: Confluence +description: Mit Confluence interagieren +--- + +import { BlockInfoCard } from "@/components/ui/block-info-card" + +