title: 基于Chroma搭建个人知识库的全文索引 tags: [] id: '2714' categories:
Chroma是一个可以帮助计算机理解文本的工具。它可以让你把文本放到一个“盒子”里,这个“盒子”可以让计算机更容易地找到和理解文本。你可以用它来创建一个文本库,然后通过输入问题,找到和问题相关的文本。比如,你可以创建一个文本库,里面有许多关于历史的文章,然后你可以输入“什么是古代中国的四大发明”,Chroma就可以帮你找到相关的文章。Chroma还有很多其他的功能,可以让你更方便地管理和搜索文本。它是完全免费和开放的,任何人都可以使用它。
FROM python:3.10
WORKDIR /chroma
COPY ./chroma/requirements.txt requirements.txt
RUN pip install --no-cache-dir --upgrade -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY ./chroma/bin/docker_entrypoint.sh /docker_entrypoint.sh
COPY ./chroma /chroma
CMD ["/docker_entrypoint.sh"]
version: '3.9'
networks:
net:
driver: bridge
services:
server:
image: limour/chroma
restart: always
volumes:
- ./chroma:/chroma
- ./index_data:/index_data
- ./docker_entrypoint.sh:/docker_entrypoint.sh
command: uvicorn chromadb.app:app --reload --workers 1 --host 0.0.0.0 --port 8000 --log-config log_config.yml
environment:
- CHROMA_DB_IMPL=clickhouse
- CLICKHOUSE_HOST=clickhouse
- CLICKHOUSE_PORT=8123
ports:
- 5800:8000
depends_on:
- clickhouse
networks:
- net
clickhouse:
image: clickhouse/clickhouse-server:22.9-alpine
restart: always
environment:
- ALLOW_EMPTY_PASSWORD=yes
- CLICKHOUSE_TCP_PORT=9000
- CLICKHOUSE_HTTP_PORT=8123
ports:
- '8123:8123'
- '9000:9000'
volumes:
- ./clickhouse_data:/bitnami/clickhouse
- ./backups:/backups
- ./chroma/config/backup_disk.xml:/etc/clickhouse-server/config.d/backup_disk.xml
- ./chroma/config/chroma_users.xml:/etc/clickhouse-server/users.d/chroma.xml
networks:
- net
import chromadb
from chromadb.config import Settings
chroma_client = chromadb.Client(Settings(chroma_api_impl="rest",
chroma_server_host="172.17.0.1",
chroma_server_http_port="5800",
chroma_server_ssl_enabled=False
))
collection = chroma_client.get_or_create_collection(name="test")
test_documents = [
"长城:中国的标志性建筑之一,是世界上最长的城墙,也是中国古代的军事防御工程,被誉为世界七大奇迹之一。",
'故宫:位于北京市中心,是明清两代的皇宫,也是中国最著名的古建筑之一,被誉为“中华民族的瑰宝”。',
"大雁塔:位于中国古都西安市,是一座古代佛教文化遗产,建于唐朝,是中国古代建筑艺术的杰出代表。"
]
collection.add(
documents = test_documents,
metadatas = [{"chapter": "3", "verse": "16"}, {"chapter": "3", "verse": "5"}, {"chapter": "29", "verse": "11"}],
ids = ["id1", "id2", "id3"]
)
collection.query(
query_texts=["长城是哪个朝代修建的?"],
n_results=1
)
# {'ids': [['id1']],
# 'embeddings': None,
# 'documents': [['长城:中国的标志性建筑之一,是世界上最长的城墙,也是中国古代的军事防御工程,被誉为世界七大奇迹之一。']],
# 'metadatas': [[{'chapter': '3', 'verse': '16'}]],
# 'distances': [[0.6134731769561768]]}
collection.query(
query_texts=["在中国历史上,哪位皇帝曾经居住在位于北京市中心的那座古代宫殿?"],
n_results=1
)
# {'ids': [['id2']],
# 'embeddings': None,
# 'documents': [['故宫:位于北京市中心,是明清两代的皇宫,也是中国最著名的古建筑之一,被誉为“中华民族的瑰宝”。']],
# 'metadatas': [[{'chapter': '3', 'verse': '5'}]],
# 'distances': [[0.4222669303417206]]}
collection.query(
query_texts=["营造法式"],
n_results=3
)
# {'ids': [['id2', 'id3', 'id1']],
# 'embeddings': None,
# 'documents': [['故宫:位于北京市中心,是明清两代的皇宫,也是中国最著名的古建筑之一,被誉为“中华民族的瑰宝”。',
# '大雁塔:位于中国古都西安市,是一座古代佛教文化遗产,建于唐朝,是中国古代建筑艺术的杰出代表。',
# '长城:中国的标志性建筑之一,是世界上最长的城墙,也是中国古代的军事防御工程,被誉为世界七大奇迹之一。']],
# 'metadatas': [[{'chapter': '3', 'verse': '5'},
# {'chapter': '29', 'verse': '11'},
# {'chapter': '3', 'verse': '16'}]],
# 'distances': [[1.073906660079956, 1.2695903778076172, 1.2703778743743896]]}