智能体
simonwillison.net ·
@Simon Willison's Weblog
用 GPT-6 Astra 与 ChatGPT Work 生成跑步路线
Simon Willison 记录了一次实测:让 ChatGPT Work 搭配 GPT-6 Astra(Max)基于 OpenStreetMap 数据,从他家出发规划 5K 和 10K 环形跑步路线。任务运行约 27 分钟,最终产出内嵌可视化以及可下载的 GPX 和 GeoJSON 文件,结果符合其要求。该案例展示了 Agent 调用外部数据并生成结构化地理文件的能力。
AI推荐理由 Simon Willison 的实测记录,具体展示了用 ChatGPT Work 搭配 GPT-6 Astra 基于 OSM 数据生成 5K/10K 跑步路线,耗时 27 分钟并输出可视化、GPX 与 GeoJSON 文件,属于可验证的 Agent 工具使用案例;但为个人博客单次体验,缺少系统性评测与失败率数据,故未给更高分。
72
正文
Here's a neat thing I had [ChatGPT Work](https://simonwillison.net/2026/Aug/30/understanding-chatgpt-work/) with GPT-6 Astra (Max) do this morning:
> `I live at . Figure out 5K and 10K running routes from me that loop from my house. Use OSM data.`
It worked for 27 minutes and produced exactly what I'd asked for, as both an embedded visualization and downloadable GPX file and GeoJSON files. Here's that 5K route:

When I asked it how it had created the route, it replied:
> I used **Nominatim to locate the address** and **Overpass to download local OpenStreetMap roads and trails**, then calculated the loops locally.
Frustratingly, the actual code it ran and exact details of what it did weren't visible to me in the ChatGPT UI. I see this lack of transparency is an anti-feature.
By the time I thought to ask for a copy of the Python code it had used, ChatGPT was unable to provide it. This appears to be because the thread had been compacted. I think any LLM system that uses compaction needs to both preserve the pre-compacted text and make that text available via agent tool calls, to protect against this kind of problem.
As for displaying the map to me, that used the [visualize skill](https://codex-tool-reference.simonw.chatgpt.site/skills/visualize). It created a file called `/workspace/el-granada-5k-share.html` to embed directly into the ChatGPT UI.
Here's [a copy of that HTML](https://gist.github.com/simonw/ea652573c8ff5378b218cb10c8c5a480), which starts like this:
```
El Granada harbor loop5.1 km
Map data © OpenStreetMap contributors
#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; }
{"route":{"type":"LineString","coordinates":[[-122.467425,37.4997753] ...
(() => {
const root=document.getElementById('eg-share-loop');
```
The `` element contains the full geometry needed to render both the running route and the map itself, using D3, which is loaded from an allow-listed CDN location described in this section of [the visualize skill](https://codex-tool-reference.simonw.chatgpt.site/skills/visualize):
> ### External resources
>
> * The CSP allows only `cdnjs.cloudflare.com`, `esm.sh`, `cdn.jsdelivr.net`, `unpkg.com`, `fonts.googleapis.com`, `fonts.gstatic.com`, and `fonts.bunny.net`. Other origins are blocked and fail silently.
Tags: [geospatial](https://simonwillison.net/tags/geospatial), [ai](https://simonwillison.net/tags/ai), [d3](https://simonwillison.net/tags/d3), [openai](https://simonwillison.net/tags/openai), [generative-ai](https://simonwillison.net/tags/generative-ai), [chatgpt](https://simonwillison.net/tags/chatgpt), [llms](https://simonwillison.net/tags/llms), [skills](https://simonwillison.net/tags/skills), [gpt-6-astra](https://simonwillison.net/tags/gpt-6-astra)