AI 에이전트 개발 도구 탐험: LangChain, Dify, Vercel AI SDK 비교

LLM 애플리케이션 개발을 위한 다양한 도구들의 장단점을 살펴보고 Vercel AI SDK를 선택한 과정을 공유합니다.

2025-02-09

소개

이제 LLM의 생태계를 들여다 봐야할 시점이 왔습니다.

LLM으로 인한 개발 환경 변화가 다가오고 있습니다. 오픈소스인 DeepSeek은 자유롭게 사용 및 배포 가능하고 Ollama를 사용해 PC에서도 구동해 볼 수 있기 때문입니다.

LangChain, Dify, Vercel AI sdk 순으로 살펴 보면서 어떤 준비를 해야할지 고민해 봅니다.

LLM 애플리케이션 개발 툴

LLM 활용의 대표적인 방식은 agent를 만드는 것 입니다.

결국 agent, workflow 등을 작성하는 tool, platform, library를 파악하고 집중해야 할 기술 방향을 모색해야 합니다.

LangChain over engineered

LLM 애플리케이션 개발 분야를 가장 발빠르게 선점한 솔루션은 LangChain 입니다. Python과 JS/TS SDK를 오픈소스로 제공하면서 model 추상화, prompt templating, RAG 구축의 헤게모니를 넓혀오고 있습니다.

하지만 이전 포스팅에서 평가 했듯이 langchain의 과도한 추상화로 인해 본질적인 prompt 작성 보다는 SDK의 클래스와 용처를 파악하는데 시간을 쏟아야 했습니다.

Dify

최근 테디노트님의 다음 영상을 통해 Dify를 알게되었습니다.

Dify는 AI Agent를 만드는 no code 툴로서 model 추상화, prompt templating, RAG는 물론 agent를 위한 tool 기능까지 매우 잘 다듬어진 솔루션입니다.

LLM 애플리케이션 개발을 이해하기 위해서라도 한번 즈음 사용해 볼 것을 추천 드립니다.

Agent, Chat flow, Workflow 등의 형태로 LLM 애플리케이션을 만들 수 있고 단일 WebApp, embedding, API 등의 형식으로 원클릭 배포할 수 있습니다.

또한, Model 비교 평가, Logging, Monitoring 등의 기능도 가지고 있습니다.

다시말해, LLM 애플리케이션을 no code 형식으로 개발, 평가, 배포, 운영할 수 있는 플렛폼의 면모를 가지고 있습니다.

Knowledge (aka RAG)

먼저 RAG의 경우 PDF, Word, Excel, Markdown 파일 등을 자유롭게 업로드할 수 있습니다.

텍스트의 splitting, chunking 설정, parent-child, reranking 까지 RAG를 모르는 사람도 UI를 통해 손쉽게 knowledge base를 구축할 수 있습니다.

생성한 Knowledge는 공용으로 접근 가능하여 LLM 애플리케이션에서 자유롭게 연동하여 사용할 수 있습니다.

Knowledge Extension

Dify는 REST 방식의 확장을 지원합니다.

External Knowledge API | Dify

다음과 같은 형식의 API를 구현하면 됩니다.

POST <your-endpoint>/retrieval

따라서, 사내에서 사용하고 있는 여러 검색 API와 연동할 수 있습니다.

Confluence, Jira, Github Enterprise 등의 검색 API와 적절히 연동한다면 매우 유용한 검색 보조 도구를 구축할 수 있습니다.

RAG 한계점

RAG는 사용자 질문에 대한 텍스트 정보를 의미 기반의 vector 검색으로 찾은 뒤 LLM을 사용해 요약해 주는 기능 입니다.

따라서 검색 대행과 요약이라는 기능적인 한계점에 머무를 수 밖에 없습니다.

또한, LLM의 Knowledge 검색 호출 시점을 예측할 수 없고, 여러 Knowledge 중 어떠한 것을 선택하여 질의할지에 대해서도 힌트를 주기 어렵습니다.

Tool

Tool을 사용할 수 있는 LLM 애플리케이션을 Agent라 합니다.

Tools | Dify

구글 검색, Stable diffusion 이미지 생성, 논문 검색 등 다양한 Tool을 사용할 수 있습니다.

각 Knowledge가 가진 정보를 명시적으로 기술하는 방식으로 LLM 호출을 유도할 수 있어 RAG의 한계점을 극복할 수 있습니다.

LLM에 정보를 주입하는 수동적인 동작에서 벗어나 보다 능동적인 행위를 하도록 확장할 수 있습니다.

Tool Extension With Open API

Tool 역시 확장 가능합니다.

Deploy API Tools with Cloudflare Workers | Dify

다음과 같이 OpenAPI 3.0 버전의 문서 링크를 입력하는 것 만으로 Custom Tool을 생성하고 LLM 애플리케이션에서 활용할 수 있습니다.

custom tool

Dify의 한계점

