๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

NLP/LangChain

LangChain ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•(LLMs ๊ธฐ์ค€)

<์ถœ์ฒ˜ ๋ฐ ์ฐธ๊ณ ์ž๋ฃŒ>

 - Langchain QuickStart

https://python.langchain.com/docs/get_started/quickstart

 

Quickstart | ๐Ÿฆœ๏ธ๐Ÿ”— Langchain

Installation

python.langchain.com

 - Quickstart์˜ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ฃผ์„์œผ๋กœ ์„ค๋ช…

 - Quickstart์ค‘ LLMs๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•จ.

 

0. ์ •๋ฆฌ

 - LLM์„ ๋‹ค์–‘ํ•œ Tools์„ ์จ์„œ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉ ๊ฐ€๋Šฅ(์ฑ—๋ด‡ ๋“ฑ)

 - LLM์œผ๋กœ GPT + plug_in + with Bing ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ์Œ.

 - ๊ณต๋ถ€ํ•  ๋•Œ๋Š” OpenAI Api์‚ฌ์šฉ ํ•˜๋Š” ๊ฒƒ์ด ์ œ์ผ ํŽธํ•จ

 - Python 3.8์ด์ƒ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉ ํ•  ๊ฒƒ

 - Template + tool + agent๋ฅผ chain์„ ์‚ฌ์šฉํ•ด์„œ ๋ฌถ์–ด ์คŒ.

 - OpenAI API Key๊ฐ€ ์žˆ์–ด์•ผ ํ•จ.

 

1. ๊ธฐ๋ณธ ์‚ฌ์šฉ

import os
os.environ["OPENAI_API_KEY"] = "API_KEY"

from langchain.llms import OpenAI 

llm = OpenAI(temperature=0.9) #temperature 0~1๊นŒ์ง€ 1์— ๊ฐ€๊นŒ์šธ ์ˆ˜๋ก ๋ฌด์ž‘์œ„์„ฑ ์ฆ๊ฐ€

text = "๋‹ค์–‘ํ•œ ์ƒ‰์ƒ์˜ ์–‘๋ง์„ ๋งŒ๋“œ๋Š” ํšŒ์‚ฌ์˜ ์ด๋ฆ„์„ ๋ฌด์—‡์œผ๋กœ ํ•˜๋ฉด ์ข‹์„๊นŒ?"

print(llm(text))

 

2. Prompt Template

 -   ์ถœ๋ ฅ ์–‘์‹์„ ์ •์˜: ์–ด๋–ป๊ฒŒ ์ถœ๋ ฅ์„ ํ•  ๊ฒƒ์ธ๊ฐ€?

from langchain.prompts import PromptTemplate

prompt = PromptTemplate(
    input_variables = ['product'], #A
    template = "{product}์„ ๋งŒ๋“œ๋Š” ํšŒ์‚ฌ์˜ ์ด๋ฆ„์„ ๋ฌด์—‡์œผ๋กœ ํ•˜๋ฉด ์ข‹์„๊นŒ?"
)

#format์—์„œ product(A์— ์ง€์ •)์— ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์œผ๋ฉด prompt์— ๋“ค์–ด๊ฐ.
print(prompt.format(product='๋ง›์žˆ๋Š” ์ผ€์ต'))

#์ถœ๋ ฅ: ๋ง›์žˆ๋Š” ์ผ€์ต์„ ๋งŒ๋“œ๋Š” ํšŒ์‚ฌ์˜ ์ด๋ฆ„์„ ๋ฌด์—‡์œผ๋กœ ํ•˜๋ฉด ์ข‹์„๊นŒ?

 

3. LLMs + Prompt

from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI

llm = OpenAI(temperature=0.9)
prompt = PromptTemplate(
    input_variables=['product'],
    template="{product}์„ ๋งŒ๋“œ๋Š” ํšŒ์‚ฌ์˜ ์ด๋ฆ„์„ ๋ฌด์—‡์œผ๋กœ ํ•˜๋ฉด ์ข‹์„๊นŒ?"
)

