-
초스피드 AI 프로토타입 개발을 위한 랭서브(Langserve) 도입기AI 2025. 2. 16. 23:58
ChatGPT로 생성한 이미지 입니다. 최근에 5개월짜리 짧은 기간의 AI 프로젝트 리드를 맡게 되면서 어떤 프레임워크와 환경 셋팅을 가져가야 구현 속도면에서 이점이 있을까 고민하던 찰나에 우아한형제들의 기술블로그 중 AI 데이터 분석가 ‘물어보새’ 등장 – 1부. RAG와 Text-To-SQL 활용 아티클을 보게 되었습니다.
마침 제가 진행 중인 것과 유사한 프로젝트를 이미 사내 시스템에 도입해 보는 경험을 보유하고 있었고 그 과정에서 랭서브(Langserve)라는 프레임워크를 사용했다는 사실을 알게 되었는데요. 저도 흥미를 느끼게 되어 조사해 본 결과 러닝커브가 높지 않아서 저희 프로젝트에도 도입해 보면 좋겠다는 생각이 들었습니다.
가장 크게 느꼈던 매리트 중 하나는 랭서브를 통해 개발하는 경우 코드 몇 줄 작성한 것만으로도 invoke, batch, stream 등의 여러 API들을 자동으로 만들어주기 때문에 복잡한 API를 설계한다거나 코드를 직접 구현할 필요 없이 빠르고 안정성 있고 간편하게 사용가능 하다는 점이었습니다.
특히 playground라는 테스트 UI를 자동으로 생성해주는 기능이 정말 간편했는데요. 별도의 클라이언트(FE) 개발이 필요 없다는 점과 사용방법이 간단하여 기획&PM, 데이터분석가 등의 직군 분들과 소통하는데도 많은 시간을 절약할 수 있었습니다.
이번 포스팅에서는 랭서브가 무엇인지 그리고 랭서브를 어떻게 활용할 수 있는지에 대해 설명드리도록 하겠습니다.
🏓 랭서브(Langserve)
먼저 랭서브에 대해 알아보도록 하겠습니다. 공식문서에 따른 랭서브의 정의는 다음과 같습니다.
LangServe is a Python framework that helps developers deploy LangChain runnables and chains as REST APIs.
말 그대로 랭서브는 랭체인의 여러 프롬프트 체인을 포함한 Runnable 함수들을 REST API 형태로 제공할 수 있도록 배포하는 것을 도와주는 파이썬 프레임워크입니다.
간략하게 다음과 같은 기능들을 사용할 수 있습니다.
- 랭체인 결과값을 REST API로 호출 가능
- invoke, batch, stream 등의 기본적인 API 제공
- default와 chat 두 가지 타입의 플레이그라운드(UI) 제공
- API docs 및 Pydantic을 통한 타입 및 포맷 검증, 풍부한 에러메시지 제공
이 모든 기능들을 단 코드 몇 줄 만으로도 사용할 수 있게 됩니다. 사용방법은 다음과 같습니다.
from fastapi import FastAPI from fastapi.responses import RedirectResponse from langchain_core.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI from langserve import add_routes from app.settings import settings app = FastAPI() prompt = ChatPromptTemplate.from_template("사용자의 질문에 대해 친절하게 답변해주세요. {input}") chain = prompt | ChatOpenAI(model="gpt-4o-mini", api_key=settings.openai_api_key) @app.get("/") async def redirect_root_to_docs(): return RedirectResponse("/docs") # Edit this to add the chain you want to add add_routes( app, # 랭서브 라우트 생성 chain, # 랭체인 지정 path="/openai", # API 엔드포인트 정의 ) if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)
위 코드에서 선언한 것 처럼 add_routes 함수 하나만 선언해 놓으면 앞서 정의한 특징들을 모두 사용할 수 있게 됩니다. 라우트의 path로 지정한 API 엔드포인트 뒤에 /invoke /batch /stream /playground를 추가로 붙여서 사용하실 수 있습니다.
랭서브는 이 외에도 더 많은 기능들을 지원하고 있는데 자세한 내용은 아래 공식문서에서 확인해 보실 수 있습니다
🦜️🏓 LangServe | 🦜️🔗 LangChain
Release Notes
python.langchain.com
🔧 설치 및 프로젝트 셋팅 방법
그러면 이제 본격적으로 랭서브 설치 및 프로젝트 셋팅 방법에 대해 살펴보도록 하겠습니다.
랭서브는 처음에 랭체인 v0.1 버전에 처음 등장하여 코어 라이브러리에 속해있던 에코시스템 모듈이었지만 현재는 점차 규모가 커져서 독립적으로 분리되었습니다. 현재는 랭서브가 기본 패키지로 포함되지 않기 때문에 다음과 같이 별도로 설치하셔야 사용 가능합니다.
pip install "langserve[all]"
여기서 all이 의미하는 것은 pip install "langserve[client]" , pip install "langserve[server]" 둘 중 필요한 모듈만 선택해서 설치가 가능하다는 뜻인데요. client는 RemoteRunnable 클래스를 활용해서 server 랭서브에 원격으로 붙을 수 있는 python client SDK입니다.
즉, client를 사용하려면 server가 필요하므로 MSA(Micro Service Architecture)처럼 잘게 잘게 쪼개진 환경이 아니라면 굳이 client만을 설치할 일이 없기 때문에 pip install langserve[all] 또는 pip install langserve[server]로 설치해서 사용하시면 됩니다.
만약 프로젝트를 처음부터 셋팅하는 상황이라면 langchain-cli를 통해 제공되고 있는 보일러플레이트를 사용하시면 조금 더 간편하게 셋팅하실 수 있습니다. 보일러플레이트는 다음과 같은 의존성들을 제공하고 있습니다.
langchain-cli로 랭체인 앱 생성시 기본적으로 제공되는 pyproject.toml 파일 만약, python 패키지 관리 도구로 pip나 conda, venv 등에 익숙하신 분들이라면 위 파일 구조가 익숙하지 않으실 수도 있는데요. pyproject.toml 파일은 requirements.txt 파일처럼 패키지 의존성을 관리하는 파일이라고 보시면 됩니다.
랭체인 보일러플레이트에서는 기본적으로 python 패키지 관리 도구로 poetry를 사용하고 있기 때문에 사용하고 계신 PC에 poetry가 없다면 별도로 설치해주셔야 합니다. 이 포스팅에서 poetry에 대한 자세한 내용은 생략하도록 하겠습니다. 사용방법이 궁금하시다면 아래 링크를 통해 조금 더 자세한 내용을 확인하실 수 있습니다.
하이퍼클로바 X 랭체인 프로젝트 및 서버 구축하기
불과 몇 주전인 10월 말 11월 초쯤 랭체인에 하이퍼클로바X를 연동할 수 있는 ChatCLOVA X가 등장했습니다. AI 생태계를 거의 지배하고 있는 랭체인 프레임워크에서 공식적으로 지원하는 한국 최초의
chucoding.tistory.com
랭체인 보일러플레이트를 사용하기 위해서는 먼저 사용중인 PC에 langchain-cli 모듈을 설치해야 합니다.
pip install -U langchain-cli
langchain-cli 설치 후에는 다음과 같이 app 명령어를 통해 프로젝트를 생성하실 수 있습니다.
langchain app new my-app
my-app 부분을 원하는 프로젝트명으로 변경 후 사용하시면 됩니다. 명령어 실행시 아래와 같이 프로젝트가 정상적으로 생성된 것을 확인하실 수 있습니다.
langchain-cli 명령어를 활용해 랭서브 프로젝트를 생성 및 초기화 주의하실 점은 랭체인이 기본 모듈로 포함이 안되어 있다는 점인데요. 랭서브에서 랭체인을 사용하기 위해서는 langchain과 사용할 LLM 모델 연동 라이브러리를 별도로 추가해주셔야 합니다. 아래와 같이 pyproject.toml 파일을 수정해주시면 됩니다.
[tool.poetry.dependencies] python = "^3.10" uvicorn = "^0.23.2" langserve = {extras = ["server"], version = ">=0.0.30"} pydantic = ">=2.7.4,<3.0.0" langchain = "^0.3.18" langchain-openai = "^0.3.5"
python의 경우에는 사용 중인 버전에 맞게 수정해 주시면 되고 pydantic의 경우에는 기본적으로 제공된 버전보다 조금 더 높였는데 이는 langchain v3 이상을 사용하기 위해서는 pydantic v2 이상을 사용해야 하기 때문에 추가로 수정해 놓았습니다.
이후에는 아래 명령어를 입력하여 패키지를 설치해 주시면 됩니다. 모듈들을 내려받을 때는 가상환경(poetry shell)을 실행하신 후 설치하는 것이 다른 프로젝트들과 독립적으로 관리할 수 있어 안전합니다.
poetry shell poetry install
정상적으로 완료된 경우 poetry.lock 파일이 생성되면서 프로젝트를 실행할 준비가 완료되었습니다. 마지막으로 서버를 구동하기 전에 사용할 모델의 API KEY를 등록해주도록 하겠습니다. 다음과 같이. env 파일을 생성 후 OPENAI_API_KEY 키값과 함께 본인이 발급받은 API키를 등록해 주시면 됩니다.
실제로는 .env 파일에 입력해주시면 됩니다. (위는 예시 이미지) 환경변수로 셋팅한 API KEY를 사용하기 위해서는 app폴더 안에 settings.py라는 파일을 하나 만들고 아래 코드를 추가해주시면 됩니다.
from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): openai_api_key: str model_config = SettingsConfigDict(env_file='.env', env_file_encoding='utf-8') settings = Settings()
pydantic 모듈이 같이 설치되면서 별도로 .env 파일을 읽을 수 있는 라이브러리나 모듈을 사용하지 않아도 환경변수 값을 강력하게 검사하여 읽어올 수 있게 되었습니다. 만들어놓은 settings 파일은 server.py에서 다음과 같이 사용하실 수 있습니다.
from app.settings import settings ... prompt = ChatPromptTemplate.from_template("사용자의 질문에 대해 친절하게 답변해주세요. {input}") chain = prompt | ChatOpenAI(model="gpt-4o-mini", api_key=settings.openai_api_key)
이제 마지막으로 서버를 구동하시면 됩니다. 구동하실 때는 아래 명령어를 실행해 주시면 간편합니다.
langchain serve
만약 server.py 파일명을 다른 이름으로 변경했거나 langchain-cli 없이 langserve만 따로 설치하신 경우에는 uvicorn, docker 등 환경에 맞게 서버 실행 명령어를 입력하여 구동시켜 주시면 됩니다.
🛝 플레이그라운드 사용방법
다음으로는 Langserve의 꽃이라고도 볼 수 있는 플레이그라운드 사용방법에 대해 알아보도록 하겠습니다. 플레이그라운드는 앞서 설명드린 대로 frontend 개발이나 streamlit, gradio 등을 통해 별도로 개발할 필요 없이 테스트할 수 있는 UI를 기본적으로 제공하고 있습니다.
플레이그라운드 접속 방법은 라우트 path 뒤에 /playground 만 붙여주시면 됩니다. 저의 경우에는 path를 openai로 지정해 놓았으니 아래와 같이 접속할 수 있습니다.
http://localhost:8000/openai/playground
랭서브 플레이그라운드 기본 모드 UI에 표시되는 INPUT에 해당하는 값은 랭체인에서 프롬프트를 만들 때 변수로 사용한 값입니다. 앞서 저는 프롬프트를 다음과 같이 구성한 바가 있었는데요.
prompt = ChatPromptTemplate.from_template("사용자의 질문에 대해 친절하게 답변해주세요. {input}") chain = prompt | ChatOpenAI(model="gpt-4o-mini", api_key=settings.openai_api_key)
위에서 사용한 {input} 변수가 플레이그라운드에서 전달받을 수 있는 변수값이 됩니다. 이 값을 다른 값으로 사용하셔도 됩니다. 예를 들어 다음과 같이 {input}을 {question}으로 변경해서 사용할 수도 있습니다.
prompt = ChatPromptTemplate.from_template("사용자의 질문에 대해 친절하게 답변해주세요. {question}")
프롬프트 변수명을 input에서 question으로 변경 여기서 더 나아가 대화를 여러 번 주고받은 대화내용(context) 까지 플레이그라운드에서 사용하고 싶은 경우가 생길 수 있는데요. 랭서브에서는 이러한 상황에 맞게 컨텍스트 변수도 지원하고 있습니다. 대화를 여러번 주고받는 과정을 포함시키는 것을 멀티턴(multiturn)이라고 부릅니다. 랭서브에서 멀티턴을 사용하는 방법은 다음과 같습니다.
from langchain_core.prompts import ChatPromptTemplate ... prompt = ChatPromptTemplate.from_messages([ ("system", "사용자의 질문에 대해 친절하게 답변해주세요."), ("placeholder", "{messages}"), ("human", "{question}") ]) chain = prompt | ChatOpenAI(model="gpt-4o-mini", api_key=settings.openai_api_key)
랭체인의 MessagesPlaceholder 클래스를 import 하여 프롬프트 템플릿에 넣어주시면 랭서브 플레이그라운드에서 다음과 같이 context를 입력할 수 있는 form이 나타납니다.
플레이그라운드에서 메시지 context 사용하기 상단 오른쪽의 + 버튼을 클릭하여 원하는 만큼의 메시지를 추가하실 수 있습니다. 마찬가지로 컨텍스트 변수명을 변경하고 싶다면 위의 예시에 나와있는 ("placeholder", "{messages}")의 messages 부분을 변경해주시거나 MessagesPlaceholder 클래스를 사용중이시라면 MessagesPlaceholder(variable_name="messages")의 variable_name 매개변수에 messages 대신 원하는 변수명을 지정해 주시면 됩니다.
랭체인 커뮤니티 모듈 등에서 사용되는 예시에서는 대게 아래와 같은 변수명을 주로 사용하고 있으니 변수명을 지으실 때 참고하시면 좋을 것 같습니다.
랭체인에서 프롬프트 예제로 자주 쓰이는 변수
- 사용자 입력 : {input}, {question}
- 대화 컨텍스트 : {messages}, {context}, {history}
💬 채팅 플레이그라운드 사용방법
앞서 살펴보았던 채팅 컨텍스트를 사용자가 일일이 입력하기에는 불편함이 많습니다. 이 때는 채팅 플레이그라운드를 사용하는 것이 좋은데요. 채팅 플레이그라운드는 다음과 같이 라우트 설정 시 playground_type=”chat” 옵션을 추가해 주시면 됩니다.
랭서브에서는 앞서 말씀드린대로 default, chat 두 가지 플레이그라운드 타입을 제공하고 있습니다.
add_routes( app, # 랭서브 라우트 생성 chain, # 랭체인 지정 path="/openai", # API 엔드포인트 정의 playground_type="chat" # 플레이그라운드 타입 정의 )
이제 해당 라우트 path 뒤에 /playground를 붙여서 접속하면 아래와 같은 화면으로 변경됩니다.
랭서브 플레이그라운드 채팅 모드 다만, 주의하실 점은 input의 타입이 기본 플레이그라운드에서 사용하던 방식과 달라졌기 때문에 그에 맞게 별도의 컨버팅 작업이 필요합니다. 만약 컨버팅 작업 없이 playground_type만 chat으로 입력하는 경우 The chat playground is only supported for chains that take one of the following as input: 메시지와 함께 아래와 같은 화면이 나타나서 당황하게 되실 수 있습니다.
input type이 안맞는 경우 랭서브 채팅 플레이그라운드에서 다음과 같은 가이드를 제공 따라서 기존의 프롬프트는 그대로 두고 변수 치환을 처리하기 위한 전처리 과정을 하나 추가합니다. 저는 다음과 같이 convert_messages라는 함수를 만들어놓고 RunnableLamda를 활용하여 체인을 연결해 놓았습니다.
from typing import Dict, Any from langchain_core.runnables import RunnableLambda ... def convert_messages(input_dict: Dict[str, Any]) -> Dict[str, Any]: messages = input_dict.get("undefined", []) return { "messages": messages[:-1] if messages else [], "question": messages[-1]["content"] if len(messages) > 0 else "" } prompt = ChatPromptTemplate.from_messages([ ("system", "사용자의 질문에 대해 친절하게 답변해주세요."), ("placeholder", "{messages}"), ("human", "{question}") ]) chain = ( RunnableLambda(convert_messages) | prompt | ChatOpenAI(model="gpt-4o-mini", api_key=settings.openai_api_key) )
위와 같은 컨버팅 함수를 만들어주는 이유는 채팅 플레이그라운드에서 들어오는 메시지의 형태가 아래와 같은 포맷으로 되어있기 때문입니다.
{ "undefined":{ "messages": [ { "content": "안녕?", "type": "human" }, { "content": "안녕하세요! 어떻게 도와드릴까요?", "type": "ai" }, { "content": "뭐해?", "type": "human" } ] } }
위 input 포맷을 바탕으로 랭체인 프롬프트의 변수들을 처리하려면 전달 과정에서 다음과 같은 형식으로 포맷을 변형해주어야 합니다.
{ "messages": [ { "content": "안녕?", "type": "human" }, { "content": "안녕하세요! 어떻게 도와드릴까요?", "type": "ai" } ], "question": "뭐해?" }
위와 같은 형식으로 컨버팅 해주면 답변이 잘 나오는것을 확인하실 수 있습니다. 여기서 중요한 점은 반드시 input 타입을 Dict 타입으로 지정해주어야 채팅 플레이그라운드를 사용하실 수 있습니다. (※ 랭서브 Github 가이드에서는 Pydantic의 BaseModel을 상속받아서 InputChat이라는 커스텀 타입을 사용해서 가이드 하고 있지만, 모종의 이유로 동작하지 않고 있으니 주의하시면 좋을것 같습니다.)
여기서 추가로 더 생각해볼 수 있는 점은 채팅 플레이그라운드만을 위한 컨버팅을 한다고 하면 문제가 없지만, 랭서브의 /invoke, /stream API를 /playground와 같이 사용하고 싶다면 해당 API 포맷들도 같이 같이 처리할 수 있도록 convert 함수를 모듈화 하는 것이 좋습니다.
랭서브 API 명세는 다음과 같이 FAST API에서 기본적으로 제공하고 있는 DOCS에 접근하여 확인하실 수 있습니다.
http://localhost:8000/docs
랭서브에서 제공하고 있는 기본적인 API 목록들을 확인하실 수 있는데요. 이때 /invoke의 request body 포맷을 확인해 보시면 다음과 같은 포맷으로 전송해야 된다는 것을 확인하실 수 있습니다.
언뜻 보면 채팅 플레이그라운드 포맷과 비슷해 보이지만, 키 값이 undefined가 아닌 input을 사용해주셔야 합니다. 따라서 코드를 다음과 같이 수정하시면 /invoke API와 /playground 양쪽 다 사용이 가능한 convert 함수가 됩니다.
messages = input_dict.get("input", input_dict.get("undefined", []))
API DOCS에서 호출 성공시에는 아래와 같이 나타나게 됩니다.
🧩 랭그래프 연동하기
랭체인의 각 단계별로 사용해야 하는 변수 값의 변동이 많은 경우 또는 조건마다 체인을 분기해야 하는 경우 일일이 Runnable 함수를 만들어서 convert 하는 과정을 거치게 되면 코드가 복잡해질 수 있는데요. 이 처럼 복잡한 COT 로직들을 구현할 때는 랭그래프를 사용하시면 일부 해소하실 수 있습니다.
랭그래프를 사용하시는 경우에도 랭서브와 연동이 가능합니다. 앞서 랭서브의 add_route 함수에 랭체인을 연동했듯이 랭그래프를 연결하시면 됩니다. 다음과 같이 컴파일된 랭그래프를 라우트에 연결하여 사용하실 수 있습니다.
from typing import TypedDict # 파이썬 3.11 이하 => from typing_extensions import TypedDict from langgraph.graph import END, StateGraph from langchain_core.messages import HumanMessage, AIMessage, SystemMessage ... class State(TypedDict): # 랭그래프 상태값 지정(프롬프트 변수) question: str messages: List[Union[HumanMessage, AIMessage, SystemMessage]] workflow = StateGraph(State) workflow.add_node(...) # 랭그래프 노드 지정 workflow.add_edge(...,END) # 랭그래프 간선 지정 workflow.set_entry_point(...) # 랭그래프 시작 노드 지정 workflow.compile() # 랭그래프 빌드 add_routes( app, # 랭서브 라우트 생성 graph, # 랭그래프 지정 path="/graph", # API 엔드포인트 정의 playground_type="default" # 플레이그라운드 타입 정의 )
랭그래프를 플레이그라운드에 연결하는 경우 각 노드에서 실행된 결과를 순차적으로 확인할 수 있어서 편리합니다. 연결할 때 주의사항으로는 변수에 대한 타입 지정을 명확히 해주어야 플레이그라운드 UI에도 반영이 됩니다. 즉, 컨텍스트를 변수로 사용할 때는 messages 타입을 단순히 List[Dict, Any]로 지정하면 플레이그라운드를 백분 활용할 수 없기 때문에 랭체인 코어 모듈에서 제공하고 있는 메시지 타입을 가져다 사용하시면 좋습니다.
랭그래프를 플레이그라운드에서 볼 때의 단점은 Output이 JSON 형식으로 State에 정의한 모든 상태값들이 노출되기 때문에 랭그래프에 대한 개념이 없는 상태에서 다른 직군의 팀원들이 보기에는 어려움이 있을 수 있고 각 상태가 의미하는 값들을 별도로 교육해야 하기 때문에 커뮤니케이션 비용이 발생하게 된다는 점이 단점입니다.
기본 플레이그라운드에서 제공되는 랭그래프 상태변화 스트리밍 또한, Output이 JSON 형식이기 때문에 운영 또는 서비스에서 사용하고자 할 때는 input만 convert 과정을 거치는 게 아니라 output도 마찬가지로 convert 과정이 필요합니다.
예를들어, 채팅 플레이그라운드나 운영단에서 API로 랭그래프의 결괏값을 꺼내어 사용하려면 async/await를 활용해서 모든 그래프 추론과정이 끝날 때까지 기다렸다가 필요한 상태 값을 꺼내어 다음과 같이 응답 결과로 사용해야 합니다.
async def getAnswer(input_data): messages_data = convert_messages(input_data) result = await graph.ainvoke(messages_data) return result["tempAnswer"] return RunnableLambda(getAnswer)
🌠 랭서브 사용 후기
이로써 랭서브 사용방법에 대해 알아보았는데요. 앞서 설명드렸던 컨버팅 과정만 조금 신경 써주신다면 크게 어려움 없이 쉽고 빠르게 AI 백엔드 서버를 구축할 수 있습니다. 특히, 저는 플레이그라운드가 가장 편리했다고 볼 수 있을 것 같습니다.
빠르게 결과 값을 보고 싶어 하는 비 IT 직군인 기획, 데이터분석 팀과 이야기를 나누거나 테스트 환경을 만들어드릴 때 편리했고 간편한 UI가 제공되기 때문에 별도로 사용법을 가이드해드리지 않아도 다들 편리하고 쉽게 사용이 가능했던 점 등등이 좋았습니다.
하지만, 아쉬웠던 점들도 분명 존재했었는데요. 제가 꼽은 아쉬운 점들은 다음과 같습니다.
- chat mode에서는 intermediate steps를 보지 못함.
- 동적라우팅이 안됨. 버전관리 힘듦
- 더 이상 새로운 기능을 지원하지 않음.
intermediate steps는 체인별 각 과정에서 어떤 결괏값들을 사용했는지 세세하게 확인이 가능한 스트리밍 로그인데요. 앞서, 설명을 skip 하기는 했지만 기본 플레이그라운드에서는 다음과 같이 Output 하단에 Intermediate steps 아코디언을 펼치시면 확인이 가능합니다.
하지만, 채팅 플레이그라운드에서는 해당 과정을 확인할 수 있는 UI가 없어서 랭스미스를 연동하거나 별도로 구현하거나 기본 플레이그라운드를 사용하는 방식으로 대체해야 합니다.( API 형태로는 제공됩니다. /stream_log )
두 번째 아쉬움으로는 동적라우팅이 안된다는 점이었는데요. 이는 버전관리 하기가 매우 힘들었던 것 같습니다. 동적라우팅을 처리하려면 랭서브의 기능을 포기하고 FastAPI의 APIRouter를 사용하거나 URL 파라미터로 전달받는 방법밖에는 존재하지 않습니다.
따라서 버전별로 API나 플레이그라운드를 사용할 경우 다음과 같이 지저분한 코딩 방식이 불가피합니다.
그리고 마지막이 사실상, 가장 치명적인 단점이 될 수 있을 것 같은데요. Langserve가 더 이상 새로운 기능을 지원하지 않는다고 중단 선언을 하였습니다.
🦜️🏓 LangServe | 🦜️🔗 LangChain
Release Notes
python.langchain.com
저도 쓰다 보니 채팅 플레이그라운드의 undefined 키 값이라던지 여러 불편한 점들이 많아서 오픈소스 커밋을 해볼까 싶었는데 더 이상 새로운 기능들을 받지 않는다고 하여서 앞으로 Langserve의 기능 개선을 기대하기가 어려워졌습니다.
Langserve 공식 홈페이지에서는 새로운 대체제로 LangGraph Platform으로 마이그레이션 할 것을 권고하고 있습니다.
LangGraph Platform
Home Guides Concepts LangGraph Platform High Level LangGraph Platform Overview LangGraph Platform is a commercial solution for deploying agentic applications to production, built on the open-source LangGraph framework. The LangGraph Platform consists of se
langchain-ai.github.io
저도 아직 사용해 본 적은 없지만, 랭그래프를 사용하고 계시다면 사용사례가 있는것 같아서 참고하시면 좋을 것 같습니다.
다만, 모든 기능이 무료로 제공되는 것은 아니니 참고하시면 좋을것 같습니다. 저도 기회가 된다면 마이그레이션을 도전해보고 싶다는 생각이 듭니다.☺️
'AI' 카테고리의 다른 글
Cursor IDE 동작원리 및 설치, 사용방법 (16) 2024.06.11 Redis를 활용한 벡터 데이터베이스 구현하기 (6) 2023.06.22