Getting Started with Solar Chat
๐ ๋ชฉ์ฐจ
Upstage Solar Chat API ์ฌ์ฉ ๊ฐ์ด๋
Solar Chat API๋?
Getting Started with Solar Chat
ํ๋กฌํํธ(Prompt)์ ์ญํ (role) ์ค์
Demo: ํ๋กฌํํธ์ ๋ฐ๋ผ ๋ฐ์ ๋น๊ตํด๋ณด๊ธฐ
1. Upstage Solar Chat API ์ฌ์ฉ ๊ฐ์ด๋
ํ ์คํธ ์์ฑ, ์์ฝ, ๋ฒ์ญ ๋ฑ์ ์์ ์ ์๋ํํ๊ณ ์ถ์๊ฐ์? ๊ทธ๋ ๋ค๋ฉด ์ง๊ธ๋ถํฐ Solar Chat API๋ฅผ ํ์ฉํด ์ง์ ๋ํํ ์ธ๊ณต์ง๋ฅ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ณด๊ฒ ์ต๋๋ค.
์ด ๊ฐ์ด๋๋ Solar LLM์ API๋ก ๋ถ๋ฌ์ ํ ์คํธ ๊ด๋ จ ์์ ์ ์๋ํํ๋ ๋ฒ์ ์๋ ค์ค๋๋ค. ์ด์ ๋ API ๊ฐ๋ ์ ์ดํดํ๋ ๊ฒ์ ๋์ด์, ์ค์ Chat API ๋ฉ์ธ์ง ๊ตฌ์ฑ ๊ทธ๋ฆฌ๊ณ ํ๋กฌํํธ ์์ง๋์ด๋ง๊น์ง ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.
์์ฃผ ๊ฐ๋จํ ์ค์ ๋ง์ผ๋ก, ๊ฐ๋ ฅํ ์ธ์ด๋ชจ๋ธ์ ์ฌ๋ฌ๋ถ์ ์๋น์ค์ ์ฐ๊ฒฐํ ์ ์์ด์!
โ Solar Chat์ ๋ํ ์์ธํ ์ฌ์ฉ ๊ฐ์ด๋๋ documentation์์๋ ํ์ธํ ์ ์์ต๋๋ค.
2. Solar Chat API๋?
Upstage์ Solar ๋ชจ๋ธ ์๋ฆฌ์ฆ๋ ์์ง๋ง ๊ฐ๋ ฅํ ๋๊ท๋ชจ ์ธ์ด๋ชจ๋ธ(LLM)์ ๋๋ค. ๋ฌธ์ ์์ฝ, ์ง์์๋ต, ๋ฒ์ญ ๋ฑ ๋ค์ํ ์ธ์ด ๊ธฐ๋ฐ ์์ ์ ํนํ๋์ด ์์ต๋๋ค.
Solar Chat API๋ ์ด ๋ชจ๋ธ๋ค์ ์น API ํํ๋ก ์ ๊ณตํ์ฌ, ๋๊ตฌ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ค์ด์ค๋๋ค.
Solar Chat์ OpenAI API ํ์์ ์ฌ์ฉํฉ๋๋ค. ํต์ฌ์ chat.compeltions.create()
ํจ์๋ฅผ ํตํด ๋ํ ๋ฉ์ธ์ง(messages)๋ฅผ ๋ณด๋ด๊ณ ์๋ต์ ๋ฐ๋ ๊ฒ์
๋๋ค.
3. Getting Started with Solar Chat
โ
3.1 ๋จ์ผ ์ง๋ฌธ (Single-turn Chat)
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ ๋ฐฉ์์ ๋๋ค. ํ ๋ฒ์ ์ง๋ฌธ๊ณผ ์๋ต์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
๋จ์ผ ์ง๋ฌธ ๊ตฌ์กฐ์์๋ ์ฌ์ฉ์ โ ๋ชจ๋ธ โ ์๋ต์ ํ ์ฌ์ดํด๋ง ์กด์ฌํฉ๋๋ค.
๋ชจ๋ธ์ ์ด์ ๋ํ์ ๋งฅ๋ฝ์ ์ ์ ์๊ณ , ๋จ ๊ฑด์ผ๋ก ์ฃผ์ด์ง ๋ฉ์ธ์ง์ ๋ํด์๋ง ๋ฐ์ํฉ๋๋ค.
# pip install openai
from openai import OpenAI # openai==1.52.2
client = OpenAI(
api_key="up_your_api_key_here",
base_url="https://api.upstage.ai/v1"
)
stream = client.chat.completions.create(
model="solar-pro",
messages=[
{
"role": "user",
"content": "Hi, how are you?"
}
],
stream=True,
)
for chunk in stream:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="")
# Use with stream=False
# print(stream.choices[0].message.content)
โ ํ๋ผ๋ฏธํฐ ๊ตฌ์ฑ
model
์ฌ์ฉํ Solar ๋ชจ๋ธ์ ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค. (solar-pro, solar-mini ์ค ํ1)
messages
๋ํ ๋ด์ฉ, role๊ณผ content๋ฅผ ๋ด์ ๋ฆฌ์คํธ์ด๋ฉฐ, ๊ฐ ํญ๋ชฉ์ ๋์ ๋๋ฆฌ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. role๊ณผ contentํค๋ฅผ ์ฌ์ฉํ์ฌ ๋๊ฐ ์ด๋ค ๋ง์ ํ๋์ง ์ ์ํ ์ ์์ต๋๋ค.
stream
๋ชจ๋ธ ์๋ต์ ์ค์๊ฐ์ผ๋ก ๋ฐ์์ง(True), ์ ๋ถ ์์ฑ๋ ๋ค ๋ฐ์์ง(False)๋ฅผ ์ ํ๋ ์ต์ ์ ๋๋ค. stream=True๋ก ์ค์ ํ๋ฉด ์ค์๊ฐ ์๋ต์ ์คํธ๋ฆฌ๋ฐ ๋ฐฉ์์ผ๋ก ๋ฐ์ ์ ์์ต๋๋ค.
โ ๏ธ ์ฃผ์์ฌํญ
โup_your_api_key_hereโ ๋ฅผ ๋ฐ๊ธ๋ฐ์ ์ค์ api key๋ก ๋ณ๊ฒฝ(โup_xxxxโ)ํ์ฌ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
model
๊ฐ์solar-pro
๋๋solar-mini
์ค ์ ํ ๊ฐ๋ฅํฉ๋๋ค.
AI Initiative ํ๋ก๊ทธ๋จ์ ์ฐธ์ฌํ๊ณ ์๋ค๋ฉด, solar-pro๋ฅผ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ์ค ์ ์์ต๋๋ค. (~2026๋ 3์ 31์ผ) ์ฐธ์ฌ๋ฅผ ์ํ๋ค๋ฉด ๋ค์ ๋งํฌ์์ ์ ์ฒญํ ์ ์์ต๋๋ค. โ LINK
stream=True
์ต์ ์ ์ฌ์ฉํ๋ฉด ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ์ถ๋ ฅ์ด ๊ฐ๋ฅํฉ๋๋ค.
โ๏ธ Stream ํ๋ผ๋ฏธํฐ ์์ธํ ์์๋ณด๊ธฐ
stream = True
๋ชจ๋ธ์ด ์๋ต์ ์์ฑํ๋ ๊ณผ์ ์ ์ค์๊ฐ์ผ๋ก ํ ์ค์ฉ ์ถ๋ ฅํฉ๋๋ค.
๊ธด ์๋ต์ ๊ธฐ๋ค๋ฆด ํ์ ์์ด ์ ์ง์ ์ผ๋ก ์ถ๋ ฅ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ๊ฒฝํ์ด ๋ถ๋๋ฝ์ต๋๋ค.
stream = False
๋ชจ๋ธ์ด ์๋ต์ ์ ๋ถ ์์ฑํ ๋ค ํ ๋ฒ์ ์ถ๋ ฅํฉ๋๋ค.
๊ฐ๋จํ ์์ ์์๋ ์ด ๋ฐฉ์๋ ์ถฉ๋ถํ ์ ํจํฉ๋๋ค.
๐ 3.2 ๋ค์คํด ๋ํ (Multi-turn Conversation)
์ด์ ๋ํ ๋ด์ฉ์ ๊ธฐ์ตํ๋ฉฐ ์ฌ๋ฌ ์ฐจ๋ก ์ง๋ฌธ/๋ต๋ณ์ ์ด์ด๊ฐ๋ ๋ฐฉ์์ ์๋ฏธํฉ๋๋ค.
๋ชจ๋ธ์ ์ด์ ๋ฉ์ธ์ง๋ฅผ ๋ชจ๋ ์ฐธ๊ณ ํ์ฌ ๋ต๋ณ์ ์์ฑํฉ๋๋ค.
์ด์ ์ ๋ํ ๋งฅ๋ฝ์ ์ ์งํ๋ฉฐ ์ฌ๋ฌ ๋ฒ์ ์ํธ์์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
from openai import OpenAI # openai==1.52.2
client = OpenAI(
api_key="up_*************************qP9B",
base_url="https://api.upstage.ai/v1"
)
def chat_with_solar(messages):
response = client.chat.completions.create(
model="solar-pro",
messages=messages
)
return response.choices[0].message['content']
# ๋ํ ์์
messages = [{"role": "user", "content": "Hello, who won the world series in 2020?"}]
response = chat_with_solar(messages)
print("Assistant:", response)
messages.append({"role": "assistant", "content": response})
# ๋ค์ ์ง๋ฌธ
messages.append({"role": "user", "content": "Where was it played?"})
response = chat_with_solar(messages)
print("Assistant:", response)
๐ง ๋ชจ๋ธ์ด ๋ํ ํ๋ฆ์ ์ดํดํ ์ ์๋๋ก ์ด์ ๋ฉ์์ง๋ค์ ๊ณ์ messages ๋ฆฌ์คํธ์ ๋์ ์ํค๋ ๋ฐฉ์์ ๋๋ค.
โ ๊ตฌ์ฑ
messages
๋ ๋ํ์ ๋ชจ๋ ํ๋ฆ์ ๋ฆฌ์คํธ๋ก ๋์ ํฉ๋๋ค.๊ฐ turn๋ง๋ค
user
์ ์ง๋ฌธ๊ณผ โ ๋ชจ๋ธ์ ๋ต๋ณ์ธassistant
ํํ๋ก ๊ณ์ ์ด์ด์ง๋๋ค.
4. ๐ ํ๋กฌํํธ(Prompt)์ ์ญํ (role) ์ค์
ํ๋กฌํํธ๋ ๋ชจ๋ธ์๊ฒ โ๋๋ ์ด๋ค ์ญํ ์ ํ ์งโ, ๋ โ์ด๋ป๊ฒ ๋งํ ์งโ๋ฅผ ์๋ ค์ฃผ๋ ์ค์ ์ ๋๋ค.
ํ๋กฌํํธ๋ฅผ ์ ๋ ฅํ ์ ์๋ ๋ถ๋ถ์ ํฌํจํ์ฌ ํฌ๊ฒ 3๊ฐ์ง role์ ๋ํด ์์๋ด ๋๋ค.
4.1. System Prompt
๋ํ ์ ์ฒด์ ๊ธฐ๋ณธ ํค, ์ฑ๊ฒฉ, ๊ท์น ๋ฑ์ ์ค์ ํ๋ ๊ณณ์ ๋๋ค. ๋ชจ๋ธ์๊ฒ ํ๋ ์ง์นจ(Instruction)์ ๋ด๋ฆฌ๋ ๊ฒ์ด๋ผ๊ณ ์ดํดํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด:
"You are a kind and polite assistant."
โ ์น์ ํ๊ณ ์์ ๋ฐ๋ฅธ ๋ต๋ณ"You are a strict grammar teacher."
โ ๋ฌธ๋ฒ ์ค๋ฅ๋ฅผ ์ง์ ํ๋ ๋ต๋ณ
๐ฏ ๊ฐ์ ์ง๋ฌธ์ด๋ผ๋ ์์คํ ํ๋กฌํํธ์ ๋ฐ๋ผ ๋ต๋ณ ์คํ์ผ์ด ์์ ํ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค!
4.2. User Prompt
์ฌ์ฉ์์ ์ง๋ฌธ์ด๋ ์์ฒญ์ ๋ด๋ ๋ถ๋ถ์ ๋๋ค. ์ฆ, ๋ชจ๋ธ์๊ฒ ์ด๋ค ์์ ์ ํด๋ฌ๋ผ๊ณ ์ ๋ฌํ๋ ์ง์๋ฌธ์ ๋๋ค.
์๋ฅผ ๋ค์ด:
โ์ค๋ ์์ธ์ ๋ ์จ๋ ์ด๋?โ
โ์ด ๊ฒ์๊ธ์ 3์ค๋ก ์์ฝํด์ค.โ
๐ฏ LLM์ ์ด user์ ๋ฐํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก, ๋ค์ ์๋ต(assistant)์ ์์ฑํฉ๋๋ค.
solar์๊ฒ ๊ผญ ๋ง๋ user prompt๊ฐ ๊ถ๊ธํ๋ค๋ฉด solar-prompt-cookbook์ ์ฐธ๊ณ ํด ๋ณด์ธ์. โ LINK
4.3. Assistant
๋ชจ๋ธ์ด ์์ฑํ ๋ต๋ณ, ๋๋ ํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ ๋ถ๋ถ์ ๋๋ค.
์ด์ ์๋ต์ ๊ธฐ์ต์ํค๊ฑฐ๋, ๋ค์ค ํด ๋ํ์์ ๋ํ ํ๋ฆ์ ์ ์งํ ๋ ๊ผญ ํ์ํ ๋ถ๋ถ์ ๋๋ค.
์๋ฅผ ๋ค์ด:
โ์ค๋ ์์ธ ๋ ์จ๋ ๋ง๊ณ , ์ญ์จ 24๋์ ๋๋ค.โ โ ์ฌ์ฉ์ ์ง๋ฌธ์ ๋ํ ์๋ต์ ์ถ๋ ฅํ๊ฑฐ๋,
โ์ด ๊ฒ์๊ธ์ 3์ค ์์ฝ์ ๋ค์๊ณผ ๊ฐ์ต๋๋คโฆโ โ ์์ฒญํ ์์ฝ์ ์ํํ๋ ๊ณณ์ ๋๋ค.
๐ฏ Assistant ๋ฉ์ธ์ง๋ฅผ ๋ช ์ํด์ฃผ๋ฉด ๋ชจ๋ธ์ด ์์ ์ ์ด์ ์๋ต์ ๊ธฐ์ตํ๋ฉฐ ์์ฐ์ค๋ฝ๊ฒ ์ด์ด์ ๋ํ๋ฅผ ๋๋ ์ ์์ต๋๋ค.
5. โ๏ธ Demo: ํ๋กฌํํธ์ ๋ฐ๋ผ ๋ฐ์ ๋น๊ตํด๋ณด๊ธฐ
System Prompt์ ์ํฅ์ ๋น๊ตํด๋ณผ ์ ์๋ ๋ฐ๋ชจ๋ฅผ ์ฒดํํด ๋ณด์ธ์. ์ํ๋ system prompt๋ฅผ ์ ๋ ฅํ๊ณ , ๊ทธ์ ๋ฐ๋ผ ๋ชจ๋ธ์ ๋ฐ์์ ๋น๊ตํด๋ณด์ธ์. ๋ชจ๋ธ๊ณผ ๋๋ ๋ํ๋ csv ํ์ผ๋ก ๋ค์ด๋ฐ์, ๊ฒฐ๊ณผ๊ฐ์ ๋ณด๊ดํ ์๋ ์์ต๋๋ค.

