Sponsored by Deepsite.site

高德地址解析服务

Created By
blacsheep10 months ago
大模型搭配高德mcp的地址服务
Content

高德地址解析服务

基于Claude AI和高德地图MCP的智能地址解析服务,提供强大的地址解析、地理编码和位置信息查询功能。

🚀 功能特性

  • 智能地址解析: 使用Claude AI理解自然语言地址查询
  • 高德地图集成: 通过MCP协议集成高德地图API
  • 多种查询方式: 支持地址转坐标、坐标转地址、POI搜索等
  • 多轮工具调用: 支持复杂的多轮次工具调用,完成连续任务
  • 多种LLM支持: 支持Claude和OpenAI等大模型
  • RESTful API: 提供完整的HTTP API接口
  • 异步处理: 高性能异步架构,支持并发请求
  • 健康监控: 完善的健康检查和监控机制
  • 错误处理: 完善的异常处理和错误恢复机制

📋 系统要求

  • Python 3.10+
  • Node.js 16+ (用于高德MCP服务器)
  • 高德地图API密钥
  • Claude API密钥

🛠️ 安装配置

1. 克隆项目

git clone <repository-url>
cd address-parser-service

2. 创建Python环境

方式一:使用pip(推荐)

# 创建虚拟环境
python -m venv address-parser-env

# 激活虚拟环境
# Windows:
address-parser-env\Scripts\activate
# macOS/Linux:
source address-parser-env/bin/activate

# 安装依赖
pip install -r requirements.txt

方式二:使用conda

# 方法1: 使用environment.yml文件(推荐)
conda env create -f environment.yml
conda activate address-parser

# 方法2: 手动创建环境
conda create -n address-parser python=3.11
conda activate address-parser

# 安装依赖
pip install -r requirements.txt

# 或者使用conda安装部分依赖
conda install fastapi uvicorn pydantic
pip install mcp anthropic structlog pydantic-settings

3. 配置环境变量

复制环境变量模板:

cp .env.example .env

编辑 .env 文件,填入你的API密钥:

# Claude API配置
ANTHROPIC_API_KEY=your_anthropic_api_key_here

# 高德地图API配置  
AMAP_MAPS_API_KEY=your_amap_api_key_here

# 其他配置保持默认即可

4. 获取API密钥

高德地图API密钥

  1. 访问 高德开放平台
  2. 注册账号并创建应用
  3. 获取Web服务API密钥

Claude API密钥

  1. 访问 Anthropic Console
  2. 创建账号并获取API密钥

🚀 快速开始

方式一:使用示例脚本

# 激活环境(如果使用虚拟环境)
# pip环境:
source address-parser-env/bin/activate  # macOS/Linux
# 或
address-parser-env\Scripts\activate     # Windows

# conda环境:
conda activate address-parser

# 运行基础使用示例
python examples/basic_usage.py

方式二:启动API服务

# 启动FastAPI服务
python api/main.py

服务启动后访问:

方式三:直接使用MCP客户端

import asyncio
from src.mcp_client import AmapMCPClient, ClaudeHandler

async def main():
    # 创建MCP客户端
    async with AmapMCPClient() as amap_client:
        # 创建Claude处理器
        claude_handler = ClaudeHandler(amap_client)
        
        # 处理查询
        result = await claude_handler.process_query(
            "请帮我解析这个地址:北京市朝阳区三里屯太古里"
        )
        
        print(result["final_answer"])

asyncio.run(main())

📖 API文档

地址解析接口

POST /api/v1/address/parse

请求体:

{
    "address": "北京市朝阳区三里屯太古里",
    "context": {
        "city": "北京",
        "preferences": "详细地址信息"
    },
    "system_prompt": "请提供详细的地址解析结果"
}

响应:

{
    "success": true,
    "request_id": "1642123456789_abc12345",
    "data": {
        "formatted_address": "北京市朝阳区三里屯太古里",
        "location": "116.397428,39.90923",
        "province": "北京市",
        "city": "北京市",
        "district": "朝阳区"
    },
    "response": "根据您提供的地址,我已经成功解析出详细信息...",
    "tool_calls": [...],
    "processing_time": 2.5
}

健康检查接口

GET /api/v1/health

响应:

{
    "status": "healthy",
    "mcp_connected": true,
    "claude_available": true,
    "tools_count": 5,
    "uptime": 3600.0
}

