<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=%EA%B0%9C%EC%9D%B8_PC_%ED%85%8D%EC%8A%A4%ED%8A%B8_%EA%B2%80%EC%83%89_%EC%B1%84%EB%B4%87</id>
	<title>개인 PC 텍스트 검색 채봇 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=%EA%B0%9C%EC%9D%B8_PC_%ED%85%8D%EC%8A%A4%ED%8A%B8_%EA%B2%80%EC%83%89_%EC%B1%84%EB%B4%87"/>
	<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%EA%B0%9C%EC%9D%B8_PC_%ED%85%8D%EC%8A%A4%ED%8A%B8_%EA%B2%80%EC%83%89_%EC%B1%84%EB%B4%87&amp;action=history"/>
	<updated>2026-05-17T07:17:40Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=%EA%B0%9C%EC%9D%B8_PC_%ED%85%8D%EC%8A%A4%ED%8A%B8_%EA%B2%80%EC%83%89_%EC%B1%84%EB%B4%87&amp;diff=1861&amp;oldid=prev</id>
		<title>2025년 6월 24일 (화) 03:29에 Devcafe님의 편집</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%EA%B0%9C%EC%9D%B8_PC_%ED%85%8D%EC%8A%A4%ED%8A%B8_%EA%B2%80%EC%83%89_%EC%B1%84%EB%B4%87&amp;diff=1861&amp;oldid=prev"/>
		<updated>2025-06-24T03:29:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ko&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2025년 6월 24일 (화) 12:29 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l80&quot;&gt;80번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;80번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* 문서 응답 품질을 높이려면 소단락(문단 등) 단위로 쪼개어 벡터화하는 방식을 추천합니다.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* 문서 응답 품질을 높이려면 소단락(문단 등) 단위로 쪼개어 벡터화하는 방식을 추천합니다.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* CLI 콘솔에서 동작합니다. (웹, GUI 등은 streamlit 등으로 확장 가능)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* CLI 콘솔에서 동작합니다. (웹, GUI 등은 streamlit 등으로 확장 가능)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[category:python]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[category:chatbot]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=%EA%B0%9C%EC%9D%B8_PC_%ED%85%8D%EC%8A%A4%ED%8A%B8_%EA%B2%80%EC%83%89_%EC%B1%84%EB%B4%87&amp;diff=1828&amp;oldid=prev</id>
		<title>Devcafe: 새 문서: = 개인 PC 텍스트 파일 기반 간단 챗봇 파이썬 프로그램 예제 =  == 개요 == 개인 컴퓨터 내의 여러 `txt` 파일을 수집해서 벡터화하고, 질문 입력 시 가장 유사한 파일의 내용을 답변해주는 간단한 챗봇(Python CLI 형태) 예제입니다.   필수 패키지 설치 방법과, 작동 원리 그리고 파이썬 예제 코드를 미디어위키 표기법으로 정리했습니다.  == 필요한 패키지 == * sentence-transfor...</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%EA%B0%9C%EC%9D%B8_PC_%ED%85%8D%EC%8A%A4%ED%8A%B8_%EA%B2%80%EC%83%89_%EC%B1%84%EB%B4%87&amp;diff=1828&amp;oldid=prev"/>
		<updated>2025-06-23T16:38:35Z</updated>

		<summary type="html">&lt;p&gt;새 문서: = 개인 PC 텍스트 파일 기반 간단 챗봇 파이썬 프로그램 예제 =  == 개요 == 개인 컴퓨터 내의 여러 `txt` 파일을 수집해서 벡터화하고, 질문 입력 시 가장 유사한 파일의 내용을 답변해주는 간단한 챗봇(Python CLI 형태) 예제입니다.   필수 패키지 설치 방법과, 작동 원리 그리고 파이썬 예제 코드를 미디어위키 표기법으로 정리했습니다.  == 필요한 패키지 == * sentence-transfor...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= 개인 PC 텍스트 파일 기반 간단 챗봇 파이썬 프로그램 예제 =&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
