使用说明
HALO-用于操作的HTTP API语言
LLM代理的自描述API——无需MCP。
HALO是一种轻量级协议约定,允许任何HTTP API使用标准向LLM代理描述自己 OPTIONS 动词与风俗 Accept: application/llm+json 头球没有注册表,没有sidecar进程,没有代理层——只有描述自己的API。
此存储库包含:
- HALO协议规范 --完全语言和平台无关的协议规范(halo-规范.md)
halo-fastapi--一个提供FastAPI服务器端插件的Python包(HaloRegister),代理端客户端(HaloClient),以及用于Microsoft代理框架的框架适配器(HaloAgentFrameworkAdapter)语义内核(HaloSemanticKernelAdapter)- API样本 --一个跨四个域实现HALO兼容端点的FastAPI服务器
- 样本代理(代理框架) --使用Microsoft agent Framework的基于浏览器的DevUI的LLM代理
- 示例代理(语义内核) --一个使用语义内核进行交互式CLI聊天的LLM代理
运作原理
1. OPTIONS / → discover all available tools
2. OPTIONS /api/payments/charge → fetch full schema for a specific tool
3. POST /api/payments/charge → call the API directly — no proxy
LLM代理发送 OPTIONS / 随着 Accept: application/llm+json 获取所有可用工具的清单——它们的名称、描述和标签。当它选择一个工具时,它会发送 OPTIONS 访问该特定端点以获取完整模式。然后它直接调用真正的端点。
工具可以通过标签进行筛选(OPTIONS /?tags=payments)因此,代理只会发现与他们的任务相关的内容。
架构响应示例
[
{
"description": "Charge a payment method for a given amount",
"call": { "method": "POST", "url": "/api/payments/charge" },
"auth": { "type": "bearer", "scopes": ["payments:write"] },
"input": {
"amount": { "type": "number", "required": true },
"currency": { "type": "string", "enum": ["GBP", "USD", "EUR"] },
"customer_id": { "type": "string", "required": true }
},
"output": { "charge_id": { "type": "string" }, "status": { "type": "string" } },
"why": "Use to charge a customer immediately. Prefer /authorise for pre-auth flows.",
"effects": { "reversible": true, "undo": "/api/payments/refund" },
"tags": ["payments", "write"]
}
]
主要特点
- 零结构漂移 --结构字段(输入、输出、类型、身份验证)来自处理请求的同一代码。LLM原生油田(
why,tags,effects)手写,但与模型位于同一位置。 - 标签筛选发现 --代理仅通过以下方式发现与其任务相关的工具
OPTIONS /?tags=payments. - 授权感知范围 --传递令牌
OPTIONS /清单只反映了这些证书允许的内容。 - 延迟加载 --只有当代理选择工具时,才会获取完整的模式,从而降低令牌成本。
- 直接呼叫路径 --没有代理层。代理直接调用API。两跳:代理→ API.
- 凭证注入 —
HaloClient在调用时从凭证映射注入承载令牌、API密钥或基本身份验证。 - 使用回退重试 —
HaloClient在429和5xx响应上以指数回退重试失败的请求。
安装
uv add halo-fastapi
服务器使用情况(FastAPI)
一条线路使每条路线都符合HALO标准:
from halo_fastapi import HaloRegister
from fastapi import FastAPI
app = FastAPI(title="My API", version="1.0.0")
HaloRegister(app) # registers OPTIONS handlers automatically
输入/输出模式、身份验证要求和描述都来自现有的Pydantic模型、路由装饰器和依赖注入,不需要额外的配置。LLM原生字段,如 why, tags,以及 effects 可以通过以下方式添加 json_schema_extra 在你的Pydantic模型上。
客户端使用情况(代理适配器)
from halo_fastapi import HaloClient
plugin = await HaloClient(
base_url="https://api.example.com",
bearer_token=os.getenv("API_KEY"),
).discover(tags=["payments"])
# Fetch a single tool schema
schema = await plugin.get_tool("/api/payments/charge")
# Invoke a tool directly
result = await plugin.invoke("/api/payments/charge", body={"amount": 1000, "currency": "GBP", "customer_id": "cust_123"})
HALO替代什么
| 之前 | 与HALO |
|---|---|
| MCP服务器进程 | 现有API内部的OPTIONS处理程序 |
| 工具注册表 | API是注册表 |
| 架构漂移 | 结构字段不能漂移--源自代码 |
| 代理层/额外跃点 | 代理直接调用API |
| 静态工具定义 | 通过OPTIONS进行动态发现 |
| 前期代币成本 | 延迟、标签过滤加载 |
规格
完整的协议规范见 halo-规范.md该协议与语言和平台无关——任何语言的HTTP服务器都可以实现HALO。
运行示例
该存储库包括一个预先配置了所有工具的开发容器。使用Dev Containers扩展在VS Code中打开。
Poe任务
| 命令 | 描述 |
|---|---|
poe api |
在端口3010上启动示例API |
poe maf |
启动代理框架DevUI(需要API) |
poe sk |
启动语义内核CLI聊天(需要API) |
poe sync:maf |
代理框架的同步依赖关系 |
poe sync:sk |
语义内核的同步依赖关系 |
poe test |
运行单元测试 |
poe lint |
跑ruff和mypy |
poe format |
自动格式化代码 |
poe build |
构建 halo-fastapi 包装 |
VS代码启动配置文件
| 简介 | 描述 |
|---|---|
| 示例API+代理框架 | 两者都开始;首先同步MAF依赖关系 |
| 示例API+语义内核 | 两者都开始;首先同步SK依赖关系 |
注: 代理框架和语义内核示例具有冲突的传递依赖关系,不能同时安装。使用
poe sync:maf或poe sync:sk在它们之间切换。
存储库结构
halo/
├── halo-specification.md # Full protocol specification (CC BY 4.0)
├── halo-fastapi/ # Python reference implementation (Apache 2.0)
│ └── src/halo_fastapi/
│ ├── _schema.py # HaloRegister server-side plugin
│ ├── _client.py # HaloClient client-side HTTP adapter
│ ├── _types.py # Pydantic models for HALO schema types
│ ├── _constants.py # Shared constants (content type, defaults)
│ └── adapters/
│ ├── _agent_framework_adapter.py # Agent Framework integration
│ └── _semantic_kernel_adapter.py # Semantic Kernel integration
├── samples/ # Sample applications
│ ├── agents/
│ │ ├── agent-framework/ # Microsoft Agent Framework sample
│ │ │ └── src/sample_agent_framework/
│ │ └── semantic-kernel/ # Semantic Kernel sample
│ │ └── src/sample_semantic_kernel/
│ └── servers/
│ └── fastapi/ # HALO-compliant demo API
│ ├── data/ # JSON data files (weather, books, inventory, employees)
│ └── src/sample_api/
许可证
- HALO协议规范 (halo-规范.md): CC 4.0
- 所有源代码: Apache 2.0
