LangGraph

LangGraph

OpenAI chat completions 형식을 사용해 LiteLLM으로 LangGraph 에이전트를 호출해요.

출처: 문서

본문

개요 (Overview)

속성 설명
설명 LangGraph는 LLM로 상태 저장(stateful) 다중 에이전트 애플리케이션을 구축하는 프레임워크. LiteLLM은 스트리밍·비스트리밍 엔드포인트를 통해 LangGraph 에이전트 호출 지원
LiteLLM 라우트 langgraph/{agent_id}
공급자 문서 LangGraph Platform

선행 조건: 실행 중인 LangGraph 서버가 필요해요. 아래 "로컬 LangGraph 서버 설정"을 참고하세요.

빠른 시작 (Quick Start)

모델 형식

langgraph/{agent_id}

예시: langgraph/agent - 기본 에이전트 호출

LiteLLM Python SDK

기본 LangGraph Completion:

import litellm

response = litellm.completion(
    model="langgraph/agent",
    messages=[
        {"role": "user", "content": "What is 25 * 4?"}
    ],
    api_base="http://localhost:2024",
)
print(response.choices[0].message.content)

스트리밍 LangGraph 응답:

import litellm

response = litellm.completion(
    model="langgraph/agent",
    messages=[
        {"role": "user", "content": "What is the weather in Tokyo?"}
    ],
    api_base="http://localhost:2024",
    stream=True,
)

for chunk in response:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

LiteLLM Proxy

1. config.yaml에서 모델 설정:

model_list:
  - model_name: langgraph-agent
    litellm_params:
      model: langgraph/agent
      api_base: http://localhost:2024

2. LiteLLM Proxy 시작:

litellm --config config.yaml

3. LangGraph 에이전트에 요청:

curl (기본 요청):

curl http://localhost:4000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ***" \
  -d '{
    "model": "langgraph-agent",
    "messages": [
      {
        "role": "user",
        "content": "What is 25 * 4?"
      }
    ]
  }'

curl (스트리밍 요청):

curl http://localhost:4000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ***" \
  -d '{
    "model": "langgraph-agent",
    "messages": [
      {
        "role": "user",
        "content": "What is the weather in Tokyo?"
      }
    ],
    "stream": true
  }'

OpenAI SDK (기본):

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:4000",
    api_key="your-litellm-api-key"
)

response = client.chat.completions.create(
    model="langgraph-agent",
    messages=[
        {"role": "user", "content": "What is 25 * 4?"}
    ]
)
print(response.choices[0].message.content)

OpenAI SDK (스트리밍):

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:4000",
    api_key="your-litellm-api-key"
)

stream = client.chat.completions.create(
    model="langgraph-agent",
    messages=[
        {"role": "user", "content": "What is the weather in Tokyo?"}
    ],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="")

환경 변수 (Environment Variables)

변수 설명
LANGGRAPH_API_BASE LangGraph 서버의 기본 URL (기본: http://localhost:2024)
LANGGRAPH_API_KEY 인증용 선택 API 키

지원 파라미터 (Supported Parameters)

파라미터 타입 설명
model string langgraph/{agent_id} 형식의 에이전트 ID
messages array OpenAI 형식의 chat 메시지
stream boolean 스트리밍 응답 활성화
api_base string LangGraph 서버 URL
api_key string 선택 API 키

로컬 LangGraph 서버 설정

LiteLLM을 LangGraph와 함께 사용하려면 실행 중인 LangGraph 서버가 필요해요.

선행 조건

  • Python 3.11+ (LangGraph CLI의 in-memory 서버에 필요)
  • LLM API 키 (OpenAI 또는 Google Gemini)

1. LangGraph CLI 설치

uv add "langgraph-cli[inmem]"

2. 새 LangGraph 프로젝트 생성

langgraph new my-agent --template new-langgraph-project-python
cd my-agent

3. 의존성 설치

uv add -e .

4. API 키 설정

echo "OPENAI_API_KEY=your_key_here" > .env

5. 서버 시작

langgraph dev

서버가 http://localhost:2024 에서 시작돼요.

서버 실행 확인

curl -s --request POST \
  --url "http://localhost:2024/runs/wait" \
  --header 'Content-Type: application/json' \
  --data '{
    "assistant_id": "agent",
    "input": {
      "messages": [{"role": "human", "content": "Hello!"}]
    }
  }'

LiteLLM A2A Gateway

LangGraph 에이전트를 LiteLLM의 A2A(Agent-to-Agent) Gateway에 등록하고, 업스트림 에이전트 카드를 발견하고, 스킬과 기능을 큐레이션하고, LiteLLM proxy를 통해 호출할 수 있어요.

1. Agents로 이동

사이드바에서 "Agents"를 클릭해 에이전트 관리 페이지를 열고 "+ Add New Agent"를 클릭해요.

2. LangGraph 에이전트 유형 선택

"A2A Standard"를 클릭해 사용 가능한 에이전트 유형을 보고 "langgraph"를 검색해 "Connect to LangGraph agents via the LangGraph Platform API"를 선택해요.

3. 에이전트 구성

다음 필드를 채워요:

  • Agent Name - 고유 식별자 (예: lan-agent)
  • LangGraph API Base - LangGraph 서버 URL, 일반적으로 http://127.0.0.1:2024/
  • API Key - 선택. LangGraph는 기본적으로 API 키를 요구하지 않음
  • Assistant ID - LangGraph가 사용하지 않으므로 아무 문자열이나 입력

4. 에이전트 카드 발견

base URL과 assistant ID를 채우면 발견이 자동 실행돼요. preview는 폼이며 이름, 설명, provider, icon URL, 문서 URL을 편집하고, 스킬을 추가·제거·재정렬하며 각 스킬의 이름/설명/태그/예시/입출력 모드를 편집하고, LiteLLM이 지원하는 기능을 토글할 수 있어요. 저장 전에 스킬과 기능을 선택/해제하세요. LiteLLM은 폼에서 유지한 것만 저장해요.

5. 에이전트 저장

Next를 클릭해 저장하고 나머지 단계를 완료해요.

6. 서빙되는 카드 확인

curl -H "Authorization: Bearer ***" \
  http://localhost:4000/a2a/{agent_id}/.well-known/agent.json | jq

다음을 확인할 수 있어요:

  • supportedInterfaces[0].url이 업스트림이 아닌 LiteLLM을 가리킴
  • securitySchemes에 LiteLLMKey(HTTP bearer) 표시
  • 등록 중 유지한 스킬

7. Playground에서 테스트

사이드바의 "Playground"로 가서 에이전트를 테스트해요. 엔드포인트 유형을 /v1/a2a/message/send로 변경해요.

8. 에이전트 선택 및 메시지 전송

드롭다운에서 LangGraph 에이전트를 선택하고 테스트 메시지를 보내요.

9. 수동으로 에이전트 호출

LiteLLM proxy URL에 A2A message/send 요청을 보내요:

curl -X POST http://localhost:4000/a2a/{agent_id} \
  -H "Authorization: Bearer ***" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "req-1",
    "method": "message/send",
    "params": {
      "message": {
        "messageId": "msg-001",
        "role": "user",
        "parts": [{"kind": "text", "text": "My order is urgent and still not delivered"}],
        "metadata": {"skillId": "triage_ticket"}
      }
    }
  }'

스트리밍에는 message/stream을 사용하고 curl에 -N -H "Accept: text/event-stream"을 추가해요.

더 알아보기 (Learn more)