跳到主要内容

SDK

概述

iFlow CLI SDK 是一个用于与 iFlow CLI 进行编程交互的 SDK。它通过代理通信协议(ACP)允许开发者构建具有对话、工具执行和任务规划能力的 AI 驱动应用程序。

✨ 核心特性:SDK 自动管理 iFlow 进程 - 无需手动配置!

目前提供 Python SDK,Java 版本正在路上,敬请期待!

系统要求

  • Python: 3.8 或更高版本
  • iFlow CLI: 0.2.24 或更高版本
  • 操作系统: Windows、macOS、Linux

安装

pip install iflow-cli-sdk

快速开始

基础示例

SDK 会自动检测并启动 iFlow 进程,无需手动配置:

import asyncio
from iflow_sdk import IFlowClient, AssistantMessage, TaskFinishMessage

async def main():
# SDK 自动处理:
# 1. 检测 iFlow 是否已安装
# 2. 启动 iFlow 进程(如果未运行)
# 3. 查找可用端口并建立连接
# 4. 退出时自动清理资源
async with IFlowClient() as client:
await client.send_message("你好,iFlow!")

async for message in client.receive_messages():
if isinstance(message, AssistantMessage):
print(message.chunk.text, end="\n", flush=True)
elif isinstance(message, TaskFinishMessage):
break

asyncio.run(main())

简单查询

最简单的使用方式是通过 query 函数:

from iflow_sdk import query
import asyncio

async def main():
response = await query("法国的首都是哪里?")
print(response) # 输出:法国的首都是巴黎。

asyncio.run(main())

核心概念

IFlowClient

IFlowClient 是与 iFlow CLI 交互的主要接口,管理 WebSocket 连接的生命周期:

from iflow_sdk import IFlowClient, IFlowOptions

# 使用默认配置(自动管理进程)
async with IFlowClient() as client:
await client.send_message("你的问题")
async for message in client.receive_messages():
# 处理消息
pass

# 使用自定义配置
options = IFlowOptions(
url="ws://localhost:8090/acp", # WebSocket URL
auto_start_process=True, # 自动启动 iFlow
timeout=30.0 # 超时时间(秒)
)
async with IFlowClient(options) as client:
await client.send_message("你的问题")
async for message in client.receive_messages():
# 处理消息
pass

消息类型

SDK 支持多种消息类型,对应 iFlow 协议的不同响应:

AssistantMessage - AI 助手响应

import asyncio
from iflow_sdk import IFlowClient, AssistantMessage, TaskFinishMessage

async def handle_assistant_message():
async with IFlowClient() as client:
await client.send_message("请介绍一下Python")

async for message in client.receive_messages():
if isinstance(message, AssistantMessage):
print(message.chunk.text, end="\n", flush=True)
elif isinstance(message, TaskFinishMessage):
break

if __name__ == "__main__":
asyncio.run(handle_assistant_message())

ToolCallMessage - 工具调用

import asyncio
from iflow_sdk import IFlowClient, ToolCallMessage, ToolCallStatus, TaskFinishMessage

async def handle_tool_calls():
async with IFlowClient() as client:
# 注意:这个示例演示如何查看工具调用消息
# iFlow 会要求提供完整路径和内容来创建文件
await client.send_message("列出当前目录的文件")

async for message in client.receive_messages():
if isinstance(message, ToolCallMessage):
print(f"工具: {message.label}")
elif isinstance(message, TaskFinishMessage):
break

if __name__ == "__main__":
asyncio.run(handle_tool_calls())

PlanMessage - 任务计划

import asyncio
from iflow_sdk import IFlowClient, PlanMessage, TaskFinishMessage

async def show_plan():
async with IFlowClient() as client:
await client.send_message("帮我创建一个Python项目结构")

async for message in client.receive_messages():
if isinstance(message, PlanMessage):
print("执行计划:")
for entry in message.entries:
status_icon = "✅" if entry.status == "completed" else "⏳"
print(f"{status_icon} [{entry.priority}] {entry.content}")
elif isinstance(message, TaskFinishMessage):
break

if __name__ == "__main__":
asyncio.run(show_plan())

TaskFinishMessage - 任务完成

import asyncio
from iflow_sdk import IFlowClient, AssistantMessage, TaskFinishMessage, StopReason

async def check_completion():
async with IFlowClient() as client:
await client.send_message("计算 1+1")

