반응형

목차  LangChain - Get started

  1. Introduction (이번 포스팅 내용)
  2. Installation
  3. Quickstart
  4. Security

 

지난 두번의 포스팅에서 OpenAI API에 대한 개요와 활용하기 위한 기본적인 방법에 대해서 알아보았습니다. 이번에는 보다 복잡하고 쓸만한 어플리케이션을 만들기 위해서 필요한 랭체인(LangChain)이라는 라이브러리에 대해서 알아보겠습니다. 

일반적으로 OpenAI API를 그대로 쓰는 것 보다는 더 복잡하고 특정 업무를 처리하기 위한, 그런 어플리케이션을 만들어 사용합니다. 그도 그럴 것이 안그러면 그냥 ChatGPT의 웹을 이용하면 되겠지요. 그러나 특정 업무를 처리하기 위한, 특별한 어플리케이션을 만들려면 많은 추가적인 노력이 필요합니다. 이러한 노력을 줄여주는 라이브러리가 바로 랭체인 입니다. 이전 마지박 포스팅에서 언급한 것처럼, 살짝 특별한 대답을 위하는 경우에 가장 간단한 방법은 프롬프트 엔지니어링(Prompt Engineering)이라고 불리우는 방법으로, 사용자 입력 내용에 더하여 미리 설정된 문구를 함께 제공하는 방법이 있습니다. 이 방법은 쉽지만 한계가 많이 있습니다. 따라서 다양한 방법으로 어플리케이션의 품질을 높이는 방법이 필요한데요, 이러한 개발에 도움을 주는 라이브러리가 바로 랭체인입니다. 그래서 오늘은 먼저 랭체인의 개요에 대해서 알아보고자 합니다.

 

먼저, 주요 내용은 아래와 같은 페이지를 참조했음을 알립니다.

https://python.langchain.com/docs/get_started/introduction

 

랭체인(LangChain) 이란

LangChain 은 프레임웍입니다.  언어모델을 이용해서 어플리케이션을 개발할 때 어플리케이션이 맥락을 이해하고 추리 할 수 있도록 랭체인이 도와줍니다. 즉, 랭체인을 이용하면 언어모델을 이용한 어플리케이션이 맥락을 더 잘 이해하고, 추리를 더 잘 하게 만들 수 있습니다. 더 똑똑하게 만들 수 있습니다.

LangChain 프레임웍은 다음과 같이 4가지 파트로 구성됩니다.

  • LangChain Libraries: 파이썬과 자바스크립트 라이브러리 입니다. 이것은 많은 콤포넌트들 간의 연결과 통합을 제공합니다. 예를들면, 컴포넌트들을 체인, 에이전트와 연결하여 기본 실행 환경을 제공하고 바로 쓸수 있는 체인과 에이전트를 제공합니다.
  • LangChain Templates: 다양한 종류의 작업을 위한 쉽게 배포할 수 있는 참조 아키텍처의 집합입니다.
  • LangServe: LangChain을 REST API로 배포하기 위한 라이브러리 입니다.
  • LangSmith: LLM 프레임웍하에서 개발되고 랭체인으로 유연하게 연결된 채인들을 디버그하고, 테스트, 평가 그리고 모니터링 할 수 있도록 기능을 제공하는 개발자 플랫폼입니다.

이러한 제품들을 이용하면 어플리케이션 라이프사이클을 단순하게 만듭니다. 개발, 제품화, 배포 등에서 활용됩니다.

  • Develop: 라이브러리를 이용하여 어플리케이션을 작성하고 참조 템플릿을 이용해서 개발을 시작할 수 있습니다. 즉, 밑바닥부터 시작하는 것이 아니라 라이브러리 import, 호출 만으로 쉽게 어플리케이션을 개발 할 수 있습니다.
  • Productionize: 랭스미스를 사용해서 여러분이 만든 체인을 조사, 테스트, 모니터링 할 수 있습니다. 그래서 여러분은 자신감을 가지고 지속해서 어플리케이션을 개선/배포 할 수 있습니다. 정확히 어떻게 돌아가는지 확인하고, 검증, 모니터링해서 어플리케이션의 품질을 확인할 수 있습니다.
  • Deploy: 랭서브를 이용해서 어떤 체인이든지 API로 바꿀 수 있습니다. 라이브러리를 이용하여 필요한 어플리케이션을 만들면 쉽게 API화 할 수 있습니다. 즉, 쉽게 Backend를 만들 수 있습니다.

