brunch
매거진 NCP AI

Lab4. Langchain 연동

by Master Seo

1

실습 코드 다운로드



2

패키지 설치

!pip install U langchain naver



2

C LOVA Studio Key 등록


import getpass

import os

if not os.getenv("CLOVASTUDIO_API_KEY"):

os.environ["CLOVASTUDIO_API_KEY"] = getpass.getpass(

"Enter your CLOVA Studio API Key:


키 등록


4

파라미터 설정

from langchain_naver import ChatClovaX

chat = ChatClovaX(

model="HCX 005",

temperature=0.5,

max_tokens=None,

timeout=None,

max_retries=2,

# other

)



5. 템플릿 작성 : 요약 보고서 작성


from langchain.prompts import PromptTemplate, ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages(

("system", 너는 전문적인 보고서 작성 AI 야 . 사용자의 요청에 맞춰 명확하고 간결하게 요약 보고서를 작성

해 줘

("human", 다음 내용을 요약하고 , 임원에게 전달할 형식으로 작성해 줘 n n{document}"),

)

chain = prompt | chat

user_input = """

오늘 회의에서는 마케팅팀이 상반기 광고 성과에 대해 보고했고

전년 대비 클릭률이 25% 상승했고 , 전환 율은 18% 증가했음

다만 SNS 채널의 참여율은 하락했고 , 관련 개선 방안을 다음 주까지 제출하기로 함

"""

response=chain.invoke(

"document": user_input

)

print(response.content)




6. 멀티턴 프롬프트 작성



from openai import OpenAI

from langchain.prompts.chat import ChatPromptTemplate

from langchain.schema import HumanMessage, AIMessage

#

� 1. 초기 메시지와 프롬프트 정의

def create_base_prompt():

return [

("system", 너는 정중한 고객센터 AI 야 . 항상 고객의 질문에 친절하게 답변해

#

� 2. 대화 히스토리를 기반으로 메시지 생성

def build_chat_prompt(history):

return ChatPromptTemplate.from_messages(history)

#

� 3. HyperCLOVA X API 호출 함수

def call_llm(client, messages):

print("Messages being sent to API:")

print(messages) # Add print statement here

response = client.chat.completions.create(


model="HCX 005",

messages=messages

return response.choices[0].message.content

#

� 4. 메시지 변환 (LangChain 객체 → OpenAI 형식

def convert_to_openai_messages(formatted_messages):

role_map = {

"system": "

"hum an": "user",

"ai": "

openai_messages = [{"role": role_map.get(msg.type, msg.type), "content": msg.content} for msg in

formatted_messages]

print("Formatted messages before conversion:")

print(formatted_messages) # Add pri nt statement here

print("Converted OpenAI messages:")

print(openai_messages) # Add print statement here

return openai_messages

#

� 5. 메인 대화 루프

def chat_loop():

# CLOVA OpenAI compatible 클라이언트

client = OpenAI(

api_key=" K EY ", CLOVA Studio API 키

base_url="https://clovastudio.stream.ntruss.com/v1/openai"

# 대화 히스토리 초기화

history = create_base_prompt()

print(" � 고객센터 챗봇에 오신 것을 환영합니다 . 종료하려면 'exit' 입력

while True:

user_input = input(" n � 사용자 :

if user_input.lower() in ["exit", "quit"]:

print(" � 챗봇을 종료합니다

break

# 대화 기록에 사용자 질문 추가

history.append(("human", user_input))

# 프롬프트 생성 및 메시지 포맷

prompt = build_chat_prompt(histor y)


formatted = prompt.format_messages()

# OpenAI 호환 메시지로 변환 후 API 호출

messages = convert_to_openai_messages(formatted)

ai_response = call_llm(client, messages)

print(f" � 챗봇 : {ai_

# AI 응답도 히스토리에 추가

history.append(("ai", ai_response))

#

� 실행

if __name__ == "__main__":

chat_loop()



keyword
매거진의 이전글Lab 3 . 프롬프트 템플릿