LangChain实战入门(三):Agents实战——让AI成为能思考、会行动的数字员工

LangChain Agents实战:构建自主决策AI工作流 在人工智能领域,自主决策系统正成为技术演进的重要方向。基于大语言模型(LLM)的智能体(Agent)技术,通过ReAct(推理-行动)框架实现思考与行动的闭环。这种架构通常由语言模型核心、工具集和决策循环三部分组成,能够自动调用API、查询数据库等外部资源。在工程实践中,Agents技术显著提升了金融分析、客户服务等场景的效率,如某电商平台实现客服响应速度提升5倍。开发时需注意工具设计的原子化和幂等性原则,同时通过LangSmith等工具监控决策过程。热词显示,GPT-4和Claude等模型与LangCha 阅读详情

从"回答问题"到"解决问题",打造能自主使用工具的AI智能体

开篇回顾与本期聚焦

在前两篇文章中,我们已经掌握了LangChain的两大核心能力:

现在,我们的AI应用已经能够"知道很多事情"并"基于知识回答问题"。但这还不够——真正的智能不应该仅仅局限于知道什么,更在于能做什么。

想象一下下面的这些场景(如果AI能做,那是不是可以好好摸鱼了!~~):

  • 一个能帮你查天气、订会议、发邮件的个人助理

  • 一个能自动分析数据并生成报告的分析师

  • 一个能根据用户需求自主操作软件的数字员工

这就是Agents(智能体) 的用武之地。在本篇中,我们将探索LangChain最令人兴奋的模块,打造能够自主思考、使用工具、解决问题的AI智能体。


一、核心理论:Agents——从"工具人"到"思考者"

1. 什么是Agents?

Agents(智能体) 的核心思想是:让大语言模型成为决策大脑,能够自主选择和使用各种工具来完成任务。

与之前我们构建的"知识问答系统"不同,智能体不是简单地回答问题,而是执行任务。它能够:

  • 分析问题:理解用户的目标和需求

  • 制定计划:拆解任务步骤,决定使用哪些工具

  • 执行行动:调用合适的工具获取信息或执行操作

  • 观察结果:分析工具返回的结果,决定下一步行动

  • 循环迭代:重复上述过程直到任务完成

Al Agents是基于LLM的能够自主理解、自主规划决策、执行复杂任务的智能体,Agents不是ChatGPT的升级版,它不仅告诉你“如何做”,更会帮你去做。若各种Copilot是副驾驶,那Agents就是主驾驶。

Agents = LLM + 规划技能 + 记忆 + 工具使用。本质上Agents是一个LLM的编排与执行系统:

2. Agents的核心组件

a) Tools(工具)

  • 定义:任何可以被AI调用的功能模块

  • 示例:搜索引擎、计算器、API接口、数据库查询、文件操作等

  • 关键:每个工具都有清晰的描述,让模型知道何时使用它

b) Agent(智能体)

  • 角色:决策引擎,基于当前状态决定下一步行动

  • 类型:ReAct、Plan-and-Execute、Self-ask-with-search等

  • 核心:遵循"思考-行动-观察"的循环

c) Agent Executor(执行器)

  • 作用:管理智能体的执行流程,处理错误,防止无限循环

  • 功能:限制最大步骤数、处理异常、管理中间状态

3. ReAct框架:智能体的"思考模式"

ReAct(Reasoning + Acting) 是最流行的智能体框架:

传统上,对 LLM 的研究将推理(如通过思想链 CoT)和行动(如生成动作规划)作为两个独立的领域。CoT 在其“内部思考”中可能产生事实幻觉或错误传播;而单纯的行动模型则缺乏对复杂任务的规划、分解和异常处理能力。

ReAct 的核心思想在于打破这种隔阂。它通过 Prompting 的方式,让 LLM 生成一种**交错(interleaved)**的轨迹,该轨迹包含三个关键元素:

  • Reason(思考):模型的内部语言推理过程。它不直接影响外部环境,而是用于分析问题、分解任务、制定或调整计划、处理异常情况,以及从观察中提取关键信息。

  • Act(行动):模型生成的与外部环境交互的具体指令。例如,调用一个搜索引擎 API、在一个虚拟环境中执行某个动作等。

  • Observe(观察):执行行动后从外部环境返回的结果。这些结果作为新的上下文,供模型在下一步进行思考。

这种”思考 → 行动 → 观察 → 思考…”的循环,模拟了人类解决问题时“边想边做、边做边想”的认知过程,形成了一个动态、可回溯的闭环。

总而言之,ReAct是一种结合了推理(Reasoning)和行动(Acting)的新型提示技术,旨在提升大模型(LLMs)在解决语言理解和交互式决策任务方面的性能。这项技术通过在模型生成回答的过程中,交替生成推理轨迹和特定任务的行动,从而实现两者之间的协同效应。具体来说,推理轨迹帮助模型诱导、跟踪和更新行动计划,处理异常情况;而行动则允许模型与外部知识源(如知识库或环境)接口,并从中获取额外信息。


二、项目实战:构建全能个人助理智能体

好,现在,让我们构建一个能够使用多种工具的智能个人助理来帮我们理解Agents。

1、项目目标

    创建一个能理解复杂需求、自主选择工具、完成多步骤任务的智能助理。

    技术栈:LangChain Agents + 自定义Tools + HTTP请求调用

    完整代码如下:

