浏览文档目录与搜索

Python SDK

hostanagent-client==0.2.5 是产品服务端的异步 SDK,Python 3.10+,使用 httpx。先在 API Keys 页面创建目标 Agent 的受限 Key;模型供应商凭证由平台持有。

python -m pip install hostanagent-client==0.2.5

下面的函数由产品已验证的请求处理器调用。trusted_product_user_id 必须来自产品登录态;示例请求可能产生模型费用,只有账户有余额且 Agent 已发布时才调用。

import os
from hostanagent import AgentClient, HostingError, idempotency_key

async def chat(trusted_product_user_id: str, session_id: str):
    async with AgentClient(
        "https://api.hostanagent.com/v1",
        os.environ["HAA_APPLICATION_KEY"],
        subject=trusted_product_user_id,
    ) as client:
        key = idempotency_key()
        # 产品须保存原请求正文、参数和 key;未知结果时原样核对或重试。
        try:
            accepted = await client.run(
                session_id,
                os.environ["HAA_AGENT_VERSION"],
                "整理我的任务",
                idempotency_key=key,
            )
        except HostingError as error:
            if error.code == "INSUFFICIENT_BALANCE":
                # 异步事件流只能直接结束;产品可以在外层把此错误映射为充值提示。
                return
            raise
        async for event in client.events(accepted["run_id"]):
            yield event

要先做独立服务端冒烟检查,可把下面内容保存为 smoke.py,在测试服务端设置 HAA_APPLICATION_KEY、HAA_AGENT_VERSION 和由该产品确认的 HAA_TEST_SUBJECT,然后运行 python smoke.py。这段不接收浏览器自报 Subject;它会创建一个新 Session,并在余额充足时发起真实、可能计费的模型 Run。

import asyncio
import os
from hostanagent import AgentClient, HostingError, idempotency_key

async def main():
    async with AgentClient(
        "https://api.hostanagent.com/v1",
        os.environ["HAA_APPLICATION_KEY"],
        subject=os.environ["HAA_TEST_SUBJECT"],
    ) as client:
        session = await client.create_session()
        print("session_id", session["id"])
        try:
            run = await client.run(
                session["id"], os.environ["HAA_AGENT_VERSION"], "你好",
                idempotency_key=idempotency_key(),
            )
            print("run_id", run["run_id"])
            async for event in client.events(run["run_id"]):
                print(event["sequence"], event["type"])
        except HostingError as error:
            print(error.status_code, error.code, error.request_id)

asyncio.run(main())

预期:无余额时输出 402 INSUFFICIENT_BALANCE 且不请求模型;余额足够时先输出 Session/Run ID,再收到有序事件。网络或进程在 POST 响应前中断时,该演示脚本不会自动安全恢复:正式产品须事先持久化请求参数和幂等键,并用原键核对,不能简单重跑脚本生成新键。

先通过 await client.bootstrap() 读取运行发现,或 await client.create_session() 创建 managed + durable 会话,保存其 ID 后调用上面的函数。SDK 还提供模型目录、运行元数据、会话/消息、Run 快照、取消、追加输入、审批、claim/receipt 和事件订阅。Agent 的 history_mode / runtime_mode 枚举不意味着未开放模式可用;服务器只接受当前支持的组合。

网络断开时 events() 停止观察,不取消 Run。先读取 snapshot(run_id),再从 resume_cursor 订阅后续事件;POST 响应未知时保存并重用原幂等键和完整参数,不换键新建付费 Run。HostingError 含状态码、稳定 code 和 request ID。运行 API、恢复指南。

如需收紧本轮输入窗口,可给 run 传 limits={"max_context_tokens": 128000},且不能超过 Agent 发布配置。0.2.5 会按传入字典发送,无需为本次服务升级更换 SDK;但须从自己的模板中删除 max_context_chars、max_result_bytes、max_result_tokens。工具结果预算 max_result_context_bytes 配置在工具集,默认 16 KiB、最高 32 KiB,不是 run 参数。配置与迁移及版本边界。

下载本页 Markdown机器可读目录