为 OSM 构建本地 AI Agent

我花了 21 天时间构建了一个本地 AI Agent。它可以将自然语言转换为 OSM 过滤器 JSON。

我希望它完全在本地 GPU 上运行。没有 API 调用,没有隐私风险,也没有速率限制。

以下是我的构建过程以及我的心得体会。

The Architecture

我使用 RAG 流水线为模型提供上下文。

• Embeddings:我使用 bge-small-en-v1.5 将 OSM 标签描述转换为向量。 • Database:我将这些嵌入存储在 SQLite 中。 • Retrieval:当你提出问题时,系统会找到最相关的 OSM 标签和过滤器示例。 • Generation:LLM 接收你的查询以及检索到的示例,从而生成 JSON。

The Failures

构建过程并不顺利,我遇到了好几个瓶颈。

• Stop Token Bug:我的初次运行返回了空结果。模型在 JSON 之前添加了一个空行,这触发了我的停止符,导致输出被提前截断。我不得不移除停止符来修复这个问题。 • Blind Copying:LLM 经常直接照抄示例,而不是对其进行调整。我重写了提示词(prompts),以强制模型合成新的过滤器。 • Domain Confusion:模型会将海洋标签与陆地标签混淆。我增加了一个验证步骤,根据相关性来筛选候选标签。

The Lessons

• 避免使用停止符:除非你非常有把握,否则不要使用它们。它们经常会导致输出中断。 • 数据质量至上:对自然语言句子进行 Embedding 的效果比对原始 JSON 字符串进行 Embedding 更好。 • 循环机制是精髓:我添加了一个简单的循环。如果过滤器返回的结果为零,Agent 会扩大请求范围并重试。这让它从一个静态工具变成了一个自适应系统。

The Result

该系统可以在显存小于 8 GB 的单块 GPU 上运行。它能处理大多数简单的查询,并在失败时进行自我调整。虽然在处理复杂的否定逻辑和标签合成方面仍有改进空间,但核心功能已经可以运行。

在您的地理空间工作流中,是如何处理标签歧义问题的?

Source: https://dev.to/gisfromscratch/building-a-local-ai-agent-for-osm-21-days-of-iteration-2fc4

Optional learning community: https://t.me/GyaanSetuAi