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"을 추가해요.