만들고자 하는 LLM 애플리케이션의 원하는 동작이나 기능을 위한 Agent나 Workflow 개발이 필요합니다.

workflow

복잡한 시나리오 및 edge case 개발, prompt, tool 유지보수 모두를 UI를 통해서 진행해야 합니다.

개발자에게는 node graph 기반의 no coding 툴은 과유불급 입니다.

Workflow 개발을 위한 node graph의 조합이라는 행위는 근본적으로 programming을 모사한 것이기 때문입니다. 로직 분기, 병렬 처리, iteration은 모두 프로그래밍 랭귀지의 속성이며 no code 툴은 이를 시각적으로 옯겨놓은 것에 불과합니다. 각 node를 이해하고 연관을 맺는 시간에 익숙한 언어로 빠르게 코딩하고 유지보수하는 것이 현명한 선택 입니다.

또한 힘들게 만든 Workflow의 prompt와 처리 로직 정보는 Dify에 lock in 됩니다. Dify 툴이 영원히 존재할지도 모르고 더 좋은 툴이 생길 수도 있습니다. 따라서 이식성(Portability)을 고려한 개발 환경을 선택하는 것이 바람직 합니다.

결국엔 Dify의 강점인 no code가 약점이 됩니다.

Vercel AI-SDK

LangChain의 복잡성 없이 code 기반의 LLM 애플리케이션을 구축할 수 있는 대안이 필요합니다.

그리고 그 대안은 단 5줄의 코드로 설명가능합니다.

import { generateText } from "ai"
import { openai } from "@ai-sdk/openai"

const { text } = await generateText({
  model: openai("o3-mini"),
  prompt: "What is love?"
})

이제 마우스 클릭의 과사용으로 인한 어깨 결림에서 탈출할 수 있습니다.

Code 기반이기에 version control, pull request를 통한 이력관리 및 변경통제가 가능해 집니다.

Model abstraction

Foundations: Providers and Models

OpenAPI, Anthropic, Ollama 등의 LLM을 동일한 인터페이스로 사용할 수 있습니다.

Prompting

Foundations: Prompts

minimal하고 직관적인 프롬프트 작성 환경을 제공합니다.

Template literals만으로 충분합니다.

Agent tool

Foundations: Tools

transitive-bullshit/agentic와 같은 Toolkit을 쉽고 빠르게 연동할 수 있습니다.

// sdk-specific imports
import { openai } from '@ai-sdk/openai'
import { generateText } from 'ai'
import { createAISDKTools } from '@agentic/ai-sdk'

// sdk-agnostic imports
import { WeatherClient } from '@agentic/stdlib'

const weather = new WeatherClient()

const result = await generateText({
  model: openai('gpt-4o-mini'),
  // this is the key line which uses the `@agentic/ai-sdk` adapter
  tools: createAISDKTools(weather),
  toolChoice: 'required',
  prompt: 'What is the weather in San Francisco?'
})

console.log(result.toolResults[0])

물론 직접 Tool을 만들어도 되겠습니다. 😉

Ecosystem

Vercel AI SDK는 과하지 않은 라이브러리 입니다.

Vercel이라는 회사가 개발을 하고 있어 프로젝트에 대한 끊임없는 개선을 기대할 수 있습니다.

따라서 model provider, toolkit의 다양한 확장이 community 중심으로 이루어 지고 있습니다.

마치며

LangChain, Dify, Vercel AI SDK를 거치면서 어떤 관점에서 기술셋을 선정하고 준비해야 하는지 설명했습니다.

같은 관점에서 보았을 때, LangChain을 중심으로 하거나(LangGraph), No code 툴(Flowise, n8n)을 사용한 LLM 애플리케이션 개발은 기술적 한계와 확장성 측면에서 신중하게 접근해야 합니다.

Vercel AI SDK는 과하지 않은 라이브러리 입니다. 교만하게 제안하거나 욕심으로 자신의 서비스에 가두려 하지 않습니다.

그리고 이렇게 간단하고 단단한 기반이 있기에 AXAR AI 같은 신선한 시도가 가능하다고 생각합니다.

import { model, systemPrompt, Agent } from '@axarai/axar';

// Define the agent.
@model('openai:gpt-4o-mini')
@systemPrompt('Be concise, reply with one sentence')
export class SimpleAgent extends Agent<string, string> {}

// Run the agent.
async function main() {
  const response = await new SimpleAgent().run(
    'Where does "hello world" come from?',
  );
  console.log(response);
}

main().catch(console.error);

물론, Dify와 같이 Deploy, Logging, Monitoring과 같은 기능은 제공하지 않습니다.

하지만, AI SDK Providers에서 살펴볼 수 있듯 다양한 서비스와 연동할 수 있습니다.

종종 React 개발 환경의 파편화를 비판적인 시각으로 바라보는 경우가 있습니다.

파편화를 다르게 생각하면 다양성의 수용입니다.

다양성을 수용한 Vercel AI SDK를 선택하고 집중하려 합니다.

Loading script...