Skip to main content

Add your description here

Project description

๐Ÿ”ช LLM Chunker

LLM ๊ธฐ๋ฐ˜ ์˜๋ฏธ๋ก ์  ํ…์ŠคํŠธ ๋ถ„ํ•  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

PyPI version License: MIT Python 3.8+

๊ธ€์ž ์ˆ˜๊ฐ€ ์•„๋‹Œ ์˜๋ฏธ ๋‹จ์œ„๋กœ ๋ฌธ์„œ๋ฅผ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ โ€ข ๋น ๋ฅธ ์‹œ์ž‘ โ€ข ์˜ˆ์ œ โ€ข API ๋ ˆํผ๋Ÿฐ์Šค โ€ข English


โœจ ์™œ llm-chunker์ธ๊ฐ€์š”?

๊ธฐ์กด ์ฒญ์ปค๋Š” ๊ธ€์ž ์ˆ˜๋‚˜ ์ •๊ทœ์‹์œผ๋กœ ํ…์ŠคํŠธ๋ฅผ ๋ถ„ํ• ํ•ด์„œ, ๋ฌธ์žฅ ์ค‘๊ฐ„์—์„œ ์ž˜๋ฆฌ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. llm-chunker๋Š” ๋งฅ๋ฝ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹คโ€”๋ฒ•๋ฅ  ๋ฌธ์„œ์˜ ์กฐํ•ญ ๊ฒฝ๊ณ„, ์†Œ์„ค์˜ ๊ฐ์ • ๋ณ€ํ™”, ์ฃผ์ œ ์ „ํ™˜ ๋“ฑ์„ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด ์ฒญํ‚น LLM Chunker
๊ธ€์ž ์ˆ˜๋กœ ๋ถ„ํ•  ์˜๋ฏธ ๋‹จ์œ„๋กœ ๋ถ„ํ• 
๋ฌธ์žฅ ์ค‘๊ฐ„์—์„œ ์ž˜๋ฆผ ์™„์ „ํ•œ ๋ฌธ๋งฅ ๋ณด์กด
์ผ๋ฅ ์ ์ธ ๋ฐฉ์‹ ๋„๋ฉ”์ธ ๋งž์ถค ํ”„๋กฌํ”„ํŠธ

๐Ÿ“ฆ ์„ค์น˜

pip install llm-chunker

์š”๊ตฌ์‚ฌํ•ญ:

  • Python 3.8+
  • OpenAI API ํ‚ค

๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

import os
os.environ["OPENAI_API_KEY"] = "sk-..."

from llm_chunker import GenericChunker

chunker = GenericChunker()
chunks = chunker.split_text(your_text)  # list[str] ๋ฐ˜ํ™˜

๐Ÿ“– ๊ธฐ๋ณธ ์˜ˆ์ œ

from llm_chunker import GenericChunker

chunker = GenericChunker(
    model="gpt-4o",
    significance_threshold=7,  # ์ค‘์š”๋„ 7 ์ด์ƒ๋งŒ ๋ถ„ํ• 
    min_chunk_gap=200,         # ๋ถ„ํ•  ์ง€์  ๊ฐ„ ์ตœ์†Œ ๊ฑฐ๋ฆฌ
    verbose=True,              # ์ƒ์„ธ ๋กœ๊ทธ ์ถœ๋ ฅ
    show_progress=True,        # ์ง„ํ–‰๋ฅ  + ๊ฒฐ๊ณผ ์ถœ๋ ฅ
)

chunks = chunker.split_text(your_text)  # list[str]

๐Ÿ“– ์ปค์Šคํ…€ ํ”„๋กฌํ”„ํŠธ ์˜ˆ์ œ

๋ฐฉ๋ฒ• 1: PromptBuilder ์‚ฌ์šฉ (๊ถŒ์žฅ)

from llm_chunker import GenericChunker, TransitionAnalyzer, PromptBuilder

