๊ฐ•์˜

๋ฉ˜ํ† ๋ง

์ปค๋ฎค๋‹ˆํ‹ฐ

์ธํ”„๋Ÿฐ ์ปค๋ฎค๋‹ˆํ‹ฐ ์งˆ๋ฌธ&๋‹ต๋ณ€

๋А๋ฃจ๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
๋А๋ฃจ

์ž‘์„ฑํ•œ ์งˆ๋ฌธ์ˆ˜

RAG๋ฅผ ํ™œ์šฉํ•œ LLM Application ๊ฐœ๋ฐœ (feat. LangChain)

3.2 LangChain๊ณผ Chroma๋ฅผ ํ™œ์šฉํ•œ RAG ๊ตฌ์„ฑ

๐Ÿšจ python3.14 ๋ฅผ ์“ฐ๊ณ  ๊ณ„์‹œ๋ฉด chroma ์—์„œ ConfigError ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ž‘์„ฑ

ยท

38

1

---------------------------------------------------------------------------
ConfigError                               Traceback (most recent call last)
Cell In[13], line 1
----> 1 from langchain_chroma import Chroma
      3 database = Chroma.from_documents(documents=document_list, embedding=embedding)

File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/langchain_chroma/__init__.py:3
      1 """LangChain integration for Chroma vector database."""
----> 3 from langchain_chroma.vectorstores import Chroma
      5 __all__ = [
      6     "Chroma",
      7 ]

File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/langchain_chroma/vectorstores.py:18
     12 from pathlib import Path
     13 from typing import (
     14     TYPE_CHECKING,
     15     Any,
     16 )
---> 18 import chromadb
     19 import chromadb.config
     20 import numpy as np

File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/chromadb/__init__.py:3
      1 from typing import Dict, Optional, Union
      2 import logging
----> 3 from chromadb.api.client import Client as ClientCreator
      4 from chromadb.api.client import (
      5     AdminClient as AdminClientCreator,
      6 )
      7 from chromadb.api.async_client import AsyncClient as AsyncClientCreator

File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/chromadb/api/__init__.py:51
     46 from overrides import override
     47 from chromadb.api.collection_configuration import (
     48     CreateCollectionConfiguration,
     49     UpdateCollectionConfiguration,
     50 )
---> 51 from chromadb.config import DEFAULT_DATABASE, DEFAULT_TENANT
     52 from chromadb.api.types import (
     53     CollectionMetadata,
     54     Documents,
   (...)     73     DefaultEmbeddingFunction,
     74 )
     76 from chromadb.auth import UserIdentity

File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/chromadb/config.py:120
    116     NODE = "node"
    117     ID = "id"
--> 120 class Settings(BaseSettings):  # type: ignore
    121     # ==============
    122     # Generic config
    123     # ==============
    125     environment: str = ""
    127     # Can be "chromadb.api.segment.SegmentAPI" or "chromadb.api.fastapi.FastAPI" or "chromadb.api.rust.RustBindingsAPI"

File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/pydantic/v1/main.py:221, in ModelMetaclass.__new__(mcs, name, bases, namespace, **kwargs)
    219 elif is_valid_field(var_name) and var_name not in annotations and can_be_changed:
    220     validate_field_name(bases, var_name)
--> 221     inferred = ModelField.infer(
    222         name=var_name,
    223         value=value,
    224         annotation=annotations.get(var_name, Undefined),
    225         class_validators=vg.get_validators(var_name),
    226         config=config,
    227     )
    228     if var_name in fields:
    229         if lenient_issubclass(inferred.type_, fields[var_name].type_):

File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/pydantic/v1/fields.py:504, in ModelField.infer(cls, name, value, annotation, class_validators, config)
    501     required = False
    502 annotation = get_annotation_from_field_info(annotation, field_info, name, config.validate_assignment)
--> 504 return cls(
    505     name=name,
    506     type_=annotation,
    507     alias=field_info.alias,
    508     class_validators=class_validators,
    509     default=value,
    510     default_factory=field_info.default_factory,
    511     required=required,
    512     model_config=config,
    513     field_info=field_info,
    514 )

