In this article
Context
We need an orchestration framework for building RAG pipelines, agent workflows, and tool-calling chains. The two leading options are LangChain (Python/JS) and Semantic Kernel (C#/.NET/Python).
Options Evaluated
LangChain / LangGraph
Pros
- +Largest community and ecosystem
- +LangGraph provides stateful agent graphs
- +Extensive integrations (100+ tools, vector stores)
- +LangSmith for observability
Cons
- −Heavy abstraction layers — "framework lock-in"
- −Breaking API changes between versions
- −Over-abstracted for simple use cases
Semantic Kernel
Pros
- +First-class .NET support (our backend stack)
- +Clean plugin architecture
- +Native Azure AI integration
- +Enterprise-focused with Microsoft backing
Cons
- −Smaller community than LangChain
- −Fewer third-party integrations
- −Python SDK less mature than .NET
Direct SDK calls (no framework)
Pros
- +Zero abstraction overhead
- +Full control over every API call
- +No dependency on framework versioning
Cons
- −Must build retry, streaming, tool calling from scratch
- −No built-in agent patterns
- −More code to maintain
Decision
We chose direct SDK calls with lightweight wrappers for our TypeScript/Next.js frontend, and Semantic Kernel for any .NET backend services. This avoids LangChain's heavy abstractions while leveraging Semantic Kernel where .NET integration is natural. For agent workflows, we'll evaluate LangGraph only if direct implementation becomes unwieldy.
Consequences
- •Must build our own retry/streaming utilities (minimal — Vercel AI SDK handles most)
- •Semantic Kernel plugins for any .NET microservices
- •Team needs to stay current on both OpenAI and Anthropic SDK changes
- •Lower barrier to switching models since no framework lock-in

