분류 전체보기 (288) 썸네일형 리스트형 [AI Agent] AI Agent 채팅 서비스의 SSE 스트리밍 중단과 처리 방법 AI agent 서비스를 개발하며 겪은 문제들을 예제 프로젝트로 재구성해 정리하는 시리즈이다. 예제 코드는 parcel-bot repo 에 있고 docker compose 로 전부 재현할 수 있다. 지난 글에서 ASGI와 LangGraph으로 구현한 스트리밍 구성을 확인했다. 운영 환경에서는 스트리밍의 중단 상황을 고려해야 한다. 스트리밍이 중단되면 무슨 일이 일어나는가. LLM 호출이 실패했을 때, 응답이 오래 걸릴 때, 사용자가 화면을 떠났을 때 각각 클라이언트에는 무엇이 보이고 서버는 무엇을 해야 하는가. 이번 글에서는 운영에서 실제로 겪는 중단 상황들을 빈도 순으로 정리하고 각각의 처리를 구현해보겠다.스트리밍 중단 기준본문으로 들어가기 전에 판단 기준을 하나 세우려한다. 스트리밍 중단 상황의 처리.. [LLM] LangGraph의 node 실행 방식 LangGraph 로 graph 를 만들다 보면 각 node가 어떻게 동작하는지, graph의 실행 방식에 대한 의문이 생긴다. node 를 sync 함수로 쓸 때와 async 함수로 쓸 때 무엇이 달라지는가. stream() 과 astream() 은 node 를 어떻게 다르게 실행하는가. sync node 를 astream() 으로 실행해도 되는가. 이번 글에서는 LangGraph 소스를 따라가며 node 가 실제로 어떻게 실행되는지 확인해보겠다. 기준 버전은 langgraph 1.2 이다.요약결론부터 먼저 보겠다. sync API (invoke/stream)async API (ainvoke/astream)sync node (def)호출 스레드에서 직접 실행워커 스레드에 위임 (executor)asy.. [AI Agent] ASGI 에서 LangGraph 스트림 버퍼링 문제 (iterator 와 서버의 조합) AI agent 서비스를 개발하며 겪은 문제들을 예제 프로젝트로 재구성해 정리하는 시리즈이다. 예제 코드는 parcel-bot repo 에 있고, docker compose 로 전부 재현할 수 있다. 이번 글은 이 시리즈를 시작하게 만든 문제를 다룬다. Django 와 LangGraph 로 만든 서비스에 성능을 높이기 위해 async 를 도입하는 과정에서, LangGraph 스트림이 통째로 버퍼링되는 문제를 만났다. 이전 글에서 정리한 iterator 와 서버의 관계를 정리했던 것처럼 이번 글에서는 문제를 재현하고 원인과 해결 방법을 확인해보겠다.문제 상황Django 와 LangGraph 로 구성된 AI agent 서비스가 있다. agent 의 응답은 SSE 로 스트리밍한다. def recommend(s.. [AI Agent] WSGI 에서 Django SSE 스트리밍 버퍼링 문제 AI agent 서비스를 개발하며 겪은 문제들을 예제 프로젝트로 재구성해 정리해보려 한다. 예제 코드는 parcel-bot repo에 있고, docker compose로 전부 재현할 수 있다. LLM은 mock으로 대체했기 때문에 API key 없이 실행 가능하다. 이번 글에서는 SSE 스트리밍 응답이 WSGI 환경에서 버퍼링되는 문제를 재현하고 원인을 확인해보겠다.문제 상황LLM 챗봇의 답변을 ChatGPT처럼 토큰 단위로 출력하기 위해 SSE(Server-Sent Events) 응답을 구현했다. SSE는 HTTP 연결을 유지하면서 서버가 이벤트를 계속 전달하는 방식이다. 그런데 브라우저에서 확인해보면 토큰이 하나씩 출력되는 것이 아니라, 한참 동안 아무것도 출력되지 않다가 답변 전체가 한 번에 출력된.. [LLM] LangChain 1. LangChain 이란?LnagChain 은 LLM agent 나 애플리케이션 개발을 편리하게 해주는 프레임워크이다. OpenAI, Anthropic, Google 등 다양한 LLM provider 와 연동할 수 있는 인터페이스를 제공하여 agent 를 개발하는데 사용할 수 있다. 이 외에도 HTTP API 호출, 데이터베이스 연동 등 다양한 tool 을 호출하여 사용할 수 있고, vector store, retriever 등을 사용하여 RAG 도 구현할 수 있다.2. LangChain 장점LangChain 을 사용하는 이유는 LLM 을 사용하는 agent 나 application 의 개발을 위한 다양한 기능들을 제공해주기 때문이다. 만약 LangChain 을 사용하지 않으면 OpenAI 나 Gem.. [LLM] RAG (Retrieval-Augmented Generation) 1. RAG 란?RAG (Retrieval-Augmented Generation) 은 LLM 이 새로운 정보를 검색하고 통합할 수 있도록 하는 기술이다. LLM 이 외부 데이터 소스에서 정보를 검색한 뒤, 그 결과를 기반으로 응답을 생성하는 구조로 구성된다. LLM 을 단독으로 사용했을 때 없는 사실을 생성하는 Hallucination 문제나, 최신 데이터 부족으로 인한 문제 등이 발생한다. RAG 를 사용하면 모델의 학습에 사용된 데이터 이외에 새로운 추가 정보를 제공함으로 이러한 문제들을 해결할 수 있다. 또한 응답 생성에 참고해야 하는 내용을 제공함으로 사용자가 원하는 내용을 더 정확하게 얻을 수 있다.2. RAG 핵심 개념 및 동작 흐름1) Indexing사전 준비 단계로 RAG 를 구성하기 위해.. [LLM] Vector, Embedding LLM 서비스를 개발하면 Embedding 이라는 키워드를 만나게 된다. 자연어 문장을 이해하고 문맥간의 관계를 위해서 필요한 과정인데, 간단하게 생각하면 사람의 말, 자연어를 컴퓨터가 이해할 수 있는 디지털, 숫자 형식 Vector 로 변환하는 것이다. 이 글에서는 Vector, Embedding 에 대한 개념과 자연어를 Embedding 하는 예제, 그리고 Embedding 한 Vector 와 Vector DB 를 사용하여 데이터 저장과 검색하는 것까지 정리해보겠다.1. Vector, Embedding 개념- VectorVetor 는 수학에서 크기와 방향을 동시에 가지는 물리량을 의미한다. 이는 곧 n 차원 공간의 좌표로 이해할 수 있는데, 아래 예시와 같이 특정 차원의 숫자 배열로 표현된다. ex).. [로그 모니터링] Grafana Alerting [로그 모니터링] 시리즈를 통해 로그 모니터링을 위한 시스템을 구축했다. 이제 그라파나 대시보드를 통해 실시간으로 로그를 확인할 수 있다.이번 글에서는 Grafana 의 alert 기능을 사용하여 Error 로그가 출력될 때마다 알림이 발생하도록 해보겠다. 예제는 Grafana 의 예제문서를 참고했다. (https://grafana.com/tutorials/create-alerts-with-logs/)1. Contact point 설정Alert 설정을 하기에 앞서 먼저 알림이 발생하는 경우, 알림을 전송할 Contact point 를 생성해준다. Contact point 는 email, Slack, webhook 등 다양한 방식으로 알림을 전달할 수 있는데, 이 글에서는 Webhook 방식으로 알림을 전.. 이전 1 2 3 4 ··· 36 다음