11_LangGraph快速构建Agent工作流应用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

tavily安装

pip install tavily-python

langsmith 安装

pip install -U langsmith openai
LANGSMITH_TRACING=true
LANGSMITH_ENDPOINT="https://api.smith.langchain.com"
LANGSMITH_API_KEY="<your-api-key>"
LANGSMITH_PROJECT="pr-whispered-spit-98"
OPENAI_API_KEY="<your-openai-api-key>"
# 搜api库
from langchain_community.tools.tavily_search import TavilySearchResults

#  创建TavilySearchResults 设置最大结果
tools = [TavilySearchResults()]
#  导入langchain的hub, 里面提供大量的Langchain 模版
from langchain import hub
from langchain_openai.chat_models.base import BaseChatOpenAI
import asyncio
from langgraph.prebuilt import create_react_agent
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

# 这个拉下来的prompt 有问题,先用自己写的替换一下
# prompt = hub.pull("wfh/react-agent-executor")
# prompt.pretty_print()

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "你是世界级的技术专家"),  # 系统消息,定义角色
        MessagesPlaceholder(variable_name="messages"),  # 动态插入消息
    ]
)
model = BaseChatOpenAI(
    model='qwen-plus',
    openai_api_base='https://dashscope.aliyuncs.com/compatible-mode/v1',
    max_tokens=1024
)
# 创建一个agent代理执行器使用指定的LLM和工具,并应用从Hub上获取的prompt
# agent_executor = create_react_agent(model, tools, state_modifier=prompt)
agent_executor = create_react_agent(model, tools, prompt=prompt)

# 调用代理执行器
# agent_executor.invoke({"messages":[("user", "谁是美国公开赛的获胜者")]})


import operator
from typing import Annotated, List, Tuple, TypedDict


# 定义一个TypedDict 类PlanExcute ,用于存储输入,计划, 过去的步骤和响应

class PlanExecute(TypedDict):
    input: str
    plan: List[str]
    past_steps: Annotated[List[Tuple], operator.add]
    response: str


from pydantic import BaseModel, Field


#  定义一个plan模型类,用于描述未来要执行的计划

class Plan(BaseModel):
    """未来要执行的计划"""
    steps: List[str] = Field(description="需要执行的不同步骤,应该按顺序排列")


from langchain_core.prompts import ChatPromptTemplate

planner_prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            """对于给定的目标,提出一个简单的逐步计划,这个计划应该包含独立的任务,如果正确执行将得出正确的答案,不要添加任何多余的步骤。确保每一步都有所有必要的信息 - 不要跳过步骤。"""
        ),
        ("placeholder", "{messages}")
    ]
)

#  使用指定的提示模版创建一个计划生成器, 使用LLM
planner = planner_prompt | model.with_structured_output(Plan)
# 调用计划生成器,
# planner.invoke({"messages":[("user","现在奥运冠军的家乡是哪里?")]})

from typing import Union


# 定义一个响应模型的类,用于描述用户的响应

class Response(BaseModel):
    """用户响应类"""
    response: str


# 定一个行为模型类,用于描述要执行的行为
# action,类型是Union[Response, Plan] 表示可以是Response 或者Plan类型
class Act(BaseModel):
    """要执行的行为"""
    action: Union[Response, Plan] = Field(
        description="要执行的行为。如果要回应用户,使用Response。如果需要进一步使用工具获取答案,使用Plan。")


replanner_prompt = ChatPromptTemplate.from_template(
    """对于给定的目标,提出一个简单的逐步计划。这个计划应该包含独立的任务,如果正确执行将得出正确的答案。不要添加任何多余的步骤。最后一步的结果是最终答案。
    
    你的目标是:
    {input}
    
    你的原计划是:
    {plan}
    
    你目前已完成的步骤是:
    {past_steps}
    
    响应地更新你的计划。如果不需要更多步骤并且可以返回给用户,那么就这样回应。如果需要,填写计划。只需要添加仍然需要完成的步骤。不要返回已经完成的步作为计划的一部分。
    """
)

# 使用指定的提示模版创建一个重新计划生成器
replanner = replanner_prompt | model.with_structured_output(Act)

from typing import Literal


# 异步主函数

