6️⃣LangChain with NeMo-Guardrails

NeMo Guardrails

Neom GuardRails는 대규모 언어 모델(LLM)로 구동되는 스마트 애플리케이션의 정확성, 적절성, 관련성, 안전성 확인을 돕는다. 또한 네모 가드레일에는 기업이 텍스트 생성 AI 앱에 안전성을 추가하는 데 필요한 모든 코드, 예제, 문서가 포함됩니다.

이번 네모 가드레일 출시 배경에는 AI 앱의 강력한 엔진인 LLM이 업계 전반에서 채택되고 있는 상황이 반영됐습니다. LLM은 고객의 질문에 응답, 긴 문서 요약, 소프트웨어 작성, 신약 설계 가속화까지 폭넓게 활용되고 있습니다.

네모 가드레일은 사용자가 이러한 새로운 종류의 AI 기반 애플리케이션을 안전하게 보호할 수 있도록 설계됐습니다.

Image source: NeMo Guardrails GitHub Repo READMEarrow-up-right

  • Input rails(입력 레일): 사용자 입력에 적용됩니다. 입력 레일은 입력을 거부하거나 추가 처리를 중단하거나 입력을 수정(예: 민감한 정보를 숨기거나 문구를 바꾸는 등)할 수 있습니다.

  • Dialog rails(대화 레일): 이는 LLM에 제공되는 프롬프트에 영향을 줍니다. 대화 레일은 표준 형식의 메시지와 함께 작동하며 작업을 실행할지, 다음 단계 또는 응답을 위해 LLM을 소환할지, 미리 정의된 답변을 선택할지 여부를 결정합니다.

  • Execution rails(실행 레일): LLM이 호출해야 하는 사용자 지정 작업(도구라고도 함)의 입력 및 출력에 적용됩니다.

  • Output rails(출력 레일): LLM에서 생성된 출력에 적용됩니다. 출력 레일은 출력을 거부하여 사용자에게 전송되는 것을 차단하거나 민감한 데이터를 지우는 등 출력을 수정할 수 있습니다.

강력한 모델, 견고한 레일

생성형 AI의 안전은 업계 전반의 관심사입니다. 엔비디아의 네모 가드레일은 오픈AI(OpenAI)의 챗GPT(ChatGPT)와 같은 모든 LLM과 함께 작동하도록 설계됐다. 네모 가드레일을 통해 개발자는 LLM 기반 앱을 안전하게 조정하고 회사의 전문 영역 내에 머물도록 할 수 있습니다.

개발자는 네모 가드레일을 통해 세 가지 종류의 경계를 설정할 수 있습니다:

  • 토피컬 가드레일(Topical guardrails): 앱이 원치 않는 영역으로 이탈하는 것을 방지합니다. 예를 들어, 고객 서비스 도우미가 날씨에 대한 질문에는 답변하지 못하도록 방지합니다.

  • 세이프티 가드레일(Safety guardrails): 앱이 정확하고 적절한 정보로 응답하도록 보장합니다. 원치 않는 언어를 필터링하고 신뢰할 수 있는 출처만 언급하도록 강제할 수 있습니다.

  • 시큐리티 가드레일(Security guardrails): 앱이 안전한 것으로 알려진 외부 서드파티 애플리케이션에만 연결하도록 제한합니다.

네모 가드레일을 사용한다면 머신 러닝 전문가나 데이터 사이언티스트가 아니더라도 거의 모든 소프트웨어 개발자는 몇 줄의 코드만으로 새로운 규칙을 빠르게 생성할 수 있습니다.


예시 1. LangChain: NeMo Guardrails

Setup & Data Download

Define Config

config.yamlprompts.yaml 파일을 아래와 같이 생성하여 ./config 디렉토리에 넣습니다.

config.yaml


prompts.yaml

content 지정

프롬프트만 전달하는 대신 전체 대화를 전달할 수도 있습니다.

Integration with LangChain

LangChain의 Runnable에 사용해보자

Guardrails to a Chain (Runnable)

이번에는 LangChain의 LCEL의 Runnable Chain에 사용해 보자

주의 사항은 현재 코드에서 지정한 generate는 python 스크립트에서 동작한다. Jupyter Notebook에서는 결과가 나오지 않고, You are using the sync generate inside async code. You should replace with await generate_async(...) or use nest_asyncio.apply().라는 메시지가 반환된다.


예시 2. Guardrails with ChatHistory

이번에는 Nemo GuardRail을 ChatHistory에 적용해보자.

마찬가지로 generate는 python 스크립트에서 동작하기 때문에 Jupyter Notebook에서는 결과가 나오지 않고, You are using the sync generate inside async code. You should replace with await generate_async(...) or use nest_asyncio.apply().라는 메시지가 반환된다.

Last updated