工具列表接口

GET /api/v1/tools

响应:

{
    "success": true,
    "tools": [
        {
            "name": "geocode",
            "description": "地理编码,将地址转换为坐标",
            "input_schema": {...}
        }
    ],
    "count": 1
}

🔧 高级配置

MCP服务器管理

使用内置的服务器管理脚本:

# 启动高德MCP服务器
python scripts/start_amap_server.py start

# 停止服务器
python scripts/start_amap_server.py stop

# 重启服务器
python scripts/start_amap_server.py restart

# 查看状态
python scripts/start_amap_server.py status

# 监控模式(自动重启)
python scripts/start_amap_server.py monitor

配置参数说明

参数默认值说明
LLM_PROVIDERclaude大语言模型提供商(claude或openai)
ANTHROPIC_API_KEY必填Claude API密钥
CLAUDE_MODELclaude-3-7-sonnet-20250219Claude模型版本
CLAUDE_MAX_TOKENS1000Claude最大输出token数量
ENABLE_TOKEN_EFFICIENT_TOOLSfalse是否启用Claude token高效工具调用
TOOL_MAX_ITERATIONS10工具调用最大迭代次数
OPENAI_API_KEY可选OpenAI API密钥
OPENAI_MODELgpt-4OpenAI模型版本
OPENAI_MAX_TOKENS1000OpenAI最大输出token数量
MCP_SERVER_TIMEOUT30MCP服务器超时时间(秒)
MCP_RETRY_COUNT3重试次数
MCP_RETRY_DELAY1.0重试延迟(秒)
LOG_LEVELINFO日志级别
API_HOST127.0.0.1API服务主机
API_PORT8000API服务端口

🧪 测试

运行单元测试

# 运行所有测试
pytest tests/

# 运行特定测试文件
pytest tests/test_mcp_client.py -v

# 运行集成测试(需要API密钥)
pytest tests/ -m integration

# 运行多轮工具调用测试
python tests/run_tests.py --claude    # 仅运行Claude测试
python tests/run_tests.py --openai    # 仅运行OpenAI测试
python tests/run_tests.py --complex   # 仅运行复杂多轮测试
python tests/run_tests.py --all       # 运行所有测试

测试覆盖率

# 生成测试覆盖率报告
pytest --cov=src tests/

📁 项目结构

address-parser-service/
├── src/                    # 核心源代码
│   ├── mcp_client/        # MCP客户端模块
│   │   ├── amap_client.py # 高德MCP客户端
│   │   ├── claude_handler.py # Claude处理器
│   │   └── openai_handler.py # OpenAI处理器
│   ├── core/              # 核心模块
│   │   ├── config.py      # 配置管理
│   │   ├── logger.py      # 日志配置
│   │   └── exceptions.py  # 异常定义
│   └── utils/             # 工具函数
│       └── helpers.py     # 辅助函数
├── api/                   # API服务模块
│   ├── main.py           # FastAPI主应用
│   ├── routes/           # API路由
│   └── schemas/          # 数据模型
├── tests/                # 测试代码
│   ├── test_mcp_client.py # MCP客户端测试
│   ├── test_multi_tool_calls.py # 多轮工具调用测试
│   ├── test_complex_multi_tool_calls.py # 复杂多轮工具调用测试
│   └── test_openai_multi_tool_calls.py # OpenAI多轮工具调用测试
├── scripts/              # 脚本文件
├── examples/             # 使用示例
├── logs/                 # 日志文件
├── requirements.txt      # Python依赖
├── .env.example         # 环境变量模板
└── README.md            # 项目文档

🔍 使用示例

基础地址解析

# 地址转坐标
query = "北京市朝阳区三里屯太古里"
result = await claude_handler.process_query(query)

# 坐标转地址
query = "116.397428,39.90923 这个坐标对应的地址是什么?"
result = await claude_handler.process_query(query)

# POI搜索
query = "帮我查找北京大学的地理坐标"
result = await claude_handler.process_query(query)

多轮工具调用示例

# 多轮次工具调用示例 - 天气比较
query = "查询一下北京市和上海市今天的天气,并告诉我在这两个城市中,哪个城市更适合户外活动?"
result = await claude_handler.process_query(query)