async def main():
    # 生成计划步骤
    async def plan_step(state: PlanExecute):
        plan = await planner.ainvoke({"messages": [("user", state["input"])]})
        return {"plan": plan.steps}

    # 执行步骤
    async def execute_step(state: PlanExecute):
        plan = state["plan"]
        plan_str = "\n".join(f"{i + 1}. {step}" for i, step in enumerate(plan))
        task = plan[0]
        task_formatted = f"""对于以下计划:{plan_str}\n\n 你的任务是执行第{1}步,{task}"""
        agent_response = await agent_executor.ainvoke({"messages": [("user", task_formatted)]})
        return {"past_steps": state["past_steps"] + [(task, agent_response["messages"][-1].content)]}

    # 重新做计划

    async def replan_step(state: PlanExecute):
        output = await replanner.ainvoke(state)
        if isinstance(output.action, Response):
            return {"response": output.action.response}
        else:
            return {"plan": output.action.steps}

    #     判断是否结束
    def should_end(state: PlanExecute) -> Literal["agent", "__end__"]:
        if "response" in state and state["response"]:
            return "__end__"
        else:
            return "agent"

    from langgraph.graph import StateGraph, START

    # 创建一个状态图
    workflow = StateGraph(PlanExecute)

    workflow.add_node("planner", plan_step)
    workflow.add_node("agent", execute_step)
    workflow.add_node("replan", replan_step)
    workflow.add_edge(START, "planner")
    workflow.add_edge("planner", "agent")
    workflow.add_edge("agent", "replan")

    workflow.add_conditional_edges("replan", should_end)

    app = workflow.compile()

    graph_png = app.get_graph().draw_mermaid_png()
    with open("agent_workflow.png", "wb") as f:
        f.write(graph_png)
    # 递归限制50
    config = {"recursion_limit": 50}
    # 输入数据
    inputs = {"input": "2024年巴黎奥运会100米自由游泳决赛冠军的家乡是哪里? 请用中文答复"}

    async for event in app.astream(inputs, config=config):
        for k, v in event.items():
            if k != "__end__":
                print(v)


asyncio.run(main())

运行结果:

