6. OpenAI๋ฅผ ๋„˜์–ด์„œ - ๋กœ์ปฌ LLM๊ณผ PrivateGPT

๐ŸŽฏ ์ด ์ฑ•ํ„ฐ์—์„œ ๋ฐฐ์šธ ๊ฒƒ

  • OpenAI API๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๋‚ด ์ปดํ“จํ„ฐ์—์„œ ์ง์ ‘ ์–ธ์–ด ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • HuggingFaceHub: Hugging Face์— ํ˜ธ์ŠคํŒ…๋œ ๋ชจ๋ธ์„ API์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
  • HuggingFacePipeline: Hugging Face์˜ ๋ชจ๋ธ์„ ๋กœ์ปฌ ํ™˜๊ฒฝ์— ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • GPT4All: ๋ฐ์Šคํฌํ†ฑ ํ™˜๊ฒฝ์— ์ตœ์ ํ™”๋œ ์˜คํ”ˆ์†Œ์Šค ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • Ollama: ๋กœ์ปฌ LLM์„ ๊ฐ€์žฅ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ์™€ ChatOllama ์—ฐ๋™๋ฒ•
  • OllamaEmbeddings๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž„๋ฒ ๋”ฉ ๊ณผ์ •๊นŒ์ง€ ๋กœ์ปฌ์—์„œ ์ฒ˜๋ฆฌํ•˜์—ฌ ์™„๋ฒฝํ•œ PrivateGPT ๊ตฌ์ถ•ํ•˜๊ธฐ

HuggingFaceHub

๐ŸŽฏ ์ด๋ฒˆ ๋‹จ๊ณ„์—์„œ ๋ฐฐ์šธ ๊ฒƒ

  • Hugging Face Hub์— ์žˆ๋Š” ์ˆ˜๋งŽ์€ ์˜คํ”ˆ์†Œ์Šค ๋ชจ๋ธ์„ LangChain๊ณผ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • HuggingFaceHub ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ํ˜•ํƒœ๋กœ ๋ชจ๋ธ์„ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•

๐Ÿ“ 1๋‹จ๊ณ„: Hugging Face Hub ์—ฐ๋™ํ•˜๊ธฐ

์ „์ฒด ์ฝ”๋“œ (notebook.ipynb):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from langchain.llms import HuggingFaceHub
from langchain.prompts import PromptTemplate

# 1. ๋ชจ๋ธ์— ๋งž๋Š” ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ ์ค€๋น„ (Mistral ๋ชจ๋ธ ํ˜•์‹)
prompt = PromptTemplate.from_template("[INST]What is the meaning of {word}[/INST]")

# 2. HuggingFaceHub LLM ์ดˆ๊ธฐํ™”
llm = HuggingFaceHub(
repo_id="mistralai/Mistral-7B-Instruct-v0.1", # ์‚ฌ์šฉํ•  ๋ชจ๋ธ์˜ ์ €์žฅ์†Œ ID
model_kwargs={
"max_new_tokens": 250, # ๋ชจ๋ธ์— ์ „๋‹ฌํ•  ์ถ”๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ
},
)

chain = prompt | llm
chain.invoke({"word": "potato"})

๐Ÿ” ์ฝ”๋“œ ์ƒ์„ธ ์„ค๋ช…

1. HuggingFaceHub๋ž€?
Hugging Face Hub๋Š” ์ˆ˜๋งŒ ๊ฐœ์˜ ์˜คํ”ˆ์†Œ์Šค AI ๋ชจ๋ธ์ด ๊ณต์œ ๋˜๋Š” ๊ฑฐ๋Œ€ํ•œ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. HuggingFaceHub ํด๋ž˜์Šค๋Š” ์ด ํ”Œ๋žซํผ์— ํ˜ธ์ŠคํŒ…๋œ ๋ชจ๋ธ๋“ค์„ ๋งˆ์น˜ API์ฒ˜๋Ÿผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” LangChain์˜ ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

  • ์™œ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?: ๋‚ด ์ปดํ“จํ„ฐ์— ๋ฌด๊ฑฐ์šด ๋ชจ๋ธ์„ ์ง์ ‘ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ ๋„ ๋‹ค์–‘ํ•œ ์˜คํ”ˆ์†Œ์Šค ๋ชจ๋ธ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”๊ฐ€?: HUGGINGFACEHUB_API_TOKEN ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. HuggingFaceHub๋Š” ์ด ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ Hugging Face์˜ Inference API์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค.
  • ์ฃผ์˜์‚ฌํ•ญ: ๋ชจ๋ธ๋งˆ๋‹ค ์ž…๋ ฅ์œผ๋กœ ๋ฐ›๋Š” ํ”„๋กฌํ”„ํŠธ์˜ ํ˜•์‹์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์˜ˆ: Mistral ๋ชจ๋ธ์€ [INST]...[/INST] ํ˜•์‹์„ ์‚ฌ์šฉ) ๊ฐ ๋ชจ๋ธ์˜ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜๊ณ  PromptTemplate์„ ๋งž์ถฐ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ… ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • Hugging Face ๊ณ„์ •์„ ๋งŒ๋“ค๊ณ  API ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›์•˜๋‚˜์š”?
  • HUGGINGFACEHUB_API_TOKEN ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ–ˆ๋‚˜์š”?
  • HuggingFaceHub๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ์›ํ•˜๋Š” ๋ชจ๋ธ์˜ repo_id๋ฅผ ์ง€์ •ํ–ˆ๋‚˜์š”?
  • ๋ชจ๋ธ์— ๋งž๋Š” ํ˜•์‹์œผ๋กœ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ฒด์ธ์„ ์‹คํ–‰ํ–ˆ๋‚˜์š”?