# 复杂多轮工具调用 - 旅行规划
query = """请帮我规划一次从北京到上海的旅行路线:
1. 首先查询北京和上海的天气情况
2. 然后查询北京市区到上海市区的驾车路线
3. 再查询途经城市杭州市的著名景点
4. 最后给我一个综合考虑天气和路线的详细旅行计划建议
"""
result = await claude_handler.process_query(query)

批量处理

curl -X POST "http://localhost:8000/api/v1/address/batch" \
     -H "Content-Type: application/json" \
     -d '[
       {"address": "北京市朝阳区三里屯"},
       {"address": "上海市浦东新区陆家嘴"},
       {"address": "广州市天河区珠江新城"}
     ]'

🐛 故障排除

常见问题

  1. MCP连接失败

    • 检查 AMAP_MAPS_API_KEY 是否正确设置
    • 确认网络连接正常
    • 查看日志文件获取详细错误信息
  2. Claude API调用失败

    • 检查 ANTHROPIC_API_KEY 是否正确设置
    • 确认API密钥有足够的配额
    • 检查网络连接
  3. 工具调用超时

    • 增加 MCP_SERVER_TIMEOUT 配置值
    • 检查高德地图API服务状态
  4. 依赖包冲突

    • 使用虚拟环境隔离依赖:python -m venv address-parser-env
    • 或使用conda环境:conda create -n address-parser python=3.11
    • 清理pip缓存:pip cache purge
  5. conda环境问题

    • 确保激活了正确的环境:conda activate address-parser
    • 如果遇到依赖冲突,尝试混合安装:
      conda install fastapi uvicorn pydantic
      pip install mcp anthropic structlog pydantic-settings
      

日志查看

# 查看应用日志
tail -f logs/app.log

# 查看API访问日志
tail -f logs/api.log

🤝 贡献指南

  1. Fork 项目
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

🙏 致谢

📞 支持

如果你遇到问题或有建议,请:

  1. 查看 FAQ
  2. 搜索现有的 Issues
  3. 创建新的 Issue

注意: 本项目仅供学习和研究使用,请遵守相关API服务的使用条款。

Recommend Clients
TraeBuild with Free GPT-4.1 & Claude 3.7. Fully MCP-Ready.
Roo Code (prev. Roo Cline)Roo Code (prev. Roo Cline) gives you a whole dev team of AI agents in your code editor.
Y GuiA web-based graphical interface for AI chat interactions with support for multiple AI models and MCP (Model Context Protocol) servers.
LutraLutra is the first MCP compatible client built for everyone
Continue⏩ Create, share, and use custom AI code assistants with our open-source IDE extensions and hub of models, rules, prompts, docs, and other building blocks
LINKAGOGO-MCP---BOOKMARK-MANAGERManage your LinkaGoGo bookmarks through any AI assistant that supports the Model Context Protocol (MCP). Search, add, organize, tag, move, and export bookmarks conversationally — 16 tools for full bookmark and folder management. Connect via Claude.ai, Claude Desktop, or any MCP-compatible client.
WindsurfThe new purpose-built IDE to harness magic
MCP PlaygroundCall MCP Server Tools Online
ChatWiseThe second fastest AI chatbot™
DeepChatYour AI Partner on Desktop
ZedCode at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.
MCP ConnectEnables cloud-based AI services to access local Stdio based MCP servers via HTTP requests
CursorThe AI Code Editor
Refact.aiOpen-source AI Agent for VS Code and JetBrains that autonomously solves coding tasks end-to-end.
HyperChatHyperChat is a Chat client that strives for openness, utilizing APIs from various LLMs to achieve the best Chat experience, as well as implementing productivity tools through the MCP protocol.
Visual Studio Code - Open Source ("Code - OSS")Visual Studio Code
Cline – #1 on OpenRouterAutonomous coding agent right in your IDE, capable of creating/editing files, executing commands, using the browser, and more with your permission every step of the way.
Cherry Studio🍒 Cherry Studio is a desktop client that supports for multiple LLM providers.
A Sleek AI Assistant & MCP Client5ire is a cross-platform desktop AI assistant, MCP client. It compatible with major service providers, supports local knowledge base and tools via model context protocol servers .
chatmcpChatMCP is an AI chat client implementing the Model Context Protocol (MCP).
y-cli 🚀A Tiny Terminal Chat App for AI Models with MCP Client Support