brunch

네이버 AI 1탄-2. 네이버 랭체인 연동-2025

by Master Seo

<1> 랭체인 주요 모듈 5가지 알아보기

<2> 랭체인-모델 I/O - 코랩 (실습)

<3> 랭체인-데이터 연결1 - 코랩 (실습)

<4> 네이버 클라우드 참고 사이트

<5> Indexing and Retrieval





<1> 랭체인 주요 모듈 5가지


1

랭체인 주요 모듈 5가지

슬라이드12.JPG



2

랭체인

슬라이드10.JPG








<2> 랭체인-모델 I/O - 코랩 (실습) - 4장


1

모델 I/O (Model I/O)

언어 모델과 상호 작용을 위한 모듈이다.


3가지가 있다.

LLM에 전달될 프롬프트 생성

답변을 받기 위해 랭귀지 모델 API 호출

답변 출력

20 modelio.png



2


1) Model I/O - LLM에 전달될 프롬프트 생성

# 전달할 프롬프트만 표시하는 예제이다.

# 코랩 접속 실습 - alt + enter 실행이다.




from langchain import PromptTemplate

template = "{product}를 홍보하기 위한 좋은 문구를 추천해줘?"

prompt = PromptTemplate(

input_variables=["product"],

template=template,

)

prompt.format(product="카메라")



결과

카메라를 홍보하기 위한 좋은 문구를 추천해줘?




2) Model I/O - 답변을 받기 위해 랭귀지 모델 API 호출

# LLM 호출 , 직접 api 입력하고 응답 받아보자.

# LLM을 호출해 물어보자.

# import os 해서 소스에 OPENAI_API_KEY를 넣고 실행하는 방법과 Colab에 넣어둔 API_KEY를 호출하는 방법이 있다. 여기서는 import os 해서 소스에 API_KEY를 넣고 실행 하자.




from langchain_community.chat_models import ChatClovaX

chat = ChatClovaX(model="HCX-003")

messages= "지희가 강아지를 키우고 있습니다. 지희가 키우고 있는 동물은?"

ai_msg = chat.invoke(messages)

ai_msg



AIMessage(content='강아지 입니다




3) Model I/O - 출력 형식을 정하자.

# 답변 출력 , 콤마로 구분하는 출력을 내보자.



# 입력1-1


from langchain.output_parsers import CommaSeparatedListOutputParser

from langchain.prompts import PromptTemplate

from langchain_community.chat_models import ChatClovaX


chat = ChatClovaX(

model="HCX-003",

)



output_parser = CommaSeparatedListOutputParser() #파서 초기화


format_instructions = output_parser.get_format_instructions() #출력 형식 지정


prompt = PromptTemplate(

template="7개의 팀을 보여줘 {subject}.\n{format_instructions}",

input_variables=["subject"],

partial_variables={"format_instructions": format_instructions}

)


query = "한국의 야구팀은?"



# 출력 결과 생성

output = chat.predict(text=prompt.format(subject=query))


# 출력에 대한 포맷 변경

parsed_result = output_parser.parse(output)

print(parsed_result)





['두산 베어스', 'LG 트윈스', '키움 히어로즈', 'SSG 랜더스', 'NC 다이노스', '삼성 라이온즈', 'KIA 타이거즈']





# 질문 변경해서 테스트


query = "한국의 축구팀은?"



['FC 서울', '전북 현대 모터스', '수원 삼성 블루윙즈', '울산 현대', '포항 스틸러스', '성남 FC', '인천 유나이티드']




# 질문 변경해서 테스트


query = "한국의 농구팀은?"


['서울 삼성 썬더스', '인천 전자랜드 엘리펀츠', '원주 DB 프로미', '부산 KT 소닉붐', '서울 SK 나이츠', '창원 LG 세이커스', '고양 오리온스']



# 실습







<3> 랭체인-데이터 연결1 - 코랩 (실습)



1

네이버 클로바 스트디오에서 정보 확인


CLOVA Studio > CLOVA Studio 바로 가기 > 익스플로러 > 임베딩 v1 > 시작하기


테스트 앱 생성



# 이미 생성한 앱이 있다면 확인


오른쪽 위 이름 > 앱 신청 현황 > 테스트 앱 > 자세히





2

# NCP_CLOVASTUDIO_APP_ID 확인법


익스플로러 > 임베딩 V1 사용 필수 = model="clir-emb-dolphin" 사용시 = 디폴트

임베딩 V2 아님


40 v2다음.png



# 3가지 값을 복사해 놓는다.





3

# app id 설정


import os