# ๋„๋ฉ”์ธ๊ณผ ์ฐพ์„ ๋‚ด์šฉ๋งŒ ์ง€์ •ํ•˜๋ฉด ํ”„๋กฌํ”„ํŠธ ์ž๋™ ์ƒ์„ฑ
prompt = PromptBuilder.create(
    domain="์†Œ์„ค",
    find="๊ฐ์ • ๋ณ€ํ™”๋‚˜ ์žฅ๋ฉด ์ „ํ™˜", # ์ „ํ™˜์  ํŒ์ • ๊ธฐ์ค€์„ ์ƒ์„ธํžˆ ๊ธฐ์ˆ 
)

analyzer = TransitionAnalyzer(
    prompt_generator=prompt,
    model="gpt-4o",
)

chunker = GenericChunker(analyzer=analyzer)
chunks = chunker.split_text(novel_text)

PromptBuilder.create() ํŒŒ๋ผ๋ฏธํ„ฐ:

ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž… ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
domain str "text" ๋ถ„์„ํ•  ํ…์ŠคํŠธ ๋„๋ฉ”์ธ
find str "semantic changes" ์ฐพ์„ ์ „ํ™˜์  ์œ ํ˜•
custom_instruction str None ์ถ”๊ฐ€ ์ง€์‹œ์‚ฌํ•ญ

๋ฐฉ๋ฒ• 2: ๋‚ด์žฅ ํ”„๋กฌํ”„ํŠธ ์‚ฌ์šฉ (๋ฒ•๋ฅ )

from llm_chunker import GenericChunker, TransitionAnalyzer
from llm_chunker.prompts import get_legal_prompt

analyzer = TransitionAnalyzer(
    prompt_generator=get_legal_prompt,
    model="gpt-4o",
)

chunker = GenericChunker(analyzer=analyzer)
chunks = chunker.split_text(legal_document)

์ถ”๊ฐ€ ๋‚ด์žฅ ํ”„๋กฌํ”„ํŠธ ์—…๋ฐ์ดํŠธ ์˜ˆ์ •

๋ฐฉ๋ฒ• 3: ์ปค์Šคํ…€ ํ”„๋กฌํ”„ํŠธ ํ•จ์ˆ˜ ์ง์ ‘ ์ž‘์„ฑ

from llm_chunker import GenericChunker, TransitionAnalyzer

def my_custom_prompt(segment: str) -> str:
    return f"""
๋‹ค์Œ ํ…์ŠคํŠธ์—์„œ ์ฃผ์ œ๊ฐ€ ๋ฐ”๋€Œ๋Š” ์ง€์ ์„ ์ฐพ์•„์ฃผ์„ธ์š”.

ํ…์ŠคํŠธ:
{segment}

JSON ํ˜•์‹์œผ๋กœ ๋ฐ˜ํ™˜:
{{
  "transition_points": [
    {{
      "start_text": "๋ณ€ํ™”๊ฐ€ ์‹œ์ž‘๋˜๋Š” ํ…์ŠคํŠธ (์›๋ฌธ ๊ทธ๋Œ€๋กœ)",
      "topic_before": "์ด์ „ ์ฃผ์ œ",
      "topic_after": "์ดํ›„ ์ฃผ์ œ",
      "significance": 1-10 ์ •์ˆ˜,
      "explanation": "์„ค๋ช…"
    }}
  ]
}}
""".strip()

analyzer = TransitionAnalyzer(
    prompt_generator=my_custom_prompt,
    model="gpt-4o",
)

chunker = GenericChunker(analyzer=analyzer)
chunks = chunker.split_text(your_text)

๐Ÿ“š API ๋ ˆํผ๋Ÿฐ์Šค

GenericChunker

ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž… ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
analyzer TransitionAnalyzer None ์ปค์Šคํ…€ ๋ถ„์„๊ธฐ (ํ”„๋กฌํ”„ํŠธ/๋ชจ๋ธ)
model str None OpenAI ๋ชจ๋ธ๋ช… (analyzer ์—†์„ ๋•Œ)
significance_threshold int 7 ์ตœ์†Œ ์ค‘์š”๋„ ์ ์ˆ˜ (1-10)
min_chunk_gap int 200 ๋ถ„ํ•  ์ง€์  ๊ฐ„ ์ตœ์†Œ ๊ฑฐ๋ฆฌ (๊ธ€์ž)
max_segment_size int 5000 LLM์— ๋ณด๋‚ผ ์„ธ๊ทธ๋จผํŠธ ํฌ๊ธฐ
overlap_size int 400 ์„ธ๊ทธ๋จผํŠธ ๊ฐ„ ์˜ค๋ฒ„๋žฉ ํฌ๊ธฐ
verbose bool False ์ƒ์„ธ ๋กœ๊ทธ ์ถœ๋ ฅ
show_progress bool False ์ง„ํ–‰๋ฅ  ํ‘œ์‹œ + ์ฒญํฌ ๊ฒฐ๊ณผ ์ถœ๋ ฅ