๐ ๋ฐ๋ชจ ๋ฐ๋ก๊ฐ๊ธฐ
๐ Solar Prompt Comparator
โ ๊ธฐ๋ฅ ์์ฝ
์ข์ธก: ๊ธฐ๋ณธ ํ๋กฌํํธ ์ฌ์ฉ (๊ธฐ๋ณธ ํ๋กฌํํธ๋
You are a helpful assistant.
๊ฐ ๋ค์ด๊ฐ์์ต๋๋ค.)์ฐ์ธก: ์ฌ์ฉ์๊ฐ ์์ฑํ ์ปค์คํ ํ๋กฌํํธ ์ฌ์ฉ
๋ชจ๋ธ์๊ฒ ํน๋ณํ ์ญํ ์ ๋ถ์ฌํด ๋ณด์ธ์!
์ ๋ ฅํ ์ง๋ฌธ์ ๋ํด ๊ฐ๊ธฐ ๋ค๋ฅธ ์๋ต ๊ฒฐ๊ณผ ๋น๊ต
๐ป ์ฝ๋ ์ผ๋ถ ์์
custom_prompt = st.text_area("Write your own system prompt", "You are a helpful assistant.")
st.session_state.default_messages = [{"role": "system", "content": default_prompt}]
st.session_state.custom_messages = [{"role": "system", "content": custom_prompt}]
# ์ฌ์ฉ์ ์ง๋ฌธ์ ์ถ๊ฐํ์ฌ ๋ ํ๋กฌํํธ๋ก ๋์์ ์๋ต ๋ฐ์ ์ถ๋ ฅ
์์ธํ ์ฝ๋๋ ๋ค์ ๋งํฌ์์ ํ์ธํ์ค ์ ์์ต๋๋ค. โ LINK
๐ ์ฑํ
๊ฒฐ๊ณผ ์ ์ฅ ๊ธฐ๋ฅ๊น์ง!
์ข/์ฐ ๊ฒฐ๊ณผ๋ฅผ
.csv
๋ก ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.๋ํ ๊ธฐ๋ก ๋ณด์กด ๋ฐ ๋น๊ต ์ฐ๊ตฌ์ ์ ์ฉํฉ๋๋ค.
๐ ๋ฐ๋ชจ๋ฅผ ์ ๋ง์ ๋ง๊ฒ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด, huggingface์ streamlit ์ฉ space๋ฅผ ๊ฐ์คํ์ฌ ์์ ํด๋ณด์ธ์!
Wrap Up
์ด๋ฒ ์น์ ์์๋ Solar Chat API ์ฌ์ฉ ๋ฐฉ์์ ๋ฐฐ์ ์ต๋๋ค.
๐น API Key ๋ฐ๊ธ โ Solar ๋ชจ๋ธ ์ฐ๊ฒฐ โ ๋ํ ์ฒ๋ฆฌ๊น์ง ๋จ๊ณ๋ณ๋ก ์ ๋ฆฌ
๐น Single Turn/Multi Turn ๋ํ ๊ตฌํ๋ฒ ์๊ฐ
๐น Chat API๋ฅผ ์ฌ์ฉํ ๋ ํ์ํ Prompt Role์ ์ข ๋ฅ์ ํ์ฉ๋ฒ ์ค๋ช
๐น ๋ฐ๋ชจ ์ฝ๋๋ก ์์คํ ํ๋กฌํํธ ํจ๊ณผ ๋น๊ต๊น์ง!
Suwan Kim | AI Edu | Upstage
Last updated