AI Self study #3

HyunJunSonยท2025๋…„ 10์›” 20์ผ

NIPA-ORACLE

๋ชฉ๋ก ๋ณด๊ธฐ
19/28

1. ์ƒŒ๋“œ๋ฐ•์Šค

๐Ÿ”’ Sandbox๋ž€?

Sandbox(์ƒŒ๋“œ๋ฐ•์Šค) ๋Š” ๋ณด์•ˆ์ด๋‚˜ ์‹คํ—˜ ๋ชฉ์ ์˜ ๊ฒฉ๋ฆฌ๋œ ์‹คํ–‰ ํ™˜๊ฒฝ.
์‰ฝ๊ฒŒ ๋งํ•ด โ€œ์ด ์•ˆ์—์„œ๋Š” ๋ฌด์Šจ ์ง“์„ ํ•ด๋„ ๋ฐ”๊นฅ ์‹œ์Šคํ…œ์—๋Š” ์˜ํ–ฅ์„ ๋ชป ์ฃผ๋Š” ํ†ต์ œ๋œ ๊ณต๊ฐ„"

Ex):
โ€ข ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•…์„ฑ ์›น์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‹œ์Šคํ…œ ํŒŒ์ผ์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ง‰๋Š” ๊ตฌ์กฐ
โ€ข LLM์ด ์™ธ๋ถ€ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ธํ„ฐ๋„ท ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ๋ชปํ•˜๋„๋ก ์ œํ•œ๋œ ์‹คํ–‰ ํ™˜๊ฒฝ
โ€ข ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•  ๋•Œ OS ์ „์ฒด๊ฐ€ ์•„๋‹Œ ๊ฐ€์ƒ ํ™˜๊ฒฝ์—์„œ๋งŒ ๋Œ๋ฆฌ๋Š” ๊ตฌ์กฐ

2. gemini cli option

1) --telemetry

CLI ๋„๊ตฌ๊ฐ€ ์‚ฌ์šฉ ํ†ต๊ณ„๋‚˜ ์˜ค๋ฅ˜ ์ •๋ณด๋ฅผ ๊ฐœ๋ฐœ์‚ฌ(์˜ˆ: Google) ๋กœ ์ž๋™ ์ „์†กํ•˜๋Š” ๊ธฐ๋Šฅ

2) -- proxy

๋‚ด๊ฐ€ ์ง์ ‘ ์™ธ๋ถ€์— ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๊ณ , ๋Œ€์‹  ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์˜ต์…˜, ๋ง๊ทธ๋Œ€๋กœ ํ”„๋ก์‹œ๋ฅผ ์ง€์ •ํ•˜๋Š” ์˜ต์…˜

  • ๋‚ด๋ถ€๋ง(ํšŒ์‚ฌ, ์—ฐ๊ตฌ์†Œ ๋“ฑ)์—์„œ ์ง์ ‘ ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์ด ์ œํ•œ๋˜์–ด ์žˆ์„ ๋•Œ ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ์šฐํšŒ ์ ‘์†
  • ๊ด€๋ฆฌ์ž๊ฐ€ ์™ธ๋ถ€ ์ ‘์†์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ฑฐ๋‚˜, ํŠน์ • ๋„๋ฉ”์ธ๋งŒ ํ—ˆ์šฉํ•˜๋„๋ก ์ œ์–ด

gemini --proxy=http://user:password@proxy.example.com:8080

3) --model

  • ๋ชจ๋ธ ์ง€์ •ํ•ด์„œ ์‹คํ–‰

gemini run -m gemini-2.5-pro "Summarize this text."

4) -p

ํ‘œ์ค€ ์ž…๋ ฅ(stdin) ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ํ…์ŠคํŠธ๊ฐ€ ์žˆ์„ ๋•Œ,
๊ทธ ๋’ค์— ์ด์–ด ๋ถ™์ผ(prompt append) ์ถ”๊ฐ€ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋Šฅ

3. ํŒŒ์ด์ฌ ๋ฌธ๋ฒ•

  • ํ—ท๊ฐˆ๋ฆด์ˆ˜ ์žˆ๋‹ค. ํŠœ๋ธ”์•ˆ์— , ์—†์ด ๋ฌธ์ž์—ด๋งŒ ๋“ค์–ด ์žˆ์œผ๋ฉด ๋ฌธ์ž์—ด๋กœ ์ธ์‹ํ•œ๋‹ค.
  • ์ฝค๋งˆ๊ฐ€ ์žˆ์–ด์•ผ ํŠœํ”Œ์ด๋‹ค.

4. ์›นํŽ˜์ด์ง€ ์Šคํฌ๋ž˜ํ•‘ ํ•˜๋Š” loader