보시는 것처럼 랭체인의 파트 들이 개발 라이프 사이클에 각각 녹아 들어가서 사용됩니다.

 

LangChain Libraries

랭체인 패키지들의 가치있는 주요 도구들은 바로 콤포넌트들과 미리 개발된 체인들입니다.

  1. Components: 구성 가능한 툴과 언어모델과의 동작을 통합합니다. 여러분이 랭체인 프레임웍의 일부를 사용하던 안하던 간에, 콤포넌트들은 모듈화되어있고 사용하기 쉽습니다.
  2. Off-the-shelf chains: 상위 수준의 작업을 완수하기 위한 콤포넌트들의 (미리 만들어진) 빌트인 체인 집합을 말합니다.

빌트인 체인들은 랭체인을 사용한 어플리케이션의 개발 시작을 쉽게 해줍니다. 콤포넌트들은 이런 빌트인 체인들을 이용해서 기존 체인을 쉽게 수정하고 새로운 체인을 만들수 있습니다. 

랭체인 라이브러리 자체는 아래 3 개의 다른 패키지들로 구성됩니다.

  • langchain-core: 기본 추상화 모듈과 랭체인 표현언어(LCEL: LangChain Expression Language) 패키지입니다.
  • langchain-community: 제3자들의 개발을 통합하는 패키지입니다. 패키지에는 Models I/O, Retrieval, AgentTooling 모듈이 있습니다.
  • langchain: 체인, 에이전트, 그리고 어플리케이션의 인지 아키텍처를 보완하는 회수 전략(retrieval strategies)들의 패키지입니다.

 

Get started: 시작하기

여기에서는 어떻게 랭체인을 설치하고 여러분의 환경에 맞게 설정하고 만드는 것을 시작하는지 알려줍니다. 관련해서 별도 포스팅 예정입니다.

여러분이 첫번째 랭체인 어플리케이션을 만듬으로써 랭체인에 좀더 익숙해지도록 Quickstart 가이드를 따라해 보시기 바랍니다.

여러분이 보안 모범 사례 를 읽어 봄으로써 랭체인을 개발할 때 더욱 안전하게 만들어 보세요.

 

 

LangChain Expression Language (LCEL)

LCEL은 체인을 구성하기위해 선언적인 방법을 사용합니다. LCEL은 하루만에 프롬프트와 LLM의 간단한 체인부터 가장 복잡한 체인까지 코드 변경 없이 프로덕션에 프로토타입을 배포할 수 있도록 설계되었습니다. 이내용도 별도 포스팅 예정입니다. 여기서는 랭체인의 체인을 만들 떼 쉬운 방법이 (LCEL) 있구나 정도만 이해하시면 될 것 같습니다.

  • Overview: LCEL과 그 장점들
  • Interface: 객체들을 위한 표준 인터페이스
  • How-to: LCEL의 주요 기능
  • Cookbook: 공통 작업을 완료하기 위한 예시 코드

 

Modules

랭체인은 표준, 확장가능한 인터페이스와 통합을 위해 다음의 모듈들을 제공합니다.

     Model I/O :  언어 모델과의 인터페이스 제공

     Retrieval :  어플리케이션 특화 데이터와의 인터페이스 제공

     Agents :  모델들이 주어진 상위 수준의 지시문을 이용하여 어떤 툴을 선택 할지를 제공하는 모듈

