ChatGPT+ 벡터 데이터베이스 + 프롬프트-애즈-코드 - CVP 스택
Zilliz에서 저희가 작업해 온 데모 애플리케이션을 공유하게 되어 기쁩니다. 저희는 이를 OSS Chat이라고 부르며, 여러분이 좋아하는 오픈 소스 프로젝트에 대한 기술 지식을 얻는 데 사용할 수 있는 챗봇입니다. 이번 첫 릴리스는 Hugging Face, Pytorch, Milvus만 지원하지만, 앞으로 여러분이 좋아하는 여러 오픈 소스 프로젝트로 확장할 계획입니다. 저희는 OpenAI의 ChatGPT와 벡터 데이터베이스인 Zilliz를 사용해 OSS Chat을 구축했습니다! 이를 사용하는 모든 분께 무료 서비스로 제공하고 있습니다. 여러분의 오픈 소스 프로젝트를 목록에 올리고 싶다면, 알려주세요.
OSS Chat을 구축한 이유에 대한 배경
ChatGPT는 제한된 지식 기반으로 인해 제약이 있으며, 때로는 익숙하지 않은 주제에 대해 질문을 받으면 환각 답변을 생성하기도 합니다. 저희는 이러한 제약을 극복하기 위해 새로운 AI 스택인 ChatGPT+Vector database+prompt-as-code, 즉 CVP Stack을 소개합니다.
ChatGPT는 자연어 질의에 답변하는 데 매우 뛰어납니다. 사용자의 질의와 검색된 텍스트를 연결하는 프롬프트와 결합하면, ChatGPT는 관련성 있고 정확한 응답을 생성합니다. 이 접근 방식은 ChatGPT가 "환각 답변"을 제공하는 것을 완화할 수 있습니다.
저희는 CVP stack의 작동 데모로 OSS Chat을 구축했습니다. OSS Chat은 오픈 소스 프로젝트의 다양한 GitHub repositories와 관련 docs pages를 진실의 원천으로 활용합니다. 저희는 이 데이터를 embeddings로 변환하고 embeddings를 Zilliz에, 관련 콘텐츠를 별도의 데이터 저장소에 저장합니다. 사용자가 오픈 소스 프로젝트에 대해 질문하며 OSS Chat과 상호작용하면, 관련 매치를 찾기 위해 Zilliz에서 유사도 검색을 트리거합니다. 검색된 데이터는 ChatGPT에 입력되어 정밀하고 정확한 응답을 생성합니다.
OSS Chat Architecture
답변을 환각하기
ChatGPT와 OSS Chat을 사용한 몇 가지 Q&A 예시를 보여드려 일부 잘못된 응답을 어떻게 제거할 수 있는지 설명하고자 합니다.
Q1 Hugging Face는 OpenAI Whisper를 지원하나요
이 질문을 ChatGPT에 했을 때, 그것은 자신의 한계를 인정하고 정확한 답변(데이터가 없다는 것)을 제공했지만, 유용하지는 않았습니다.
2021년 9월 제 지식 기준 시점 기준으로, Hugging Face는 OpenAI Whisper 지원을 발표하지 않았습니다. 그러나 앞으로 지원을 추가할 가능성은 항상 있습니다. OpenAI Whisper는 OpenAI의 새로운 언어 모델이며, 다른 회사와 개발자들이 이를 자신들의 플랫폼과 제품에 통합하는 데 시간이 좀 걸릴 수 있습니다.
OSS Chat에서는 Huggingface documentation site에서 가져오기 때문에 정확한 답변을 얻을 수 있습니다. 네, Hugging Face는 OpenAI Whisper를 지원합니다. FlaxWhisperModel 클래스는 OpenAI Whisper 모델을 감싼 래퍼인 transformers library에서 사용할 수 있습니다. 이 클래스를 사용하여 사전 학습된 OpenAI Whisper 모델을 로드하고 텍스트 분류, 질의응답, 텍스트 생성과 같은 다양한 자연어 처리 작업에 사용할 수 있습니다.
Q2 torch.compile API는 무엇을 하나요?
저희는 ChatGPT에 PyTorch API에 대한 질문을 했고, 그것이 무엇인지에 대한 긴 답변(저희가 묻지 않은 내용)과 PyTorch에는 torch.compile API가 없다는 응답을 받았습니다.
2021년 9월 제 지식 기준 시점 기준으로, Facebook AI Research에서 개발한 인기 있는 오픈 소스 머신 러닝 라이브러리인 PyTorch에는 torch.compile API가 없습니다.
하지만 PyTorch는 PyTorch의 모든 신경망 모듈을 위한 기본 클래스인 torch.nn.Module과 같이 신경망 모델을 컴파일하고 최적화하는 것과 관련된 다양한 API를 제공합니다. torch.nn.Module은 신경망 모델을 정의하고 최적화하기 위한 다양한 메서드와 훅을 제공합니다.
또한 PyTorch는 TorchScript JIT 컴파일러와 같은 Just-In-Time (JIT) 컴파일러와 통합할 수 있는 인터페이스를 제공하며, 이는 다양한 하드웨어 플랫폼에서 효율적으로 실행되도록 PyTorch 모델을 최적화하고 컴파일하는 데 사용할 수 있습니다. JIT 컴파일러는 PyTorch 모델을 독립 실행형 직렬화 표현으로 변환하는 데 사용할 수 있으며, 이는 다른 환경이나 언어에서 로드하고 실행할 수 있습니다. 요약하자면, PyTorch에는 torch.compile API가 없지만, 신경망 모델을 최적화하고 컴파일하기 위한 다양한 API와 도구를 제공합니다.
다음은 OSSChat이 우리에게 알려준 내용입니다:
torch.compile API의 목적은 PyTorch 코드를 미리 컴파일하여 속도를 높이는 것입니다. 기존 코드에 최소한의 변경만으로 임의의 Python 코드를 처리할 수 있으며 데이터 의존적 제어 흐름도 처리할 수 있습니다. 또한 TorchScript 트레이싱이 상수로 취급하여 잘못된 결과를 초래할 수 있는 비-PyTorch 함수 호출도 처리할 수 있습니다.
Q3 Milvus에서 TTL이란 무엇이며 어떻게 설정하나요
이 마지막 질문에 대해 우리는 ChatGPT에게 물었고, 합리적인 답변을 제공받았습니다(코드 스니펫까지 있었습니다!), 하지만 질문에 대한 답은 아니었습니다. 대신, 답변을 조합해낸 듯한 그런 "환각" 중 하나였습니다.
Milvus에서 TTL (Time To Live)은 데이터의 만료 시간을 설정할 수 있게 해주는 기능입니다. Milvus에서 컬렉션 또는 파티션에 TTL을 설정하면, Milvus는 지정된 TTL을 초과한 모든 데이터를 자동으로 삭제합니다. Milvus에서 컬렉션 또는 파티션에 TTL을 설정하려면 각각 set_collection_ttl 또는 set_partition_ttl API를 사용할 수 있습니다. 예시는 다음과 같습니다:
pythonCopy code
import datetime
from milvus import Milvus, DataType
milvus = Milvus()
# create a collection
collection_param = {
'collection_name': 'my_collection',
'dimension': 128,
'index_file_size': 1024,
'metric_type': DataType.FLOAT_VECTOR,
}
milvus.create_collection(collection_param)
# set TTL for the collection
now = datetime.datetime.now()
delta = datetime.timedelta(days=7) # TTL of 7 days
expiry_time = now + delta
milvus.set_collection_ttl('my_collection', expiry_time.timestamp())
# create a partition
partition_param = {
'collection_name': 'my_collection',
'partition_name': 'my_partition',
}
milvus.create_partition(partition_param)
# set TTL for the partition
milvus.set_partition_ttl('my_collection', 'my_partition', expiry_time.timestamp())
이 예제에서는 Milvus에서 컬렉션과 파티션을 생성합니다. 그런 다음 각각 set_collection_ttl 및 set_partition_ttl API를 사용하여 컬렉션과 파티션 모두에 7일의 TTL을 설정합니다. TTL은 Unix 타임스탬프로 지정되며, 이는 1970년 1월 1일 이후의 초 수입니다. datetime 모듈을 사용하여 현재 시간에 TTL을 더해 만료 시간을 계산합니다.
Milvus를 시작할 때 TTL 기능을 활성화해야 한다는 점에 유의하세요. 이는 Milvus 구성 파일에서 TTL_CHECK_INTERVAL 매개변수를 설정하여 수행할 수 있습니다. 기본값은 60초입니다.
반면 OSSchat은 원하는 초를 컬렉션 설정 속성에 설정하는 단 한 줄의 코드라는 올바른 답변을 제공했습니다.
TTL은 Milvus에서 "Time to Live"를 의미합니다. 이는 컬렉션의 데이터에 만료 시간을 설정할 수 있게 해주는 기능입니다. 컬렉션의 데이터가 만료되면 자동으로 정리되며 검색이나 쿼리에 포함되지 않습니다.
Milvus에서 컬렉션의 TTL 값을 설정하려면 Python에서 collection.set_properties() 메서드를 사용할 수 있습니다. 예를 들어 TTL 값을 1800초(30분)로 설정하려면 다음 코드를 사용할 수 있습니다:
collection.set_properties(properties={"collection.ttl.seconds": 1800})
컬렉션을 생성할 때 컬렉션의 속성에 collection.ttl.seconds 속성을 지정하여 TTL 값을 설정할 수도 있습니다. 값은 초 단위로 지정해야 하며 0 이상이어야 합니다. 값이 0이면 TTL이 비활성화됨을 의미합니다.
지금 시작하기
앞으로 며칠 동안 OSS Chat에 더 많은 기능을 추가하고, 이를 어떻게 구축했는지 알려드리기 위해 관련 블로그 글도 작성할 예정입니다. 그동안 OSS Chat을 사용해 보시고 어떤 기능을 보고 싶은지 알려주세요. 추가하고 싶은 오픈소스 프로젝트가 있다면 그것도 알려주세요!
계속 읽기

3 Easiest Ways to Use Claude Code on Your Mobile Phone
Run Claude Code from your phone with Remote Control, Happy Coder, or SSH + Tailscale. Comparison table, setup steps, and tools for typing, memory, and parallel tasks.

Zilliz Cloud Update: Tiered Storage, Business Critical Plan, Cross-Region Backup, and Pricing Changes
This release offers a rebuilt tiered storage with lower costs, a new Business Critical plan for enhanced security, and pricing updates, among other features.

Introducing Zilliz MCP Server: Natural Language Access to Your Vector Database
Developers can easily manage and query vector databases with natural language via Zilliz MCP Server in AI-native environments.



