今天早上,我让搭载 GPT-6 Astra (Max) 的 ChatGPT Work 做了一件挺有意思的事:
I live at <my address>. Figure out 5K and 10K running routes from me that loop from my house. Use OSM data.
它工作了 27 分钟,产出的结果正是我想要的,既有嵌入页面的可视化,也有可下载的 GPX 文件和 GeoJSON 文件。这就是那条 5K 路线:

当我问它是怎么生成这条路线的,它回答说:
我用 Nominatim 定位地址,用 Overpass 下载本地的 OpenStreetMap 道路和小径,然后在本地计算环线。
令人沮丧的是,它实际运行的代码和具体操作细节,我在 ChatGPT 界面里都看不到。我认为这种缺乏透明度的做法是个反特性。
等我想到要它给我一份所用的 Python 代码时,ChatGPT 已经无法提供了。原因似乎是该对话线程已被压缩(compaction)。我认为,任何使用压缩的 LLM 系统,都既要保留压缩前的文本,也要让智能体能通过工具调用获取这些文本,以防出现这类问题。
至于向我展示地图,用的是 visualize skill。它创建了一个名为 /workspace/el-granada-5k-share.html 的文件,直接嵌入 ChatGPT 界面。
这是那份 HTML 的副本,开头如下:
<div id="eg-share-loop">
<div class="viz-row"><h3>El Granada harbor loop</h3><span class="text-small">5.1 km</span></div>
<div id="eg-share-stage"></div>
<div class="text-small text-muted">Map data © <a href="https://www.openstreetmap.org/copyright" target="_blank" rel="noopener">OpenStreetMap contributors</a></div>
<style>
#eg-share-loop { width:100%; }
#eg-share-loop #eg-share-stage { width:100%; margin:8px 0; }
#eg-share-loop .eg-share-map { display:block; width:100%; touch-action:none; }
#eg-share-loop .eg-share-map text { fill:var(--foreground); font-size:12px; font-weight:400; }
#eg-share-loop .eg-share-label { paint-order:stroke; stroke:var(--background); stroke-width:3px; stroke-linejoin:round; }
</style>
<script type="application/json" id="eg-share-data">{"route":{"type":"LineString","coordinates":[[-122.467425,37.4997753] ...</script>
<script src="https://cdn.jsdelivr.net/npm/d3@7.9.0/dist/d3.min.js"></script>
<script>
(() => {
const root=document.getElementById('eg-share-loop');
<script type="application/json"> 元素包含渲染跑步路线和地图本身所需的完整几何数据,渲染使用 D3,它从一个白名单内的 CDN 位置加载,相关说明见 visualize skill 的这一节:
外部资源
- CSP 只允许
cdnjs.cloudflare.com、esm.sh、cdn.jsdelivr.net、unpkg.com、fonts.googleapis.com、fonts.gstatic.com和fonts.bunny.net。其他来源会被拦截,并且不会有任何提示地失败。