import requests
import json
import math
from datetime import datetime, timedelta
from typing import Dict, Any, List
from langchain.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain.schema import BaseOutputParser
import re

# ==================== 全局配置 ====================
# 聚合平台 http://www.ufunai.cn 配置
BASE_URL = "https://api.ufunai.cn/v1"
API_KEY = "sk-xxxxx"  # 替换为你的API密钥
MODEL_NAME = "gpt-4"  # 指定要测试的模型名称


# 1. 自定义HTTP模型类(复用之前代码)
class HTTPChatModel:
    def __init__(self, base_url: str, api_key: str, model: str = "gpt-4"):
        self.base_url = base_url
        self.api_key = api_key
        self.model = model

    def invoke(self, messages: list) -> str:
        headers = {
            "Content-Type": "application/json",
            "Authorization": f"Bearer {self.api_key}"
        }

        payload = {
            "model": self.model,
            "messages": messages,
            "temperature": 0.1,
            "max_tokens": 1200
        }

        try:
            response = requests.post(
                f"{self.base_url}/chat/completions",
                headers=headers,
                json=payload,
                timeout=60
            )
            response.raise_for_status()
            result = response.json()
            return result["choices"][0]["message"]["content"]

        except requests.exceptions.RequestException as e:
            print(f"HTTP请求错误: {e}")
            if hasattr(e, 'response') and e.response is not None:
                print(f"响应内容: {e.response.text}")
            raise


# 2. 自定义输出解析器,用于解析智能体的思考过程
class AgentOutputParser(BaseOutputParser):
    def parse(self, text: str) -> Dict[str, Any]:
        """解析智能体的输出,提取思考、行动和输入

        优先策略:
        - 如果模型给出了 action + action_input,则优先返回这两个字段(用于触发工具调用)
        - 如果没有 action,则返回 final_answer(直接结束)
        - 如果模型同时给出 action 和 final_answer,也会返回 action,以便执行工具
        """
        thought_match = re.search(r"思考[::]\s*(.*?)(?=\n行动[::]|\n最终答案[::]|\n行动输入[::]|\Z)", text, re.DOTALL)
        # 使用更宽松的正则以兼容中文、大小写以及包含空格或符号的工具名
        action_match = re.search(r"行动[::]\s*([^\n]+)", text)
        action_input_match = re.search(r"行动输入[::]\s*(.*?)(?=\n行动[::]|\n最终答案[::]|\Z)", text, re.DOTALL)
        final_answer_match = re.search(r"最终答案[::]\s*(.*)", text, re.DOTALL)

        result = {}
        if thought_match:
            result["thought"] = thought_match.group(1).strip()

        # 优先解析 action,如果存在则返回 action + action_input(即便同时有 final_answer)
        if action_match and action_input_match:
            # 捕获更完整的工具名并清理两端的标点
            action = action_match.group(1).strip().strip(' .。,,')
            action_input = action_input_match.group(1).strip()
            result["action"] = action
            result["action_input"] = action_input

            # 仍然保留 final_answer(如果模型同时提供)以便在工具返回后参考,但不提前结束
            if final_answer_match:
                result["final_answer"] = final_answer_match.group(1).strip()

            return result

        # 如果没有 action,则返回最终答案(若有)
        if final_answer_match:
            result["final_answer"] = final_answer_match.group(1).strip()
            return result

        return result


# 3. 定义各种工具
class Tool:
    def __init__(self, name: str, description: str, function):
        self.name = name
        self.description = description
        self.function = function

    def run(self, input_text: str) -> str:
        try:
            return self.function(input_text)
        except Exception as e:
            return f"工具执行错误: {str(e)}"


# 3.1 计算器工具
def calculator_tool(expression: str) -> str:
    """执行数学计算"""
    # 安全限制:只允许基本的数学运算
    allowed_chars = set('0123456789+-*/.() ')
    if not all(c in allowed_chars for c in expression):
        return "错误:表达式中包含不允许的字符"

    try:
        # 使用eval计算,但在生产环境中应该使用更安全的方式
        result = eval(expression)
        return f"计算结果: {result}"
    except Exception as e:
        return f"计算错误: {str(e)}"


# 3.2 时间工具
def time_tool(query: str) -> str:
    """获取当前时间信息"""
    now = datetime.now()
    if "明天" in query:
        tomorrow = now + timedelta(days=1)
        return f"明天是: {tomorrow.strftime('%Y年%m月%d日 %A')}"
    elif "昨天" in query:
        yesterday = now - timedelta(days=1)
        return f"昨天是: {yesterday.strftime('%Y年%m月%d日 %A')}"
    else:
        return f"当前时间: {now.strftime('%Y年%m月%d日 %H:%M:%S %A')}"