async for message in client.receive_messages():
if isinstance(message, AssistantMessage):
print(message.chunk.text, end="", flush=True)
elif isinstance(message, TaskFinishMessage):
print() # 换行
if message.stop_reason == StopReason.END_TURN:
print("任务正常完成")
elif message.stop_reason == StopReason.MAX_TOKENS:
print("达到最大令牌限制")
break # TaskFinishMessage 表示对话结束

if __name__ == "__main__":
asyncio.run(check_completion())

常见用例

交互式聊天机器人

#!/usr/bin/env python3
import asyncio
from iflow_sdk import IFlowClient, AssistantMessage, TaskFinishMessage

async def chatbot():
print("iFlow 聊天机器人 (输入 'quit' 退出)")
print("-" * 50)

async with IFlowClient() as client:
while True:
user_input = input("\n你: ")

if user_input.lower() in ['quit', 'exit', 'q']:
print("再见!")
break

await client.send_message(user_input)

print("iFlow: ", end="", flush=True)
async for message in client.receive_messages():
if isinstance(message, AssistantMessage):
print(message.chunk.text, end="", flush=True)
elif isinstance(message, TaskFinishMessage):
print() # 换行
break

if __name__ == "__main__":
asyncio.run(chatbot())

流式响应处理

from iflow_sdk import query_stream
import asyncio

async def stream_example():
prompt = "解释一下什么是升华现象"

# query_stream 返回文本块的异步生成器
async for chunk in query_stream(prompt):
print(chunk, end="", flush=True)
print() # 最后换行

asyncio.run(stream_example())

高级配置

手动进程管理

如果需要手动管理 iFlow 进程:

import asyncio
from iflow_sdk import IFlowClient, IFlowOptions, AssistantMessage, TaskFinishMessage

async def manual_process_example():
# 禁用自动进程管理
options = IFlowOptions(
auto_start_process=False,
url="ws://localhost:8090/acp" # 连接到已存在的 iFlow
)

async with IFlowClient(options) as client:
await client.send_message("你的问题")
async for message in client.receive_messages():
if isinstance(message, AssistantMessage):
print(message.chunk.text, end="", flush=True)
elif isinstance(message, TaskFinishMessage):
break

if __name__ == "__main__":
asyncio.run(manual_process_example())

注意 手动模式需要您单独启动 iFlow:

iflow --experimental-acp --port 8090

错误处理

SDK 提供了详细的错误处理机制:

import asyncio
from iflow_sdk import IFlowClient, ConnectionError, TimeoutError, AssistantMessage, TaskFinishMessage

async def error_handling_example():
try:
async with IFlowClient() as client:
await client.send_message("测试")
async for message in client.receive_messages():
if isinstance(message, AssistantMessage):
print(message.chunk.text, end="", flush=True)
elif isinstance(message, TaskFinishMessage):
break
except ConnectionError as e:
print(f"连接错误: {e}")
except TimeoutError as e:
print(f"超时错误: {e}")
except Exception as e:
print(f"未知错误: {e}")

if __name__ == "__main__":
asyncio.run(error_handling_example())

同步调用

对于需要同步调用的场景:

from iflow_sdk import query_sync, IFlowOptions

# 同步调用,带超时控制
options = IFlowOptions(timeout=30.0)
response = query_sync("你的问题", options=options)
print(response)

API 参考

核心类

类名描述
IFlowClient主客户端类,管理与 iFlow 的连接
IFlowOptions配置选项类
RawDataClient访问原始协议数据的客户端

消息类型

消息类型描述主要属性
AssistantMessageAI 助手的文本响应chunk.text, agent_id
ToolCallMessage工具执行请求和状态label, status, content, icon
PlanMessage结构化任务计划entries (包含 content, priority, status)
TaskFinishMessage任务完成信号stop_reason

故障排除

连接问题

如果遇到连接错误,请检查:

  1. iFlow 是否已安装

    iflow --version
  2. 端口是否被占用

    # Linux/Mac
    lsof -i :8090

    # Windows
    netstat -an | findstr :8090
  3. 手动测试连接

    iflow --experimental-acp --port 8090

超时问题

对于长时间运行的任务,可以增加超时时间:

from iflow_sdk import IFlowClient, IFlowOptions

options = IFlowOptions(timeout=600.0) # 10分钟超时
client = IFlowClient(options)

日志调试

启用详细日志以便调试:

import logging
from iflow_sdk import IFlowClient, IFlowOptions

# 设置日志级别
logging.basicConfig(level=logging.DEBUG)

options = IFlowOptions(log_level="DEBUG")
client = IFlowClient(options)