HuggingFacePipeline

๐ŸŽฏ ์ด๋ฒˆ ๋‹จ๊ณ„์—์„œ ๋ฐฐ์šธ ๊ฒƒ

  • Hugging Face์˜ ๋ชจ๋ธ์„ ๋กœ์ปฌ ์ปดํ“จํ„ฐ์— ์ง์ ‘ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • HuggingFacePipeline์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ๋ชจ๋ธ์„ LangChain๊ณผ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•

๐Ÿ“ 1๋‹จ๊ณ„: ๋กœ์ปฌ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๋ชจ๋ธ ์‹คํ–‰ํ•˜๊ธฐ

์ „์ฒด ์ฝ”๋“œ (notebook.ipynb):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from langchain.llms.huggingface_pipeline import HuggingFacePipeline
from langchain.prompts import PromptTemplate

prompt = PromptTemplate.from_template("A {word} is a")

# HuggingFacePipeline์œผ๋กœ ๋กœ์ปฌ ๋ชจ๋ธ ๋กœ๋“œ
llm = HuggingFacePipeline.from_model_id(
model_id="gpt2", # ๋กœ์ปฌ์— ๋‹ค์šด๋กœ๋“œํ•  ๋ชจ๋ธ ID
task="text-generation", # ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ž‘์—… ์œ ํ˜•
pipeline_kwargs={"max_new_tokens": 150},
)

chain = prompt | llm
chain.invoke({"word": "tomato"})

๐Ÿ” ์ฝ”๋“œ ์ƒ์„ธ ์„ค๋ช…

1. HuggingFacePipeline์ด๋ž€?
HuggingFaceHub๊ฐ€ ์›๊ฒฉ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ, HuggingFacePipeline์€ Hugging Face์˜ transformers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ๋กœ์ปฌ ์ปดํ“จํ„ฐ์— ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์ง์ ‘ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ์™œ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?: ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ ์—†์ด ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ์™ธ๋ถ€๋กœ ์ „์†ก๋˜์ง€ ์•Š์•„ ๋ณด์•ˆ์— ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. API ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”๊ฐ€?: from_model_id๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด, LangChain์€ ์ง€์ •๋œ model_id์˜ ๋ชจ๋ธ ํŒŒ์ผ์„ Hugging Face Hub์—์„œ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค(์ฒ˜์Œ ํ•œ ๋ฒˆ๋งŒ). ๊ทธ ํ›„, ํ•ด๋‹น ๋ชจ๋ธ์„ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•˜์—ฌ ์ถ”๋ก (text-generation) ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์ฃผ์˜์‚ฌํ•ญ: ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ถฉ๋ถ„ํ•œ RAM๊ณผ VRAM(GPU ์‚ฌ์šฉ ์‹œ)์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. gpt2์™€ ๊ฐ™์€ ์ž‘์€ ๋ชจ๋ธ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. PyTorch์™€ ๊ฐ™์€ ๋”ฅ๋Ÿฌ๋‹ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ… ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • transformers, torch ๋“ฑ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ–ˆ๋‚˜์š”?
  • HuggingFacePipeline.from_model_id๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ƒ์„ฑํ–ˆ๋‚˜์š”?
  • ๋กœ์ปฌ์—์„œ ๋ชจ๋ธ์ด ์‹คํ–‰๋˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ๋‚˜์š”?