# 3.3 单位转换工具
def unit_converter_tool(input_text: str) -> str:
    """执行单位转换"""
    try:
        # 解析输入,格式如 "100 USD to CNY" 或 "10公里 to 英里"
        parts = input_text.lower().split()
        if len(parts) < 4 or parts[2] != "to":
            return "格式错误,请使用: '数值 原单位 to 目标单位'"

        value = float(parts[0])
        from_unit = parts[1]
        to_unit = parts[3]

        # 简单的转换率(实际应用中应该使用实时API)
        conversion_rates = {
            "usd_cny": 7.2,
            "cny_usd": 0.14,
            "km_mile": 0.6214,
            "mile_km": 1.6093,
            "kg_pound": 2.2046,
            "pound_kg": 0.4536,
            "c_f": lambda x: (x * 9 / 5) + 32,
            "f_c": lambda x: (x - 32) * 5 / 9
        }

        key = f"{from_unit}_{to_unit}"
        if key in conversion_rates:
            rate = conversion_rates[key]
            if callable(rate):
                result = rate(value)
            else:
                result = value * rate
            return f"转换结果: {value} {from_unit} = {result:.2f} {to_unit}"
        else:
            return f"不支持从 {from_unit} 到 {to_unit} 的转换"
    except Exception as e:
        return f"转换错误: {str(e)}"


# 3.4 模拟搜索工具
def search_tool(query: str) -> str:
    """模拟搜索引擎(实际应用中应该接入真实搜索API)"""
    # 这里模拟返回一些预设结果
    mock_results = {
        "天气": "根据模拟数据:今天晴天,温度25°C,湿度60%,东南风3级。",
        "新闻": "最新科技新闻:AI技术快速发展,多模态模型成为新趋势。",
        "股票": "模拟股票信息:AAPL $175.32 (+1.2%), GOOGL $145.67 (-0.5%)",
        "默认": f"已搜索: '{query}'。这是模拟搜索结果,实际应用中应接入真实搜索引擎API。"
    }

    for key in mock_results:
        if key in query:
            return mock_results[key]

    return mock_results["默认"]


# 4. 智能体执行器
class SimpleAgentExecutor:
    def __init__(self, model, tools: Dict[str, Tool], max_steps: int = 5):
        self.model = model
        self.tools = tools
        self.max_steps = max_steps
        self.parser = AgentOutputParser()

        # 构建工具描述字符串
        self.tool_descriptions = "\n".join([
            f"- {name}: {tool.description}"
            for name, tool in tools.items()
        ])

        # 智能体提示模板 - 在初始化时就完成格式化
        template_str = """
        你是一个智能个人助理,可以使用各种工具来帮助用户解决问题。

        你可以使用的工具:
        {tool_descriptions}

        请按照以下格式回应:
        思考: 首先分析用户的问题,决定是否需要使用工具以及使用哪个工具
        行动: 工具名称(如果需要使用工具)
        行动输入: 工具的输入参数(如果需要使用工具)
        最终答案: 直接回答用户的问题(如果不需要工具或已经通过工具获得足够信息)

        注意:
        1. 每次只能使用一个工具
        2. 根据工具返回的结果,决定下一步行动
        3. 当你认为已经获得足够信息来回答用户问题时,使用"最终答案:"

        当前对话:
        用户: {input}

        请开始回应:
        """
        self.prompt_template = ChatPromptTemplate.from_template(template_str)


    def run(self, user_input: str) -> str:
        """执行智能体任务"""
        conversation_history = []
        steps = 0

        print(f"用户: {user_input}")
        print("-" * 50)

        while steps < self.max_steps:
            # 构建当前对话上下文
            current_context = user_input
            if conversation_history:
                history_text = "\n".join([
                    f"步骤{i + 1}: {step['thought']} -> 结果: {step['result'][:100]}..."
                    for i, step in enumerate(conversation_history)
                ])
                current_context = f"{user_input}\n\n执行历史:\n{history_text}"

            # 调用模型获取智能体响应
            prompt = self.prompt_template.format(tool_descriptions=self.tool_descriptions, input=current_context)
            messages = [{"role": "user", "content": prompt}]
            response = self.model.invoke(messages)

            print(f"步骤 {steps + 1}:")
            print(f"AI响应:\n{response}")
            print("-" * 30)

            # 解析响应
            parsed = self.parser.parse(response)
            print(f"解析结果: {parsed}")

            # 优先处理 action(如果模型给出了工具调用指令),即使同时包含 final_answer 也不应提前返回
            if "action" in parsed and "action_input" in parsed:
                action = parsed["action"]
                action_input = parsed["action_input"]

                # 尝试不区分大小写匹配工具名
                action_key = None
                for key in self.tools:
                    if action.lower() == key.lower():
                        action_key = key
                        break

                # 如果仍未找到,尝试一些常见中文映射
                if action_key is None:
                    mapping = {
                        "计算器": "Calculator",
                        "计算": "Calculator",
                        "时间": "Time",
                        "时间查询": "Time",
                        "单位转换": "UnitConverter",
                        "换算": "UnitConverter",
                        "搜索": "Search",
                        "查找": "Search"
                    }
                    # 先精确匹配映射键,再尝试不区分大小写匹配映射值
                    if action in mapping:
                        action_key = mapping[action]
                    else:
                        for k, v in mapping.items():
                            if action.lower() == k.lower():
                                action_key = v
                                break

                if action_key and action_key in self.tools:
                    # 执行工具
                    print(f"使用工具: {action_key}, 输入: {action_input}")
                    tool_result = self.tools[action_key].run(action_input)
                    print(f"工具结果: {tool_result}")

                    # 记录执行历史
                    conversation_history.append({
                        "thought": parsed.get("thought", ""),
                        "action": action_key,
                        "action_input": action_input,
                        "result": tool_result
                    })

                    steps += 1
                    # 在使用工具后继续循环,让模型基于工具结果决定下一步
                    continue
                else:
                    print(f" 未知工具: {action}")
                    return f"错误: 未知工具 '{action}'"

            # 如果没有 action,则检查是否存在最终答案
            if "final_answer" in parsed:
                print(" 任务完成!")
                return parsed["final_answer"]

            # 如果既没有 action 也没有 final_answer,则响应格式不正确
            print(" 响应格式错误")
            return "错误: 智能体响应格式不正确"

        return "错误: 达到最大执行步骤数,任务未完成"


