一、Agent

1.1、Agent的底层逻辑-React

        React(Reasoning + Acting)是构建智能代理(Agent)的一个底层逻辑框架,用于 通过语言模型(LLM)结合外部工具的交互来解决复杂问题。它的核心思想是通过推 理(Reasoning)和执行(Acting)**的循环,让代理能够自主思考、规划和采取行动。

1.2、React框架的主要组成部分

Reasoning(推理): 代理首先通过LLM的推理能力,分析输入信息,理解上下文、问题或任务。 推理阶段产生的结果是代理对任务的理解,它可能是某个问题的下一步行动、调 用某个工具的决定或需要收集更多信息。

Acting(执行): 代理根据推理的结果,采取相应的行动。 行动的方式包括调用外部工具、与环境交互,或者对用户进行反馈。 行动完成后,结果会反馈给LLM,进入下一轮推理,形成循环。

1.3、React如何结合LLM和工具

        LLM:负责执行复杂任务的核心推理部分。LLM能根据自然语言理解问题,推断 出潜在的需求或解决方案。

        工具:LLM单独执行复杂任务可能能力有限,结合特定工具(如Python、浏览 器、API等)可以增强它的执行能力。例如,当任务涉及数据处理时,LLM可以推 断出需要调用某个工具,然后将请求交给工具执行。

        Prompt(提示词):设计Prompt是让LLM和工具之间顺利交互的关键。通过巧 妙设计Prompt,能够使得LLM更准确地推理任务并选择合适的工具。

1.4、React的工作流程

接收输入:接收到用户的输入,比如问题、任务或指令。

推理与行动决策:

        LLM根据输入进行推理,判断是否需要调用工具,或直接生成响应。 如果需要调用工具,代理会明确决定使用哪个工具,并形成明确的行动步骤。 执行工具:代理调用外部工具进行操作,执行特定任务,如数据查询、计算、图 像生成等。

反馈推理:

        工具返回结果后,LLM会再次进行推理,基于新的信息更新推理结果 或采取下一步行动。

输出结果:

        最终,经过若干轮的推理与执行后,代理生成最终的响应,并返回给 用户。

二、编写Agent

常量定义与工具函数

# ReAct提示词模板(指导模型如何思考和使用工具)
REACT_PROMPT = """请尽可能好地回答以下问题,如果需要,可以适当的使用一些功能。\n
你有以下工具可用:\n
{tool_descs} \n
请使用以下格式:\n
Question: 需要回答的问题。\n
Thought: 总是考虑应该做什么以及使用哪些工具。\n
Action: 应采取的行动,应为 [{tool_names}] 中的一个。\n
Action Input: 行动的输入。\n
Observation: 行动的结果。\n
... (这个Thought/Action/Action Input/Observation 过程可以重复零次或者多次)。\n
Thought: 我现在知道最终答案了。\n
Final Answer: 对原问题的最终答案。\n
开始! \n
"""
# 模拟API工具函数1:获取当前温度
def get_current_temperature(location: str):
    return {"temperature": 26.1, "location": location}

# 模拟API工具函数2:获取历史温度  
def get_temperature_date(location: str, date: str):
    return {"temperature": 25.9, "location": location, "date": date}

工具系统配置

# 可用工具列表(名称、描述、参数规范)
TOOLS = [
    {
        "name": "get_current_temperature",
        "description": "获取某个位置的当前温度。",
        "parameters": {
            "location": {
                "type": "string",
                "description": "要获取的温度的位置。格式为“城市”。"
            }
        }
    },
    {
        "name": "get_temperature_date",
        "description": "通过某个位置和日期获取温度。",
        "parameters": {
            "location": {
                "type": "string",
                "description": "要获取的温度的位置。格式为“城市”。"
            },
            "date": {
                "type": "string",
                "description": "要获取温度的日期。格式为“年-月-日”。"
            }
        }
    }
]


# 工具描述模板(用于生成系统提示)
TOOL_DESC = "{name}:{description} 参数:{parameters}"

核心功能函数

def get_function_by_name(name: str):
    """工具名称到函数的映射"""
    if name == "get_current_temperature":
        return get_current_temperature
    ...

def build_sys_prompt(tools):
    """构建系统提示词(整合工具信息)"""
    tool_descs = [TOOL_DESC.format(**tool) for tool in tools]
    return REACT_PROMPT.format(
        tool_descs="\n\n".join(tool_descs),
        tool_names=", ".join([t["name"] for t in tools])
    )

def parse(llm_outputs):
    """解析模型输出,提取Action和Input"""
    actions = re.findall(r"Action:\s*(\S+)", llm_outputs)
    inputs = re.findall(r"Action Input:\s*(\{.*?\})", llm_outputs)
    return list(zip(actions, inputs)), ...  # 返回行动列表和剩余文本

主执行流程

if __name__ == "__main__":
    # 4.1 初始化组件
    sys_prompt = build_sys_prompt(TOOLS)
    chat_model = ChatOpenAI(
    api_key='EMPTY',
    base_url='http://127.0.0.1:10222/v1',
    model="Qwen2.5-7B-Instruct"
    )
    
    # 4.2 构建对话消息
    messages = [
        {"role": "system", "content": sys_prompt},
        {"role": "user", "content": "北京今天的天气怎么样?"}
    ]
    
    # 4.3 获取模型初始响应
    outputs = chat_model.invoke(messages).content
    
    # 4.4 解析和执行工具
    actions, remaining_text = parse(outputs)
    observations = [get_function_by_name(act)(**json.loads(inp)) 
                   for act, inp in actions]
    
    # 4.5 获取最终答案
    messages.append({
        "role": "assistant",
        "content": remaining_text + "\nObservation: " + str(observations)
    })
    final_answer = chat_model.invoke(messages).content
    print(final_answer.split("Final Answer:")[-1].strip())
今天北京的温度是26.1℃,而明天北京的温度预计为25.9℃。请注意,实际天气情况可能会有所不同,建议您关注最新的天气预报。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