{'plan': ['确定2024年巴黎奥运会100米自由泳决赛的具体时间', '找出赢得该比赛冠军的游泳选手的名字', '查询这位冠军游泳选手的背景资料,找到其家乡']}
{'past_steps': [('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。')]}
{'plan': ['找出赢得该比赛冠军的游泳选手的名字', '查询这位冠军游泳选手的背景资料,找到其家乡']}
{'past_steps': [('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('找出赢得该比赛冠军的游泳选手的名字', '为了帮助您找到赢得比赛冠军的游泳选手的名字,我需要知道是哪一场比赛。您能提供更多的信息吗?例如比赛的名称,举办时间和/或比赛级别(如奥运会,世界锦标赛等)。这些信息对于准确找出正确的赛事和获胜者至关重要。')]}
{'plan': ['查询这位冠军游泳选手的背景资料,找到其家乡']}
{'past_steps': [('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('找出赢得该比赛冠军的游泳选手的名字', '为了帮助您找到赢得比赛冠军的游泳选手的名字,我需要知道是哪一场比赛。您能提供更多的信息吗?例如比赛的名称,举办时间和/或比赛级别(如奥运会,世界锦标赛等)。这些信息对于准确找出正确的赛事和获胜者至关重要。'), ('查询这位冠军游泳选手的背景资料,找到其家乡', '请问您提到的冠军游泳选手是否有具体的名字或者其他相关信息呢?这将有助于我更准确地查询其背景资料和家乡信息。')]}
{'plan': ['找出赢得2024年巴黎奥运会100米自由泳决赛冠军的游泳选手的名字', '查询这位冠军游泳选手的背景资料,找到其家乡']}
{'past_steps': [('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('找出赢得该比赛冠军的游泳选手的名字', '为了帮助您找到赢得比赛冠军的游泳选手的名字,我需要知道是哪一场比赛。您能提供更多的信息吗?例如比赛的名称,举办时间和/或比赛级别(如奥运会,世界锦标赛等)。这些信息对于准确找出正确的赛事和获胜者至关重要。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('找出赢得该比赛冠军的游泳选手的名字', '为了帮助您找到赢得比赛冠军的游泳选手的名字,我需要知道是哪一场比赛。您能提供更多的信息吗?例如比赛的名称,举办时间和/或比赛级别(如奥运会,世界锦标赛等)。这些信息对于准确找出正确的赛事和获胜者至关重要。'), ('查询这位冠军游泳选手的背景资料,找到其家乡', '请问您提到的冠军游泳选手是否有具体的名字或者其他相关信息呢?这将有助于我更准确地查询其背景资料和家乡信息。'), ('找出赢得2024年巴黎奥运会100米自由泳决赛冠军的游泳选手的名字', '根据搜索结果,赢得2024年巴黎奥运会男子100米自由泳决赛冠军的游泳选手是潘展乐(Zhanle Pan),他代表中国队以新的世界纪录时间46.40秒夺得了金牌。接下来,我们可以继续查询有关潘展乐的背景资料以及他的家乡。')]}
{'plan': ['查询潘展乐的背景资料,找到其家乡']}
{'past_steps': [('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('找出赢得该比赛冠军的游泳选手的名字', '为了帮助您找到赢得比赛冠军的游泳选手的名字,我需要知道是哪一场比赛。您能提供更多的信息吗?例如比赛的名称,举办时间和/或比赛级别(如奥运会,世界锦标赛等)。这些信息对于准确找出正确的赛事和获胜者至关重要。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('找出赢得该比赛冠军的游泳选手的名字', '为了帮助您找到赢得比赛冠军的游泳选手的名字,我需要知道是哪一场比赛。您能提供更多的信息吗?例如比赛的名称,举办时间和/或比赛级别(如奥运会,世界锦标赛等)。这些信息对于准确找出正确的赛事和获胜者至关重要。'), ('查询这位冠军游泳选手的背景资料,找到其家乡', '请问您提到的冠军游泳选手是否有具体的名字或者其他相关信息呢?这将有助于我更准确地查询其背景资料和家乡信息。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('找出赢得该比赛冠军的游泳选手的名字', '为了帮助您找到赢得比赛冠军的游泳选手的名字,我需要知道是哪一场比赛。您能提供更多的信息吗?例如比赛的名称,举办时间和/或比赛级别(如奥运会,世界锦标赛等)。这些信息对于准确找出正确的赛事和获胜者至关重要。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('找出赢得该比赛冠军的游泳选手的名字', '为了帮助您找到赢得比赛冠军的游泳选手的名字,我需要知道是哪一场比赛。您能提供更多的信息吗?例如比赛的名称,举办时间和/或比赛级别(如奥运会,世界锦标赛等)。这些信息对于准确找出正确的赛事和获胜者至关重要。'), ('查询这位冠军游泳选手的背景资料,找到其家乡', '请问您提到的冠军游泳选手是否有具体的名字或者其他相关信息呢?这将有助于我更准确地查询其背景资料和家乡信息。'), ('找出赢得2024年巴黎奥运会100米自由泳决赛冠军的游泳选手的名字', '根据搜索结果,赢得2024年巴黎奥运会男子100米自由泳决赛冠军的游泳选手是潘展乐(Zhanle Pan),他代表中国队以新的世界纪录时间46.40秒夺得了金牌。接下来,我们可以继续查询有关潘展乐的背景资料以及他的家乡。'), ('查询潘展乐的背景资料,找到其家乡', '潘展乐的家乡是中国浙江省温州市。温州被誉为“全国游泳之乡”,有着浓厚的游泳文化和历史。潘展乐在这里开始了他的游泳生涯,并最终成为了世界冠军。相关信息来源于多个报道,包括对他在巴黎奥运会上打破男子100米自由泳世界纪录的详细背景介绍。\n\n具体可参见[这篇报道](https://wl.wenzhou.gov.cn/art/2024/8/2/art_1642046_58907845.html),其中提到潘展乐与温州深厚的游泳传统之间的联系,以及他如何从这里走向国际舞台。此外,还有其他多篇报道也提到了潘展乐是温州人,例如[21财经的文章](https://www.21jingji.com/article/20240803/herald/1fb9eeda668de7076966cc721d0efe1c.html)等。')]}
{'plan': ['查询潘展乐的背景资料,找到其家乡']}
{'past_steps': [('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('找出赢得该比赛冠军的游泳选手的名字', '为了帮助您找到赢得比赛冠军的游泳选手的名字,我需要知道是哪一场比赛。您能提供更多的信息吗?例如比赛的名称,举办时间和/或比赛级别(如奥运会,世界锦标赛等)。这些信息对于准确找出正确的赛事和获胜者至关重要。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('找出赢得该比赛冠军的游泳选手的名字', '为了帮助您找到赢得比赛冠军的游泳选手的名字,我需要知道是哪一场比赛。您能提供更多的信息吗?例如比赛的名称,举办时间和/或比赛级别(如奥运会,世界锦标赛等)。这些信息对于准确找出正确的赛事和获胜者至关重要。'), ('查询这位冠军游泳选手的背景资料,找到其家乡', '请问您提到的冠军游泳选手是否有具体的名字或者其他相关信息呢?这将有助于我更准确地查询其背景资料和家乡信息。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('找出赢得该比赛冠军的游泳选手的名字', '为了帮助您找到赢得比赛冠军的游泳选手的名字,我需要知道是哪一场比赛。您能提供更多的信息吗?例如比赛的名称,举办时间和/或比赛级别(如奥运会,世界锦标赛等)。这些信息对于准确找出正确的赛事和获胜者至关重要。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('找出赢得该比赛冠军的游泳选手的名字', '为了帮助您找到赢得比赛冠军的游泳选手的名字,我需要知道是哪一场比赛。您能提供更多的信息吗?例如比赛的名称,举办时间和/或比赛级别(如奥运会,世界锦标赛等)。这些信息对于准确找出正确的赛事和获胜者至关重要。'), ('查询这位冠军游泳选手的背景资料,找到其家乡', '请问您提到的冠军游泳选手是否有具体的名字或者其他相关信息呢?这将有助于我更准确地查询其背景资料和家乡信息。'), ('找出赢得2024年巴黎奥运会100米自由泳决赛冠军的游泳选手的名字', '根据搜索结果,赢得2024年巴黎奥运会男子100米自由泳决赛冠军的游泳选手是潘展乐(Zhanle Pan),他代表中国队以新的世界纪录时间46.40秒夺得了金牌。接下来,我们可以继续查询有关潘展乐的背景资料以及他的家乡。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('找出赢得该比赛冠军的游泳选手的名字', '为了帮助您找到赢得比赛冠军的游泳选手的名字,我需要知道是哪一场比赛。您能提供更多的信息吗?例如比赛的名称,举办时间和/或比赛级别(如奥运会,世界锦标赛等)。这些信息对于准确找出正确的赛事和获胜者至关重要。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('找出赢得该比赛冠军的游泳选手的名字', '为了帮助您找到赢得比赛冠军的游泳选手的名字,我需要知道是哪一场比赛。您能提供更多的信息吗?例如比赛的名称,举办时间和/或比赛级别(如奥运会,世界锦标赛等)。这些信息对于准确找出正确的赛事和获胜者至关重要。'), ('查询这位冠军游泳选手的背景资料,找到其家乡', '请问您提到的冠军游泳选手是否有具体的名字或者其他相关信息呢?这将有助于我更准确地查询其背景资料和家乡信息。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('找出赢得该比赛冠军的游泳选手的名字', '为了帮助您找到赢得比赛冠军的游泳选手的名字,我需要知道是哪一场比赛。您能提供更多的信息吗?例如比赛的名称,举办时间和/或比赛级别(如奥运会,世界锦标赛等)。这些信息对于准确找出正确的赛事和获胜者至关重要。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('确定2024年巴黎奥运会100米自由泳决赛的具体时间', '根据找到的信息,2024年巴黎奥运会男子100米自由泳决赛将于2024年7月31日(星期三)在巴黎拉德芳斯体育馆(Paris La Défense Arena)举行。具体的比赛时间没有在所有资源中明确给出,但根据游泳赛事的常见安排和提供的相关比赛的时间信息,可以推测出确切的时间应该会在当天的下午或晚上。为了获取更精确的时间,建议关注官方转播渠道发布的详细日程。'), ('找出赢得该比赛冠军的游泳选手的名字', '为了帮助您找到赢得比赛冠军的游泳选手的名字,我需要知道是哪一场比赛。您能提供更多的信息吗?例如比赛的名称,举办时间和/或比赛级别(如奥运会,世界锦标赛等)。这些信息对于准确找出正确的赛事和获胜者至关重要。'), ('查询这位冠军游泳选手的背景资料,找到其家乡', '请问您提到的冠军游泳选手是否有具体的名字或者其他相关信息呢?这将有助于我更准确地查询其背景资料和家乡信息。'), ('找出赢得2024年巴黎奥运会100米自由泳决赛冠军的游泳选手的名字', '根据搜索结果,赢得2024年巴黎奥运会男子100米自由泳决赛冠军的游泳选手是潘展乐(Zhanle Pan),他代表中国队以新的世界纪录时间46.40秒夺得了金牌。接下来,我们可以继续查询有关潘展乐的背景资料以及他的家乡。'), ('查询潘展乐的背景资料,找到其家乡', '潘展乐的家乡是中国浙江省温州市。温州被誉为“全国游泳之乡”,有着浓厚的游泳文化和历史。潘展乐在这里开始了他的游泳生涯,并最终成为了世界冠军。相关信息来源于多个报道,包括对他在巴黎奥运会上打破男子100米自由泳世界纪录的详细背景介绍。\n\n具体可参见[这篇报道](https://wl.wenzhou.gov.cn/art/2024/8/2/art_1642046_58907845.html),其中提到潘展乐与温州深厚的游泳传统之间的联系,以及他如何从这里走向国际舞台。此外,还有其他多篇报道也提到了潘展乐是温州人,例如[21财经的文章](https://www.21jingji.com/article/20240803/herald/1fb9eeda668de7076966cc721d0efe1c.html)等。'), ('查询潘展乐的背景资料,找到其家乡', '潘展乐的家乡是中国浙江省温州市。温州被誉为“全国游泳之乡”,有着浓厚的游泳文化和悠久的历史,这为潘展乐的成长和成功提供了良好的环境和支持。\n\n相关信息来源于一篇题为“世界飞鱼”潘展乐的家乡—温州,这里是乐水者的天堂的文章,链接如下:\n[“世界飞鱼”潘展乐的家乡—温州](https://wl.wenzhou.gov.cn/art/2024/8/2/art_1642046_58907845.html)')]}
{'response': '2024年巴黎奥运会100米自由游泳决赛冠军潘展乐的家乡是中国浙江省温州市。温州有着浓厚的游泳文化和历史,被誉为“全国游泳之乡”。'}

### LangGraph 工作流使用教程 #### 创建基础工作流 构建基于 LangGraph工作流涉及多个方面,从简单的对话记录到复杂的应用程序开发。对于初学者来说,可以先尝试通过 LangGraph 来实现与虚拟角色之间的交互[^1]。 ```python from langgraph import Graph, Node # 初始化图结构 graph = Graph() # 添加节点并设置属性 node_start = Node(id="start", content="欢迎来到LangGraph世界!") graph.add_node(node_start) # 连接不同节点形成路径 next_node_id = "greeting" node_greet = Node(id=next_node_id, content="你好啊!有什么可以帮助你的吗?") graph.connect_nodes("start", next_node_id) ``` 此段代码展示了如何初始化一个基本的会话流程,其中包含了两个主要部分:一是创建起始点 `Node` 对象;二是利用 `.connect_nodes()` 方法来指定各个节点间的连接关系。 #### 定义高级工作流 当掌握了基础知识之后,就可以进一步学习更复杂的操作——即定义应用程序的工作流。这通常涉及到一系列预设好的节点配置以及它们之间相互作用的方式[^2]。 ```python def define_workflow(): workflow_steps = [ {"id": "input_user_message", "type": "input"}, {"id": "process_request", "type": "function_call"}, {"id": "output_response", "type": "output"} ] for step in workflow_steps: node = Node(**step) graph.add_node(node) if not first_step: previous_step_id = get_previous_step() graph.connect_nodes(previous_step_id, step["id"]) define_workflow() ``` 上述函数说明了怎样按照既定顺序排列各功能模块,并确保每一步都能顺利传递给下一步执行。值得注意的是,在实际项目中还需要考虑错误处理机制等问题。 #### 利用代理增强工作流能力 为了满足更加多样化的需求场景,LangGraph 支持引入代理概念来进行任务分配和协调。这种特性允许开发者设计出具备高度灵活性及可扩展性的解决方案[^3]。 ```python class Agent: def __init__(self, name): self.name = name def execute_task(self, task_name): print(f"{self.name}正在执行{task_name}") agent_a = Agent(name='AgentA') agent_b = Agent(name='AgentB') agents_mapping = { 'search_web': agent_a, 'summarize_text': agent_b } for task, responsible_agent in agents_mapping.items(): responsible_agent.execute_task(task) ``` 这段示例体现了通过类实例化方式模拟不同的代理实体,并让其负责特定类型的作业。借助这种方式,不仅简化了整体架构的设计难度,同时也提高了系统的响应速度和服务质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值