2. μ€λ§νΈν ν둬ννΈ μμ§λμ΄λ§
π― μ΄ μ±ν°μμ λ°°μΈ κ²
FewShotPromptTemplate
μ μ¬μ©νμ¬ λͺ¨λΈμκ² μμλ₯Ό μ 곡νκ³ μ±λ₯μ λμ΄λ λ°©λ²ExampleSelector
λ₯Ό μ¬μ©νμ¬ λμ μΌλ‘ μμλ₯Ό μ ννλ λ°©λ²- μ¬λ¬ ν둬ννΈ ν
νλ¦Ώμ
PipelinePromptTemplate
μΌλ‘ κ²°ν©νλ λ°©λ² - LLM νΈμΆ κ²°κ³Όλ₯Ό μΊμ±νμ¬ λΉμ©κ³Ό μκ°μ μ μ½νλ λ°©λ²
- ν둬ννΈμ λͺ¨λΈ μ€μ μ νμΌλ‘ μ μ₯νκ³ λΆλ¬μ€λ μ§λ ¬ν(Serialization) λ°©λ²
FewShotPromptTemplate
π― μ΄λ² λ¨κ³μμ λ°°μΈ κ²
FewShotPromptTemplate
μ κ°λ κ³Ό νμμ± μ΄ν΄νκΈ°- λͺ¨λΈμκ² λͺ κ°μ§ μμ(few-shot)λ₯Ό μ 곡νμ¬ μνλ μΆλ ₯ νμμ νμ΅μν€λ λ°©λ²
π 1λ¨κ³: Few-Shot ν둬νν μ μ©νκΈ°
μ 체 μ½λ (notebook.ipynb):
1 | from langchain.chat_models import ChatOpenAI |
π μ½λ μμΈ μ€λͺ
1. Few-Shot ν둬νν
μ΄λ?
λͺ¨λΈμκ² λ¨μν μ§λ¬Έλ§ λμ§λ κ²(Zero-Shot)μ΄ μλλΌ, λͺ κ°μ§ μ§λ¬Έκ³Ό λ΅λ³μ μμλ₯Ό ν¨κ» μ 곡νμ¬ λͺ¨λΈμ΄ λ μ ννκ³ μΌκ΄λ νμμΌλ‘ λ΅λ³νλλ‘ μ λνλ κΈ°λ²μ
λλ€.
- μ μ¬μ©νλκ°?: λͺ¨λΈμ΄ 볡μ‘ν μ§μλ₯Ό λ μ λ°λ₯΄κ² νκ±°λ, νΉμ μΆλ ₯ νμμ μ μ§ν΄μΌ ν λ λ§€μ° μ μ©ν©λλ€.
2. FewShotPromptTemplate
μ΄ ν
νλ¦Ώμ μ¬λ¬ κ°μ μμ(examples
)μ μμμ νμμ μ μνλ example_prompt
, κ·Έλ¦¬κ³ μ€μ μ¬μ©μμ μ§λ¬Έ λΆλΆ(suffix
)μ μ‘°ν©νμ¬ μ΅μ’
ν둬ννΈλ₯Ό μμ±ν©λλ€.
λμ νλ¦:
1 | 1. `examples` 리μ€νΈμ μλ κ° μμκ° `example_prompt`μ λ°λΌ ν¬λ§·ν λ¨ |
β 체ν¬λ¦¬μ€νΈ
-
FewShotPromptTemplate
μ import νλμ? - μ¬λ¬ κ°μ μμλ₯Ό λ΄μ λμ λ리 리μ€νΈλ₯Ό λ§λ€μλμ?
-
PromptTemplate
μΌλ‘ μμμ νμμ μ μνλμ? -
FewShotPromptTemplate
μexamples
,example_prompt
,suffix
λ₯Ό μ λ¬νμ¬ μ΅μ’ ν둬ννΈλ₯Ό μμ±νλμ?
FewShotChatMessagePromptTemplate
π― μ΄λ² λ¨κ³μμ λ°°μΈ κ²
ChatOpenAI
μ κ°μ μ± λͺ¨λΈμ νΉνλFewShotChatMessagePromptTemplate
μ¬μ©λ²ChatPromptTemplate
μ νμ©νμ¬ λν νμμ μμλ₯Ό ꡬμ±νλ λ°©λ²
π 1λ¨κ³: λνν Few-Shot ν둬νν
μ 체 μ½λ (notebook.ipynb):
1 | from langchain.prompts.few_shot import FewShotChatMessagePromptTemplate |
π μ½λ μμΈ μ€λͺ
1. FewShotChatMessagePromptTemplate
μ΄μ λ¨κ³μ FewShotPromptTemplate
μ΄ μ 체 ν둬ννΈλ₯Ό νλμ ν° λ¬Έμμ΄λ‘ λ§λλ λ°λ©΄, μ΄ ν
νλ¦Ώμ SystemMessage
, HumanMessage
, AIMessage
λ± λ©μμ§ κ°μ²΄μ 리μ€νΈλ₯Ό μμ±ν©λλ€. μ΄λ μ± λͺ¨λΈμ λ μ ν©ν λ°©μμ
λλ€.
ChatPromptTemplate.from_messages
:("human", "...")
,("ai", "...")
μ κ°μ ννμ μ¬μ©νμ¬ λν νμμ μμ ν νλ¦Ώμ μ½κ² λ§λ€ μ μμ΅λλ€.
λμ νλ¦:
1 | 1. `final_prompt`κ° `invoke`μ μ λ ₯μ λ°μ |
β 체ν¬λ¦¬μ€νΈ
-
FewShotChatMessagePromptTemplate
μ import νλμ? -
ChatPromptTemplate.from_messages
λ₯Ό μ¬μ©νμ¬ λνν μμ ν νλ¦Ώμ λ§λ€μλμ? - μ΅μ’
ChatPromptTemplate
μ μμ€ν λ©μμ§, few-shot ν둬ννΈ, μ¬μ©μ μ§λ¬Έμ λͺ¨λ ν¬ν¨μμΌ°λμ?
Example Selectors
π― μ΄λ² λ¨κ³μμ λ°°μΈ κ²
BaseExampleSelector
λ₯Ό μμλ°μ 컀μ€ν μμ μ νκΈ°λ₯Ό λ§λλ λ°©λ²- ν둬ννΈ κΈΈμ΄λ₯Ό κ³ λ €νμ¬ λμ μΌλ‘ μμλ₯Ό μ ννλ
LengthBasedExampleSelector
μ νμμ± μ΄ν΄νκΈ°
π 1λ¨κ³: λλ€ μμ μ νκΈ° λ§λ€κΈ°
μ 체 μ½λ (notebook.ipynb):
1 | from langchain.prompts.example_selector.base import BaseExampleSelector |
π μ½λ μμΈ μ€λͺ
1. ExampleSelector
λ?
λͺ¨λΈμκ² μ 곡ν μμλ₯Ό λμ μΌλ‘ μ ννλ λ‘μ§μ λ΄μ ν΄λμ€μ
λλ€. λͺ¨λ μμλ₯Ό λ€ λ£κΈ°μλ ν둬ννΈκ° λ무 κΈΈμ΄μ§ λ (ν ν° μ ν μ΄κ³Ό) νΉν μ μ©ν©λλ€.
BaseExampleSelector
: 컀μ€ν μ νκΈ°λ₯Ό λ§λ€λ €λ©΄ μ΄ ν΄λμ€λ₯Ό μμνκ³select_examples
λ©μλλ₯Ό ꡬνν΄μΌ ν©λλ€.RandomExampleSelector
: μ΄ μμ μμλ μ 체 μμ μ€ νλλ₯Ό 무μμλ‘ μ ννλ κ°λ¨ν μ νκΈ°λ₯Ό λ§λ€μμ΅λλ€.LengthBasedExampleSelector
: LangChainμ λ΄μ₯λ μ νκΈ°λ‘, ν둬ννΈμ μ΄ κΈΈμ΄λ₯Ό κ³μ°νμ¬ ν ν° μ νμ λμ§ μλλ‘ μμ κ°μλ₯Ό μ‘°μ ν΄μ£Όλ λ§€μ° μ€μ©μ μΈ λꡬμ λλ€.
2. FewShotPromptTemplate
κ³Ό ν¨κ» μ¬μ©νκΈ°FewShotPromptTemplate
μ μμ±ν λ, examples=[...]
λμ example_selector=MySelector(...)
λ₯Ό μ λ¬νλ©΄, ν둬ννΈλ₯Ό ν¬λ§·ν λλ§λ€ μ νκΈ°μ select_examples
λ©μλκ° νΈμΆλμ΄ λμ μΌλ‘ μμκ° μ νλ©λλ€.
β 체ν¬λ¦¬μ€νΈ
-
BaseExampleSelector
λ₯Ό μμνμ¬ λλ§μ μ νκΈ°λ₯Ό λ§λ€μλμ? -
select_examples
λ©μλλ₯Ό ꡬννμ¬ μμλ₯Ό μ ννλ λ‘μ§μ μμ±νλμ? -
FewShotPromptTemplate
μexample_selector
λ₯Ό μ λ¬νμ¬ μ¬μ©νλμ?
Serialization and Composition (PipelinePromptTemplate)
π― μ΄λ² λ¨κ³μμ λ°°μΈ κ²
- μ¬λ¬ κ°μ ν둬ννΈ ν
νλ¦Ώμ νλμ νμ΄νλΌμΈμΌλ‘ κ²°ν©νλ
PipelinePromptTemplate
μ¬μ©λ² - ν둬ννΈλ₯Ό
.json
μ΄λ.yaml
νμΌλ‘ μ μ₯νκ³ λΆλ¬μ€λ λ°©λ² (μ§λ ¬ν)
π 1λ¨κ³: ν둬ννΈ νμ΄νλΌμΈ λ§λ€κΈ°
μ 체 μ½λ (notebook.ipynb):
1 | from langchain.prompts.pipeline import PipelinePromptTemplate |
π μ½λ μμΈ μ€λͺ
1. PipelinePromptTemplate
μ¬λ¬ κ°μ μμ ν둬ννΈ ν
νλ¦Ώ μ‘°κ°λ€μ κ²°ν©νμ¬ νλμ μ΅μ’
ν둬ννΈλ₯Ό λ§λλ 볡μ‘ν μμ
μ κ΄λ¦¬ν΄μ€λλ€. κ° μ‘°κ°μ λ
립μ μΌλ‘ ν¬λ§·ν
λ ν, final_prompt
μ μν΄ μ΅μ’
μ μΌλ‘ μ‘°ν©λ©λλ€.
- μ μ¬μ©νλκ°?: μν , μμ, μ§μμ¬ν λ± ν둬ννΈμ κ° λΆλΆμ λͺ¨λννμ¬ μ¬μ¬μ©νκ³ κ΄λ¦¬νκΈ° μ©μ΄ν©λλ€.
2. μ§λ ¬ν (Serialization)
LangChainμ λ§μ κ΅¬μ± μμ(ν둬ννΈ, 체μΈ, λͺ¨λΈ λ±)λ .json
μ΄λ .yaml
νμμΌλ‘ μ½κ² μ μ₯νκ³ λΆλ¬μ¬ μ μμ΅λλ€. μ΄λ ν둬ννΈλ₯Ό μ½λμ λΆλ¦¬νμ¬ κ΄λ¦¬νκ±°λ, λ€λ₯Έ μ¬λκ³Ό 곡μ ν λ λ§€μ° μ μ©ν©λλ€.
μμ (prompt.yaml):
1 | _type: "prompt" |
1 | # λΆλ¬μ€κΈ° |
β 체ν¬λ¦¬μ€νΈ
- μ¬λ¬ κ°μ
PromptTemplate
μ λ§λ€μλμ? -
PipelinePromptTemplate
μ μ¬μ©νμ¬ μμ ν νλ¦Ώλ€μ νλμ μ΅μ’ ν둬ννΈλ‘ κ²°ν©νλμ? - ν둬ννΈλ₯Ό
.yaml
λλ.json
νμΌλ‘ μ μ₯νκ³load_prompt
λ‘ λΆλ¬μ 보μλμ?
Caching
π― μ΄λ² λ¨κ³μμ λ°°μΈ κ²
- LLM νΈμΆ κ²°κ³Όλ₯Ό μΊμ±νμ¬ API λΉμ©κ³Ό μλ΅ μκ°μ μ€μ΄λ λ°©λ²
InMemoryCache
μSQLiteCache
μ μ°¨μ΄μ
π 1λ¨κ³: LLM μΊμ μ€μ νκΈ°
μ 체 μ½λ (notebook.ipynb):
1 | from langchain.globals import set_llm_cache |
π μ½λ μμΈ μ€λͺ
1. set_llm_cache
LangChainμ μ μ μ€μ μ ν΅ν΄ λͺ¨λ LLM νΈμΆμ λν μΊμλ₯Ό νμ±νν©λλ€. λμΌν λͺ¨λΈμ λμΌν μ
λ ₯μ΄ μ£Όμ΄μ§λ©΄, μ€μ APIλ₯Ό νΈμΆνλ λμ μΊμμ μ μ₯λ κ²°κ³Όλ₯Ό μ¦μ λ°νν©λλ€.
InMemoryCache
: μΊμλ₯Ό λ©λͺ¨λ¦¬μ μ μ₯ν©λλ€. μ ν리μΌμ΄μ μ΄ μ’ λ£λλ©΄ μΊμλ μ¬λΌμ§λλ€. κ°λ¨ν ν μ€νΈμ μ μ©ν©λλ€.SQLiteCache
: μΊμλ₯Ό νμΌ(cache.db
)μ μ μ₯ν©λλ€. μ ν리μΌμ΄μ μ μ¬μμν΄λ μΊμκ° μ μ§λ©λλ€. μꡬμ μΈ μΊμκ° νμν λ μ¬μ©ν©λλ€.μ μ¬μ©νλκ°?: λ°λ³΅μ μΈ API νΈμΆμ μ€μ¬ λΉμ©μ μ μ½νκ³ , μ ν리μΌμ΄μ μ μλ΅ μλλ₯Ό ν¬κ² ν₯μμν¬ μ μμ΅λλ€. νΉν κ°λ° λ° ν μ€νΈ λ¨κ³μμ λ§€μ° μ μ©ν©λλ€.
β 체ν¬λ¦¬μ€νΈ
-
set_llm_cache
λ₯Ό importνκ³SQLiteCache
λ₯Ό μ¬μ©νμ¬ μΊμλ₯Ό μ€μ νλμ? - λμΌν
predict
νΈμΆμ λ λ² μ€ννμ¬ λ λ²μ§Έ νΈμΆμ΄ ν¨μ¬ λΉ λ₯Έ κ²μ νμΈνλμ? -
cache.db
νμΌμ΄ μμ±λ κ²μ νμΈνλμ?
Serialization (Usage & Model)
π― μ΄λ² λ¨κ³μμ λ°°μΈ κ²
get_openai_callback
μ μ¬μ©νμ¬ ν ν° μ¬μ©λκ³Ό API λΉμ©μ μΆμ νλ λ°©λ²- μ± λͺ¨λΈμ μ€μ μ
.json
νμΌλ‘ μ μ₯νκ³ λΆλ¬μ€λ λ°©λ²
π 1λ¨κ³: μ¬μ©λ μΆμ λ° λͺ¨λΈ μ§λ ¬ν
μ 체 μ½λ (notebook.ipynb):
1 | from langchain.callbacks import get_openai_callback |
π μ½λ μμΈ μ€λͺ
1. get_openai_callback
with
ꡬ문과 ν¨κ» μ¬μ©νμ¬ μ½λ λΈλ‘ λ΄μμ λ°μνλ λͺ¨λ OpenAI API νΈμΆμ λν μμΈν μ¬μ© μ 보λ₯Ό μ»μ μ μμ΅λλ€.
- μΆμ μ 보: μ΄ μ¬μ© ν ν°, ν둬ννΈ ν ν°, μλ£ ν ν°, μ±κ³΅ν μμ² μ, μ΄ λΉμ©(USD) λ±μ μ 곡ν©λλ€.
- μ μ¬μ©νλκ°?: μ ν리μΌμ΄μ μ API λΉμ©μ λͺ¨λν°λ§νκ³ μ΅μ ννλ λ° νμμ μ λλ€.
2. λͺ¨λΈ μ§λ ¬ν (.save
, load_model
)ChatOpenAI
κ°μ²΄μ μ€μ λ temperature
, model_name
λ±μ νλΌλ―Έν°λ€μ .json
νμΌλ‘ μ μ₯νκ±°λ λΆλ¬μ¬ μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λͺ¨λΈ ꡬμ±μ μ½λμ λΆλ¦¬νμ¬ κ΄λ¦¬ν μ μμ΅λλ€.
μμ (model.json):
1 | { |
β 체ν¬λ¦¬μ€νΈ
-
get_openai_callback
μ μ¬μ©νμ¬ API νΈμΆμ λΉμ©κ³Ό ν ν° μ¬μ©λμ μΆλ ₯ν΄ λ³΄μλμ? -
chat.save("model.json")
μ μ¬μ©νμ¬ λͺ¨λΈ μ€μ μ μ μ₯νλμ? -
load_model("model.json")
μ μ¬μ©νμ¬ μ μ₯λ μ€μ μ λ€μ λΆλ¬μλμ?
μΆμ² : https://nomadcoders.co/fullstack-gpt