# 5. 主程序
def main():
    # 初始化模型
    chat_model = HTTPChatModel(
        base_url = BASE_URL,
        api_key = API_KEY,
        model = MODEL_NAME
    )

    # 初始化工具
    tools = {
        "Calculator": Tool(
            name="Calculator",
            description="执行数学计算,支持加减乘除和括号",
            function=calculator_tool
        ),
        "Time": Tool(
            name="Time",
            description="获取当前时间、日期信息,可以查询今天、明天、昨天",
            function=time_tool
        ),
        "UnitConverter": Tool(
            name="UnitConverter",
            description="执行单位转换,支持货币、长度、重量、温度等",
            function=unit_converter_tool
        ),
        "Search": Tool(
            name="Search",
            description="搜索信息,可以查询天气、新闻、股票等",
            function=search_tool
        )
    }

    # 初始化智能体执行器
    agent = SimpleAgentExecutor(chat_model, tools, max_steps=5)

    print("智能个人助理已启动!")
    print("支持功能: 计算、时间查询、单位转换、信息搜索")
    print("输入'退出'结束对话\n")

    # 测试用例
    test_cases = [
        "100美元可以兑换多少人民币?",
        "计算(15 + 23) * 4 - 18 / 3的结果",
        "今天天气怎么样?明天呢?",
        "10公里等于多少英里?25摄氏度是多少华氏度?"
    ]

    print("试试这些问题:")
    for i, case in enumerate(test_cases, 1):
        print(f"{i}. {case}")
    print()

    # 交互式对话
    while True:
        user_input = input("您的问题: ").strip()
        if user_input.lower() in ['退出', 'exit', 'quit']:
            break

        if not user_input:
            continue

        print("\n" + "=" * 50)
        result = agent.run(user_input)
        print(f"\n 最终回答: {result}")
        print("=" * 50 + "\n")


if __name__ == "__main__":
    main()

2、代码深度解读

  1. 自定义输出解析器 (AgentOutputParser)

    • 解析智能体的思考过程,提取关键信息

    • 识别"思考"、"行动"、"最终答案"等关键部分

    • 处理智能体的结构化输出

  2. 工具系统 (Tool类)

    • 统一工具接口,每个工具都有名称、描述和功能

    • 支持错误处理和异常管理

    • 易于扩展新的工具

  3. 智能体执行引擎 (SimpleAgentExecutor)

    • 管理"思考-行动-观察"的完整循环

    • 维护对话历史和执行上下文

    • 防止无限循环和错误传播

  4. 多种实用工具

    • 计算器:执行数学运算

    • 时间工具:获取时间信息

    • 单位转换:货币、长度、温度等转换

    • 搜索工具:模拟信息检索(可替换为真实API)

运行效果演示:

智能个人助理已启动!
支持功能: 计算、时间查询、单位转换、信息搜索
输入'退出'结束对话

试试这些问题:
1. 100美元可以兑换多少人民币?
2. 计算(15 + 23) * 4 - 18 / 3的结果
3. 今天天气怎么样?明天呢?
4. 10公里等于多少英里?25摄氏度是多少华氏度?

您的问题: 90美元可以兑换多少人民币, 另外今天天气怎么样

==================================================
用户: 90美元可以兑换多少人民币, 另外今天天气怎么样
--------------------------------------------------
步骤 1:
AI响应:
思考: 用户询问了两个问题,一个是货币兑换的问题,另一个是关于天气的问题。根据规则,每次只能使用一个工具,因此我将首先解决货币兑换的问题。

