계기 

요즘 chatGPT같은 생성형 AI와 더불어서 LLM에 대해서 관심이 가서 알아보다가, Language Model 기반의 프레임워크인 Langchain을 알게되었다. 관련된 프레임워크들은 죄다 파이썬으로 되어있어서 포기하던찰나, NodeJS로도 지원해주는 것을 보고 이거다 싶었다. 

 

랭체인이란 무엇일까 ? 

LangChain is a framework for developing applications powered by language models. We believe that the most powerful and differentiated applications will not only call out to a language model via an API, but will also:

Be data-aware: connect a language model to other sources of data
Be agentic: allow a language model to interact with its environment

The LangChain framework is designed with the above principles in mind.

랭체인은 언어모델 기반의 어플리케이션 개발을 위한 프레임워크입니다. 가장 강력하고, 차별화된 애플리케이션은 단순히 API를 통해 언어모델을 호출하는 것을 넘어서 

데이터 인식 - 외부 데이터 소스를 언어 모델에 연결 
자기주도성(?) - 언어 모델이 환경과 상호 작용

Langchain 프레임워크는 위의 원칙을 염두에 두고 설계가 되었습니다. 

 

랭체인 구성요소가 어떻게 될까요? 

There are several main modules that LangChain provides support for. For each module we provide some examples to get started and get familiar with some of the concepts. Each example links to API documentation for the modules used.

These modules are, in increasing order of complexity:

Schema: This includes interfaces and base classes used throughout the library.

Models: This includes integrations with a variety of LLMs, Chat Models and Embeddings models.

Prompts: This includes prompt Templates and functionality to work with prompts like Output Parsers and Example Selectors

Indexes: This includes patterns and functionality for working with your own data, and making it ready to interact with language models (including document loaders, vectorstores, text splitters and retrievers).

Memory: Memory is the concept of persisting state between calls of a chain/agent. LangChain provides a standard interface for memory, a collection of memory implementations, and examples of chains/agents that use memory.

Chains: Chains go beyond just a single LLM call, and are sequences of calls (whether to an LLM or a different utility). LangChain provides a standard interface for chains, lots of integrations with other tools, and end-to-end chains for common applications.

Agents: Agents involve an LLM making decisions about which Actions to take, taking that Action, seeing an Observation, and repeating that until done. LangChain provides a standard interface for agents, a selection of agents to choose from, and examples of end-to-end agents.

랭체인이 지원하는 메인 모듈이 몇가지 있습니다. 각 모듈에 대해 그 컨셉과 개념에 익숙해지도록 예제를 제공하고, 각 예제는 API 문서로 링크가 되어 있습니다.

이 모듈들은 복잡성을 순서로 나열되었습니다. 

스키마: 라이브러리 전체에서 사용되는 인터페이스와 기본 클래스가 포함됩니다.

모델: 다양한 LLM, 채팅 모델 및 임베딩 모델과의 통합이 포함됩니다.

프롬프트: 출력 파서 및 예제 셀렉터와 같은 프롬프트와 함께 작동하는 프롬프트 템플릿 및 기능이 포함됩니다.

인덱스: 자체 데이터로 작업하고 언어 모델(문서 로더, 벡터 저장소, 텍스트 분할기 및 검색기 포함)과 상호 작용할 수 있도록 준비하기 위한 패턴과 기능이 포함됩니다.

메모리: 체인/에이전트 호출 간에 지속되는 상태의 개념입니다. LangChain은 메모리에 대한 표준 인터페이스, 메모리 구현 모음, 메모리를 사용하는 체인/에이전트의 예시를 제공합니다

체인: 단순한 단일 LLM 호출을 넘어선 호출 시퀀스(LLM 또는 다른 유틸리티에 대한 호출)입니다. LangChain은 체인을 위한 표준 인터페이스, 다른 도구와의 다양한 통합, 일반적인 애플리케이션을 위한 엔드 투 엔드 체인을 제공합니다.

에이전트: 어떤 작업을 수행할지 결정하고, 해당 작업을 수행하고, 관찰하고, 완료될 때까지 이를 반복하는 LLM을 포함합니다. LangChain은 에이전트를 위한 표준 인터페이스, 선택할 수 있는 에이전트 선택, 엔드투엔드 에이전트의 예시를 제공합니다.

 

셋업과 설치

지원되는 환경 

- Node.js (ESM and CommonJS) - 18.x, 19.x, 20.x
- Cloudflare Workers
- Vercel / Next.js (Browser, Serverless and Edge functions)
- Supabase Edge Functions
- Browser
- Deno

 

예제 시작

1
2
3
4
5
git clone https://github.com/domeccleston/langchain-ts-starter.git
 
yarn install 
 
cs

 

일단 시작을 하기 위해서는 OPENAI_API_KEY가 필요한데, 실제로 결제 정보를 입력하고 받아야한다. 토큰에 비례해서 청구가 되는데, 

최근에 GPT 3.5 turbo가 나오면서 굉장히 절약해서 사용이 가능하다던데, 일단 유료니까 잘 생각해보자.. 일단 저는 등록을 했고, 처음에 한번만 보여주고 다시 보려면 키를 다시만들어야한다.. 그러니까 꼭 저장해두자 ! 


https://platform.openai.com/account/api-keys

 

OpenAI API

An API for accessing new AI models developed by OpenAI

platform.openai.com

 

예제는 일단 langchain 버전도 매주매주가 다르게 변하다보니 설정 수정과 신버전 업데이트를 진행했어야했다. 

 

1. langchain을 신버젼으로 업그레이드 

2. ts.config.json target을 'es2020'으로 변경해준다. 

3. tsup.config.js에서 format에서 'cjs'를 삭제해줍니다. 

4. .env.exmaple 을 .env로 변경해줍니다. 

 

그래야 비로소 빌드 및 실행이 됩니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import * as dotenv from "dotenv";
import { OpenAI } from "langchain/llms/openai";
 
dotenv.config();
 
const model = new OpenAI({
  modelName: "gpt-3.5-turbo",
  openAIApiKey: process.env.OPENAI_API_KEY,
});
 
const res = await model.call(
  "How many members are in BTS? and what is the name of the leader?"
);
 
console.log(res);
cs

 

 

후 신기하다 이제 이걸로 뭘 만들 수 있을지 한번 만들어보고 싶다. 

'Study > Langchain' 카테고리의 다른 글

Prompt Engineering  (0) 2023.09.10
Machine Learning Concept  (0) 2023.09.04