← Back to list

ChatGeoPT 를 파이썬에서 한글로 따라해보기

ChatGepPT

DHL · 2023-04-28 12:37 · 2 claps · 5.9 min read
#chatgpt #chatgeopt #overpass-api #openstreetmap #gis
Open on Medium ↗
Wiki topics: LLM · Large Language Models

ChatGeoPT 를 파이썬에서 한글로 따라해보기

ChatGepPT

회사 동료 분께서 chatGPT를 공간정보에 쓸 수 있는 chatGeoPT라는 게 있다고 알려주셨습니다.

ChatGeoPT 화면

ChatGeoPT 화면

[embed]GitHub - earth-genome/ChatGeoPT: A very basic, very brittle proof of concept for an AI assistant… A very basic, very brittle proof of concept for an AI assistant for geospatial search [ blog post] ChatGeoPT is a toy…github.com

동작 과정은

  • 지명 및 대상(식당 유형 등)이 포함된 질문(자연어)을 Overpass API 쿼리문로 만들어 달라고 chatGPT에요청한다 (위 화면의 왼쪽 상단)
  • chatGPT가 Overpass API 쿼리문을 만들어 준다. (위 화면의 왼쪽 하단)
  • Overpass API에 쿼리문을 전송하여, JSON 형식의 OSM 공간정보를 회신한다
  • 그 JSON을 Leaflet 위에 마커로 표시한다 (위 화면의 오른쪽 상단)

참고로,

Overpass API는 OSM(OpenStreetMap)에 정보(공간 객체)을 쿼리하고, 그 결과를 받을 수 있는 API입니다. Ovepass API에 대한 소개 및 파이썬 코드는 아래에서 참조하실 수 있습니다.

[embed]Overpass API 개요thlee33.medium.com

Leaflet을 우크라이나 분이 만드셨네요. 블로그 쓰면서 들어가보니 러시아 침략에 대한 글이 메인 팝업에 떠있는 것을 보고 알겠되었습니다.

한글 및 파이썬 적용 테스트

한글로도 동작되는지 궁금해서 파이썬으로 따라해 봤습니다.

먼저, chatGPT API는 OpenAI 패키지를 통해 제공됩니다. 처음 사용하시는 분은 맨 위줄의 설치 구문을 주석 해제해서 설치한 다음에 호출하시면 됩니다. api key는 https://platform.openai.com/account/api-keys 에서 확인할 수 있는데, API는 유료 결제를 해야만 가능한 것으로 알고 있습니다.

# !pip install openai
import os
import requests
import openai
openai.api_key = '여기에 openai에서 받은 api key를 넣으세요'

다음은, chatGPT에 질문할 prompt를 만듭니다.

place = '서울역'
poi = '카페'
buffer = 300

prompt = place + '의 중심 좌표에서 ' + str(buffer) + '미터 반경 내에 있는 ' + poi + '를 찾는 overpass api의 파라미터를 작성해줘' 
prompt

프롬프트 문구는 ‘서울역의 중심 좌표에서 300미터 반경 내에 있는 카페를 찾는 overpass api의 파라미터를 작성해줘' 입니다.

이 프롬프트를 chatGPT에 보내고, 결과를 받는 코드입니다. 몇가지 모델을 테스트해봤는데, text-davinci-003이 제대로 된 결과값을 보내줬습니다. 이 코드를 실행할 때 약 3초 정도의 시간이 소요됩니다. chatGPT에 질문했을 때 답을 받기까지 살짝 뜸들이는 그 시간인 것 같습니다. 저는 한 30초 걸리는 것 같은데…

# 모델 
#model = "gpt-3.5-turbo"    #GPT 3.5 Turbo
model = "text-davinci-003"

response = openai.Completion.create(
    engine=model,
    prompt=prompt,
    max_tokens=90,
    #n=1,
    stop=None
)

response의 일부

response의 일부

테스트를 위해 response 첫번째 값만 뽑아서 불필요한 부분을 정리했습니다. 제대로 쓰기 위해서는 max_tokens도 조금씩 바꿔가며 테스트해볼 필요가 있을 것 같습니다.

result_str = response.choices[0].text.replace("\n", "")

이제 Overpass API에 쿼리문을 던져서 받아오겠습니다.

# 이제 https://overpass-api.de/api/interpreter? url에 위의 리턴 문자열을 붙여서 request
# Overpass Turbo 쿼리를 작성합니다.
overpass_url = "http://overpass-api.de/api/interpreter"
overpass_query = '[out:json];node' + result_str + ');out;'

# Overpass Turbo API를 호출하여 데이터를 추출합니다.
response = requests.get(overpass_url, params={"data": overpass_query})
data = response.json()

받아온 OSM 공간 정보를 folium 위에 표시하기 위해 먼저 folium map 객체를 잡아 줍니다.

# 위의 request의 리턴 geojson 을 folium 등에서 지도 시각화 
import folium

# 위치 정보
location = [data['elements'][0]['lat'], data['elements'][0]['lon']]  # 첫번째 리턴값의 위도, 경도
# 지도 생성
map = folium.Map(location=location, zoom_start=14)

OSM 공간정보를 Marker로 지도 위에 표시합니다.

# 검색 결과를 반복문으로 처리
for node  in data["elements"]:
    if node["type"] == "node":
        # 해당 노드의 위도, 경도, 이름 정보를 추출합니다.
        lat = node['lat']
        lon = node['lon']
        name = node.get("tags", {}).get("name", "Unknown")

        # 해당 위치에 마커를 표시합니다.
        folium.Marker(
            location=[lat, lon],
            popup=name,
            icon=folium.Icon(color="red", icon="info-sign")
        ).add_to(map)

# 지도를 HTML 파일로 저장합니다.
# map.save("map.html")
# 지도 출력
map

Folium을 이용해 OSM 배경지도 위에 Maeker로 표시한 OSM 공간정보

Folium을 이용해 OSM 배경지도 위에 Maeker로 표시한 OSM 공간정보

코드 자체의 완성도가 떨어지지만, 한글로도 가능하다는 점, 파이썬에서 chatGPT API를 테스트해봤다는 점에서 의미가 있었습니다. 무엇보다 OSM의 태그를 알지 못해도 가능하다는 점에서 chatGPT 활용의 필요성이 느껴졌습니다.


메타데이터
post_id
595e93daff8a
slug
chatgeopt-를-파이썬에서-한글로-따라해보기-595e93daff8a
url
https://medium.com/@thlee33/chatgeopt-%EB%A5%BC-%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%97%90%EC%84%9C-%ED%95%9C%EA%B8%80%EB%A1%9C-%EB%94%B0%EB%9D%BC%ED%95%B4%EB%B3%B4%EA%B8%B0-595e93daff8a
canonical_url
https://medium.com/@thlee33/chatgeopt-%EB%A5%BC-%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%97%90%EC%84%9C-%ED%95%9C%EA%B8%80%EB%A1%9C-%EB%94%B0%EB%9D%BC%ED%95%B4%EB%B3%B4%EA%B8%B0-595e93daff8a
author_url
https://medium.com/@thlee33
status
ok
fetched_at
2026-08-07 10:02:55