이러한 모듈들을 개발에 이용하여 어플리케이션을 만들게 됩니다. 따라서 어떻게 보면 개발자에게는 제일 중요한 파트라고 할 수 있습니다.

 

Examples, ecosystem, and resources

Use cases: 사용사례

Integrations: 통합 integrations.

 

Guides: 랭체인을 활용한 개발 모범 사례

 

API reference   파이썬 패키지에서 사용하기 위한 랭체인 클래스와 메소드들에 대한 문서 제공

 

Developer's guide

 

Community

 

아래는 내용을 좀더 자세히 설명하는 동영상 입니다.

https://youtu.be/HtmpB9CAdHY

 

 

 

 

반응형
반응형
langchain 설치 (pip install langchain) 중에 아래와 같은 에러 발생
 
Error Message:
 
In file included from src/greenlet/greenlet.cpp:9:      /Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk/usr/include/c++/v1/cstdlib:135:9: error: no member named 'at_quick_exit' in the global namespace      using ::at_quick_exit _LIBCPP_USING_IF_EXISTS;            ~~^      /Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk/usr/include/c++/v1/cstdlib:136:9: error: no member named 'quick_exit' in the global namespace      using ::quick_exit _LIBCPP_USING_IF_EXISTS;            ~~^      2 errors generated.      error: command '/usr/bin/clang' failed with exit code 1      [end of output]    note: This error originates from a subprocess, and is likely not a problem with pip.  ERROR: Failed building wheel for greenletFailed to build greenletERROR: Could not build wheels for greenlet, which is required to install pyproject.toml-based projects(venv) $ 
 
에러 메시지의 이미지

 

에러 내용을 자세히 보면 /usr/bin/clang 과 관련해서 문제가 있다고 나와서 인터넷 검색해보니 아래와 같은 페이지가 나왔음.

How to fix Error: command ‘/usr/bin/clang’ failed with exit code 1?

 
여기서 권장하는 대로 여러가지를 upgrade하고 나니 잘 됬음.
 
1,2,3 brew install openssl re2
 
이렇게 업그레이드 하고 다시 install langchain을 하니 grpcio error가 발생했음.
그래서 잘 돌아가는 가상환경에서 grpcio의 버전을 확인해서 설치를 했으나
 
실패
 
다시 그냥 langchain을 설치하려하니 이번에는 아래 같은 에러 발생
 
  note: This error originates from a subprocess, and is likely not a problem with pip.  ERROR: Failed building wheel for greenletFailed to build greenletERROR: Could not build wheels for greenlet, which is required to install pyproject.toml-based projects
 
내용을 뜯어 보니 greenlet이 문제 인 것 같아서..
다시 잘 돌아가는 가상 환경에서 greenlet이 있는지 찾아보고 같은 버전으로 설치
 
이런 젠장, 그래도 안되서 인터넷을 찾아보니 아래 명령을 실행하라고...
 
pip install --only-binary :all: greenlet
 
이렇게 하는 이유를 아래와 같이 설명하고 있는데..
 