GPT4All

๐ŸŽฏ ์ด๋ฒˆ ๋‹จ๊ณ„์—์„œ ๋ฐฐ์šธ ๊ฒƒ

  • GPT4All ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์Šคํฌํ†ฑ์— ์ตœ์ ํ™”๋œ ๋กœ์ปฌ ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•

๐Ÿ“ 1๋‹จ๊ณ„: GPT4All ๋ชจ๋ธ ์‹คํ–‰ํ•˜๊ธฐ

์ „์ฒด ์ฝ”๋“œ (notebook.ipynb):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from langchain.llms.gpt4all import GPT4All
from langchain.prompts import PromptTemplate

prompt = PromptTemplate.from_template(
"You are a helpful assistant that defines words. Define this word: {word}."
)

# GPT4All ๋ชจ๋ธ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋กœ๋“œ
llm = GPT4All(
model="./falcon.bin",
)

chain = prompt | llm
chain.invoke({"word": "tomato"})

๐Ÿ” ์ฝ”๋“œ ์ƒ์„ธ ์„ค๋ช…

1. GPT4All์ด๋ž€?
GPT4All์€ ์ผ๋ฐ˜์ ์ธ ์†Œ๋น„์ž์šฉ CPU์—์„œ๋„ ์ž˜ ์ž‘๋™ํ•˜๋„๋ก ์ตœ์ ํ™”๋œ ์˜คํ”ˆ์†Œ์Šค ๋ชจ๋ธ๊ณผ ์ƒํƒœ๊ณ„์ž…๋‹ˆ๋‹ค. LangChain์˜ GPT4All ๋ž˜ํผ(wrapper)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๋ฏธ๋ฆฌ ๋‹ค์šด๋กœ๋“œํ•œ ๋ชจ๋ธ ํŒŒ์ผ(.bin)์„ ๋กœ๋“œํ•˜์—ฌ ์‰ฝ๊ฒŒ ๋กœ์ปฌ ์ถ”๋ก ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์™œ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?: ๊ฐ•๋ ฅํ•œ GPU ์—†์ด ์ผ๋ฐ˜์ ์ธ ๋…ธํŠธ๋ถ์ด๋‚˜ ๋ฐ์Šคํฌํ†ฑ์—์„œ๋„ ์ค€์ˆ˜ํ•œ ์„ฑ๋Šฅ์˜ LLM์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”๊ฐ€?: ๋จผ์ € GPT4All ์›น์‚ฌ์ดํŠธ ๋“ฑ์—์„œ ์›ํ•˜๋Š” ๋ชจ๋ธ์˜ .bin ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ํ›„, GPT4All ํด๋ž˜์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ model ํŒŒ๋ผ๋ฏธํ„ฐ์— ํ•ด๋‹น ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

โœ… ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • gpt4all ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ–ˆ๋‚˜์š”?
  • .bin ํ˜•์‹์˜ ๋ชจ๋ธ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ–ˆ๋‚˜์š”?
  • GPT4All ํด๋ž˜์Šค์— ๋ชจ๋ธ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ „๋‹ฌํ•˜์—ฌ LLM์„ ์ดˆ๊ธฐํ™”ํ–ˆ๋‚˜์š”?

Ollama์™€ PrivateGPT

๐ŸŽฏ ์ด๋ฒˆ ๋‹จ๊ณ„์—์„œ ๋ฐฐ์šธ ๊ฒƒ

  • Ollama๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ LLM์„ ๊ฐ€์žฅ ์‰ฝ๊ฒŒ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ChatOllama์™€ OllamaEmbeddings๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DocumentGPT๋ฅผ ์™„๋ฒฝํ•œ PrivateGPT๋กœ ์ „ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

๐Ÿ“ 1๋‹จ๊ณ„: DocumentGPT๋ฅผ PrivateGPT๋กœ ์ „ํ™˜ํ•˜๊ธฐ

์ „์ฒด ์ฝ”๋“œ (pages/02_PrivateGPT.py):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# ... (๋‹ค๋ฅธ import๋Š” DocumentGPT์™€ ์œ ์‚ฌ)
from langchain.embeddings import OllamaEmbeddings
from langchain.chat_models import ChatOllama

# 1. LLM์„ ChatOllama๋กœ ๋ณ€๊ฒฝ
llm = ChatOllama(
model="mistral:latest", # Ollama์—์„œ ์‹คํ–‰ ์ค‘์ธ ๋ชจ๋ธ ์ด๋ฆ„
temperature=0.1,
streaming=True,
callbacks=[ChatCallbackHandler()],
)

