diff --git a/.cursorrules b/.cursorrules new file mode 100644 index 0000000000..583c84e653 --- /dev/null +++ b/.cursorrules @@ -0,0 +1,19 @@ +# Role + +You are a professional software engineer. All code you write MUST follow best practices, ensuring accuracy, quality, readability, and cleanliness. You MUST make FOCUSED EDITS that are EFFICIENT and ELEGANT. + +## Logs + +ENSURE that you use the logger.info and logger.warn and logger.error instead of the console.log whenever you want to display logs. + +## Comments + +You must use TSDOC for comments. Do not use ==== for comments to separate sections. + +## Globals styles + +You should not update the global styles unless it is absolutely necessary. Keep all styling local to components and files. + +## Bun + +Use bun and bunx not npm and npx \ No newline at end of file diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index fb6452e46e..5f51aca438 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -321,8 +321,7 @@ In addition, you will need to update the registries: { id: 'operation', title: 'Operation', - type: 'dropdown', - layout: 'full', + type: 'dropdown' required: true, options: [ { label: 'Generate Embeddings', id: 'generate' }, @@ -333,8 +332,7 @@ In addition, you will need to update the registries: { id: 'apiKey', title: 'API Key', - type: 'short-input', - layout: 'full', + type: 'short-input' placeholder: 'Your Pinecone API key', password: true, required: true, diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5262ef8212..007563d026 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -112,7 +112,7 @@ jobs: build-ghcr-arm64: name: Build ARM64 (GHCR Only) needs: test-build - runs-on: linux-arm64-8-core + runs-on: blacksmith-8vcpu-ubuntu-2404-arm if: github.event_name == 'push' && github.ref == 'refs/heads/main' permissions: contents: read diff --git a/.github/workflows/images.yml b/.github/workflows/images.yml index ff6344c78a..365539ca9f 100644 --- a/.github/workflows/images.yml +++ b/.github/workflows/images.yml @@ -100,7 +100,7 @@ jobs: build-ghcr-arm64: name: Build ARM64 (GHCR Only) - runs-on: linux-arm64-8-core + runs-on: blacksmith-8vcpu-ubuntu-2404-arm if: github.ref == 'refs/heads/main' strategy: fail-fast: false diff --git a/.gitignore b/.gitignore index a6ec4da9ac..d5fa99e481 100644 --- a/.gitignore +++ b/.gitignore @@ -46,7 +46,7 @@ sim-standalone.tar.gz next-env.d.ts # cursorrules -.cursorrules +# .cursorrules # docs /apps/docs/.source diff --git a/apps/docs/app/[lang]/[[...slug]]/page.tsx b/apps/docs/app/[lang]/[[...slug]]/page.tsx index 0575f25190..fa91d1d3ec 100644 --- a/apps/docs/app/[lang]/[[...slug]]/page.tsx +++ b/apps/docs/app/[lang]/[[...slug]]/page.tsx @@ -4,6 +4,8 @@ import { DocsBody, DocsDescription, DocsPage, DocsTitle } from 'fumadocs-ui/page import { ChevronLeft, ChevronRight } from 'lucide-react' import Link from 'next/link' import { notFound } from 'next/navigation' +import { PageNavigationArrows } from '@/components/docs-layout/page-navigation-arrows' +import { TOCFooter } from '@/components/docs-layout/toc-footer' import { StructuredData } from '@/components/structured-data' import { CodeBlock } from '@/components/ui/code-block' import { CopyPageButton } from '@/components/ui/copy-page-button' @@ -174,10 +176,14 @@ export default async function Page(props: { params: Promise<{ slug?: string[]; l On this page, + footer: , single: false, }} article={{ @@ -193,7 +199,7 @@ export default async function Page(props: { params: Promise<{ slug?: string[]; l }} >
-
+
+
{page.data.title} {page.data.description} diff --git a/apps/docs/app/api/search/route.ts b/apps/docs/app/api/search/route.ts index c622959c11..be205cd553 100644 --- a/apps/docs/app/api/search/route.ts +++ b/apps/docs/app/api/search/route.ts @@ -1,4 +1,16 @@ import { createFromSource } from 'fumadocs-core/search/server' import { source } from '@/lib/source' -export const { GET } = createFromSource(source) +export const revalidate = 3600 // Revalidate every hour + +export const { GET } = createFromSource(source, { + localeMap: { + en: { language: 'english' }, + es: { language: 'spanish' }, + fr: { language: 'french' }, + de: { language: 'german' }, + // ja and zh are not supported by the stemmer library, so we'll skip language config for them + ja: {}, + zh: {}, + }, +}) diff --git a/apps/docs/app/global.css b/apps/docs/app/global.css index 2628f38136..b309ef9a90 100644 --- a/apps/docs/app/global.css +++ b/apps/docs/app/global.css @@ -243,8 +243,8 @@ aside#nd-sidebar { :root:not(.dark) #nd-sidebar a.text-purple-600, :root:not(.dark) #nd-sidebar a[class*="bg-purple"], :root:not(.dark) #nd-sidebar a[class*="text-purple"] { - background-color: rgba(0, 0, 0, 0.1) !important; - color: rgba(0, 0, 0, 1) !important; + background-color: rgba(0, 0, 0, 0.07) !important; + color: rgba(0, 0, 0, 0.9) !important; } /* Dark mode hover state */ @@ -256,7 +256,7 @@ aside#nd-sidebar { /* Light mode hover state */ :root:not(.dark) #nd-sidebar a:hover:not([data-active="true"]), :root:not(.dark) #nd-sidebar button:hover:not([data-active="true"]) { - background-color: rgba(0, 0, 0, 0.06) !important; + background-color: rgba(0, 0, 0, 0.03) !important; } /* Dark mode - ensure active/selected items don't change on hover */ @@ -273,8 +273,8 @@ aside#nd-sidebar { :root:not(.dark) #nd-sidebar a[class*="bg-purple"]:hover, :root:not(.dark) #nd-sidebar a[data-active="true"]:hover, :root:not(.dark) #nd-sidebar button[data-active="true"]:hover { - background-color: rgba(0, 0, 0, 0.1) !important; - color: rgba(0, 0, 0, 1) !important; + background-color: rgba(0, 0, 0, 0.07) !important; + color: rgba(0, 0, 0, 0.9) !important; } /* Hide search, platform, and collapse button from sidebar completely */ diff --git a/apps/docs/components/docs-layout/page-navigation-arrows.tsx b/apps/docs/components/docs-layout/page-navigation-arrows.tsx new file mode 100644 index 0000000000..b91e8a169a --- /dev/null +++ b/apps/docs/components/docs-layout/page-navigation-arrows.tsx @@ -0,0 +1,42 @@ +'use client' + +import { ChevronLeft, ChevronRight } from 'lucide-react' +import Link from 'next/link' + +interface PageNavigationArrowsProps { + previous?: { + url: string + } + next?: { + url: string + } +} + +export function PageNavigationArrows({ previous, next }: PageNavigationArrowsProps) { + if (!previous && !next) return null + + return ( +
+ {previous && ( + + + + )} + {next && ( + + + + )} +
+ ) +} diff --git a/apps/docs/components/docs-layout/sidebar-components.tsx b/apps/docs/components/docs-layout/sidebar-components.tsx index 2b9ae296d3..3432c30ca9 100644 --- a/apps/docs/components/docs-layout/sidebar-components.tsx +++ b/apps/docs/components/docs-layout/sidebar-components.tsx @@ -1,6 +1,6 @@ 'use client' -import { type ReactNode, useState } from 'react' +import { type ReactNode, useEffect, useState } from 'react' import type { PageTree } from 'fumadocs-core/server' import { ChevronRight } from 'lucide-react' import Link from 'next/link' @@ -46,6 +46,10 @@ export function SidebarFolder({ const hasActiveChild = checkHasActiveChild(item, pathname) const [open, setOpen] = useState(hasActiveChild) + useEffect(() => { + setOpen(hasActiveChild) + }, [hasActiveChild]) + return (
  • {item.index ? ( diff --git a/apps/docs/components/docs-layout/toc-footer.tsx b/apps/docs/components/docs-layout/toc-footer.tsx new file mode 100644 index 0000000000..cd62bd6c70 --- /dev/null +++ b/apps/docs/components/docs-layout/toc-footer.tsx @@ -0,0 +1,41 @@ +'use client' + +import { useState } from 'react' +import { ArrowRight, ChevronRight } from 'lucide-react' +import Link from 'next/link' + +export function TOCFooter() { + const [isHovered, setIsHovered] = useState(false) + + return ( +
    +
    +
    + Start building today +
    +
    Trusted by over 60,000 builders.
    +
    + Build Agentic workflows visually on a drag-and-drop canvas or with natural language. +
    + setIsHovered(true)} + onMouseLeave={() => setIsHovered(false)} + className='group mt-2 inline-flex h-8 w-fit items-center justify-center gap-1 whitespace-nowrap rounded-[10px] border border-[#6F3DFA] bg-gradient-to-b from-[#8357FF] to-[#6F3DFA] px-3 pr-[10px] pl-[12px] font-medium text-sm text-white shadow-[inset_0_2px_4px_0_#9B77FF] outline-none transition-all hover:shadow-lg focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50' + aria-label='Get started with Sim - Sign up for free' + > + Get started + + {isHovered ? ( + + +
    +
    + ) +} diff --git a/apps/docs/components/icons.tsx b/apps/docs/components/icons.tsx index 9b3f756c3a..fc102db243 100644 --- a/apps/docs/components/icons.tsx +++ b/apps/docs/components/icons.tsx @@ -1,46 +1,94 @@ import type { SVGProps } from 'react' -export function ApiIcon(props: SVGProps) { +export function UsersIcon(props: SVGProps) { return ( - + + + + ) } -export function ConditionalIcon(props: SVGProps) { +export function SettingsIcon(props: SVGProps) { return ( + + + + ) +} + +export function SearchIcon(props: SVGProps) { + return ( + - + + ) } +export function Spinner() { + return ( +
    + + + + +
    + ) +} + export function AgentIcon(props: SVGProps) { return ( ) { ) } -export function CodeIcon(props: SVGProps) { +export function ApiIcon(props: SVGProps) { return ( @@ -97,7 +145,54 @@ export function CodeIcon(props: SVGProps) { ) } -export function ChartBarIcon(props: SVGProps) { +export function ConditionalIcon(props: SVGProps) { + return ( + + + + ) +} + +export function NoteIcon(props: SVGProps) { + return ( + + + + + + + ) +} + +export function AirplaneIcon(props: SVGProps) { return ( ) { xmlns='http://www.w3.org/2000/svg' > ) { ) } -export const ConnectIcon = (props: SVGProps) => ( - - - -) - -export const GmailIcon = (props: SVGProps) => { +export function WorkIcon(props: SVGProps) { return ( - - - ) } -export function FirecrawlIcon(props: SVGProps) { +export function WorkflowIcon(props: SVGProps) { return ( - - + - - - ) } -export function ExaAIIcon(props: SVGProps) { +export function WarnIcon(props: SVGProps) { return ( ) } -export const NotionIcon = (props: SVGProps) => { +export function UploadIcon(props: SVGProps) { return ( - + + ) } -export const PerplexityIcon = (props: SVGProps) => { +export function TrashIcon(props: SVGProps) { return ( - + ) } -export const xIcon = (props: SVGProps) => { +export function StudentIcon(props: SVGProps) { return ( - + + ) } -export const SlackIcon = (props: SVGProps) => ( - - - - +export function SignalIcon(props: SVGProps) { + return ( + + + ) +} + +export function SectionIcon(props: SVGProps) { + return ( + - + + ) +} + +export function ReminderIcon(props: SVGProps) { + return ( + + + + + ) +} + +export function DatabaseIcon(props: SVGProps) { + return ( + + + + + ) +} + +export function CrateIcon(props: SVGProps) { + return ( + + + + ) +} + +export function CookieIcon(props: SVGProps) { + return ( + + + + ) +} + +export function ErrorIcon(props: SVGProps) { + return ( + + + + ) +} + +export function ChromeIcon(props: SVGProps) { + return ( + + + + + ) +} + +export function CalendarIcon(props: SVGProps) { + return ( + + + + ) +} + +export function MessagesIcon(props: SVGProps) { + return ( + + + + ) +} + +export function NotificationsIcon(props: SVGProps) { + return ( + + + + ) +} + +export function MailIcon(props: SVGProps) { + return ( + + + + ) +} + +export function CodeIcon(props: SVGProps) { + return ( + + + + ) +} + +export function ChartBarIcon(props: SVGProps) { + return ( + + + + ) +} + +export function AtomIcon(props: SVGProps) { + return ( + + + + + ) +} + +export function ElevatorIcon(props: SVGProps) { + return ( + + + + ) +} + +export function DollarIcon(props: SVGProps) { + return ( + + + + ) +} + +export function CreditCardIcon(props: SVGProps) { + return ( + + + + ) +} + +export function BoatIcon(props: SVGProps) { + return ( + + + + ) +} + +export function CancelIcon(props: SVGProps) { + return ( + + + + + ) +} + +export function BankIcon(props: SVGProps) { + return ( + + + + ) +} + +export function AmbulanceIcon(props: SVGProps) { + return ( + + + + ) +} + +export function ComponentIcon(props: SVGProps) { + return ( + + + + ) +} + +export function BrightIcon(props: SVGProps) { + return ( + + + + ) +} + +export function CrewAIIcon(props: SVGProps) { + return ( + + + + ) +} + +export function HubspotIcon(props: SVGProps) { + return ( + + + + ) +} + +export function FirecrawlIcon(props: SVGProps) { + return ( + + + + + + + + ) +} + +export function JinaAIIcon(props: SVGProps) { + return ( + + + + + + + + + ) +} + +export function TranslateIcon(props: SVGProps) { + return ( + + + + + + + + + ) +} + +export function SlackIcon(props: SVGProps) { + return ( + + + + + + + + + ) +} + +export function GithubIcon(props: SVGProps) { + return ( + + + + ) +} + +export function SerperIcon(props: SVGProps) { + return ( + + + + + + + + + + + + + + + ) +} + +export function TavilyIcon(props: SVGProps) { + return ( + + + + + + + + + + ) +} + +export function ConnectIcon(props: SVGProps) { + return ( + + + + ) +} + +export function YouTubeIcon(props: React.SVGProps) { + return ( + + + + ) +} + +export function PerplexityIcon(props: SVGProps) { + return ( + + + + ) +} + +export function NotionIcon(props: SVGProps) { + return ( + + + + ) +} + +export function GmailIcon(props: SVGProps) { + return ( + + + + + + + + ) +} + +export function GoogleDriveIcon(props: SVGProps) { + return ( + + + + + + + + + ) +} + +export function xAIIcon(props: SVGProps) { + return ( + + + + + + + + + ) +} + +export function xIcon(props: SVGProps) { + return ( + + + + ) +} + +export function GoogleSheetsIcon(props: SVGProps) { + return ( + + + + + + + ) +} + +export const S3Icon = (props: SVGProps) => ( + + + + + + + + + + + + + + + + +) + +export function GoogleIcon(props: SVGProps) { + return ( + + + + + + + ) +} + +export function DiscordIcon(props: SVGProps) { + return ( + + + + + + ) +} + +export function LinkedInIcon(props: SVGProps) { + return ( + + + + ) +} + +export function CrunchbaseIcon(props: SVGProps) { + return ( + + + + ) +} + +export function InputIcon(props: SVGProps) { + return ( + + + + ) +} + +export function StartIcon(props: SVGProps) { + return ( + + + + ) +} + +export function PineconeIcon(props: SVGProps) { + return ( + + + + ) +} + +export function OpenAIIcon(props: SVGProps) { + return ( + + + + ) +} + +export function ExaAIIcon(props: SVGProps) { + return ( + + + + ) +} + +export function RedditIcon(props: SVGProps) { + return ( + + + + ) +} + +export function AirtableIcon(props: SVGProps) { + return ( + + + + + + + + + ) +} + +export function GoogleDocsIcon(props: SVGProps) { + return ( + + + + + + + ) +} + +export function GoogleCalendarIcon(props: SVGProps) { + return ( + + + + + + + + + + + + + + + + ) +} + +export function SupabaseIcon(props: SVGProps) { + return ( + + + + + + + + + + + + + + + + ) +} + +export function WhatsAppIcon(props: SVGProps) { + return ( + + + + ) +} + +export function StripeIcon(props: SVGProps) { + return ( + + + + + + + + + + ) +} + +export function EyeIcon(props: SVGProps) { + return ( + + + + + ) +} + +export function ConfluenceIcon(props: SVGProps) { + return ( + + ) +} + +export function TwilioIcon(props: SVGProps) { + return ( + + + + ) +} + +export function ImageIcon(props: SVGProps) { + return ( + + + + + + ) +} + +export function TypeformIcon(props: SVGProps) { + return ( + + + + + + ) +} + +export function DocumentIcon(props: SVGProps) { + return ( + + + + + ) +} + +export function MistralIcon(props: SVGProps) { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} + +export function BrainIcon(props: SVGProps) { + return ( + + + + + + + + + + + + ) +} + +export function StagehandIcon(props: SVGProps) { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} + +export function BrowserUseIcon(props: SVGProps) { + return ( + + + + + + ) +} + +export function Mem0Icon(props: SVGProps) { + return ( + + + + ) +} + +export function ElevenLabsIcon(props: SVGProps) { + return ( + + + + + ) +} + +export function LinkupIcon(props: SVGProps) { + return ( + + + + ) +} + +export function JiraIcon(props: SVGProps) { + return ( + + ) +} + +export function LinearIcon(props: React.SVGProps) { + return ( + + + + ) +} + +export function TelegramIcon(props: SVGProps) { + return ( + + + + + ) +} + +export function ClayIcon(props: SVGProps) { + return ( + + + + + + ) +} + +export function MicrosoftIcon(props: SVGProps) { + return ( + + + + + + + + ) +} + +export function MicrosoftTeamsIcon(props: SVGProps) { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + ) +} + +export function OutlookIcon(props: SVGProps) { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} + +export function MicrosoftExcelIcon(props: SVGProps) { + return ( + + + + + + + + + + + + + + + + + + + ) +} + +export function PackageSearchIcon(props: SVGProps) { + return ( + + + + + + + + + ) +} +export function HuggingFaceIcon(props: SVGProps) { + return ( + + + + + + + + + ) +} + +export const ResponseIcon = (props: SVGProps) => ( + + + +) + +export const AnthropicIcon = (props: SVGProps) => ( + + Anthropic + + +) + +export const AzureIcon = (props: SVGProps) => ( + + + + + + + + + + + + + + + + + + + + + + + +) + +export const GroqIcon = (props: SVGProps) => ( + + Groq + + +) + +export const DeepseekIcon = (props: SVGProps) => ( + + DeepSeek + + +) + +export const GeminiIcon = (props: SVGProps) => ( + + Gemini + + + + + + + + + +) + +export const CerebrasIcon = (props: SVGProps) => ( + + Cerebras + + + +) + +export const OllamaIcon = (props: SVGProps) => ( + + Ollama + + +) +export function ShieldCheckIcon(props: SVGProps) { + return ( + + + + + ) +} + +export function WealthboxIcon(props: SVGProps) { + return ( + + + + + + + ) +} + +export function WebhookIcon(props: SVGProps) { + return ( + + + + + ) +} + +export function ScheduleIcon(props: SVGProps) { + return ( + + + + + + + ) +} + +export function QdrantIcon(props: SVGProps) { + return ( + + + + + + + + + + + + + + + + + + + + + + + ) +} + +export function ArxivIcon(props: SVGProps) { + return ( + + + + + + + + ) +} + +export function WikipediaIcon(props: SVGProps) { + return ( + + + + + + ) +} + +export function HunterIOIcon(props: SVGProps) { + return ( + + + + ) +} + +export function MicrosoftOneDriveIcon(props: SVGProps) { + return ( + + + + + + + + + ) +} + +export function MicrosoftSharepointIcon(props: SVGProps) { + return ( + + + + + + + + + + + + ) +} + +export function MicrosoftPlannerIcon(props: SVGProps) { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} + +export function ParallelIcon(props: SVGProps) { + return ( + + + + + + + + + + + ) +} + +export function PostgresIcon(props: SVGProps) { + return ( + + + + + + + ) +} + +export function MySQLIcon(props: SVGProps) { + return ( + + + + ) +} + +export function OpenRouterIcon(props: SVGProps) { + return ( + + + + ) +} + +export function MongoDBIcon(props: SVGProps) { + return ( + + + + + + + + + + + + + + + + + + + ) +} + +export function ServerIcon(props: SVGProps) { + return ( + + + + + + + ) +} +export const SOC2BadgeIcon = (props: SVGProps) => ( + + + + + SOC 2 + + + Type II + + + Compliant + ) -export const ResponseIcon = (props: SVGProps) => ( - - - +export const HIPAABadgeIcon = (props: SVGProps) => ( + + + + + + + + + + + ) -export const StarterIcon = (props: SVGProps) => ( - - +export function GoogleFormsIcon(props: SVGProps) { + return ( + + + + + + + + + + + + ) +} + +export const SMSIcon = (props: SVGProps) => ( + + ) -export const LoopIcon = (props: SVGProps) => ( - +export const ResendIcon = (props: SVGProps) => ( + ) -export const ParallelIcon = (props: SVGProps) => ( - - - - +export const GoogleVaultIcon = (props: SVGProps) => ( + + + ) + +export function ZepIcon(props: SVGProps) { + return ( + + + + + + + ) +} + +export function WebflowIcon(props: SVGProps) { + return ( + + + + ) +} + +export function VariableIcon(props: SVGProps) { + return ( + + + + + + ) +} + +export function HumanInTheLoopIcon(props: SVGProps) { + return ( + + + + + ) +} + +export function TrelloIcon(props: SVGProps) { + return ( + + + + + + ) +} + +export function AsanaIcon(props: SVGProps) { + return ( + + + + + + + + + ) +} + +export function PipedriveIcon(props: SVGProps) { + return ( + + + + + + + + + + + + + + ) +} + +export function SalesforceIcon(props: SVGProps) { + return ( + + + + + + ) +} diff --git a/apps/docs/components/ui/block-info-card.tsx b/apps/docs/components/ui/block-info-card.tsx index ee1aeba4e6..b9d034898f 100644 --- a/apps/docs/components/ui/block-info-card.tsx +++ b/apps/docs/components/ui/block-info-card.tsx @@ -1,20 +1,24 @@ 'use client' import type * as React from 'react' +import { blockTypeToIconMap } from './icon-mapping' interface BlockInfoCardProps { type: string color: string - icon?: boolean - iconSvg?: string + icon?: React.ComponentType<{ className?: string }> + iconSvg?: string // Deprecated: Use automatic icon resolution instead } export function BlockInfoCard({ type, color, - icon = false, + icon: IconComponent, iconSvg, }: BlockInfoCardProps): React.ReactNode { + // Auto-resolve icon component from block type if not explicitly provided + const ResolvedIcon = IconComponent || blockTypeToIconMap[type] || null + return (
    @@ -22,23 +26,15 @@ export function BlockInfoCard({ className='flex h-20 w-20 items-center justify-center rounded-lg' style={{ backgroundColor: color }} > - {iconSvg ? ( + {ResolvedIcon ? ( + + ) : iconSvg ? (
    ) : (
    {type.substring(0, 2)}
    )}
    - {icon && ( - - )}
    ) } diff --git a/apps/docs/components/ui/copy-page-button.tsx b/apps/docs/components/ui/copy-page-button.tsx index 9727ea8bb0..b5bd6fc859 100644 --- a/apps/docs/components/ui/copy-page-button.tsx +++ b/apps/docs/components/ui/copy-page-button.tsx @@ -23,17 +23,17 @@ export function CopyPageButton({ content }: CopyPageButtonProps) { return (
  • ## Konfigurationsoptionen @@ -57,44 +36,25 @@ Der Benutzer-Prompt stellt die primären Eingabedaten für die Inferenzverarbeit - **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 +- **Laufzeitgenerierung**: Programmatisch generierte 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) - -
    -
    +- **OpenAI**: GPT-5, 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**: Ollama-kompatible Modelle ### 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. -
    +Steuert die Zufälligkeit und Kreativität der Antworten: + +- **Niedrig (0-0,3)**: Deterministisch und fokussiert. Am besten für faktische Aufgaben und Genauigkeit. +- **Mittel (0,3-0,7)**: Ausgewogene Kreativität und Fokus. Gut für allgemeine Verwendung. +- **Hoch (0,7-2,0)**: Kreativ und abwechslungsreich. Ideal für Brainstorming und Content-Generierung. ### API-Schlüssel @@ -102,179 +62,93 @@ Ihr API-Schlüssel für den ausgewählten LLM-Anbieter. Dieser wird sicher gespe ### 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 +Erweitern Sie die Fähigkeiten des Agenten mit externen Integrationen. Wählen Sie aus über 60 vorgefertigten Tools oder definieren Sie benutzerdefinierte Funktionen. -
    -
    - -**Verfügbare Tool-Kategorien**: +**Verfügbare 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 +- **Entwicklung**: GitHub, Jira, Linear - **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 - -
    -
    +**Ausführungsmodi:** +- **Auto**: Modell entscheidet kontextbasiert, wann Tools verwendet werden +- **Erforderlich**: Tool muss bei jeder Anfrage aufgerufen werden +- **Keine**: Tool verfügbar, aber dem Modell nicht vorgeschlagen ### 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: +Der Parameter für das Antwortformat erzwingt die Generierung strukturierter Ausgaben 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 - } + "type": "object", + "properties": { + "sentiment": { + "type": "string", + "enum": ["positive", "neutral", "negative"] }, - "required": ["sentiment", "confidence"] - } + "summary": { + "type": "string", + "description": "Brief summary of the content" + } + }, + "required": ["sentiment", "summary"] } ``` -Diese Konfiguration beschränkt die Ausgabe des Modells auf die Einhaltung des angegebenen Schemas, verhindert Freitext-Antworten und stellt eine strukturierte Datengenerierung sicher. +Diese Konfiguration beschränkt die Ausgabe des Modells auf die Einhaltung des angegebenen Schemas, verhindert Freitextantworten und stellt die Generierung strukturierter Daten 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) +- **response**: Der Antworttext oder die strukturierten Daten des Agenten +- **usage**: Token-Nutzungsstatistiken (Prompt, Completion, Gesamt) +- **toolExecutions**: Details zu allen Tools, die der Agent während der Ausführung verwendet hat +- **estimatedCost**: 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. +Verwenden Sie einen memory Block mit einer konsistenten memoryId (zum Beispiel, conversationHistory), 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 -Siehe die [`Memory`](/tools/memory) Blockreferenz für Details. - -## Eingaben und Ausgaben - - - -
      -
    • - System-Prompt: Anweisungen, die das Verhalten und die Rolle des Agenten definieren -
    • -
    • - Benutzer-Prompt: Eingabetext oder zu verarbeitende Daten -
    • -
    • - Modell: KI-Modellauswahl (OpenAI, Anthropic, Google, usw.) -
    • -
    • - Temperatur: Steuerung der Zufälligkeit der Antwort (0-2) -
    • -
    • - Tools: Array verfügbarer Tools für Funktionsaufrufe -
    • -
    • - Antwortformat: 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 -
    • -
    -
    -
    +Siehe den [`Memory`](/tools/memory) Blockverweis für Details. + +## Ausgaben + +- **``**: Antworttext des Agenten +- **``**: Token-Nutzungsstatistiken +- **``**: Details zur Tool-Ausführung +- **``**: Geschätzte Kosten des API-Aufrufs ## Beispielanwendungsfälle -### Automatisierung des Kundenservice - -
    -

    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 erstellt eine klare E-Mail-Antwort
    8. -
    9. Gmail sendet die Antwort an den Kunden
    10. -
    11. Konversation wird im Memory gespeichert, um den Verlauf für zukünftige Nachrichten beizubehalten
    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 Forschungsassistent - -
    -

    Szenario: Forschungsassistent mit Websuche und Dokumentenzugriff

    -
      -
    1. Benutzeranfrage über Eingabe erhalten
    2. -
    3. Agent durchsucht das Web mit dem Google-Suchwerkzeug
    4. -
    5. Agent greift auf Notion-Datenbank für interne Dokumente zu
    6. -
    7. Agent erstellt umfassenden Forschungsbericht
    8. -
    -
    +**Automatisierung des Kundenservice** - Bearbeitung von Anfragen mit Datenbank- und Tool-Zugriff + +``` +API (Ticket) → Agent (Postgres, KB, Linear) → Gmail (Reply) → Memory (Save) +``` + +**Multi-Modell-Inhaltsanalyse** - Analyse von Inhalten mit verschiedenen KI-Modellen + +``` +Function (Process) → Agent (GPT-4o Technical) → Agent (Claude Sentiment) → Function (Report) +``` + +**Tool-gestützter Rechercheassistent** - Recherche mit Websuche und Dokumentenzugriff + +``` +Input → Agent (Google Search, Notion) → Function (Compile Report) +``` ## Bewährte Praktiken - **Sei spezifisch in System-Prompts**: Definiere die Rolle, den Ton 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 Werkzeuge effektiv**: Integriere Werkzeuge, die den Zweck des Agenten ergänzen und seine Fähigkeiten verbessern. Sei selektiv bei der Auswahl der Werkzeuge, um den Agenten nicht zu überfordern. Für Aufgaben mit wenig Überschneidung verwende einen anderen Agent-Block für die besten Ergebnisse. +- **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 vielfältigere 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 index 5238204549..43cacb97ce 100644 --- a/apps/docs/content/docs/de/blocks/api.mdx +++ b/apps/docs/content/docs/de/blocks/api.mdx @@ -3,11 +3,10 @@ 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. +Der API-Block verbindet Ihren Workflow mit externen Diensten durch HTTP-Anfragen. Unterstützt GET, POST, PUT, DELETE und PATCH Methoden für die Interaktion mit REST-APIs.
    -## Ü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: +Die Endpunkt-URL für die API-Anfrage. Diese kann sein: - Eine statische URL, die direkt im Block eingegeben wird - Eine dynamische URL, die mit der Ausgabe eines anderen Blocks verbunden ist @@ -79,7 +50,7 @@ Key: limit Value: 10 ``` -Diese würden der URL als `?apiKey=your_api_key_here&limit=10` hinzugefügt werden. +Diese würden der URL als `?apiKey=your_api_key_here&limit=10` hinzugefügt. ### Header @@ -93,13 +64,13 @@ Key: Authorization Value: Bearer your_token_here ``` -### Anfrage-Body +### Anfragekörper -Für Methoden, die einen Anfrage-Body unterstützen (POST, PUT, PATCH), können Sie die zu sendenden Daten definieren. Der Body kann sein: +Für Methoden, die einen Anfragekörper unterstützen (POST, PUT, PATCH), können Sie die zu sendenden Daten definieren. Der Körper 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 +- Dynamisch während der Workflow-Ausführung generiert ### Zugriff auf Ergebnisse @@ -114,7 +85,7 @@ Nach Abschluss einer API-Anfrage können Sie auf folgende Ausgaben zugreifen: ### Dynamische URL-Konstruktion -Bauen Sie URLs dynamisch mit Variablen aus vorherigen Blöcken: +Erstellen Sie URLs dynamisch mit Variablen aus vorherigen Blöcken: ```javascript // In a Function block before the API @@ -124,9 +95,9 @@ const apiUrl = `https://api.example.com/users/${userId}/profile`; ### Anfrage-Wiederholungen -Der API-Block behandelt automatisch: +Der API-Block verarbeitet automatisch: - Netzwerk-Timeouts mit exponentiellem Backoff -- Rate-Limit-Antworten (429-Statuscodes) +- Antworten bei Ratenbegrenzung (429-Statuscodes) - Serverfehler (5xx-Statuscodes) mit Wiederholungslogik - Verbindungsfehler mit Wiederverbindungsversuchen @@ -145,88 +116,30 @@ if ( === 200) { } ``` -## 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. -
    -
    +## Ausgaben -### Zahlungsabwicklung +- **``**: Antwortdaten vom API +- **``**: HTTP-Statuscode +- **``**: Antwort-Header +- **``**: Fehlerdetails bei fehlgeschlagener Anfrage -
    -

    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. -
    -
    +## Anwendungsbeispiele + +**Benutzerprofildaten abrufen** - Benutzerinformationen von externem Dienst abrufen + +``` +Function (Build ID) → API (GET /users/{id}) → Function (Format) → Response +``` + +**Zahlungsabwicklung** - Zahlung über die Stripe-API verarbeiten + +``` +Function (Validate) → API (Stripe) → Condition (Success) → Supabase (Update) +``` -## Best Practices +## Bewährte Praktiken -- **Umgebungsvariablen für sensible Daten verwenden**: Keine API-Schlüssel oder Anmeldedaten im Code hinterlegen +- **Umgebungsvariablen für sensible Daten verwenden**: Keine API-Schlüssel oder Anmeldedaten im Code festlegen - **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 +- **Antworten validieren**: Statuscode und Antwortformate vor der Datenverarbeitung prüfen +- **Ratenbegrenzungen respektieren**: Achten Sie auf API-Ratenbegrenzungen und implementieren Sie angemessene Drosselung diff --git a/apps/docs/content/docs/de/blocks/condition.mdx b/apps/docs/content/docs/de/blocks/condition.mdx index 921d34a66b..176c026ffe 100644 --- a/apps/docs/content/docs/de/blocks/condition.mdx +++ b/apps/docs/content/docs/de/blocks/condition.mdx @@ -3,64 +3,29 @@ 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. +Der Bedingungsblock verzweigt die Workflow-Ausführung basierend auf booleschen Ausdrücken. Bewerten Sie Bedingungen anhand vorheriger Block-Ausgaben und leiten Sie zu verschiedenen Pfaden weiter, ohne dass ein LLM erforderlich ist.
    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 +- **Ausdruck**: Ein JavaScript/TypeScript-Ausdruck, der zu wahr oder falsch ausgewertet wird +- **Pfad**: Der Zielblock, zu dem weitergeleitet werden soll, wenn die Bedingung wahr 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. @@ -100,10 +65,10 @@ Bedingungen verwenden JavaScript-Syntax und können auf Eingabewerte aus vorheri 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 +- **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 ## Erweiterte Funktionen @@ -148,95 +113,37 @@ Bedingungen behandeln automatisch: - Ungültige Ausdrücke mit Fehlerprotokollierung - Fehlende Variablen mit Standardwerten -## Eingaben und Ausgaben +## 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 -
    • -
    -
    -
    +- **``**: Boolesches Ergebnis der Auswertung +- **``**: ID der übereinstimmenden Bedingung +- **``**: Beschreibung des Auswertungsergebnisses +- **``**: Details zum gewählten Routing-Ziel ## Beispielanwendungsfälle -### Routing im Kundenservice +**Kundenservice-Routing** - Tickets basierend auf Priorität weiterleiten -
    -

    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. -
    -
    +``` +API (Ticket) → Condition (priority === 'high') → Agent (Escalation) or Agent (Standard) +``` -### Inhaltsmoderation +**Inhaltsmoderation** - Inhalte basierend auf Analysen filtern -
    -

    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. -
    -
    +``` +Agent (Analyze) → Condition (toxicity > 0.7) → Moderation or Publish +``` -### Benutzer-Onboarding-Prozess +**Benutzer-Onboarding-Ablauf** - Onboarding basierend auf Benutzertyp personalisieren -
    -

    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. -
    -
    +``` +Function (Process) → Condition (account_type === 'enterprise') → Advanced or Simple +``` -## Best Practices +## Bewährte Praktiken -- **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 +- **Bedingungen korrekt anordnen**: Platzieren Sie spezifischere Bedingungen vor allgemeinen, um sicherzustellen, dass spezifische Logik Vorrang vor Fallbacks hat +- **Eine 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 +- **Grenzfälle testen**: Ü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 index ff072030f7..195040ab77 100644 --- a/apps/docs/content/docs/de/blocks/evaluator.mdx +++ b/apps/docs/content/docs/de/blocks/evaluator.mdx @@ -3,12 +3,10 @@ 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. +Der Evaluator-Block nutzt KI, um die Inhaltsqualität anhand benutzerdefinierter Metriken zu bewerten. Perfekt für Qualitätskontrolle, A/B-Tests und um sicherzustellen, dass KI-Ausgaben bestimmte Standards erfüllen.
    -## Ü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: +Definieren Sie 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 +- **Beschreibung**: Eine detaillierte Erklärung, was die Metrik misst - **Bereich**: Der numerische Bereich für die Bewertung (z.B. 1-5, 0-10) Beispielmetriken: @@ -78,122 +48,49 @@ Der zu bewertende Inhalt. Dies kann sein: 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 - -
    -
    +- **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**: Ollama-kompatible Modelle -**Empfehlung**: Verwenden Sie Modelle mit starken Argumentationsfähigkeiten wie GPT-4o oder Claude 3.7 Sonnet für genauere Bewertungen. +Verwenden Sie Modelle mit starken Argumentationsfähigkeiten wie GPT-4o oder Claude 3.7 Sonnet für beste Ergebnisse. ### 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 +**Bewertung der Inhaltsqualität** - Inhalte vor der Veröffentlichung bewerten -
    -

    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. -
    -
    +``` +Agent (Generate) → Evaluator (Score) → Condition (Check threshold) → Publish or Revise +``` -### A/B-Testing von Inhalten +**A/B-Tests von Inhalten** - Vergleich mehrerer KI-generierter Antworten -
    -

    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. -
    -
    +``` +Parallel (Variations) → Evaluator (Score Each) → Function (Select Best) → Response +``` -### Qualitätskontrolle im Kundensupport +**Qualitätskontrolle im Kundenservice** - Sicherstellen, dass Antworten Qualitätsstandards erfüllen -
    -

    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. -
    -
    +``` +Agent (Support Response) → Evaluator (Score) → Function (Log) → Condition (Review if Low) +``` + +## Ausgaben -## 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 -
    • -
    -
    -
    +- **``**: Zusammenfassung der Bewertung mit Punktzahlen +- **``**: Für die Bewertung verwendetes Modell +- **``**: Statistik zur Token-Nutzung +- **``**: Geschätzte Bewertungskosten ## 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 +- **Wählen Sie geeignete Bereiche**: Wählen Sie Bewertungsbereiche, die ausreichend Granularität bieten, ohne zu 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 +- **Kombinieren Sie mehrere Metriken**: Verwenden Sie verschiedene 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 index 515c9ac9b5..3e974ef328 100644 --- a/apps/docs/content/docs/de/blocks/function.mdx +++ b/apps/docs/content/docs/de/blocks/function.mdx @@ -2,124 +2,44 @@ 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. +Der Funktionsblock führt benutzerdefinierten JavaScript- oder TypeScript-Code in Ihren Workflows aus. Transformieren Sie Daten, führen Sie Berechnungen durch oder implementieren Sie benutzerdefinierte Logik.
    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 -
    • -
    -
    -
    +## Ausgaben + +- **``**: Der von Ihrer Funktion zurückgegebene Wert +- **``**: Console.log()-Ausgabe Ihres Codes ## Beispielanwendungsfälle -### Datenverarbeitungspipeline +**Datenverarbeitungspipeline** - Transformation von API-Antworten in strukturierte Daten -
    -

    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. -
    -
    +``` +API (Fetch) → Function (Process & Validate) → Function (Calculate Metrics) → Response +``` -### Implementierung von Geschäftslogik +**Implementierung von Geschäftslogik** - Berechnung von Treuepunkten und Stufen -
    -

    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. -
    -
    +``` +Agent (Get History) → Function (Calculate Score) → Function (Determine Tier) → Condition (Route) +``` -### Datenvalidierung und -bereinigung +**Datenvalidierung und -bereinigung** - Validierung und Bereinigung von Benutzereingaben -
    -

    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. -
    -
    +``` +Input → Function (Validate & Sanitize) → API (Save to Database) +``` ### Beispiel: Treuepunkte-Rechner @@ -152,5 +72,5 @@ return { - **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 +- **Für 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/guardrails.mdx b/apps/docs/content/docs/de/blocks/guardrails.mdx index ce56f1773e..e910afa3a0 100644 --- a/apps/docs/content/docs/de/blocks/guardrails.mdx +++ b/apps/docs/content/docs/de/blocks/guardrails.mdx @@ -3,8 +3,6 @@ title: Guardrails --- 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' @@ -13,62 +11,43 @@ Der Guardrails-Block validiert und schützt Ihre KI-Workflows, indem er Inhalte
    Guardrails Block
    -## Übersicht - -Mit dem Guardrails-Block können Sie: - - - - JSON-Struktur validieren: Stellen Sie sicher, dass LLM-Ausgaben gültiges JSON sind, bevor sie geparst werden - - - Regex-Muster abgleichen: Überprüfen Sie, ob Inhalte bestimmten Formaten entsprechen (E-Mails, Telefonnummern, URLs usw.) - - - Halluzinationen erkennen: Nutzen Sie RAG + LLM-Scoring, um KI-Ausgaben anhand von Wissensdatenbankinhalten zu validieren - - - PII erkennen: Identifizieren und optional maskieren Sie personenbezogene Daten über mehr als 40 Entitätstypen hinweg - - - ## Validierungstypen ### JSON-Validierung -Überprüft, ob Inhalte korrekt formatiertes JSON sind. Perfekt, um sicherzustellen, dass strukturierte LLM-Ausgaben sicher geparst werden können. +Überprüft, ob der Inhalt korrekt formatiertes JSON ist. Perfekt, um sicherzustellen, dass strukturierte LLM-Ausgaben sicher geparst werden können. **Anwendungsfälle:** -- Validieren von JSON-Antworten aus Agent-Blöcken vor dem Parsen +- Validierung von JSON-Antworten aus Agent-Blöcken vor dem Parsen - Sicherstellen, dass API-Payloads korrekt formatiert sind -- Überprüfen der Integrität strukturierter Daten +- Überprüfung der Integrität strukturierter Daten -**Output:** -- `passed`: `true` wenn gültiges JSON, sonst `false` -- `error`: Fehlermeldung bei fehlgeschlagener Validierung (z.B. "Invalid JSON: Unexpected token...") +**Ausgabe:** +- `passed`: `true` bei gültigem JSON, sonst `false` +- `error`: Fehlermeldung bei fehlgeschlagener Validierung (z.B. "Ungültiges JSON: Unerwartetes Token...") ### Regex-Validierung -Überprüft, ob Inhalte einem bestimmten regulären Ausdrucksmuster entsprechen. +Prüft, ob der Inhalt einem bestimmten regulären Ausdrucksmuster entspricht. **Anwendungsfälle:** -- Validieren von E-Mail-Adressen -- Überprüfen von Telefonnummernformaten -- Verifizieren von URLs oder benutzerdefinierten Kennungen -- Durchsetzen spezifischer Textmuster +- Validierung von E-Mail-Adressen +- Überprüfung von Telefonnummernformaten +- Verifizierung von URLs oder benutzerdefinierten Kennungen +- Durchsetzung spezifischer Textmuster **Konfiguration:** -- **Regex-Muster**: Der reguläre Ausdruck, der abgeglichen werden soll (z.B. `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$` für E-Mails) +- **Regex-Muster**: Der reguläre Ausdruck, gegen den geprüft wird (z.B. `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$` für E-Mails) -**Output:** -- `passed`: `true` wenn der Inhalt dem Muster entspricht, `false` andernfalls +**Ausgabe:** +- `passed`: `true` wenn der Inhalt dem Muster entspricht, sonst `false` - `error`: Fehlermeldung bei fehlgeschlagener Validierung ### Halluzinationserkennung @@ -76,21 +55,21 @@ Mit dem Guardrails-Block können Sie: Verwendet Retrieval-Augmented Generation (RAG) mit LLM-Bewertung, um zu erkennen, wann KI-generierte Inhalte im Widerspruch zu Ihrer Wissensdatenbank stehen oder nicht darin begründet sind. **Funktionsweise:** -1. Durchsucht Ihre Wissensdatenbank nach relevantem Kontext -2. Sendet sowohl die KI-Ausgabe als auch den abgerufenen Kontext an ein LLM +1. Abfrage Ihrer Wissensdatenbank nach relevantem Kontext +2. Übermittlung sowohl der KI-Ausgabe als auch des abgerufenen Kontexts an ein LLM 3. LLM weist einen Konfidenzwert zu (Skala 0-10) - **0** = Vollständige Halluzination (völlig unbegründet) - - **10** = Vollständig fundiert (komplett durch Wissensdatenbank gestützt) -4. Validierung besteht, wenn der Wert ≥ Schwellenwert (Standard: 3) + - **10** = Vollständig begründet (komplett durch die Wissensdatenbank gestützt) +4. Validierung besteht, wenn der Wert ≥ Schwellenwert ist (Standard: 3) **Konfiguration:** - **Wissensdatenbank**: Auswahl aus Ihren vorhandenen Wissensdatenbanken -- **Modell**: LLM für die Bewertung wählen (erfordert starkes Reasoning - GPT-4o, Claude 3.7 Sonnet empfohlen) +- **Modell**: Wahl des LLM für die Bewertung (erfordert starkes Reasoning - GPT-4o, Claude 3.7 Sonnet empfohlen) - **API-Schlüssel**: Authentifizierung für den ausgewählten LLM-Anbieter (automatisch ausgeblendet für gehostete/Ollama-Modelle) - **Konfidenz-Schwellenwert**: Mindestwert zum Bestehen (0-10, Standard: 3) - **Top K** (Erweitert): Anzahl der abzurufenden Wissensdatenbank-Chunks (Standard: 10) -**Output:** +**Ausgabe:** - `passed`: `true` wenn Konfidenzwert ≥ Schwellenwert - `score`: Konfidenzwert (0-10) - `reasoning`: Erklärung des LLM für den Wert @@ -98,27 +77,39 @@ Verwendet Retrieval-Augmented Generation (RAG) mit LLM-Bewertung, um zu erkennen **Anwendungsfälle:** - Validierung von Agent-Antworten anhand der Dokumentation -- Sicherstellen, dass Kundenservice-Antworten sachlich korrekt sind -- Überprüfen, ob generierte Inhalte mit dem Quellmaterial übereinstimmen +- Sicherstellung der faktischen Richtigkeit von Kundendienstantworten +- Überprüfung, ob generierte Inhalte mit dem Quellmaterial übereinstimmen - Qualitätskontrolle für RAG-Anwendungen ### PII-Erkennung -Erkennt personenbezogene Daten mit Microsoft Presidio. Unterstützt über 40 Entitätstypen in mehreren Ländern und Sprachen. +Erkennt personenbezogene Daten mithilfe von Microsoft Presidio. Unterstützt über 40 Entitätstypen in mehreren Ländern und Sprachen. -
    -