Python packages are often distributed as "wheels" (.whl files), which are pre-compiled binary packages. Try installing "greenlet" and "Flask-SQLAlchemy" using wheels instead of source distribution`
 
이말을 풀어보면, 소스 배포형태에서 wheels 를 사용해서 설치하지말고 pre-compiled된 바이너리 패키지를 이용해서 설치하니까 잘 되더라 라는 의미임.
 
음.... 그러니까 소스를 가져다가 컴파일해서 쓰러면 컴피일과 관련 라이브러리, 경로 환경 등 여러가지가 맞아야 설치가 되는 데....바이너리 패키지를 설치하면 이런 복잡한 것 필요없이 쉽게 설치가 되더라 라는 의미로 이해됨.
 
이러고 나서 langchain을 설치하니까 잘 설치됨.
 
즉, 아래 명령 실행 후 langchain을 설치 했음.
pip install --only-binary :all: greenlet
 
 
 
 
 
반응형
반응형

 

Cannot import name OpenAI from openai 그리고 langchain 설치

 

 

Error Message:

Cannot import name OpenAI from openai

 

잘 돌던 OpenAI API 프로그램인데 갑자기 에러를 발생 시킴

Cannot import name OpenAI from openai

 

원인:

써치 결과 openai 버전차이로 발생한 에러임. 

잘 돌아가는 가상환경에서의 openai 버전을 확인해보니 1.3.6

안돌아가는 가상환경의 openai 버전을 확인해보니 0.27.0

인터넷 검색결과 1.2.0 이상이어야 에러가 안난다고함.

 

해결:

그래서 안돌아가는 가상환경에서 아래와 같이 업그레이드 실행하여 해결

pip install --upgrade openai==1.2.0

 

OpenAI API를 사용하다보니 많은 에러가 발생한다. 원인은 주로 버전간 차이 모델별 제공 파라메터 차이인 것 같음.

 

 

 

반응형
반응형

ChatGPT의 API를 사용하면 직접 만든 앱/어플리케이션에서 ChatGPT가 대답하는 것 처럼 개발할 수 있습니다.
이번 내용은 이것을 위한 기본적인 흐름과 코드 내용을 배워 보는 것 입니다. 그래서 사용자가 질문을 입력하면 ChatGPT가 대답하는 대화하는 어플리케이션 프로그램을 만드는 것 입니다.

 

사전 준비 사항

ChatGPT API 사용을 위해서는 먼저 OpenAI에 가입이 되어 있어야 하고 API사용을 위한 [0.1]API Key를 발급 받아야 합니다. API Key란, API를 호출할 때 허가 받은(Credit이 설정되어있는) 사람이 호출하는 것인지 아닌지를 확인하기 위해서 미리 만들어진 텍스트를 말합니다. 'sk-'로 시작하며 예를 들면 다음과 같습니다.

sk-ABCDEFGHIJ1234567890ABCDEFGHIJ1234567890ABCDEFGH

 
개발 환경으로는 Google 의 CoLab을 이용할 예정이며 언어는 파이썬을 사용하겠습니다. Colab은 Google에서 제공하는 온라인 무료/유료 주피터 노트북 서비스입니다. 크롬 브라우저 사용을 권장하고요. 크롬에서 구글 로그인 후 여기를 클릭하시면 [0.2]새로운 노트북 파일을 만들 수 있습니다. 또는 여기 https://colab.google/ 를 통해 New notebook 버튼을 클릭합니다. 그러면 아래와 같은 온라인 주피터 노트북이 열립니다.

 

더보기

여기서 잠깐 : 노트북 기본 사용법

사용방법은 연결하고 작성하고 실행하는 것 입니다.

연결

오른쪽 위에 있는 연결 버튼을 클릭해서 화면에 보이는 프로그램과 실제 파이썬을 실행시킬 프로그램을 연결합니다. 일반 주피터 노트북에서는 이 실행 프로그램을 커널이라는 용어를 사용하는데 Colab에서는 실행 프로그램(커널)의 연결 뿐만아니라 실행된느 하드웨어 서버도 선택하여 연결 할 수 있습니다. 

작성

가운데 부분에 있는 박스 영역을 쎌이라고 말합니다. 쎌을 한번 클릭하면 작성모드로 변하고 작성모드에서 클릭하면 선택 모드로 바뀝니다. 작성 모드에서 실행하려는 파이썬 코드 내용을 입력하여 프로그램을 작성합니다.

실행 

실행 시키고자하는 프로그램이 작성된 쎌을 선택하고 Shift와 Enter를 같이 누르면 쎌의 내용이 실행됩니다. 또는 쎌의 왼쪽에 보이는 삼각형 버튼을 클릭하면 코드나 텍스트를 입력할 수 있습니다. 

 
이렇게 해서 여러분도 온라인 파이썬 개발 환경을 가지게 되셨습니다.
 
QuickStart 에서도 나오지만 API 사용을 위해서 크게 3단계로 진행합니다. 1. 파이썬을 설정하고, 2. API Key를 사용할 수 있게 설정한 뒤에, 3. 필요한 프로그램에서 API Key와 필요한 함수를 호출하여(프로그램을 작성하여) ChatGPT의 기능을 사용할 수 있습니다.

 

1. 파이썬 설정

가장 먼저 할일은 파이썬을 설정 하는 것 입니다. 그런데 우리는 CoLab을 사용할 예정이어서 별도로 파이썬을 설치할 필요가 없습니다.  로컬 PC에서 해보고 싶으신 분은 이전 포스팅 또는 OpenAI -> Docs -> Quickstart의 파이썬 설치/설정 부분을 참고해주세요.
CoLab을 사용할 경우 파이썬 설치는 필요 없지만 필요한 라이브러리는 설치해 주어야 합니다. 물론 CoLab이 ML/AI 개발에 필요한 많은 라이브러리를 설치된 상태로 제공되기 때문에 sci-kit learn 같은 라이브러리는 import만 해서 사용할 수 있습니다. 그러나 openai는 기본 설치가 되어있지 않기 때문에 직접 설치해 주어야 합니다. [1.1]아래의 명령어로 설치할 수 있습니다.

!pip install openai
더보기

(명령어의 제일 앞에 !가 있는 이유는 Colab 주피터 노트북의 쎌에서 shell 명령을 실행하기 위해서는 명령어 제일 앞에 !를 붙여 줘야 합니다.  즉, 로컬 PC 터미널이나 명령창에서 실행되기를 원하는 명령어의 경우에는 제일 앞에 !(느낌표)가 필요 합니다.) 이러한 방법으로 라이브러리를 설치할 수 있습니다. 

 

다른 필요한 라이브러리와 함께 사용하기 위해서 설치된 버전을 조정해주어야 할 경우가 있습니다. 이런 경우 이미 설치된 라이브러리의 삭제가 필요한 데 이때는 아래의 명령어를 사용합니다.

!pip uninstall 라이브러리이름

 

 

2. API Key 설정

API Kye 설정이란, API Kye를 호출 할 때 같이 전송할 수 있도록 준비하는 것을 말합니다.  OpenAI 홈페이지에서 API Key를 만듭니다.
OpenAI -> API Keys 메뉴 페이지에서 Create new secret key 번튼을 눌러서 새로운 API Key를 만들 수 있습니다.

주피터 노트북의 빈 쎌에 아래의 [2.1]내용을 입력하고 Shift와 Enter를 같이 누르거나 쎌 왼쪽에 있는 삼각형을 클릭하여 쎌을 실행시킵니다.

import os
os.environ['OPENAI_API_KEY']='복사한APIKey내용'

위의 내용은 환경변수 'OPENAI_API_KEY'에 복사한APIKey내용을 설정하는 명령 입니다.
 

3. 어플리케이션 작성

자, 이제부터는 위에서 작성한 환경변수를 설정하는 프로그램과 같이 어플리케이션 로직이 들어있는 파이썬 코드를 작성하면 됩니다.
지난 포스트에서 QuickStart에 있는 코드를 실행해 보았습니다. 이번에는 OpenAI Example 에서 하나를 진행해 보겠습니다. 위의 내용 까지 작성하고 실행한 colab 노트북 쎌의 아래쪽에 새로운 쎌을 하나 만들고 [3.1]다음의 코드를 입력하고 실행합니다.

# This code is for v1 of the openai package: pypi.org/project/openai
from openai import OpenAI
client = OpenAI()

response = client.completions.create(
  model="gpt-3.5-turbo-instruct",
  prompt="The following is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly.\n\nHuman: Hello, who are you?\nAI: I am an AI created by OpenAI. How can I help you today?\nHuman: I'd like to cancel my subscription.\nAI:",
  temperature=0.9,
  max_tokens=64,
  top_p=1,
  presence_penalty=0.6,
  stop=[" Human:", " AI:"]
)

이 코드를 실행 시키면 prompt 내용이 chatGPT 모델에 전달되고 회신 받은 내용이 response에 저장됩니다. 전달자 중에 prompt의 내용을 한글로 변환하면 다음과 같습니다. "이어지는 내용은 AI 어시스턴트와의 대화입니다. 어시스턴트는 도움이되고, 창의적이고, 영리하며 매우 친절합니다. 사람: 안녕, 너는 누구니? AI: 나는 OpenAI에서 만든 AI입니다. 어떻게 도와드릴까요? 사람: 나는 가입을 취소하고 싶어 AI: " 
그럼이제 반환된 response 내용을 살펴 볼까요! 아래와 같이 [3.2]쎌에 response 를 입력하고 실행합니다.

출력된 내용을 살펴보니 중간에 text의 값으로 AI 어시스턴트의 회신 내용이 보입니다. " Okay, I can definitely help you with that, May I know the reason for cancellation? ......". [3.3]어시스턴트의 회신 내용만 보기위해서 아래와 같이 쎌에 입력하고 실행합니다.

response.dict()['choices'][0]['text']

지금까지 한번의 대화 턴(Turn)이 있는 하나의 질문과 대답을 보았습니다. 계속적인 대화를 위해서 아래와 같은 파이썬 코드를 작성할 수 있습니다. while 문을 통해 반복 실행하도록 했으며, if 구문을 두어서 사용자가 입력한 값이 exit이면 while 문을 빠져나가서 종료하도록 하였습니다. 사용자가 질문을 입력한 것이라면 그내용을 chatGPT에 보내서 회신을 받고 회신 받은 내용을 출력해주는 명령을 작성하였습니다. [3.4]아래 내용을 복사하여 쎌에 입력후 실행해 보세요.

while True:
  prompt = input("질문을 입력하세요: ")
  if prompt == 'exit': break
  response = client.completions.create(
    model="gpt-3.5-turbo-instruct",
    prompt=prompt,
    temperature=0.9,
    max_tokens=64,
    top_p=1,
    presence_penalty=0.6,
    stop=[" Human:", " AI:"]
  )
  print(response.dict()['choices'][0]['text'])

제가 작성하고 실행한 결과는 아래와 같습니다.

 

더보기

추가 실습 방법:

client.completions.create() 함수에 있는 전달자의 값들을 바꾸어가면서 ChatGPT의 회신 내용을 비교해 보세요. temperature는 허풍, 거짓말 등 꾸며낸 이야기의 정도를 어떻게할지 조정할 수 있습니다. 0이면 꾸며내지 말라는 것이며 1을 최대한 꾸며내라는 것입니다. 이렇게 꾸며낸 이야기를 Hallucination이라고 하여 환각의 정도를 조정할 수 있습니다. max_tokens는 입력과 출력을 합친 단어수라고 생각하시면 됩니다. 간단히 말하면 회신 내용의 길이를 조정할 수 있습니다. top_p는 회신 내용의 건수 이며, presence_penalty는 동일한 답변을 조정하는 전달자 입니다.

 
이것으로 우리가 목표했던 계속적인 대화를 하는 간단한 어플리케이션이 만들어졌습니다. 이 프로그램은 ChatGPT의 대화를 OpenAI가 제공하는 웹서비스에서 사용하는 것이 아니라 별도의 어플리케이션 프로그램에서 사용할 수 있게 했다는 의미가 있습니다. 이후에는 프롬프트 엔지니어링 기법을 이용하여 보다 잘 알아 듣는 챗봇 어플리케이션을 만들어 보겠습니다.
 
안되는 부분이나 더 궁금한 점, 또는 이상한 점 있으시면 언제든지 댓글 달아주세요.
감사합니다.
 

반응형

'인공지능-기계학습 > OpenAI' 카테고리의 다른 글

OpenAI API 활용 방법 : 기초 1.  (0) 2023.11.24

+ Recent posts