@st.cache_data(show_spinner="Embedding file...")
def embed_file(file):
# ... (ํŒŒ์ผ ๋กœ๋“œ ๋ฐ ๋ถ„ํ•  ๋กœ์ง)

# 2. Embeddings๋ฅผ OllamaEmbeddings๋กœ ๋ณ€๊ฒฝ
embeddings = OllamaEmbeddings(model="mistral:latest")

cached_embeddings = CacheBackedEmbeddings.from_bytes_store(embeddings, cache_dir)
vectorstore = FAISS.from_documents(docs, cached_embeddings)
retriever = vectorstore.as_retriever()
return retriever

# ... (๋‚˜๋จธ์ง€ Streamlit UI ์ฝ”๋“œ๋Š” DocumentGPT์™€ ๊ฑฐ์˜ ๋™์ผ)

๐Ÿ” ์ฝ”๋“œ ์ƒ์„ธ ์„ค๋ช…

1. Ollama๋ž€?
Ollama๋Š” Llama 2, Mistral ๋“ฑ ๋‹ค์–‘ํ•œ ์˜คํ”ˆ์†Œ์Šค LLM์„ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ๋งค์šฐ ์‰ฝ๊ฒŒ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ , ์‹คํ–‰ํ•˜๊ณ , ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ollama run <๋ชจ๋ธ๋ช…>๊ณผ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ๋ช…๋ น์–ด๋กœ ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๋ฉด, ํ•ด๋‹น ๋ชจ๋ธ์„ API์ฒ˜๋Ÿผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„๊ฐ€ ๋กœ์ปฌ์— ์—ด๋ฆฝ๋‹ˆ๋‹ค.

2. ChatOllama & OllamaEmbeddings
LangChain์€ Ollama์™€ ์™„๋ฒฝํ•˜๊ฒŒ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค.

  • ChatOllama: ๋กœ์ปฌ Ollama ์„œ๋ฒ„์—์„œ ์‹คํ–‰ ์ค‘์ธ ๋ชจ๋ธ์„ LangChain์˜ ์ฑ— ๋ชจ๋ธ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ChatOpenAI๋ฅผ ChatOllama๋กœ ๋ฐ”๊พธ๊ณ , model ์ด๋ฆ„๋งŒ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • OllamaEmbeddings: ์ž„๋ฒ ๋”ฉ ๊ณผ์ • ๋˜ํ•œ ๋กœ์ปฌ Ollama ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. OpenAIEmbeddings๋ฅผ OllamaEmbeddings๋กœ ๊ต์ฒดํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

3. ์™„๋ฒฝํ•œ PrivateGPT
LLM(์ถ”๋ก )๊ณผ ์ž„๋ฒ ๋”ฉ์„ ๋ชจ๋‘ ๋กœ์ปฌ์—์„œ ์‹คํ–‰๋˜๋Š” Ollama ๋ชจ๋ธ๋กœ ๊ต์ฒดํ•จ์œผ๋กœ์จ, ํŒŒ์ผ ๋ฐ์ดํ„ฐ์™€ ์‚ฌ์šฉ์ž ์งˆ๋ฌธ์ด ๋” ์ด์ƒ ์™ธ๋ถ€(OpenAI) ์„œ๋ฒ„๋กœ ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋กœ์จ ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ ์—†์ด๋„ ์ž‘๋™ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ํ”„๋ผ์ด๋ฒ„์‹œ๊ฐ€ ์™„๋ฒฝํ•˜๊ฒŒ ๋ณด์žฅ๋˜๋Š” PrivateGPT๊ฐ€ ์™„์„ฑ๋ฉ๋‹ˆ๋‹ค.

โœ… ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • Ollama๋ฅผ ์„ค์น˜ํ•˜๊ณ  ollama run mistral ๋ช…๋ น์–ด๋กœ ๋ชจ๋ธ์„ ์‹คํ–‰ํ–ˆ๋‚˜์š”?
  • ChatOpenAI๋ฅผ ChatOllama๋กœ, OpenAIEmbeddings๋ฅผ OllamaEmbeddings๋กœ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‚˜์š”?
  • ์ˆ˜์ •๋œ PrivateGPT ์•ฑ์ด ์™ธ๋ถ€ API ํ˜ธ์ถœ ์—†์ด ๋กœ์ปฌ์—์„œ ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ๋‚˜์š”?

์ถœ์ฒ˜ : https://nomadcoders.co/fullstack-gpt