行动: UnitConverter
行动输入: 转换90美元到人民币
最终答案: 请稍等,我正在计算90美元兑换成人民币的金额。
------------------------------
解析结果: {'thought': '用户询问了两个问题,一个是货币兑换的问题,另一个是关于天气的问题。根据规则,每次只能使用一个工具,因此我将首先解决货币兑换的问题。', 'action': 'UnitConverter', 'action_input': '转换90美元到人民币', 'final_answer': '请稍等,我正在计算90美元兑换成人民币的金额。'}
使用工具: UnitConverter, 输入: 转换90美元到人民币
工具结果: 格式错误,请使用: '数值 原单位 to 目标单位'
步骤 2:
AI响应:
思考: 用户询问了两个问题,一个是货币兑换的问题,另一个是关于天气的问题。根据规则,每次只能使用一个工具,因此我将首先解决货币兑换的问题。
行动: UnitConverter
行动输入: 90 USD to CNY
最终答案: 请稍等,我正在帮您查询90美元兑换成人民币的金额。
------------------------------
解析结果: {'thought': '用户询问了两个问题,一个是货币兑换的问题,另一个是关于天气的问题。根据规则,每次只能使用一个工具,因此我将首先解决货币兑换的问题。', 'action': 'UnitConverter', 'action_input': '90 USD to CNY', 'final_answer': '请稍等,我正在帮您查询90美元兑换成人民币的金额。'}
使用工具: UnitConverter, 输入: 90 USD to CNY
工具结果: 转换结果: 90.0 usd = 648.00 cny
步骤 3:
AI响应:
思考: 用户的第二个问题是询问今天的天气情况,我将使用搜索工具来获取天气信息。
行动: Search
行动输入: 今天天气
最终答案: 90美元可以兑换648.00人民币。关于今天的天气,我需要使用搜索工具来获取具体信息,请稍等。
------------------------------
解析结果: {'thought': '用户的第二个问题是询问今天的天气情况,我将使用搜索工具来获取天气信息。', 'action': 'Search', 'action_input': '今天天气', 'final_answer': '90美元可以兑换648.00人民币。关于今天的天气,我需要使用搜索工具来获取具体信息,请稍等。'}
使用工具: Search, 输入: 今天天气
工具结果: 根据模拟数据:今天晴天,温度25°C,湿度60%,东南风3级。
步骤 4:
AI响应:
最终答案: 90美元可以兑换648人民币。今天的天气是晴天,温度25°C,湿度60%,东南风3级。
------------------------------
解析结果: {'final_answer': '90美元可以兑换648人民币。今天的天气是晴天,温度25°C,湿度60%,东南风3级。'}
 任务完成!

 最终回答: 90美元可以兑换648人民币。今天的天气是晴天,温度25°C,湿度60%,东南风3级。
==================================================

三、高级扩展:连接真实API

上面的搜索工具是模拟的,现在让我们将其升级为真实的API调用:

# 真实搜索工具(需要API密钥)
def real_search_tool(query: str) -> str:
    """使用真实搜索引擎API"""
    # 这里以SerpAPI为例(需要注册获取API密钥)
    try:
        params = {
            'q': query,
            'api_key': 'your-serpapi-key-here',  # 替换为你的API密钥
            'engine': 'google'
        }
        
        response = requests.get('https://serpapi.com/search', params=params)
        data = response.json()
        
        # 提取有机搜索结果
        if 'organic_results' in data and data['organic_results']:
            first_result = data['organic_results'][0]
            return f"搜索结果: {first_result.get('title', '')} - {first_result.get('snippet', '')}"
        else:
            return "未找到相关结果"
    except Exception as e:
        return f"搜索错误: {str(e)}"

# 天气API工具
def weather_tool(location: str) -> str:
    """使用真实天气API"""
    try:
        # 这里使用OpenWeatherMap API示例(需要注册获取API密钥)
        api_key = "your-weather-api-key"
        url = f"http://api.openweathermap.org/data/2.5/weather?q={location}&appid={api_key}&units=metric&lang=zh_cn"
        
        response = requests.get(url)
        data = response.json()
        
        if response.status_code == 200:
            temp = data['main']['temp']
            desc = data['weather'][0]['description']
            humidity = data['main']['humidity']
            return f"{location}天气: {desc}, 温度{temp}°C, 湿度{humidity}%"
        else:
            return f"无法获取{location}的天气信息"
    except Exception as e:
        return f"天气查询错误: {str(e)}"

四、总结与展望

通过本篇的学习,我们已经成功构建了一个能够自主思考、使用工具解决问题的AI智能体。

本篇核心收获:

  • Agents理念:理解了智能体从"回答问题"到"解决问题"的范式转变

  • ReAct框架:掌握了思考-行动-观察的智能体工作循环

  • 工具系统:学会了如何创建和管理各种功能工具

  • 执行引擎:理解了智能体执行器的设计原理和实现方式

生产环境建议:

  • 添加工具使用权限控制和安全性检查

  • 实现更复杂的错误处理和重试机制

  • 添加执行步骤的监控和日志记录

  • 考虑工具调用的成本控制和限流

LangChain系列总结:经过这三篇文章的学习,我们已经完整掌握了LangChain的核心模块:

  1. Model I/O:与模型对话的标准方式

  2. Retrieval:为模型注入外部知识

  3. Agents:让模型自主使用工具解决问题

这三个模块构成了构建复杂AI应用的完整技术栈,从基础对话到知识增强,再到自主行动,层层递进,功能强大。


下一篇预告:

现在,我们的智能体已经能够使用工具解决问题,但在真实的人机交互中,我们期望的不仅仅是单次任务处理,而是连续的、有上下文的对话,是能够记住历史、理解语境的智能体验。

在《LangChain实战入门(四):融合篇——打造有记忆、能协作的AI应用》中,我们将探索LangChain的Memory与Chains模块,打造能够记住对话历史、协调多个工具完成复杂任务的智能助理!你将学会如何为AI添加"记忆力",构建真正理解上下文、能够长期协作的智能研究助手!

另:需要源码的同学,请关注微信公众号(优趣AI)在留言区评论获取!!!

创作不易,码字更不易,如果觉得这篇文章对你有帮助,记得点个关注、在看或收藏,给作者一点鼓励吧~

