Skip to main content

Agent的流式输出

agent的stream​

通过create_agent方法可以创建Agent对象,其也是Runnable接口的子类实现,所以也拥有:

  • invoke执行,一次性得到完整结果
  • stream执行,流式得到结果
for chunk in agent.stream({
"messages": [{"role": "user", "content": "Search for AI news and summarize the findings"}]
}, stream_mode="values"):
# 每个块都包含该时刻的完整状态,所以取最后一条,即为最新
latest_message = chunk["messages"][-1]
if latest_message.content:
print(f"Agent: {latest_message.content}")
elif latest_message.tool_calls:
print(f"Calling tools: {[tc['name'] for tc in latest_message.tool_calls]}")

代码实践​

直接将返回的chunk打印出来可以看到: 1772545096247

可以通过chunk['messages'][-1]取每个chunk中message列表的最后一条消息并打印出工具信息,完整代码:

from langchain.agents import create_agent
# from langchain_community.chat_models import ChatTongyi
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from dotenv import load_dotenv
import os


load_dotenv()
api_key = os.getenv("LLM_API_KEY")
base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1"

@tool(description="获取股价,传入股票名称,返回字符串信息")
def get_price(name: str) -> str:
return f"股票{name}的价格是20元"


@tool(description="获取股票信息,传入股票名称,返回字符串信息")
def get_info(name: str) -> str:
return f"股票{name},是一家A股上市公司,专注于IT职业教育。"


agent = create_agent(
model=ChatOpenAI(model="qwen3.5-plus", api_key=api_key, base_url=base_url),
tools=[get_price, get_info],
system_prompt="你是一个智能助手,可以回答股票相关问题,记住告诉我思考过程,让我知道你为什么调用某个工具"
)

for chunk in agent.stream(
{"messages": [{"role": "user", "content": "小熊ai股价多少,并介绍一下"}]},
stream_mode="values"
):
# print(chunk)
latest_message = chunk['messages'][-1]

if latest_message.content:
print(type(latest_message).__name__, latest_message.content)

try:
if latest_message.tool_calls:
print(f"工具调用:{[tc['name'] for tc in latest_message.tool_calls]}")
except AttributeError as e:
pass