sdk/python/README_CN.md
OpenViking 的轻量级 Python HTTP SDK。
openviking-sdk 面向只需要通过 HTTP 调用现有 OpenViking 服务的用户。它避免了主包 openviking 中较重的本地运行时、服务端和 CLI 依赖。
pip install openviking-sdk
要求:
http://127.0.0.1:1933openviking-sdkopenviking_sdkfrom openviking_sdk import AsyncHTTPClient, SyncHTTPClient
SDK 支持三种配置方式,优先级从高到低如下:
OPENVIKING_URL、OPENVIKING_API_KEY、OPENVIKING_ACCOUNT、OPENVIKING_USER、OPENVIKING_ACTOR_PEER_ID 和 OPENVIKING_TIMEOUTovcli.conf,来源可以是 OPENVIKING_CLI_CONFIG_FILE 指定的路径,或者默认路径 ~/.openviking/ovcli.conf这意味着之前依赖 ovcli.conf 的配置方式,在 SDK 拆分之后仍然可以继续使用。
大多数部署场景使用 API Key 认证。
常见客户端字段:
url:OpenViking 服务的基础 URLapi_key:root key 或 user keyaccount:可选的 account 覆盖,通常只在使用 root key 时需要user:可选的 user 覆盖,通常只在使用 root key 时需要user_id:user 的兼容旧别名actor_peer_id:可选的 actor peer 覆盖agent_id:actor_peer_id 的兼容旧别名兼容性说明:
user_id 和 agent_idactor_peer_id 和 agent_id 不能同时传入示例:
from openviking_sdk import SyncHTTPClient
client = SyncHTTPClient(
url="http://127.0.0.1:1933",
api_key="your-user-or-root-key",
)
如果你使用的是 root key,并且希望以某个租户用户身份执行:
from openviking_sdk import SyncHTTPClient
client = SyncHTTPClient(
url="http://127.0.0.1:1933",
api_key="your-root-key",
account="demo-account",
user="demo-user",
)
from openviking_sdk import SyncHTTPClient
client = SyncHTTPClient(
url="http://127.0.0.1:1933",
api_key="your-user-key",
)
healthy = client.health()
print("health:", healthy)
session = client.create_session("demo-session")
print("session:", session)
client.session("demo-session").add_message("user", "hello from sdk")
context = client.session("demo-session").get_session_context(token_budget=4096)
print("context:", context)
import asyncio
from openviking_sdk import AsyncHTTPClient
async def main() -> None:
client = AsyncHTTPClient(
url="http://127.0.0.1:1933",
api_key="your-user-key",
)
healthy = await client.health()
print("health:", healthy)
session = await client.create_session("demo-session-async")
print("session:", session)
session_client = client.session("demo-session-async")
await session_client.add_message("user", "hello from async sdk")
context = await session_client.get_session_context(token_budget=4096)
print("context:", context)
await client.close()
asyncio.run(main())
from openviking_sdk import SyncHTTPClient
client = SyncHTTPClient(url="http://127.0.0.1:1933", api_key="your-user-key")
result = client.create_session("demo-session")
print(result)
add_resource 会自动处理本地路径对应的文件上传。
from openviking_sdk import SyncHTTPClient
client = SyncHTTPClient(url="http://127.0.0.1:1933", api_key="your-user-key")
result = client.add_resource(
"/path/to/notes.md",
to="viking://resources/demo-notes",
reason="knowledge import",
wait=True,
)
print(result)
from openviking_sdk import SyncHTTPClient
client = SyncHTTPClient(url="http://127.0.0.1:1933", api_key="your-user-key")
client.mkdir("viking://resources/demo-dir")
print(client.ls("viking://resources"))
print(client.read("viking://resources/demo-dir/example.md"))
from openviking_sdk import SyncHTTPClient
client = SyncHTTPClient(url="http://127.0.0.1:1933", api_key="your-user-key")
result = client.find("hello", limit=5)
print(result)
如果你使用 root key 连接,SDK 也暴露了管理员 API,例如:
admin_create_accountadmin_register_useradmin_list_accountsadmin_list_usersadmin_regenerate_keyadmin_delete_account示例:
from openviking_sdk import SyncHTTPClient
root_client = SyncHTTPClient(
url="http://127.0.0.1:1933",
api_key="your-root-key",
)
result = root_client.admin_create_account(
account_id="demo-account",
admin_user_id="demo-admin",
seed="demo-admin-seed",
)
print(result)
root_client.admin_register_user(
account_id="demo-account",
user_id="alice",
role="user",
seed="alice-seed",
user_config={
"add_targets": {
"resource_uri": "viking://user/resources/project-a",
"skill_uri": "viking://user/skills",
}
},
)
root_client.admin_regenerate_key(
account_id="demo-account",
user_id="alice",
seed="alice-new-seed",
)
admin_create_account 也接受同样结构的 user_config。这些字段用于初始化服务端用户配置;普通添加调用仍然只需省略 to / parent / target_uri,由服务端解析默认值。
传入 seed 时,返回的 API Key 会基于 sha256(user_id + "\0" + seed) 生成;省略时仍使用随机生成逻辑。
SDK 会把服务端错误码映射为 Python 异常。
from openviking_sdk import OpenVikingError, SyncHTTPClient
client = SyncHTTPClient(url="http://127.0.0.1:1933", api_key="your-user-key")
try:
print(client.read("viking://resources/not-exists.md"))
except OpenVikingError as exc:
print(type(exc).__name__, exc)
openviking 的关系在以下场景中使用 openviking-sdk:
在以下场景中使用 openviking:
从源码安装:
cd sdk/python
pip install -e .
构建发行包:
cd sdk/python
python -m build
SDK 版本号来自以下格式的 git tag:
这个 tag 命名空间独立于主包的发布 tag,例如:
v0.3.26
仓库已经配置为支持通过 SDK 专用 tag 触发 SDK 发布。
典型流程:
[email protected] 的 tagsdk/pythonopenviking-sdk 发布到 PyPI