#LLMChain์„ ์‚ฌ์šฉํ•ด์„œ ์—ฐ๊ฒฐํ•ด์คŒ
from langchain.chains import LLMChain

chain = LLMChain(llm=llm, prompt=prompt)

#์‹คํ–‰
chain.run("๊ต‰์žฅํ•œ ํŒŒ๊ดด๋ ฅ์˜ ๋ฌด๊ธฐ")

#์ถœ๋ ฅ: '\n\n์ฃผ๋„ํ•˜๋Š” ๋ฌด๊ธฐ(Leading Weapon)์ด๋ผ๋Š” ์ด๋ฆ„์ด ์–ด์šธ๋ฆฌ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.'

 

4. Agent ์‚ฌ์šฉ

import os
#APIํ˜ธ์ถœ์ด ํ•„์š”ํ•œ tool์€ Key๊ฐ€ ์žˆ์–ด์•ผ ํ•จ.
os.environ["SERPAPI_API_KEY"] = "API_Key"

from langchain.agents import load_tools #tool ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
from langchain.agents import initialize_agent #agent ์ดˆ๊ธฐ์™€
from langchain.agents import AgentType #agent type ์ง€์ •
from langchain.llms import OpenAI

#agent๋ฅผ ์ฝ˜ํŠธ๋กคํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•  LLM ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
llm = OpenAI(temperature=0) #๋ฌด์ž‘์œ„ X

#์‚ฌ์šฉํ•  Tool ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
tools = load_tools(['serpapi', 'llm-math'], llm=llm)

#llm,tools, agent, agent_type ์ดˆ๊ธฐํ™”
agent = initialize_agent(tools, 
                        llm, 
                        agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
                        verbose=True)

#์‹คํ–‰
agent.run("์„œ์šธ์˜ ์–ด์ œ ์ตœ๊ณ  ๊ธฐ์˜จ์„ ํ™”์”จ๋กœ ๋ช‡๋„์•ผ? .023์„ ๊ฑฐ๋“ญ ์ œ๊ณฑํ•œ ์ˆซ์ž๋Š” ์–ผ๋งˆ์•ผ?")   

#์ถœ๋ ฅ: '84 °F (at 12:00 pm) and 0.000529'

 

5. Memory:

 - ์ฑ—๋ด‡ ๋“ฑ์—์„œ ์•ž์˜ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ถœ๋ ฅ์„ ํ•ด์•ผ ํ•  ๋•Œ ํ•„์š”

     - Long-term

     - Short-term

from langchain import OpenAI, ConversationChain

llm = OpenAI(temperature=0)

#ConversationChain ์ด์ „์˜ ์ž…/์ถœ๋ ฅ์„ ๊ธฐ์–ตํ•˜๊ณ , ์ „๋‹ฌ๋œ ์ปจํ…์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์œ ํ˜•์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ.
conversation = ConversationChain(llm=llm, verbose=True)

output = conversation.predict(input='์•ˆ๋…•')
print(output)

#์ถœ๋ ฅ: ์•ˆ๋…•ํ•˜์„ธ์š”! ๋ฌด์—‡์„ ๋„์™€๋“œ๋ฆด๊นŒ์š”?

output = conversation.predict(input="๊ทธ๋ƒฅ AI๋ž‘ ๋Œ€ํ™”ํ•˜๊ณ  ์‹ถ์—ˆ์–ด")
print(output)

#์ถœ๋ ฅ: ๋„ค, ๋ง์”€ํ•˜์„ธ์š”! ๋‚˜๋Š” ์ธ๊ณต์ง€๋Šฅ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ธ๊ฐ„๊ณผ ๋Œ€ํ™”ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๋ฌด์—‡์„ ๋ฌผ์–ด๋ณด๊ณ  ์‹ถ์œผ์‹ ๊ฐ€์š”?