importasyncioimportbase64fromclaude_agent_sdkimportClaudeSDKClient,ClaudeAgentOptions,AssistantMessage,TextBlockasyncdefstreaming_analysis():asyncdefmessage_generator():# 第一条消息yield{"type":"user","message":{"role":"user","content":"Analyze this codebase for security issues",},}# 等待条件或用户输入awaitasyncio.sleep(2)# 第二条消息:附带图片withopen("diagram.png","rb")asf:image_data=base64.b64encode(f.read()).decode()yield{"type":"user","message":{"role":"user","content":[{"type":"text","text":"Review this architecture diagram"},{"type":"image","source":{"type":"base64","media_type":"image/png","data":image_data,},},],},}options=ClaudeAgentOptions(max_turns=10,allowed_tools=["Read","Grep"])asyncwithClaudeSDKClient(options)asclient:awaitclient.query(message_generator())asyncformessageinclient.receive_response():ifisinstance(message,AssistantMessage):forblockinmessage.content:ifisinstance(block,TextBlock):print(block.text)asyncio.run(streaming_analysis())
import{query}from"@anthropic-ai/claude-agent-sdk";import{readFile}from"fs/promises";asyncfunction*generateMessages(){// 第一条消息yield{type:"user"asconst,message:{role:"user"asconst,content:"Analyze this codebase for security issues"}};// 等待条件awaitnewPromise((resolve)=>setTimeout(resolve,2000));// 第二条消息:附带图片yield{type:"user"asconst,message:{role:"user"asconst,content:[{type:"text",text:"Review this architecture diagram"},{type:"image",source:{type:"base64",media_type:"image/png",data:awaitreadFile("diagram.png","base64")}}]}};}forawait(constmessageofquery({prompt:generateMessages(),options:{maxTurns:10,allowedTools:["Read","Grep"]}})){if(message.type==="result"){console.log(message.result);}}
importasynciofromclaude_agent_sdkimportquery,ClaudeAgentOptions,ResultMessageasyncdefsingle_message_example():# 一次性查询asyncformessageinquery(prompt="Explain the authentication flow",options=ClaudeAgentOptions(max_turns=1,allowed_tools=["Read","Grep"]),):ifisinstance(message,ResultMessage):print(message.result)# 继续对话(需要手动管理)asyncformessageinquery(prompt="Now explain the authorization process",options=ClaudeAgentOptions(continue_conversation=True,max_turns=1),):ifisinstance(message,ResultMessage):print(message.result)asyncio.run(single_message_example())
importasynciofromclaude_agent_sdkimportquery,ClaudeAgentOptionsfromclaude_agent_sdk.typesimportStreamEventasyncdefstream_response():options=ClaudeAgentOptions(include_partial_messages=True,allowed_tools=["Bash","Read"],)asyncformessageinquery(prompt="List the files in my project",options=options):ifisinstance(message,StreamEvent):event=message.eventifevent.get("type")=="content_block_delta":delta=event.get("delta",{})ifdelta.get("type")=="text_delta":print(delta.get("text",""),end="",flush=True)asyncio.run(stream_response())
import{query}from"@anthropic-ai/claude-agent-sdk";forawait(constmessageofquery({prompt:"List the files in my project",options:{includePartialMessages:true,allowedTools:["Bash","Read"]}})){if(message.type==="stream_event"){constevent=message.event;if(event.type==="content_block_delta"){if(event.delta.type==="text_delta"){process.stdout.write(event.delta.text);}}}}
import{query}from"@anthropic-ai/claude-agent-sdk";forawait(constmessageofquery({prompt:"Explain how databases work",options:{includePartialMessages:true}})){if(message.type==="stream_event"){constevent=message.event;if(event.type==="content_block_delta"&&event.delta.type==="text_delta"){process.stdout.write(event.delta.text);}}}console.log();
importasyncioimportsysfromclaude_agent_sdkimportquery,ClaudeAgentOptions,ResultMessagefromclaude_agent_sdk.typesimportStreamEventasyncdefstreaming_ui():options=ClaudeAgentOptions(include_partial_messages=True,allowed_tools=["Read","Bash","Grep"],)# 跟踪是否正在执行工具in_tool=Falseasyncformessageinquery(prompt="Find all TODO comments in the codebase",options=options):ifisinstance(message,StreamEvent):event=message.eventevent_type=event.get("type")ifevent_type=="content_block_start":content_block=event.get("content_block",{})ifcontent_block.get("type")=="tool_use":# 工具调用开始——显示状态指示器tool_name=content_block.get("name")print(f"\n[Using {tool_name}...]",end="",flush=True)in_tool=Trueelifevent_type=="content_block_delta":delta=event.get("delta",{})# 只在非工具执行时流式显示文本ifdelta.get("type")=="text_delta"andnotin_tool:sys.stdout.write(delta.get("text",""))sys.stdout.flush()elifevent_type=="content_block_stop":ifin_tool:# 工具调用完成print(" done",flush=True)in_tool=Falseelifisinstance(message,ResultMessage):# Agent 完成所有工作print(f"\n\n--- Complete ---")asyncio.run(streaming_ui())
import{query}from"@anthropic-ai/claude-agent-sdk";// 跟踪是否正在执行工具letinTool=false;forawait(constmessageofquery({prompt:"Find all TODO comments in the codebase",options:{includePartialMessages:true,allowedTools:["Read","Bash","Grep"]}})){if(message.type==="stream_event"){constevent=message.event;if(event.type==="content_block_start"){if(event.content_block.type==="tool_use"){// 工具调用开始——显示状态指示器process.stdout.write(`\n[Using ${event.content_block.name}...]`);inTool=true;}}elseif(event.type==="content_block_delta"){// 只在非工具执行时流式显示文本if(event.delta.type==="text_delta"&&!inTool){process.stdout.write(event.delta.text);}}elseif(event.type==="content_block_stop"){if(inTool){// 工具调用完成console.log(" done");inTool=false;}}}elseif(message.type==="result"){// Agent 完成所有工作console.log("\n\n--- Complete ---");}}
importasynciofromclaude_agent_sdkimportquery,ClaudeAgentOptions,ResultMessageschema={"type":"object","properties":{"company_name":{"type":"string"},"founded_year":{"type":"number"},"headquarters":{"type":"string"},},"required":["company_name"],}asyncdefmain():asyncformessageinquery(prompt="Research Anthropic and provide key company information",options=ClaudeAgentOptions(output_format={"type":"json_schema","schema":schema}),):ifisinstance(message,ResultMessage)andmessage.structured_output:print(message.structured_output)# {'company_name': 'Anthropic', 'founded_year': 2021, 'headquarters': 'San Francisco, CA'}asyncio.run(main())
importasynciofrompydanticimportBaseModelfromclaude_agent_sdkimportquery,ClaudeAgentOptions,ResultMessageclassStep(BaseModel):step_number:intdescription:strestimated_complexity:str# 'low', 'medium', 'high'classFeaturePlan(BaseModel):feature_name:strsummary:strsteps:list[Step]risks:list[str]asyncdefmain():asyncformessageinquery(prompt="Plan how to add dark mode support to a React app. Break it into implementation steps.",options=ClaudeAgentOptions(output_format={"type":"json_schema","schema":FeaturePlan.model_json_schema(),}),):ifisinstance(message,ResultMessage)andmessage.structured_output:# 验证并获取完全类型化的结果plan=FeaturePlan.model_validate(message.structured_output)print(f"Feature: {plan.feature_name}")print(f"Summary: {plan.summary}")forstepinplan.steps:print(f"{step.step_number}. [{step.estimated_complexity}] {step.description}")asyncio.run(main())
import{z}from"zod";import{query}from"@anthropic-ai/claude-agent-sdk";// 用 Zod 定义 schemaconstFeaturePlan=z.object({feature_name:z.string(),summary:z.string(),steps:z.array(z.object({step_number:z.number(),description:z.string(),estimated_complexity:z.enum(["low","medium","high"])})),risks:z.array(z.string())});typeFeaturePlan=z.infer<typeofFeaturePlan>;// 转换为 JSON Schemaconstschema=z.toJSONSchema(FeaturePlan);forawait(constmessageofquery({prompt:"Plan how to add dark mode support to a React app. Break it into implementation steps.",options:{outputFormat:{type:"json_schema",schema:schema}}})){if(message.type==="result"&&message.subtype==="success"&&message.structured_output){// 验证并获取完全类型化的结果constparsed=FeaturePlan.safeParse(message.structured_output);if(parsed.success){constplan:FeaturePlan=parsed.data;console.log(`Feature: ${plan.feature_name}`);console.log(`Summary: ${plan.summary}`);plan.steps.forEach((step)=>{console.log(`${step.step_number}. [${step.estimated_complexity}] ${step.description}`);});}}}
importasynciofromclaude_agent_sdkimportquery,ClaudeAgentOptions,ResultMessagetodo_schema={"type":"object","properties":{"todos":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"file":{"type":"string"},"line":{"type":"number"},"author":{"type":"string"},"date":{"type":"string"},},"required":["text","file","line"],},},"total_count":{"type":"number"},},"required":["todos","total_count"],}asyncdefmain():# Agent 自主使用 Grep 搜索 TODO,使用 Bash 执行 git blameasyncformessageinquery(prompt="Find all TODO comments in this codebase and identify who added them",options=ClaudeAgentOptions(output_format={"type":"json_schema","schema":todo_schema}),):ifisinstance(message,ResultMessage)andmessage.structured_output:data=message.structured_outputprint(f"Found {data['total_count']} TODOs")fortodoindata["todos"]:print(f"{todo['file']}:{todo['line']} - {todo['text']}")if"author"intodo:print(f" Added by {todo['author']} on {todo['date']}")asyncio.run(main())
importasynciofromclaude_agent_sdkimportquery,ClaudeAgentOptions,ResultMessageasyncdefmain():asyncformessageinquery(prompt="Extract contact info from the document",options=ClaudeAgentOptions(output_format={"type":"json_schema","schema":contact_schema}),):ifisinstance(message,ResultMessage):ifmessage.subtype=="success"andmessage.structured_output:# 使用验证后的输出print(message.structured_output)elifmessage.subtype=="error_max_structured_output_retries":# 处理失败——用更简单的 prompt 重试、回退到非结构化输出等print("Could not produce valid output")asyncio.run(main())
forawait(constmsgofquery({prompt:"Extract contact info from the document",options:{outputFormat:{type:"json_schema",schema:contactSchema}}})){if(msg.type==="result"){if(msg.subtype==="success"&&msg.structured_output){// 使用验证后的输出console.log(msg.structured_output);}elseif(msg.subtype==="error_max_structured_output_retries"){// 处理失败——用更简单的 prompt 重试、回退到非结构化输出等console.error("Could not produce valid output");}}}