TransitionAnalyzer

ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž… ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
prompt_generator Callable[[str], str] get_default_prompt ํ”„๋กฌํ”„ํŠธ ์ƒ์„ฑ ํ•จ์ˆ˜
model str None OpenAI ๋ชจ๋ธ๋ช…

๐Ÿ—๏ธ ์ž‘๋™ ์›๋ฆฌ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      ๊ธด ํ…์ŠคํŠธ ์ž…๋ ฅ                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                            โ”‚
                            โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ 1. ๋ถ„ํ•       LLM ์ปจํ…์ŠคํŠธ ํฌ๊ธฐ์— ๋งž๊ฒŒ ์œˆ๋„์šฐ ๋ถ„ํ•             โ”‚
โ”‚              (max_segment_size, overlap_size ์ ์šฉ)          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                            โ”‚
                            โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ 2. ๋ถ„์„      LLM ๊ธฐ๋ฐ˜ ์ „ํ™˜์  ํƒ์ง€                            โ”‚
โ”‚              (์ปค์Šคํ…€ ํ”„๋กฌํ”„ํŠธ๋กœ ๋„๋ฉ”์ธ ๋งž์ถค ๋ถ„์„)            โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                            โ”‚
                            โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ 3. ํ•„ํ„ฐ๋ง    ๋‚ฎ์€ ์ค‘์š”๋„ & ์ค‘๋ณต ํฌ์ธํŠธ ์ œ๊ฑฐ                  โ”‚
โ”‚              (significance_threshold, min_chunk_gap ์ ์šฉ)   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                            โ”‚
                            โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ 4. ์Šฌ๋ผ์ด์‹ฑ  ๊ฒ€์ฆ๋œ ์ „ํ™˜์ ์—์„œ ํ…์ŠคํŠธ ๋ถ„ํ•                    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                            โ”‚
                            โ–ผ
              [์ฒญํฌ 1] [์ฒญํฌ 2] [์ฒญํฌ 3] ...

๐Ÿ“„ ๋ผ์ด์„ ์Šค

MIT License - LICENSE ์ฐธ์กฐ


โญ Star History

Star History Chart

๋” ๋‚˜์€ RAG ํŒŒ์ดํ”„๋ผ์ธ์„ ์œ„ํ•ด โค๏ธ

์œ ์šฉํ•˜์…จ๋‹ค๋ฉด โญ ์Šคํƒ€๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

llm_chunker-0.2.0.tar.gz (16.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

llm_chunker-0.2.0-py3-none-any.whl (15.6 kB view details)

Uploaded Python 3

File details

Details for the file llm_chunker-0.2.0.tar.gz.

File metadata

  • Download URL: llm_chunker-0.2.0.tar.gz
  • Upload date:
  • Size: 16.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for llm_chunker-0.2.0.tar.gz
Algorithm Hash digest
SHA256 6ea55d856a03441c71c66329b3dd9b98b26eed5cacbed583b28a02c2fd858ff2
MD5 8f31c1156b1c9a716fe14aa5bacaf8e1
BLAKE2b-256 cd55203e956d0b87264b755058a68017408832693cd702f4406caaeafffee945

See more details on using hashes here.

File details

Details for the file llm_chunker-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: llm_chunker-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 15.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for llm_chunker-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 96e2f005bb72a1bdde892afe7c08e82a69292311e8fd081efe351725378f3710
MD5 502d0f6fec03fee888d0b32711c118b3
BLAKE2b-256 19aaa0709d6fc33ac5de020b2db324d5716622848f7528044af741ff69bf3962

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page