Act99 기술블로그

AI(LangChain) 공부 3일차 본문

카테고리 없음

AI(LangChain) 공부 3일차

Act99 2024. 7. 24. 23:47

들어가기 앞서

오로지 공부할 때 메모장용으로 사용하는 글입니다.

 

LangChain expression language Interface

 

Components in LangChain

 

Component & Input Type & Ouptput Type

 

만약 코드를

chain = prompt(Prompt) | chat(ChatModel || LLM) | CommaOutputParser() (OutputParser)

로 짰다면,

1. prompt => input = dict && output = PromptValue
2. chat => input = PromptValue && output = ChatMessage (string or list or ChatMessage)
3. OutputParser => input = The output of an LLM or ChatModel && output = Depends on the parser

가 될것

 

OpenAI Chat Completions

Chat Completions API Call 방법

from openai import OpenAI
client = OpenAI()

response = client.chat.completions.create(
  model="gpt-4o-mini",
  messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Who won the world series in 2020?"},
    {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
    {"role": "user", "content": "Where was it played?"}
  ]
)

 

Response 형태

 

{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "The 2020 World Series was played in Texas at Globe Life Field in Arlington.",
        "role": "assistant"
      },
      "logprobs": null
    }
  ],
  "created": 1677664795,
  "id": "~~~~",
  "model": "gpt-4o-mini",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 17,
    "prompt_tokens": 57,
    "total_tokens": 74
  }
}

 

데이터 추출 방법 (response extract)

 

message = completion.choices[0].message.content

 

 

Chaining

랭체인에서 chain 의 output 을 이용해 다른 chain 을 실행시켜서 chaining 을 할 수 있음.

 

from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate

chain1 = prompt1 | chat

#여기서 prompt1 에 필요한 인자가 a 라고 가정 하자

chain2 = prompt2 | chat

#여기서 prompt2 에 필요한 인자가 b 라고 가정 하자

#b 는 chain1 의 결과값을 가지고 작동해야한다면??
#즉,
#chain3 = chain1 | chain2  ====> 이렇게 체이닝하고 싶다면??

chain3 = {"b": chain1} | chain2

chain3.invoke({
    "a": "아이폰"
})

#이렇게 체이닝하면 되는데, {"b": chain1} ==> 이런 문법이 참 놀랍다.

 

! 깨알 팁

- chat model 에서 streaming 을 True 로 한 뒤, callback 에 StreamingStdOutCallbackHandler 을 넣어주면 응답값을 실시간으로 받을 수 있다.

 

예시

chat = ChatOpenAI(temperature=0.1, streaming=True, callbacks=[StreamingStdOutCallbackHandler()])

 

 

 

참고문헌

 

https://platform.openai.com/docs/guides/chat-completions/response-format

https://python.langchain.com/v0.1/docs/expression_language/interface/

 

Runnable interface | 🦜️🔗 LangChain

To make it as easy as possible to create custom chains, we've implemented a "Runnable" protocol. Many LangChain components implement the Runnable protocol, including chat models, LLMs, output parsers, retrievers, prompt templates, and more. There are also

python.langchain.com

 

오늘은 랭체인 코드좀 치면서 익숙해져봐야겠다.