개인 컴퓨터 내의 여러 `txt` 파일을 수집해서 벡터화하고, 질문 입력 시 가장 유사한 파일의 내용을 답변해주는 간단한 챗봇(Python CLI 형태) 예제입니다.  &lt;br /&gt;
필수 패키지 설치 방법과, 작동 원리 그리고 파이썬 예제 코드를 미디어위키 표기법으로 정리했습니다.&lt;br /&gt;
&lt;br /&gt;
== 필요한 패키지 ==&lt;br /&gt;
* sentence-transformers&lt;br /&gt;
* chromadb&lt;br /&gt;
&lt;br /&gt;
=== 설치 방법 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install sentence-transformers chromadb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 폴더 구조 예시 ==&lt;br /&gt;
* 본인의 텍스트 파일들을 한 폴더(`./textfiles` 등)에 넣습니다.&lt;br /&gt;
&lt;br /&gt;
== 파이썬 예제 코드 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
from sentence_transformers import SentenceTransformer&lt;br /&gt;
import chromadb&lt;br /&gt;
from chromadb.config import Settings&lt;br /&gt;
&lt;br /&gt;
# 1. 텍스트 파일 데이터 불러오기&lt;br /&gt;
def load_files_from_folder(folder_path):&lt;br /&gt;
    texts = []&lt;br /&gt;
    file_names = []&lt;br /&gt;
    for filename in os.listdir(folder_path):&lt;br /&gt;
        if filename.endswith(&amp;quot;.txt&amp;quot;):&lt;br /&gt;
            with open(os.path.join(folder_path, filename), &amp;quot;r&amp;quot;, encoding=&amp;#039;utf-8&amp;#039;) as f:&lt;br /&gt;
                texts.append(f.read())&lt;br /&gt;
                file_names.append(filename)&lt;br /&gt;
    return texts, file_names&lt;br /&gt;
&lt;br /&gt;
# 2. 벡터DB 설정 (ChromaDB)&lt;br /&gt;
def create_chroma_db(texts, file_names):&lt;br /&gt;
    client = chromadb.Client(Settings(chroma_db_impl=&amp;quot;mem&amp;quot;))&lt;br /&gt;
    collection = client.create_collection(name=&amp;quot;docs&amp;quot;)&lt;br /&gt;
    model = SentenceTransformer(&amp;#039;paraphrase-MiniLM-L6-v2&amp;#039;)&lt;br /&gt;
    embeddings = model.encode(texts).tolist()&lt;br /&gt;
    collection.add(documents=texts, metadatas=[{&amp;quot;source&amp;quot;: n} for n in file_names], ids=[str(i) for i in range(len(texts))], embeddings=embeddings)&lt;br /&gt;
    return collection, model&lt;br /&gt;
&lt;br /&gt;
# 3. 챗봇 답변 함수&lt;br /&gt;
def get_answer(user_input, collection, model, texts, file_names):&lt;br /&gt;
    query_embedding = model.encode([user_input]).tolist()[0]&lt;br /&gt;
    results = collection.query(query_embeddings=[query_embedding], n_results=1)&lt;br /&gt;
    idx = int(results[&amp;#039;ids&amp;#039;][0][0])&lt;br /&gt;
    source = file_names[idx]&lt;br /&gt;
    answer = texts[idx][:300]  # 첫 300자만 표시 (예시)&lt;br /&gt;
    return f&amp;quot;({source})에서 찾은 내용:\n{answer}...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --------&lt;br /&gt;
# 실행 파트&lt;br /&gt;
folder_path = &amp;quot;./textfiles&amp;quot; # 여기에 본인 폴더 경로 지정&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;텍스트 파일을 읽고 데이터를 준비합니다.&amp;quot;)&lt;br /&gt;
texts, file_names = load_files_from_folder(folder_path)&lt;br /&gt;
collection, model = create_chroma_db(texts, file_names)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;준비 완료. 질문을 입력하세요. 종료하려면 &amp;#039;exit&amp;#039;를 입력하세요.&amp;quot;)&lt;br /&gt;
while True:&lt;br /&gt;
    user_input = input(&amp;quot;\n질문: &amp;quot;)&lt;br /&gt;
    if user_input.lower().strip() == &amp;#039;exit&amp;#039;:&lt;br /&gt;
        print(&amp;quot;챗봇을 종료합니다.&amp;quot;)&lt;br /&gt;
        break&lt;br /&gt;
    answer = get_answer(user_input, collection, model, texts, file_names)&lt;br /&gt;
    print(answer)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 작동 방식 요약 ==&lt;br /&gt;
# `./textfiles` 폴더 내의 여러 `.txt` 파일을 모두 읽어서 텍스트 데이터로 저장합니다.&lt;br /&gt;
# 파일 전체 내용을 벡터로 변환 및 ChromaDB 벡터DB에 등록합니다.&lt;br /&gt;
# 사용자가 질문을 하면 입력 질문을 벡터로 변환해서, 가장 유사한 벡터(=파일)을 찾아 일부 내용을 반환합니다.&lt;br /&gt;
# &amp;#039;exit&amp;#039; 입력 시 종료됩니다.&lt;br /&gt;
&lt;br /&gt;
== 참고 사항 ==&lt;br /&gt;
* 문서 응답 품질을 높이려면 소단락(문단 등) 단위로 쪼개어 벡터화하는 방식을 추천합니다.&lt;br /&gt;
* CLI 콘솔에서 동작합니다. (웹, GUI 등은 streamlit 등으로 확장 가능)&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
</feed>