File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/pydantic/v1/fields.py:434, in ModelField.__init__(self, name, type_, class_validators, model_config, default, default_factory, required, final, alias, field_info)
    432 self.shape: int = SHAPE_SINGLETON
    433 self.model_config.prepare_field(self)
--> 434 self.prepare()

File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/pydantic/v1/fields.py:544, in ModelField.prepare(self)
    537 def prepare(self) -> None:
    538     """
    539     Prepare the field but inspecting self.default, self.type_ etc.
    540 
    541     Note: this method is **not** idempotent (because _type_analysis is not idempotent),
    542     e.g. calling it it multiple times may modify the field and configure it incorrectly.
    543     """
--> 544     self._set_default_and_type()
    545     if self.type_.__class__ is ForwardRef or self.type_.__class__ is DeferredType:
    546         # self.type_ is currently a ForwardRef and there's nothing we can do now,
    547         # user will need to call model.update_forward_refs()
    548         return

File ~/workspace/ai/rag-practice/lib/python3.14/site-packages/pydantic/v1/fields.py:576, in ModelField._set_default_and_type(self)
    573     self.annotation = self.type_
    575 if self.type_ is Undefined:
--> 576     raise errors_.ConfigError(f'unable to infer type for attribute "{self.name}"')
    578 if self.required is False and default_value is None:
    579     self.allow_none = True

ConfigError: unable to infer type for attribute "chroma_server_nofile"

์ €๋Š” Python 3.14 ๋ฒ„์ „์œผ๋กœ venv ๋ฅผ ์‚ฌ์šฉ์ค‘์ด์—ˆ๋Š”๋ฐ์š”.
์œ„์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.
๊ตฌ๊ธ€์— ConfigError ๋ฌธ๊ตฌ๋ฅผ ๊ฒ€์ƒ‰ํ•ด๋„ ์ž˜ ๋‚˜์˜ค์ง€ ์•Š์•„์„œ ChatGPT์˜ ๋„์›€์„ ์ข€ ๋ฐ›์•˜๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ๋‹ตํ•˜๋”๋ผ๊ตฌ์š”.

- Python 3.14 ํ™˜๊ฒฝ์—์„œ chromadb๊ฐ€ (pydantic v2์—์„œ BaseSettings๊ฐ€ ๋น ์ง„ ๊ฑธ ์ฒ˜๋ฆฌํ•˜๋ ค๋‹ค) pydantic.v1 ํ˜ธํ™˜ ๋ ˆ์ด์–ด๋กœ ๋–จ์–ด์ง€๊ณ 

- ๊ทธ๋Ÿฐ๋ฐ Pydantic v1 ์ฝ”์–ด๋Š” Python 3.14+์—์„œ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์•„์„œ, Settings ๋ชจ๋ธ ํ•„๋“œ(chroma_server_nofile) ํƒ€์ž… ์ถ”๋ก ์ด ๊นจ์ง€๋ฉด์„œ ConfigError๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.

ํŒŒ์ด์ฌ ๋ฒ„์ „์„ 3.12๋กœ ๋‚ฎ์ถ”์–ด์„œ venv ๋ฅผ ๋‹ค์‹œ ์„ค์ •ํ–ˆ๋”๋‹ˆ ๊ฐ™์€ ์ฝ”๋“œ์ž„์—๋„ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
ํ˜น์‹œ๋‚˜ ์ €์™€ ๊ฐ™์€ ์ด์Šˆ๋ฅผ ๊ฒช์œผ์‹  ๋ถ„๋“ค์€ python ๋ฒ„์ „์„ ๋‚ฎ์ถ”์–ด๋ณด์‹œ๊ธธ ๋ฐ”๋ผ์š”.

๋‹ต๋ณ€ 1

0

์ œ์ด์“ด๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
์ œ์ด์“ด
์ง€์‹๊ณต์œ ์ž

์ข‹์€ ๋‚ด์šฉ ๊ณต์œ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ์— ๋“ฑ๋กํ•ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค

๋А๋ฃจ๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
๋А๋ฃจ

์ž‘์„ฑํ•œ ์งˆ๋ฌธ์ˆ˜

์งˆ๋ฌธํ•˜๊ธฐ