AI智能体开发实战:从Luma Agents到LangChain构建任务执行助手 AI智能体代表了人工智能从被动对话到主动执行的技术演进。其核心原理在于将大语言模型的推理能力与外部工具调用相结合,形成“思考-行动-观察”的自主循环。这种架构赋予了AI系统目标导向、任务分解和状态管理的能力,技术价值在于能够处理现实世界中需要多步骤协作的复杂任务。在应用场景上,智能体广泛适用于自动化客服、数据分析、智能运维和个性化服务等领域。本文以Luma Agents和LangChain框架为例,通过构建天气查询助手,详细演示了智能体的工具定义、提示词设计和执行流程,为开发者提供了从概念到实践的完整路径。 阅读详情

相关推荐

AI Agents架构解析与实战:从核心原理到企业级应用

AI Agent(智能体)是当前人工智能领域的热点技术,它代表了大模型从语言生成向任务执行能力的关键跃迁。其核心原理在于模拟人类的认知过程,通过规划与推理、工具使用、记忆以及自我评估等模块的协同,使AI能够自主理解目标、分解任务并调用外部工具执行。这种架构赋予了AI系统强大的环境交互与复杂问题解决能力,技术价值在于将大模型从“对话工具”升级为可落地的“生产力工具”。在应用场景上,AI Agents正广泛应用于自动化办公、智能数据分析、客户服务、多智能体协作等领域,极大地提升了任务处理的自主性与效率。本文聚焦

weixin_30687051的博客 406

AI Agent实战入门:基于LangChain快速搭建自主工具调用智能体

Agentic AI 不是一个具体的软件包或模型,而是一个技术概念和架构范式。它指的是由具备自主性、目标驱动和适应能力的 AI 智能体(AI Agent)组成的系统。这些智能体能够模仿人类决策,在有限监督下完成特定目标,并通过调用外部工具、API 或数据库来执行复杂任务。如果说生成式 AI(如 ChatGPT)是“能说会道”的助手,那么 Agentic AI 就是“能说会做”的实干家,它可以将语言模型的思考能力转化为实际行动。 对于开发者而言,最关心的不是概念本身,而是如何快速上手、搭建并验证一个可运行的

weixin_33985507的博客 404

从零构建AI Agent:基于LangChain的智能体开发实战指南

在实际 AI 应用开发中,很多开发者都听说过 AI Agent 的概念,但往往停留在“知道它能自主完成任务”的层面,对于如何从零开始构建一个具备实际能力的 Agent 感到无从下手。LangChain 作为当前构建大模型应用最流行的框架之一,其核心价值正是为开发者提供了将大语言模型(LLM)与工具、记忆、逻辑流组合成智能体的标准化“积木”。本文将深入解析 LangChain 的核心工作机制,并带领你从环境搭建开始,一步步动手构建一个能理解指令、使用工具、并记住上下文的 AI Agent。无论你是希望将 AI

weixin_30920853的博客 426

DeepAgents实战:基于LangChain打造自主规划+文件管理+联网搜索的数字员工

LangChain推出的DeepAgents框架为构建复杂任务智能体提供了标准化解决方案。该框架基于LangGraph构建,整合了四大核心机制:规划工具帮助任务拆解、文件系统实现持久化记忆、子代理支持任务委派、系统提示词引导行为。文章以DeepSeek-v3.2模型为例,演示了如何通过环境配置、工具接入(如Tavily搜索)和系统提示词定义,快速构建具备自主规划、文件管理和联网搜索能力的"数字员工"。该框架为AI Agent开发提供了可复用的基础设施,特别适合处理长时程、多步骤的复杂任务

ytt0523_com的博客 1231

基于LangChain构建ReAct AI Agent:从原理到实战的完整指南

你是不是也经常看到“AI Agent”这个词,感觉它无所不能,但真要自己动手做一个,却不知从何下手?网上教程要么是“Hello World”级别的简单调用,要么是直接甩给你一个复杂的开源项目,中间的原理和关键步骤,仿佛被刻意隐藏了。 今天这篇文章,我们不谈空泛的概念,也不做简单的API调用演示。我们要做的是: 亲手从零开始,基于LangChain,构建一个具备“思考-行动-观察”(ReAct)能力的AI Agent。 在这个过程中,你会彻底搞懂LangChain这个框架是如何将大语言模型(LLM)从一个“聊

weixin_32296621的博客 282

用Claude Agents SDK快速构建AI Sidekick工作流

AI Agent 是一种能自主调用工具、理解任务并执行动作的智能体,其核心原理在于将大模型的推理能力与外部系统(如API、数据库)通过结构化函数调用进行协同。Claude Agents SDK 以极简设计封装了状态管理、错误重试、Schema校验与思考链调试等工程细节,显著降低AI工作流落地门槛。相比LangChain的高自由度与OpenAI Function Calling的强配置依赖,它更强调开箱即用与业务稳定性,特别适合产品经理、运营、销售等非算法角色快速搭建客服预处理、会议纪要生成、跨平台信息同步等

dgqvhtlwq472235338的博客 457

Claude Code与Managed Agents:AI编程中思考与执行的深度对比

在人工智能辅助编程领域,大语言模型(LLM)正从单纯的代码生成工具演变为具备自主执行能力的智能体。其核心原理在于将自然语言理解与工具调用能力相结合,通过API接口与环境进行交互。这一技术变革的核心价值在于显著提升了开发效率与自动化水平,使开发者能够从重复性劳动中解放出来,专注于更高层次的架构设计与复杂问题求解。在实际应用场景中,AI编程工具主要分为两大范式:一类专注于代码的深度理解、生成与审查,强调增强开发者的认知与代码质量;另一类则侧重于目标驱动的任务自动化,能够自主调用终端、文件系统及第三方API等工具

