将 Core 嵌入 HTTP 服务¶
本教程使用可运行的
examples/embedded-service
项目,展示厂商中立服务的最小形态:调用方上下文通过 HTTP 进入,应用选择租户,
Core 执行 Agent,服务返回结构化输出。
运行¶
export PRAXO_BASE_URL=http://localhost:11434/v1
export PRAXO_MODEL=llama3.2
cd examples/embedded-service
go run . -addr :8080 -tenant local
调用服务:
curl -s http://localhost:8080/run \
-H 'Content-Type: application/json' \
-H 'X-Praxo-Principal: user-1' \
-d '{"prompt":"What time is it? Use get_time."}'
Python 变体¶
Python 示例使用相同的调用方上下文边界和标准库 HTTP Server:
cd language/python/examples/service
python -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python service.py
curl -s http://127.0.0.1:8080/run \
-H 'Content-Type: application/json' \
-H 'X-Praxo-Principal: user-1' \
-d '{"prompt":"What time is it? Use get_time."}'
确定性测试:
.venv/bin/python -m unittest test_service.py -v
已验证身份变体¶
认证服务示例 增加应用侧 HMAC Bearer Token、subject/tenant claims、过期检查、Agent 运行前的 租户允许列表,以及运行完成时保存的文件型 Checkpoint。
cd examples/embedded-service-auth
go test ./...
这是应用局部 Token 格式,不是通用 JWT 实现。生产服务应使用自己的身份提供商、 密钥管理、audience 校验和撤销机制。
Python 认证变体¶
Python 认证服务示例
使用标准库实现同样的边界:HMAC Bearer Token、subject/tenant claims、过期检查、
租户允许列表、策略绑定,以及文件型 Checkpoint。设置 PRAXO_POLICY_URL 可把决策
委托给应用拥有的 HTTP 策略决策服务;超时、响应无效或拒绝都会 fail closed。
cd language/python/examples/service-auth
python -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
export PRAXO_SERVICE_SECRET=local-development-secret
.venv/bin/python service.py --addr 127.0.0.1:8080
生成短期 Token 并调用服务:
TOKEN=$(.venv/bin/python service.py --print-token user-1 local --ttl 600)
curl -s http://127.0.0.1:8080/run \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $TOKEN" \
-d '{"prompt":"What time is it? Use get_time."}'
运行确定性测试:
.venv/bin/python -m unittest test_service.py -v
TypeScript 认证变体¶
TypeScript 认证服务示例 使用 Node 标准库实现同样的 HMAC Bearer Token、租户允许列表、策略绑定、可选外部 策略决策服务,以及文件型 Checkpoint。
cd language/typescript/examples/service-auth
npm ci
export PRAXO_SERVICE_SECRET=local-development-secret
npm start
生成 Token 并调用服务:
TOKEN=$(node service.js --print-token user-1 local --ttl 600)
curl -s http://127.0.0.1:8080/run \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $TOKEN" \
-d '{"prompt":"What time is it? Use get_time."}'
运行确定性测试:
npm test
请求流程¶
- 基础 HTTP Handler 检查
X-Praxo-Principal是否存在;认证变体验证 Bearer Token 并推导 principal。 - 应用选择租户,并将 principal 和 tenant 传入 Core Session。
- Agent 在显式超时下调用模型。
- Policy 只允许模型生成和
get_time工具。 - Handler 返回包含模型输出的 JSON。
X-Praxo-Principal 只是上下文占位,不是认证。生产服务必须验证调用方,并从可信
应用状态中推导 principal 和 tenant。
服务边界¶
基础示例包含:
/healthz健康检查;- 有大小限制的
POST /runJSON 请求; - HTTP 读、写和空闲超时;
- 模型 HTTP 超时;
- SIGINT/SIGTERM 有界优雅退出;
- 由应用拥有的事件日志。
基础示例有意不包含持久 Session、Checkpoint、审批或租户存储。这些属于应用或产品职责。 认证变体增加了有界 Token 校验和文件型 Checkpoint。
无需模型的测试¶
cd examples/embedded-service
go test ./...
测试使用 fake model 和 httptest,不需要真实端点。
下一步¶
- 用已认证身份替换 principal Header。
- 按租户隔离 Checkpoint、事件和工具访问。
- 为长时工作增加持久 Checkpoint 存储。
- 将 Shell、文件和网络工具置于应用拥有的隔离之后。
- 上线前使用应用嵌入清单。