반응형

전체 글 225

Advanced RAG 활용

- Document의 적재와 검색RAG(Retrieval-Augmented Generation) 구조에서 가장 중요한 단계는 문서의 적재와 효율적인 검색입니다.이번 예시에서는 **LangChain의 GitLoader**와 Chroma 벡터 데이터베이스를 이용하여GitHub 저장소의 문서를 벡터화하고 검색하는 방법을 살펴봅니다. 아래 코드는 GitHub에 있는 langchain-ai/langchain 저장소에서.mdx 파일만 필터링하여 문서를 로드하는 예시입니다.from langchain_community.document_loaders import GitLoaderdef file_filter(file_path: str) -> bool: return file_path.endswith(".mdx")loader..

AI 2025.10.31

LangChain Expression Language(LCEL) 활용

AI Agent에 적절한 LLM 활용을 고민하다보면 프롬프트 엔지니어링, Langgraph, LCEL등 어떤 것들을 어떻게 활용해야 할지 결정하기 쉽지 않습니다. 이에 적절한 구조를 설계하기 위해서 LCEL이 어떻게 활용될수 있을지 정리해보고자 합니다. 1. 기본 구성 요소 from langchain_core.output_parsers import StrOutputParserfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_openai import ChatOpenAIprompt = ChatPromptTemplate.from_messages( [ ("system", "사용자가 입력한 요리의 레시피를 생각해 주세요."), ("huma..

AI 2025.10.21

LangChain 기초

LangChain은 LLM 애플리케이션 개발 프레임 워크입니다. 공식 구현으로는 Python과 JavaScript/TypeScript 두 가지가 제공되고 있다. LangChain은 LLM을 사용한 애플리케이션 개발에 사용되나 해당 프레임워크 외에 LlamaIndex나 Semantic Kernel도 있다고 하지만 광범위한 활용 사레 및 분야를 다루고 있다. - 주요 컴포넌트 LLM/Chat model : 다양한 언어모델과의 통합 Prompt template : 프롬프트의 템플릿 Example selector : Few-shot 프롬프팅의 예시를 동적으로 선택 Output parser : 언어 모델의 출력을 지정한 형식으로 변환 Chain : 각종 컴포넌트를 사용한 처리의 연쇄 Document l..

AI 2025.10.20

프롬프트 엔지니어링의 종류와 적용

프롬프트 엔지니어링이 무엇인지는 단순한 검색으로도 충분히 이해할수 있다. " 프롬프트 엔지니어링이란 AI모델에서 원하는 출력을 얻기 위해 입력하는 프롬프트의 설계나 최적화를 수행하는 기술입니다. 정확한 결과나 창의적인 응답을 얻기 위해 단어 선택이나 구조에 공을 들입니다. " 이러한 프롬프트 엔지니어링을 사용자 맞춤으로 어떻게 활용가능할지 테스트를 해보려고 한다. 예를 들어 레시피 생성 앱에서 요리를 입력받아 레시피를 생성한다고 가정했을때, 전형적인 구성은 사용자가 메뉴를 입력하고 프롬프트 엔지니어링의 인자로서 해당 음식 명이 들어가 최종 답변을 도출하는 Flow가 될 것이며 아래의 코드와 같다. prompt = """\사용자가 입력한 요리의 레시피를 생각해 주세요.요리명: '''{dish}'''"..

AI 2025.10.20

OpenAI의 Chat API 기초 및 실습

1. Chat Completion API 실습 LLM API활용을 위해 대표적으로 Chat Completion을 사용합니다. 대표적인 OpenAI의 gpt를 활용한다면 from openai import OpenAIclient = OpenAI()response = client.chat.completions.create( model="gpt-4o-mini", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "안녕하세요! 저는 존이라고 합니다!"}, ],)print(response.to_json(indent=2)) 위와 같은 형태로 활용할수 있으며 role이 system인것..

AI 2025.10.18

GPT API Key & LangSmith API Key 발급

AI 개발을 시작하다 보면 가장 먼저 마주치는 질문이 있습니다.“GPT 모델을 쓰려면 API 키를 어디서 받아야 하지?”“LangSmith로 로그를 추적하고 싶다면 계정은 어떻게 만들지?” 🧠 1. GPT LLM API Key란?GPT LLM API Key는 OpenAI 플랫폼의 GPT 모델(GPT-4, GPT-4o, GPT-3.5 등)에 접근할 수 있게 해주는 인증 토큰입니다.이 키를 이용해 코드를 통해 모델을 호출하고, 응답을 받을 수 있습니다.🔑 2. GPT LLM API Key 발급 방법① OpenAI 계정 가입https://platform.openai.com/signup이메일 주소 또는 Google, Microsoft 계정으로 간편 가입 가능무료 체험 크레딧이 제공되는 경우도 있음 (계정 국..

AI 2025.10.18

SAP MM : 조달의 조직 구조 이해

SAP 내 구매 및 재고 관리와 관련된 요소에 관한 포스팅  기본적으로 자재, 구매 관리를 하는것에 필요한 조달 프로세스를 이해하기 위한 조직 구조는 위와 같다. Top - Down Approach에서 1: n 구조이며 짚어봐야 할 부분은 1. 회사 코드당 여러 플랜트가 존재할 수 있다.2. 플랜트는 자재에 따라 여러 저장 장소를 가질수 있다.3. 플랜트는 하나의 구매 조직을 가지지만 구매 조직은 여러 플랜트를 가질수 있다. 4. 구매조직은 하나의 회사 코드에만 속한다. 5. 회사 코드 간 구매의 경우 구매 조직을 회사 코드에 지정하지 않아도 된다. 따라서 위와 같은 구조를 가질수 있으며 플랜트는 구매조직과 관계(relationship)을 설정해줘야 적절한 로직을 구현할 수 있다.  * 구매 그룹 구매 ..

SAP 2024.09.15

리소스의 의존성 주입

대부분의 클래스는 독자적인 자원으로만 제 역할을 다하기 힘든 경우가 많다. 따라서 클래스간 리소스는 의존하게 되고 이는 의존성으로 프로그램의 복잡도에 영향을 미친다. 여기서의 예제에서는 SpellCheck라는 클래스가 Dictionary를 사용하고 의존성을 가진다고 보자. 대표적으로 두 가지 부적절한 구현이 존재한다. 1) static 클래스의 사용 public class SpellChecker { private static final Lexicon dictoary = new KoreanDictionary(); private SpellChecker(){ //Noninstatiable } public static boolean isvalid(String word){ throw new UnsupportedO..

Study 2022.11.22

Static 클래스의 noninstantiability

Static 메소드와 Static 필드르 모아둔 클래스를 만든 경우 목적은 분명하다. 이는 해당 클래스를 abstract로 만들어도 상속 받을 수 있으므로 인스턴스를 만드는 걸 막을 수 없다. 단순히 아무런 생성자를 만들지 않는다 하더라도 컴파일러가 기본적으로 아무 인자가 없는 public 생성자를 만들어 주기 때문에 인스턴스를 만들 수 있다. 따라서 명시적으로 private 생성자를 추가하는 것이 필요하다. // Noninstantiable utility class public class UtilityClass { // Suppress default constructor for noninstantiability private UtilityClass() { throw new AssertionError()..

Study 2022.11.08

싱글톤 객체 생성

오직 한 인스턴스만 만드는 클래스를 싱글톤이라 부른다. 하지만 싱글톤을 사용하는 클라이언트 코드는 mock으로 교체하는게 어렵기 때문에 테스트 하는게 어렵다. 대표적으로 싱글톤으로 만드는 두가지 방법이 존재한다. 방법 1. Final필드 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis(){ } } 위 경우 public static으로 외부에서 접근이 가능하지만 생성자가 private이므로 단 하나의 객체를 갖게 된다. 하지만 리플렉션을 사용한 방법을 통해 여러 객체가 생성될 여지가 있다. 방법 2. Static팩토리 메소드 public class Elvis_ { private static final E..

Study 2022.11.08
반응형