weixin_33762130的博客 396

企业级Agentic AI落地指南:从概念到实践,构建自主数字员工

最近和几个做企业数字化转型的朋友聊天,发现一个很有意思的现象:大家嘴上都在聊“Agentic AI”(智能体AI),但具体到落地,十个人有十个不同的理解。有人觉得就是给ChatGPT加个API调用,有人认为是自动化流程的升级版,还有人把它等同于RPA(机器人流程自动化)的AI化。 这背后反映了一个核心问题: 企业搞Agentic AI,到底在做什么? 是追逐一个技术热词,还是真的在解决业务痛点? 我的判断是: Agentic AI的本质,不是做一个“更聪明的聊天机器人”,而是构建一个能够自主感知、决策、执行

weixin_30458043的博客 375

AI Agents实战:从零构建智能研究助手,重构团队协作与领导力

在人工智能领域,大语言模型(LLM)的突破性进展催生了新一代智能体范式——AI Agents。其核心原理在于模拟人类智能的感知、决策与执行循环,通过规划、记忆、工具使用和反思等模块,使机器能够自主处理复杂任务。这一技术的核心价值在于将传统确定性的脚本自动化,升级为非确定性的自主智能系统,从而显著提升任务处理的灵活性与适应性。在工程实践中,AI Agents广泛应用于自动化研究、数据分析、代码审查等场景,通过集成外部工具(如网络搜索、API调用)实现端到端的问题解决。本文以构建一个基于LangChain框架的

weixin_34185320的博客 604

构建可审计的AI数字员工:LangChain+LlamaIndex+AutoGen实战

AI数字员工本质是嵌入业务系统的智能代理,需兼具环境感知、规则理解与自主执行能力。其核心原理在于将结构化业务知识(如SOP文档)通过检索增强(RAG)注入决策链路,并结合实时系统状态(数据库/API/日志)动态生成动作。技术价值体现在可追溯、可拦截、可迭代——所有决策有据可查,所有操作可人工复核。典型应用场景覆盖制造业工单闭环、客服分级响应与跨系统协同执行。本文基于LangChain、LlamaIndex与AutoGen开源栈,详解如何构建轻量、可控、符合SOP约束的AI数字员工原型,避免RPA式拼凑与大模

weixin_34187862的博客 326

挑战第七天:Llamaindex RAG 实践

安装python 依赖包,并安装 Llamaindex和相关包以及Sentence Transformer 模型。进入开发机后,创建新的conda环境,命名为。镜像,然后在资源配置中,使用。的选项,然后立即创建开发机器。后,点击 选择镜像 使用。然后安装相关基础依赖。

weixin_53579823的博客 728

AI Agents框架解析:从原理到企业级部署实战

AI智能体(AI Agents)作为新一代人工智能技术,通过模块化的感知-决策-执行架构实现自主任务处理。其核心技术在于结合大型语言模型(LLM)的推理能力与工具调用API,形成可扩展的智能工作流。在工程实践中,开发者需要掌握框架选型、记忆优化、推理加速等关键技术,特别是在企业级部署时需考虑安全防护与成本控制。当前AutoGPT、LangChain等主流框架已广泛应用于自动化办公、电商客服等场景,而多Agent协作系统更展现出6倍于人类团队的效率提升。随着量化技术和垂直领域优化的深入,这类框架正在重塑从日常

weixin_30613727的博客 312

Docker深度详解:从原理到实践的全方位指南

本文深入解析了Docker容器化技术的核心原理与实战应用。主要内容包括:1) Docker核心架构与优势,对比容器与虚拟机的关键差异;2) 企业级部署方案,涵盖离线安装与多镜像源配置;3) 高级镜像构建技术,如参数化构建、缓存优化及安全扫描;4) 容器生命周期管理,包括健康检查、资源限制及数据持久化方案。文章提供了丰富的代码示例和生产级配置建议,如使用Trivy进行安全扫描、精确控制容器资源等技术细节,帮助开发者全面掌握现代容器化技术。

weixin_42593797的博客 1281

构建企业级AI Agents:从理论到实践的完整路径

企业级AI Agents凭借自主决策、上下文感知、工具调用和多模态交互四大核心能力,正重塑企业运营模式。在智能客服、市场研究和财务流程等场景中,AI Agents可提高80%咨询处理率,缩短90%工单解决时间,降低30%运营成本。通过多智能体系统架构和合理的技术选型,企业可实现高效、安全、合规的AI Agent部署,未来将与企业数字神经系统深度融合,成为企业核心应用组件。

youmaob的博客 1682

【2023版】基于JT808/JT1078协议的车载视频监控平台开发实战-开源架构解析

本文详细解析了基于JT808/JT1078协议的车载视频监控平台开发实战,涵盖协议核心作用、开源架构设计、开发避坑指南及二次开发建议。重点介绍了JT1078协议在音视频传输中的优化方案,以及海量位置数据存储、高可用架构等关键技术点,为开发者提供全面的实战参考。

weixin_26965807的博客 236

解读文献(五)------基于阻抗控制