loader = WebBaseLoader(
    web_paths=[
        "https://n.news.naver.com/article/437/0000378416",
        "https://n.news.naver.com/mnews/hotissue/article/092/0002340014?type=series&cid=2000063",
    ],
    bs_kwargs=dict(
        parse_only=bs4.SoupStrainer(
            "div",
            attrs={"class": ["newsct_article _article_body", "media_end_head_title"]},
        )
    ),
    header_template={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36",
    },
)

# ๋ฐ์ดํ„ฐ ๋กœ๋“œ
docs = loader.load()

# ๋ฌธ์„œ ์ˆ˜ ํ™•์ธ
print(len(docs))
docc = [ doc.page_content for i, doc in enumerate(docs)]
print(f"doc1 : {docc[0]}\n\n")
print(f"doc2 : {docc[1]}")
  • ๋‚ด๋ถ€์ ์œผ๋กœ bs4 ์ด์šฉ
  • ์—ฌ๋Ÿฌ ์›นํŽ˜์ด์ง€๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์Šคํฌ๋ž˜ํ•‘ ๊ฐ€๋Šฅํ•จ (๋ฐฐ์—ด๋กœ)
  • ๋‹ค๋งŒ ์ด๊ฒฝ์šฐ ์„œ๋ฒ„ ๋ถ€ํ•˜๋•Œ๋ฌธ์— ํฌ๋กค๋ง์— ์ œํ•œ์ด ์žˆ์„์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ดˆ๋‹น ์š”์ฒญ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ œํ•œํ•œ๋‹ค.
import nest_asyncio ( jupyter ์ „์šฉ, ์ผ๋ฐ˜ py -> asyncio ์ด์šฉ)

nest_asyncio.apply()

loader.requests_per_second = 1

# ๋น„๋™๊ธฐ ๋กœ๋“œ
docs = loader.aload()
  • ์œ„์™€ ๊ฐ™์ด ํ•ด๋„ ์งง์€ ์‹œ๊ฐ„์— ์ง€์†์  ์š”์ฒญ์œผ๋กœ IP ์ฐจ๋‹จ ๋‹นํ• ์ˆ˜ ์žˆ์Œ. ์ด๊ฒฝ์šฐ IP๋ฅผ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•ด ๋•Œ๋•Œ๋กœ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.
loader = WebBaseLoader(
    "https://www.google.com/search?q=parrots",
    proxies={
        "http": "http://{username}:{password}:@proxy.service.com:6666/",
        "https": "https://{username}:{password}:@proxy.service.com:6666/",
    },
    # ์›น ๊ธฐ๋ฐ˜ ๋กœ๋” ์ดˆ๊ธฐํ™”
    # ํ”„๋ก์‹œ ์„ค์ •
)

# ๋ฌธ์„œ ๋กœ๋“œ
docs = loader.load()

5. conda install -c conda-forge

  • ๊ธฐ๋ณธ์ ์œผ๋กœ defaults ์ฑ„๋„(=Anaconda ๊ณต์‹ ์ €์žฅ์†Œ)์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๋” ๋‹ค์–‘ํ•œ ์ตœ์‹  ํŒจํ‚ค์ง€๋ฅผ ์œ„ํ•ด conda-forge ์ฑ„๋„์ด ์ž์ฃผ ์‚ฌ์šฉ๋จ
  • conda-forge : ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋Œ€ํ˜• ์ €์žฅ์†Œ. ์ตœ์‹  ๋ฒ„์ „ ๋น ๋ฅด๊ฒŒ ์ œ๊ณต, ์˜คํ”ˆ์†Œ์Šค ์ค‘์‹ฌ

6. ๋ฒกํ„ฐDB ์บ์‹ฑ

from langchain.storage import LocalFileStore
from langchain_openai import OpenAIEmbeddings
from langchain.embeddings import CacheBackedEmbeddings

embeddings = OpenAIEmbeddings()
store = LocalFileStore("./cache/")

cached_embedder = CacheBackedEmbeddings.from_bytes_store(
    underlying_embeddings= embeddings,
    document_embedding_cache=store,
    namespace= embeddings.model,
)

list(store.yield_keys())

7. warnings

8. init.py

9. uvicorn

  • vicorn์€ FastAPI ์•ฑ์„ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•ด์ฃผ๋Š” ASGI(Asynchronous Server Gateway Interface) ์„œ๋ฒ„
  • ์ฆ‰, FastAPI๋Š” ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ผ ๋ฟ์ด๊ณ , ์ง์ ‘ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์›น ์„œ๋ฒ„๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ ์—ญํ• ์„ ํ•ด์ฃผ๋Š” ๊ฒŒ uvicorn

์—…๋กœ๋“œ์ค‘..

์—…๋กœ๋“œ์ค‘..

profile
์ฆ๊ฒ๊ฒŒ ๊ณต๋ถ€ํ•˜๊ณ  ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋„์›€์„ ์ฃผ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€