流式对话

使用流式 API 实时获取 LLM 响应。

基础流式

import { streamToText } from 'claude-code-sdk-ts'

// 假设有一个流式响应
const stream = sdk.sendStream('Write a short poem')
for await (const text of streamToText(stream)) {
  process.stdout.write(text)
}

StreamConsumer

import { createStreamConsumer, streamToBlocks, streamToText } from 'claude-code-sdk-ts'

const stream = sdk.sendStream('What is TypeScript?')
const consumer = createStreamConsumer(stream)

// 文本流
for await (const text of consumer.toTextStream()) {
  process.stdout.write(text)
}

// 块流(含 tool_use)
for await (const block of consumer.toBlockStream()) {
  if (block.type === 'text') {
    console.log(block.text)
  } else if (block.type === 'tool_use') {
    console.log(`调用工具: ${block.name}`)
  }
}

// 事件订阅
consumer.on('text', (text) => process.stdout.write(text))
consumer.on('done', (usage) => console.log('Token 用量:', usage))

// 聚合为完整结果
const result = await consumer.toPromise()
console.log('完整文本:', result.text)
console.log('Token:', result.usage)

askStream()

askStream() 是流式 + 自动工具执行的高级 API:

import { askStream } from 'claude-code-sdk-ts'

for await (const event of askStream({
  llm: { provider: 'anthropic', apiKey: process.env.ANTHROPIC_API_KEY! },
  prompt: 'List the files in current directory',
  tools: ['GlobTool'],
})) {
  if (event.type === 'text') {
    process.stdout.write(event.text)
  } else if (event.type === 'tool_call') {
    console.log(`\n[调用工具: ${event.toolName}]`)
  } else if (event.type === 'result') {
    console.log('\n完成!')
  }
}