文章目录背景主动柔顺控制阻抗控制基于力的阻抗控制基于位置的阻抗控制力位混合控制 背景 主动柔顺控制 阻抗控制 基于力的阻抗控制 基于位置的阻抗控制 力位混合控制 ...

accumulation 1万+

AI Agents时代技术领导力转型:从代码实现到系统设计的实战指南

在软件工程领域,系统设计始终是构建复杂应用的核心能力,它关注如何将业务需求分解为可协作的模块并定义清晰的交互协议。随着大语言模型(LLM)和AI智能体(AI Agents)技术的成熟,传统的开发协作模式正经历深刻变革。AI Agents能够自主感知、规划、执行和反思,这极大地提升了自动化水平,其技术价值在于将人类工程师从重复性认知任务中解放出来,转而聚焦于更高阶的目标定义与系统架构。在智能客服、自动化数据分析等应用场景中,技术负责人的角色正从“解题者”转变为“出题者”和“系统设计者”。本文以构建智能客服工单

weixin_34331102的博客 416

[SDIO] SD card 初始化及常用命令解析(附波形,uboot代码)

目录 初始化 1.cmd 0 2.cmd8 3.cmd55 4.acmd41 5.cmd2 6.cmd3 7.cmd9 8.cmd13 9.cmd7 10.ACMD51 11.CMD6 12.CMD16 13.CMD17 14.CMD18 15.CMD12 tuning CMD19 DW_SDHCI的tuning流程 初始化 1.cmd 0 /* Reset the Card */ err = mmc_go_idle(mmc...

Lenz_s_law的开发记录本 2万+

AI Agent技术演进与数字员工开发实战

AI Agent作为人工智能领域的重要分支,通过认知-决策-执行闭环实现了从简单聊天机器人到智能数字员工的跨越。其核心技术架构包括LLM-Centric、Neuro-Symbolic和Agent-as-a-Service三种范式,结合大语言模型与业务流程编排能力,在电商客服、智能助手等场景展现巨大价值。开发过程中需重点关注多模态理解、状态机管理和性能优化等关键技术,通过模块化设计平衡功能扩展与系统响应速度。随着Agent间协作网络和情感计算等前沿技术的发展,数字员工正逐步成为企业数字化转型的核心生产力工具。

weixin_33885676的博客 341

Proxmox VE 9 更换源

创建一键更换Proxmox VE 9.0源的Bash脚本,实现快速替换软件源。脚本需包含订阅提醒关闭功能,兼容Proxmox VE 9.0系统,执行命令为bash /proxmox_9.0_Repo.sh。该工具可简化源配置过程,自动处理系统更新源替换及订阅提示屏蔽,适合需要快速配置Proxmox环境的用户使用。

极致,细节 4986

基于 51 单片机的智能手势控制小车设计与实现

智能手势控制小车以STC89C52RC 单片机为控制核心,通过手势识别模块采集用户手势指令,经单片机处理后驱动电机执行前进、后退、左转、右转等动作。该项目融合了传感器技术、单片机编程和电机驱动技术,具有成本低、易实现、互动性强的特点,适合作为嵌入式系统入门实践案例。本项目成功实现了基于 51 单片机的智能手势控制小车,通过 APDS-9960 模块采集手势信号,经单片机处理后驱动电机完成基本动作,验证了 “传感器 + 单片机 + 执行器” 的嵌入式系统设计思路。

weixin_42300449的博客 178

LangChain入门指南

LangChain是一个强大的Python开源框架,专门用于构建大语言模型(LLM)驱动的应用程序。它通过模块化的组件,简化了LLM与外部数据源、工具链的集成过程,让开发者能像搭积木一样快速构建功能丰富的AI应用。

m0_73571447的博客 825

YOLO+OpenCV强强联手:高精度跌倒检测技术实战解析

(0, 1), (0, 2), (1, 3), (2, 4), # 脖子和头部(3, 5), (5, 6), (5, 7), (7, 9), (5,11),# 左臂(4,6), (6, 12), (6,8) ,(8,10),# 右臂(11, 12), (11, 13), (13, 15), #左腿(12, 14), (14, 16) #右腿keypoints是检测到的人体关键点数据,frame是图像帧,boxes是检测到的边界框信息。定义了人体关键点之间的连接关系,用于绘制人体骨架。

yolo模型训练找我,AI游戏合作找我 2313

AI Agents架构解析:从核心原理到五大应用场景实战

大语言模型(LLM)作为AI系统的核心大脑,通过其强大的逻辑推理与上下文理解能力,实现了从被动响应到主动规划的范式转变。其技术价值在于将传统AI工具升级为具备自主性和目标导向的智能体,能够自主进行任务分解、规划与决策。这一原理催生了AI Agents在自动化工作流、智能决策支持、多智能体协作等广泛的应用场景。在实际工程实践中,通过集成工具使用(Tools)与构建记忆系统,AI Agents能够调用各类API与知识库,完成从数据查询到复杂报告生成的多步骤任务。本文聚焦于AI Agents如何通过感知-思考-行

weixin_34252686的博客 419

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: LangChain实战入门(二):RAG实战——赋予大模型你的私有知识库
下一篇: LangChain实战入门(四):融合篇——打造有记忆、能协作的AI应用
softkit
博客等级 码龄15年 61粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

softkit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值