os.environ["NCP_CLOVASTUDIO_APP_ID"] = input("테스트/서비스 App ID 입력: ")




4

# 기본 모델 사용하도록 하자.


model="clir-emb-dolphin"


https://clovastudio.ncloud.com/explorer/tools/embedding



5

# 모델 확인


from langchain_community.embeddings import ClovaXEmbeddings

embeddings = ClovaXEmbeddings(

model="clir-emb-dolphin", # 이용할 테스트 앱 또는 서비스 앱에 해당하는 모델 (기본값: clir-emb-dolphin)

# app_id="..." # App ID를 환경 변수로 설정하지 않고 이용하려면 직접 입력

)




6

# 쿼리


query = "CLOVA Studio는 HyperCLOVA X 언어 모델을 활용하여 AI 서비스를 손쉽게 만들 수 있는 개발 도구입니다."

single_vector = embeddings.embed_query(query)




7

# 전체 코드


import os

import time

import httpx # Import httpx for error handling


# Ensure your API keys and App ID are correctly set:

os.environ["NCP_CLOVASTUDIO_API_KEY"] = "NTA0Iyvs+M" # Replace with your actual API key

os.environ["NCP_APIGW_API_KEY"] = "OOiWeIfDJEIsinKpG" # Replace with your actual API key

os.environ["NCP_CLOVASTUDIO_APP_ID"] = "7a1b5e593a7" # Replace with your actual App ID


from langchain_community.embeddings import ClovaXEmbeddings


# Verify that the model name is correct:

embeddings = ClovaXEmbeddings(

model="clir-emb-dolphin"

)


query = "CLOVA Studio는 HyperCLOVA X 언어 모델을 활용하여 AI 서비스를 손쉽게 만들 수 있는 개발 도구입니다."

single_vector = embeddings.embed_query(query)

text1 = "CLOVA Studio는 HyperCLOVA X 언어 모델을 활용하여 AI 서비스를 손쉽게 만들 수 있는 개발 도구입니다."

text2 = "LangChain은 언어 모델 기반 애플리케이션 개발을 지원하는 오픈소스 프레임워크입니다."

document = [text1, text2]

multiple_vector = embeddings.embed_documents(document)



# Wrap the embed_documents call in a try-except block:

try:

multiple_vector = embeddings.embed_documents(document)

print("Embedding successful:", multiple_vector)

except httpx.HTTPStatusError as e:

print(f"Error embedding documents: {e}")

print("Check your API credentials, App ID, and input data.")

except Exception as e:

print(f"An unexpected error occurred: {e}")





# 실행 결과


Embedding successful: [[-0.1444314, -0.42066774, -0.49758446, 1.635389, -1.2320397, -1.0212829, -0.4536954, 1.3893111, 0.42442882, 1.1943156, -1.1166681, 1.037053, 1.3693014, 1.0157889, -0.35351172, 0.27527523, -0.8842913, -0.21360481, 0.7530616, 0.9029042, -0.0005863653, -0.303001, 1.071709, 0.9480032, 1.218421,




# code






<4> 네이버 클라우드 참고 사이트


1

# LangChain을 통해 CLOVA Studio의 HyperCLOVA X 모델을 이용하는 예제 코드


https://guide.ncloud-docs.com/docs/clovastudio-dev-langchain#HyperCLOVAX%EB%AA%A8%EB%8D%B8%EC%9D%B4%EC%9A%A9


2

랭체인 연동 문서


https://guide.ncloud-docs.com/docs/clovastudio-dev-langchain#HyperCLOVAX%EB%AA%A8%EB%8D%B8%EC%9D%B4%EC%9A%A9



3

공식 문서

https://python.langchain.com/docs/integrations/text_embedding/naver/






<5> Indexing and Retrieval


1

# Create a vector store with a sample text

from langchain_core.vectorstores import InMemoryVectorStore

text = "CLOVA Studio is an AI development tool that allows you to customize your own HyperCLOVA X models."

vectorstore = InMemoryVectorStore.from_texts(

[text],

embedding=embeddings,

)


# Use the vectorstore as a retriever

retriever = vectorstore.as_retriever()


# Retrieve the most similar text

retrieved_documents = retriever.invoke("What is CLOVA Studio?")


# show the retrieved document's content

retrieved_documents[0].page_content



2

single_vector = embeddings.embed_query(text)

print(str(single_vector)[:100]) # Show the first 100 characters of the vector




다음

https://brunch.co.kr/@topasvga/4225


keyword
매거진의 이전글네이버 AI 1탄-1. 네이버 생성형AI 개발환경 구축