微软开源多智能体自定义自动化工作流系统,加速搭建基于AI的自动化系统

【NLP笔记】LLM应用之AI Agent & LangChain实战 AI Agent & LangChain 阅读详情

AI Agent对比

(1)工作流编排

LangChain:线性链,适合固定流程任务(如文档问答)。

LangGraph:支持循环、条件边和状态传递,适合动态调整的复杂逻辑(如多轮决策)。

Coze:可视化工作流,支持嵌套和批处理,但灵活性较低。

Dify:基于自然语言定义工作流,适合API集成和Prompt调优。

(2)工具调用与扩展性

LangChain/LangGraph:工具作为链或图的节点,支持自定义工具和重试逻辑。

Coze:依赖预置插件生态,扩展需通过开放平台。

Dify:支持OpenAPI集成,适合技术栈复杂的场景。

(3)RAG(检索增强生成)

LangChain:开箱即用的文档加载、向量检索功能。

LangGraph:需手动设计RAG节点,但支持反馈循环优化检索质量。

Dify/Coze:Dify提供基础RAG支持,Coze依赖知识库管理。

(4)多模态与部署

Coze:支持图像、视频生成,可直接发布至社交平台。

Qwen-Agent:开源架构,支持三级索引,以及工具调用,MCP协议调用,使用方便。

Dify:专注私有化部署,适合企业内网。

img

AI Agent选择建议:

• 无代码开发: Coze

• 快速原型开发:LangChain(线性任务)或 Qwen-Agent。

• 复杂Agent系统:LangGraph(多Agent协作)或 Dify(API深度集成)。

• 企业私有化:Dify(开源部署),Qwen-Agent 或 LangChain+LangGraph(灵活组合)

img

LangChain案例:搭建本地知识智能客服

AI Agent设计

AGENT_TMPL = """按照给定的格式回答以下问题。你可以使用下面这些工具:{tools}回答时需要遵循以下用---括起来的格式:---Question: 我需要回答的问题Thought: 回答这个上述我需要做些什么Action: "{tool_names}" 中的一个工具名Action Input: 选择这个工具所需要的输入Observation: 选择这个工具返回的结果...(这个 思考/行动/行动输入/观察 可以重复N次)Thought: 我现在知道最终答案Final Answer: 原始输入问题的最终答案---现在开始回答,记得在给出最终答案前,需要按照指定格式进行一步一步的推理。Question: {input}{agent_scratchpad}"""

这个模版中,最重要的是:

Thought

Action

Action Input

这3个部分是 AI 在Chain中进行自我思考的过程

可用Cursor帮写部分代码:代码是LangChain模拟调用**functionCall,**完整代码如下

import reimport osfrom typing import List, Union# Python内置模块,用于格式化和包装文本import textwrapimport timefrom langchain.agents import (    Tool,          # 可用工具    AgentExecutor, # Agent执行    LLMSingleActionAgent, # 定义Agent    AgentOutputParser, # 输出结果解析)from langchain.prompts import StringPromptTemplate# LLMChain,包含一个PromptTemplate和一个LLMfrom langchain_community.llms import Tongyi  # 导入通义千问Tongyi模型from langchain import LLMChain# Agent执行,Agent结束from langchain.schema import AgentAction, AgentFinish# PromptTemplate: 管理LLMs的Promptsfrom langchain.prompts import PromptTemplatefrom langchain.llms.base import BaseLLM# 定义了LLM的Prompt TemplateCONTEXT_QA_TMPL = """根据以下提供的信息,回答用户的问题信息:{context}问题:{query}"""CONTEXT_QA_PROMPT = PromptTemplate(    input_variables=["query", "context"],    template=CONTEXT_QA_TMPL,)# 输出结果显示,每行最多60字符,每个字符显示停留0.1秒(动态显示效果)def output_response(response: str) -> None:    if not response:        exit(0)    # 每行最多60个字符    for line in textwrap.wrap(response, width=60):        for word in line.split():            for char in word:                print(char, end="", flush=True)                time.sleep(0.1)  # Add a delay of 0.1 seconds between each character            print(" ", end="", flush=True)  # Add a space between each word        print()  # Move to the next line after each line is printed    # 遇到这里,这个问题的回答就结束了    print("----------------------------------------------------------------")# 模拟公司产品和公司介绍的数据源class TeslaDataSource:    def __init__(self, llm: BaseLLM):        self.llm = llm    # 工具1:产品描述    def find_product_description(self, product_name: str) -> str:        """模拟公司产品的数据库"""        product_info = {            "Model 3": "具有简洁、动感的外观设计,流线型车身和现代化前脸。定价23.19-33.19万",            "Model Y": "在外观上与Model 3相似,但采用了更高的车身和更大的后备箱空间。定价26.39-36.39万",            "Model X": "拥有独特的翅子门设计和更加大胆的外观风格。定价89.89-105.89万",        }        # 基于产品名称 => 产品描述        return product_info.get(product_name, "没有找到这个产品")    # 工具2:公司介绍    def find_company_info(self, query: str) -> str:        """模拟公司介绍文档数据库,让llm根据信息回答问题"""        context = """        特斯拉最知名的产品是电动汽车,其中包括Model S、Model 3、Model X和Model Y等多款车型。        特斯拉以其技术创新、高性能和领先的自动驾驶技术而闻名。公司不断推动自动驾驶技术的研发,并在车辆中引入了各种驾驶辅助功能,如自动紧急制动、自适应巡航控制和车道保持辅助等。        """        # prompt模板 = 上下文context + 用户的query        prompt = CONTEXT_QA_PROMPT.format(query=query, context=context)        # 使用LLM进行推理        return self.llm(prompt)AGENT_TMPL = """按照给定的格式回答以下问题。你可以使用下面这些工具:{tools}回答时需要遵循以下用---括起来的格式:---Question: 我需要回答的问题Thought: 回答这个上述我需要做些什么Action: "{tool_names}" 中的一个工具名Action Input: 选择这个工具所需要的输入Observation: 选择这个工具返回的结果...(这个 思考/行动/行动输入/观察 可以重复N次)Thought: 我现在知道最终答案Final Answer: 原始输入问题的最终答案---现在开始回答,记得在给出最终答案前,需要按照指定格式进行一步一步的推理。Question: {input}{agent_scratchpad}"""class CustomPromptTemplate(StringPromptTemplate):    template: str  # 标准模板    tools: List[Tool]  # 可使用工具集合    def format(self, **kwargs) -> str:        """        按照定义的 template,将需要的值都填写进去。        Returns:            str: 填充好后的 template。        """        # 取出中间步骤并进行执行        intermediate_steps = kwargs.pop("intermediate_steps")          print('intermediate_steps=', intermediate_steps)        print('='*30)        thoughts = ""        for action, observation in intermediate_steps:            thoughts += action.log            thoughts += f"\nObservation: {observation}\nThought: "        # 记录下当前想法 => 赋值给agent_scratchpad        kwargs["agent_scratchpad"] = thoughts          # 枚举所有可使用的工具名+工具描述        kwargs["tools"] = "\n".join(            [f"{tool.name}: {tool.description}" for tool in self.tools]        )          # 枚举所有的工具名称        kwargs["tool_names"] = ", ".join(            [tool.name for tool in self.tools]        )          cur_prompt = self.template.format(**kwargs)        #print(cur_prompt)        return cur_prompt"""    对Agent返回结果进行解析,有两种可能:    1)还在思考中 AgentAction    2)找到了答案 AgentFinal"""class CustomOutputParser(AgentOutputParser):    def parse(self, llm_output: str) -> Union[AgentAction, AgentFinish]:        """        解析 llm 的输出,根据输出文本找到需要执行的决策。        Args:            llm_output (str): _description_        Raises:            ValueError: _description_        Returns:            Union[AgentAction, AgentFinish]: _description_        """        # 如果句子中包含 Final Answer 则代表已经完成        if "Final Answer:" in llm_output:              return AgentFinish(                return_values={"output": llm_output.split("Final Answer:")[-1].strip()},                log=llm_output,            )        # 需要进行 AgentAction        regex = r"Action\s*\d*\s*:(.*?)\nAction\s*\d*\s*Input\s*\d*\s*:[\s]*(.*)"  # 解析 action_input 和 action        match = re.search(regex, llm_output, re.DOTALL)        if not match:            raise ValueError(f"Could not parse LLM output: `{llm_output}`")        action = match.group(1).strip()        action_input = match.group(2)        # Agent执行        return AgentAction(            tool=action, tool_input=action_input.strip(" ").strip('"'), log=llm_output        )# 设置通义千问API密钥DASHSCOPE_API_KEY = os.getenv("DASHSCOPE_API_KEY")if __name__ == "__main__":    # 定义LLM    llm = Tongyi(model_name="qwen-turbo", dashscope_api_key=DASHSCOPE_API_KEY)  # 使用通义千问qwen-turbo模型    # 自有数据    tesla_data_source = TeslaDataSource(llm)    # 定义的Tools    tools = [        Tool(            name="查询产品名称",            func=tesla_data_source.find_product_description,            description="通过产品名称找到产品描述时用的工具,输入的是产品名称",        ),        Tool(            name="公司相关信息",            func=tesla_data_source.find_company_info,            description="当用户询问公司相关的问题,可以通过这个工具了解公司信息",        ),    ]        # 用户定义的模板    agent_prompt = CustomPromptTemplate(        template=AGENT_TMPL,        tools=tools,        input_variables=["input", "intermediate_steps"],    )    # Agent返回结果解析    output_parser = CustomOutputParser()    # 最常用的Chain, 由LLM + PromptTemplate组成    llm_chain = LLMChain(llm=llm, prompt=agent_prompt)    # 定义的工具名称    tool_names = [tool.name for tool in tools]    # 定义Agent = llm_chain + output_parser + tools_names    agent = LLMSingleActionAgent(        llm_chain=llm_chain,        output_parser=output_parser,        stop=["\nObservation:"],        allowed_tools=tool_names,    )    # 定义Agent执行器 = Agent + Tools    agent_executor = AgentExecutor.from_agent_and_tools(        agent=agent, tools=tools, verbose=True    )    # 主过程:可以一直提问下去,直到Ctrl+C    while True:        try:            user_input = input("请输入您的问题:")            response = agent_executor.run(user_input)            output_response(response)        except KeyboardInterrupt:            break

运行代码效果:

img

Model Y 在外观上与 Model 3 相似,但采用了更高的车身和更大的后备箱空间。其定价范围为 26.39 万至 36.39 万。 

可见,这个prompt中,最重要的是:

Thought—>Action**—>Action Input**

可以重复N次,直到

Thought: 我现在知道最终答案

Final Answer: 原始输入问题的最终答案

img

工具自定义代码:这是模拟了两个工具

    # 定义LLM    llm = Tongyi(model_name="qwen-turbo", dashscope_api_key=DASHSCOPE_API_KEY)  # 使用通义千问qwen-turbo模型    # 自有数据    tesla_data_source = TeslaDataSource(llm)    # 定义的Tools    tools = [        Tool(            name="查询产品名称",            func=tesla_data_source.find_product_description,            description="通过产品名称找到产品描述时用的工具,输入的是产品名称",        ),        Tool(            name="公司相关信息",            func=tesla_data_source.find_company_info,            description="当用户询问公司相关的问题,可以通过这个工具了解公司信息",        ),    ]

让LLM能使用tools,按照规定的prompt执行

在这个prompt中,不断的:

Thought => Action, Action Input => Observation

直到

Thought: 我现在知道最终答案

Final Answer: 原始输入问题的最终答案

整个模拟搭建一个本地知识智能客服代码详细见上文

当然如果提问的问题比较简单或者无法用工具回答,则不会调用工具。

Agent是智能体,我们会给Agent配置各种tool, memory, prompt, LLM

LLM是Agent的大脑,Agent如果要决定使用哪个工具,是通过LLM来进行推理。tools在langchain中,你可以自己定义自己的tool,也可以使用langchain已经集成好的tool。用户的query + tools 的 description , 来决定使用哪个Tool。LLM通常回答问题,会把memory(上下文)放进去,这个会消耗更多的token。

参考:http://reverie.herokuapp.com/arXiv_Demo/#

img

ReAct范式

ReAct: Synergizing Reasoning and Acting in Language Models, 2022 https://arxiv.org/abs/2210.03629

将推理和动作相结合,克服LLM胡言乱语的问题,同时提高了结果的可解释性和可信赖度

人们在从事一项需要多个步骤的任务时,在步骤和步骤之间,或者动作和动作之间,一般都会有推理过程。

img

上图是三种QA,Question:除了苹果遥控器,还有什么设备能解决苹果遥控器最早设计交互的控制问题?

可以看到纯思维链CoT和纯Act行动都不行。CoT 存在事实幻觉的问题。

ReAct 的结构性约束降低了它在制定推理步骤方面的灵活性。

ReAct 在很大程度上依赖于它正在检索的信息。

ReAct = Reason + Act

Apple遥控器最早只能控制Front Row软件。Front Row软件可以被两种设备控制,Apple遥控器和键盘的功能键。所以,正确答案是键盘的功能键。

ReAct这个方式,简单有效,可解释性强

机器把想法写出来,然后结合想法和观察,做出相应的动作

Though: …

Action: …

Observation: …

总结:

• Agent 的核心是把 LLM 当作推理引擎,让它能使用外部工具,以及自己的长期记忆,从而完成灵活的决策步骤,进行复杂任务

• LangChain 里的 Chain 的概念,是由人来定义的一套流程步骤来让 LLM 执行,可以看成是把LLM 当成了一个强大的多任务工具

典型的 Agent 逻辑(比如 ReAct):

• 由 LLM 选择工具。

• 执行工具后,将输出结果返回给 LLM

• 不断重复上述过程,直到达到停止条件,通常是 LLM 自己认为找到答案了

所以,用户给需求 ,Agent不断思考,调用tool来满足用户需求;注意,也不是找不到问题无限循环下去,这里可以设置一个N(这个思考/行动/行动输入/观察可以重复 N 次)这个N的也不是一个准确的次数,大模型会在N次附近,自己判断。也可能找不到工具还会对用户反问咨询。

LLM选择工具,就是通过LLM的prompt进行提问,来选择的:用户的需求是XXX,我现在有XXX工具,如果需要,我可以选择其中一个工具来执行;(是通过LLM的推理来完成的)

同样功能的function 大模型会自己选择,可以选择的tool很多,但是每次执行可以只用一个适合的

img

案例:LangChain工具链组合设计

工具链组合设计

在Agent系统中,工具链是实现复杂任务的关键组件。通过将多个工具组合,Agent可以逐步处理复杂的问题。

示例:LangChain中的工具加载与组合

import osfrom langchain.agents import load_toolsfrom langchain.llms import OpenAIllm = Tongyi(model_name="qwen-turbo", dashscope_api_key=DASHSCOPE_API_KEY)tools = load_tools(["serpapi", "llm-math"], llm=llm)

这里加载了搜索引擎工具(serpapi)和数学计算工具(llm-math),并将其与语言模型(LLM)组合使用,以处理需要搜索和计算的任务

工具链组合设计

通过组合三个工具来解决复杂任务,包括:

• 文本分析工具 (TextAnalysisTool):负责分析文本内容,提取统计信息和情感倾向。

• 数据转换工具 (DataConversionTool):实现不同数据格式之间的转换,目前支持JSON和CSV格式互转。

• 文本处理工具 (TextProcessingTool):提供文本处理功能,如统计行数、查找文本和替换文本。

测试用例:

1、分析以下文本的情感倾向,并统计其中的行数:'这个产品非常好用,我很喜欢它的设计,使用体验非常棒!\n价格也很合理,推荐大家购买。\n客服态度也很好,解答问题很及时。’

2、将以下CSV数据转换为JSON格式:'name,age,comment\n张三,25,这个产品很好\n李四,30,服务态度差\n王五,28,性价比高’

3、分析以下文本,找出所有包含’好’的行,然后将结果转换为JSON格式:‘产品A:质量好,价格合理\n产品B:外观好,但价格贵\n产品C:性价比好,推荐购买’

整体的工作流程

Step1, 用户提交任务描述

Step2, Agent分析任务,决定使用哪些工具

Step3, Agent通过ReAct框架调用相应工具

Step4, 系统整合各工具结果,生成最终回答

# 示例用法if __name__ == "__main__":    # 示例1: 文本分析与处理    task1 = "分析以下文本的情感倾向,并统计其中的行数:'这个产品非常好用,我很喜欢它的设计,使用体验非常棒!\n价格也很合理,推荐大家购买。\n客服态度也很好,解答问题很及时。'"    print("任务1:", task1)    print("结果:", process_task(task1))        # 示例2: 数据格式转换    task2 = "将以下CSV数据转换为JSON格式:'name,age,comment\n张三,25,这个产品很好\n李四,30,服务态度差\n王五,28,性价比高'"    print("\n任务2:", task2)    print("结果:", process_task(task2))

示例1: 文本分析与处理

我需要先分析文本的情感倾向,然后再统计其中的行数。行动: 文本分析行动输入: '这个产品非常好用,我很喜欢它的设计,使用体验非常棒!\n价格也很合理,推荐大家购买。\n客服态度也很好,解答问题很及时。'观察: {'word_count': 35, 'char_count': 102, 'sentiment': '正面'}思考: 我已经得到了情感倾向,接下来需要统计行数。行动: 文本处理行动输入: operation='count_lines', content='这个产品非常好用,我很喜欢它的设计,使用体验非常棒!\n价格也很合理,推荐大家购买。\n客服态度也很好,解答问题很及时。'观察: {'line_count': 3}思考: 我现在已经有了最终答案。回答: 该文本的情感倾向为正面,其中包含3行内容。`For troubleshooting, visit: https://python.langchain.com/docs/troubleshooting/errors/OUTPUT_PARSING_FAILURE
任务2: 将以下CSV数据转换为JSON格式:'name,age,comment张三,25,这个产品很好李四,30,服务态度差王五,28,性价比高

示例2: 数据格式转换

我需要将CSV格式的数据转换为JSON格式,可以使用数据转换工具来完成这个任务。行动: 数据转换行动输入: input_data='name,age,comment\n张三,25,这个产品很好\n李四,30,服务态度差\n王五,28,性价比高', input_format='csv', output_format='json'观察: [{"name": "\u5f20\u4e09", "age": "25", "comment": "\u8fd9\u4e2a\u4ea7\u54c1\u5f88\u597d"}, {"name": "\u674e\u56db", "age": "30", "comment": "\u670d\u52a1\u6001\u5ea6\u5dee"}, {"name": "\u738b\u4e94", "age": "28", "comment": "\u6027\u4ef7\u6bd4\u9ad8"}]思考: 我现在已经有了最终答案回答: 以下是从CSV格式转换为JSON格式的数据:[  {"name": "张三", "age": "25", "comment": "这个产品很好"},  {"name": "李四", "age": "30", "comment": "服务态度差"},  {"name": "王五", "age": "28", "comment": "性价比高"}]

整体代码:

from langchain.agents import Tool, AgentExecutor, create_react_agentfrom langchain.prompts import PromptTemplatefrom langchain.schema import AgentAction, AgentFinishfrom langchain_community.llms import Tongyifrom langchain.memory import ConversationBufferMemoryimport reimport jsonfrom typing import List, Union, Dict, Anyimport os# 设置通义千问API密钥DASHSCOPE_API_KEY = os.getenv("DASHSCOPE_API_KEY")# 自定义工具1:文本分析工具class TextAnalysisTool:    """文本分析工具,用于分析文本内容"""        def __init__(self):        self.name = "文本分析"        self.description = "分析文本内容,提取字数、字符数和情感倾向"        def run(self, text: str) -> str:        """分析文本内容                参数:            text: 要分析的文本        返回:            分析结果        """        # 简单的文本分析示例        word_count = len(text.split())        char_count = len(text)                # 简单的情感分析(示例)        positive_words = ["好", "优秀", "喜欢", "快乐", "成功", "美好"]        negative_words = ["差", "糟糕", "讨厌", "悲伤", "失败", "痛苦"]                positive_count = sum(1 for word in positive_words if word in text)        negative_count = sum(1 for word in negative_words if word in text)                sentiment = "积极" if positive_count > negative_count else "消极" if negative_count > positive_count else "中性"                return f"文本分析结果:\n- 字数: {word_count}\n- 字符数: {char_count}\n- 情感倾向: {sentiment}"# 自定义工具2:数据转换工具class DataConversionTool:    """数据转换工具,用于在不同格式之间转换数据"""        def __init__(self):        self.name = "数据转换"        self.description = "在不同数据格式之间转换,如JSON、CSV等"        def run(self, input_data: str, input_format: str, output_format: str) -> str:        """转换数据格式                参数:            input_data: 输入数据            input_format: 输入格式            output_format: 输出格式        返回:            转换后的数据        """        try:            if input_format.lower() == "json" and output_format.lower() == "csv":                # JSON到CSV的转换示例                data = json.loads(input_data)                if isinstance(data, list):                    if not data:                        return "空数据"                                        # 获取所有可能的列                    headers = set()                    for item in data:                        headers.update(item.keys())                    headers = list(headers)                                        # 创建CSV                    csv = ",".join(headers) + "\n"                    for item in data:                        row = [str(item.get(header, "")) for header in headers]                        csv += ",".join(row) + "\n"                                        return csv                else:                    return "输入数据必须是JSON数组"                        elif input_format.lower() == "csv" and output_format.lower() == "json":                # CSV到JSON的转换示例                lines = input_data.strip().split("\n")                if len(lines) < 2:                    return "CSV数据至少需要标题行和数据行"                                headers = lines[0].split(",")                result = []                                for line in lines[1:]:                    values = line.split(",")                    if len(values) != len(headers):                        continue                                        item = {}                    for i, header in enumerate(headers):                        item[header] = values[i]                    result.append(item)                                return json.dumps(result, ensure_ascii=False, indent=2)                        else:                return f"不支持的转换: {input_format} -> {output_format}"                except Exception as e:            return f"转换失败: {str(e)}"# 自定义工具3:文本处理工具class TextProcessingTool:    """文本处理工具,用于处理文本内容"""        def __init__(self):        self.name = "文本处理"        self.description = "处理文本内容,如查找、替换、统计等"        def run(self, operation: str, content: str, **kwargs) -> str:        """处理文本内容                参数:            operation: 操作类型            content: 文本内容            **kwargs: 其他参数        返回:            处理结果        """        if operation == "count_lines":            return f"文本共有 {len(content.splitlines())} 行"                elif operation == "find_text":            search_text = kwargs.get("search_text", "")            if not search_text:                return "请提供要查找的文本"                        lines = content.splitlines()            matches = []                        for i, line in enumerate(lines):                if search_text in line:                    matches.append(f"第 {i+1} 行: {line}")                        if matches:                return f"找到 {len(matches)} 处匹配:\n" + "\n".join(matches)            else:                return f"未找到文本 '{search_text}'"                elif operation == "replace_text":            old_text = kwargs.get("old_text", "")            new_text = kwargs.get("new_text", "")                        if not old_text:                return "请提供要替换的文本"                        new_content = content.replace(old_text, new_text)            count = content.count(old_text)                        return f"替换完成,共替换 {count} 处。\n新内容:\n{new_content}"                else:            return f"不支持的操作: {operation}"# 创建工具链def create_tool_chain():    """创建工具链"""    # 创建工具    text_analysis = TextAnalysisTool()    data_conversion = DataConversionTool()    text_processing = TextProcessingTool()        # 组合工具    tools = [        Tool(            name=text_analysis.name,            func=text_analysis.run,            description="分析文本内容,提取字数、字符数和情感倾向"        ),        Tool(            name=data_conversion.name,            func=data_conversion.run,            description="在不同数据格式之间转换,如JSON、CSV等"        ),        Tool(            name=text_processing.name,            func=text_processing.run,            description="处理文本内容,如查找、替换、统计等"        )    ]        # 初始化语言模型    llm = Tongyi(model_name="qwen-turbo-latest", dashscope_api_key=DASHSCOPE_API_KEY)        # 创建提示模板    prompt = PromptTemplate.from_template(        """你是一个有用的AI助手,可以使用以下工具:{tools}可用工具名称: {tool_names}使用以下格式:问题: 你需要回答的问题思考: 你应该始终思考要做什么行动: 要使用的工具名称,必须是 [{tool_names}] 中的一个行动输入: 工具的输入观察: 工具的结果... (这个思考/行动/行动输入/观察可以重复 N 次)思考: 我现在已经有了最终答案回答: 对原始问题的最终回答开始!问题: {input}思考: {agent_scratchpad}"""    )        # 创建Agent    agent = create_react_agent(llm, tools, prompt)        # 创建Agent执行器    agent_executor = AgentExecutor.from_agent_and_tools(        agent=agent,        tools=tools,        memory=ConversationBufferMemory(memory_key="chat_history"),        verbose=True,        handle_parsing_errors=False  # 关闭自动重试, True会严格检查重试    )        return agent_executor# 示例:使用工具链处理任务def process_task(task_description):    """    使用工具链处理任务        参数:        task_description: 任务描述    返回:        处理结果    """    try:        agent_executor = create_tool_chain()        response = agent_executor.invoke({"input": task_description})        return response["output"]  # 从返回的字典中提取输出    except Exception as e:        return f"处理任务时出错: {str(e)}"# 示例用法if __name__ == "__main__":    # 示例1: 文本分析与处理    task1 = "分析以下文本的情感倾向,并统计其中的行数:'这个产品非常好用,我很喜欢它的设计,使用体验非常棒!\n价格也很合理,推荐大家购买。\n客服态度也很好,解答问题很及时。'"    print("任务1:", task1)    print("结果:", process_task(task1))        # 示例2: 数据格式转换    task2 = "将以下CSV数据转换为JSON格式:'name,age,comment\n张三,25,这个产品很好\n李四,30,服务态度差\n王五,28,性价比高'"    print("\n任务2:", task2)    print("结果:", process_task(task2))

以上代码工具链式创建过程:

create_tool_chain() 函数负责初始化各工具并组合成一个完整的工具链:

def create_tool_chain():  # 创建工具实例  text_analysis = TextAnalysisTool()  data_conversion = DataConversionTool()  text_processing = TextProcessingTool()  # 将工具包装为LangChain工具格式  tools = [Tool(...), Tool(...), Tool(...)]  # 初始化语言模型  llm = Tongyi(model_name="qwen-turbo", dashscope_api_key=DASHSCOPE_API_KEY)  # 创建提示模板  prompt = PromptTemplate.from_template(...)  # 创建代理  agent = create_react_agent(llm, tools, prompt)  # 创建代理执行器  agent_executor = AgentExecutor.from_agent_and_tools(...)  return agent_executor

提示词模版

你是一个有用的AI助手,可以使用以下工具:{tools}可用工具名称: {tool_names}
使用以下格式:问题: 你需要回答的问题思考: 你应该始终思考要做什么行动: 要使用的工具名称行动输入: 工具的输入观察: 工具的结果... (这个思考/行动/行动输入/观察可以重复多次)回答: 对原始问题的最终回答开始!问题: {input}思考: {agent_scratchpad}

在 LangChain 中,{agent_scratchpad} 是一个重要的占位符变量,用于在智能体(Agent)运行过程中临时存储和传递中间步骤的信息(比如思考过程、工具调用记录等)。它的作用类似于一个“草稿本”

create_react_agent 是 LangChain 中自定义 ReAct 智能体的底层方法。

它允许你自定义提示词(Prompt),并将工具链、推理流程等信息以变量的形式插入到提示词中。

当用 PromptTemplate 创建提示词时,LangChain 会自动把 {tools}、{tool_names} 替换为实际内容。

实现细节

ReAct框架:使用LangChain的ReAct框架,允许代理执行思考-行动-观察的循环:

  1. 思考:分析任务,确定下一步行动

  2. 行动:调用适当的工具

  3. 观察:分析工具返回的结果

  4. 重复:根据观察结果继续思考,直到任务完成

工具注册与调用:每个工具需要以特定格式注册,包括名称、描述和执行函数:

Tool(

name=tool_instance.name,

func=tool_instance.run,

description=

“工具描述…”

)

**内存与上下文:**系统使用 ConversationBufferMemory 存储对话历史,使代理能够参考之前的交互

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
  • …

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
  • …

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
  • …

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案
  • …

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

在这里插入图片描述

把通过autogen构建的AI agent接入到自己的应用程序中 同志们,我很高兴的告诉大家我们有了一个比langchain更好用的构建AI agent的工具。众所周知,langchain主要就是一堆字符串提示模板构成的,这导致,当我们的模型性能不够强大(比如说gpt3.5)时会因为上下文的干扰而产生幻觉,从而无法完成我们所需要让其完成的任务(之前想让它自己跑代码,结果加了点限定条件字符串就匹配不上了/(ㄒoㄒ)/~~)。而Autogen就没这种问题,而且Autogen内部还有一些对LLM记忆的一些优化,构建AI agent的时候简单快捷准确性高。 阅读详情

相关推荐

多智能体AI自动化渗透测试平台PentAGI部署与实战解析

自动化渗透测试是网络安全领域的重要实践,旨在通过模拟攻击来主动发现系统漏洞。其核心原理在于将安全专家的知识转化为可重复执行的检测流程,从而提升测试效率与覆盖面。随着人工智能技术的发展,特别是大语言模型的应用,自动化测试的智能化水平得到了显著提升。多智能体架构作为一种新兴的技术范式,通过模拟专家团队分工协作,将复杂的渗透测试任务分解为侦察、分析、利用等子任务,由不同专长的智能体协同完成,极大地增强了系统的适应性与可扩展性。这种架构在自动化安全评估、漏洞挖掘等场景中展现出巨大潜力。本文以PentAGI项目为例,

weixin_34198762的博客 356

智能体Agent实战:从入门到实战看着一篇就够了!!!

我自己在做研究大模型应用的时候,很多时候会直接用开源的Dify,但是api是收费,本着节约成本的原则去探索市面上的智能体平台,虽然市面上有很多智能体平台,但是东一个西一个比较分散,所以思考是不是可以开发一个平台,把对自己非常有用的智能体平台或者agent集成在系统里,并且在系统里跳转。该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

EnjoyEDU的博客 2721

【AI大模型应用开发】【LangChain系列】实战案例2:通过URL加载网页内容 - LangChain对爬虫功能的封装

本文实战 LangChain 中的爬虫封装接口,爬虫小白和有一定爬虫基础的同学都可以一看。介绍了LangChain中的爬虫接口和使用方法,同时探索了利用大模型泛化爬虫爬取内容的可能性。

同学小张的博客 2830

AI Agent之LangChain多个案例实战

AI Agent对比(1)工作流编排LangChain:线性链,适合固定流程任务(如文档问答)。LangGraph:支持循环、条件边和状态传递,适合动态调整的复杂逻辑(如多轮决策)。Coze:可视化工作流,支持嵌套和批处理,但灵活性较低。Dify:基于自然语言定义工作流,适合API集成和Prompt调优。(2)工具调用与扩展性LangChain/LangGraph:工具作为链或图的节点,支持自定义工具和重试逻辑。Coze:依赖预置插件生态,扩展需通过开放平台。

2401_84494441的博客 2008

微软开源多智能体自定义自动化工作流系统:构建企业级AI驱动的智能引擎

微软推出开源多智能体自动化引擎解决方案,基于Azure云平台构建,通过"指挥官+助手"架构实现智能体协作。该系统集成了Semantic Kernel、Azure OpenAI等技术,支持任务自动拆解分配、数据验证及跨领域协作。提供数据分析、业务流程管理等场景的自动化处理能力,具有模块化设计、快速部署和安全合规等特点,可显著提升企业效率并降低成本。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 451

Microsoft Agent Framework 系统性学习教程

摘要:Microsoft Agent Framework是微软推出的多智能体开发平台,支持Python与.NET跨语言开发,采用开源模式促进协作创新。其核心价值在于标准化多智能体协作机制,提供从开发到部署的全生命周期解决方案。框架采用"组件-架构-协议"三维设计,包含聊天客户端、工具集成层和状态管理层三大模块,支持企业级特性如检查点机制和分布式追踪。学习路径分为三个阶段:入门(环境搭建)、中级(工具集成)和高级(工作流编排),帮助开发者系统掌握智能代理开发技能。该框架已在KPMG等企业实

自可乐的博客 208

微软开源 AutoGen 有多强?手把手带你搞懂多智能体框架的核心特性与实战场景

微软开源 AutoGen 有多强?手把手带你搞懂多智能体框架的核心特性与实战场景

优快云_224022的博客 1581

别再调PID了!用MATLAB/Simulink给四旋翼无人机搭个ADRC控制器(附完整仿真模型)

本文详细介绍了在MATLAB/Simulink环境中为四旋翼无人机搭建ADRC控制器的完整流程,包括核心原理、Simulink建模、参数调试技巧及与PID控制的性能对比。ADRC通过扩张状态观测器(ESO)有效提升无人机在复杂扰动下的控制性能,特别适合四旋翼无人机这类强耦合系统。文章还提供了完整的仿真模型和工程实践问题解决方案。

weixin_26808439的博客 383

全链路自主构建智慧科研写作系统——融合LLM语义理解、多智能体任务协同与n8n自动化工作流构建

1.结合以上技术形成一个效果更好更智能化的AI Agent科研研究系统(包括AI Agent提供快速arxiv论文快速检索生成相关论文知识,通过AI Agent自主使用RAG等技术提高写作内容深度,多AI Agent互相沟通帮助论文从生成到修改到完善论文多步走。2.总结1、AI赋能·SCI论文从实验设计到发表全流程实践训练营2、破“卷”立新-国自然/省级基金项目撰写技巧全流程实战3、Nature级顶刊科研绘图复现4、

glldxh的博客 1149

Grey Hack v0.7.3618 保姆级教程:手把手教你用metaxploit.so写一个自动提权脚本

本文详细介绍了如何在Grey Hack v0.7.3618中使用metaxploit.so库编写自动化提权脚本。从环境准备到核心功能解析,再到漏洞利用链构建和权限提升的智能处理,手把手教你掌握游戏中的高级黑客技巧。通过多库联合利用和错误处理优化,提升脚本的效率和成功率。

weixin_42537919的博客 397

AGV避坑指南:海康控制系统与Modbus设备对接的那些‘坑’

本文深入解析海康AGV控制系统与Modbus设备对接中的常见问题及解决方案,涵盖通信协议对接、信号干扰、硬件层问题和软件优化策略。通过真实案例和实用技巧,帮助工程师规避典型陷阱,提升系统稳定性和效率。

l3m4n的博客 741

微软 Azure AI Foundry(国际版)十大重要更新

微软发布 Azure AI Foundry(国际版)十大重要更新,新模型体系扩展,智能模型系统更易选择,模型路由器降低成本,预留更多模型,API和服务器无缝衔接。

Leinwin的博客 2472

从实验室到晶圆厂:一文看懂二维半导体(如MoS2)的CVD生长与晶体管制造挑战

本文深入探讨了二维半导体(如MoS2)从实验室研究到晶圆厂量产的CVD生长与晶体管制造关键技术挑战。重点分析了晶圆级二维半导体的CVD生长工艺优化、晶体管制造的四大界面工程难题,以及掺杂与集成的产业化解决方案,为二维半导体在集成电路领域的应用提供技术参考。

weixin_42651748的博客 474

微软Build 2025大会技术亮点解析:从AI创新到Windows子系统开源

新版Coding Agent能够像人类开发者一样处理GitHub Issue、提交PR并进行代码重构,其背后依赖的Model Context Protocol(MCP)实现了外部能力与AI的深度对接。实际操作中发现,用InsCode测试微软大会提到的多智能体案例非常顺畅——只需描述业务逻辑,系统就会自动生成包含状态管理和错误处理的脚手架代码,一键部署后还能实时监控各智能体的协作状态。微软Build 2025开发者大会带来了多项突破性技术创新,其中最引人注目的当属AI与开源生态的深度整合。

BloodstoneHawk77的博客 329

别再自己写组件了!用uni-app的midButton属性5分钟搞定中间凸起TabBar(H5/小程序通用)

本文详细介绍了uni-app官方提供的midButton属性,帮助开发者5分钟内实现中间凸起的TabBar效果,无需编写繁琐的自定义组件代码。该方案兼容H5和微信小程序平台,配置简单且维护成本低,大幅提升开发效率和性能表现。

weixin_30431445的博客 348

YOLOv8改进策略【卷积层】| DEConv: 强度信息与梯度特征融合的细节增强 适用于小目标与细节目标检测任务

本文记录的是利用 模块优化 的目标检测网络模型。(Detail-Enhanced Convolution,细节增强卷积)的设计旨在,解决 目标检测网络中传统普通卷积缺乏目标细节相关先验、对小目标边缘、目标与背景边界等关键细节捕捉能力不足的问题,同时避免引入额外参数量与计算开销,以适配 对实时推理性能与检测精度的双重需求。DEA-Net: Single image dehazing based on detail-enhanced convolution and content-guided atte

Limiiiing的博客 349

大模型+量化投资:微软R&D-Agent-Quant如何实现AI驱动AI!

微软亚洲研究院推出R&D-Agent-Quant(R&D-Agent(Q))量化金融自动化框架,以"用AI驱动AI"为核心理念,通过多智能体系统实现因子挖掘与模型创新联合优化,打通"假设生成—代码实现—真实回测—反馈分析"全栈自动化闭环。实验证明该系统能提升研发效率,减少人工干预,提高因子质量和模型性能,已在GitHub开源,论文被NeurIPS 2025接收,为量化投资智能化提供新方向。

weixin_55154866的博客 1148

079、LVGL基础控件:消息框(Msgbox)

《LVGL消息框控件深度解析与避坑指南》 文章深入剖析了LVGL消息框控件的核心特性和使用技巧。消息框本质是带按钮的模态容器,而非独立窗口。作者分享了创建消息框的正确姿势、标题/内容设置方法、安全的按钮事件处理方式(避免直接调用close函数导致栈溢出),并详细介绍了模态/非模态实现、样式自定义、动态更新等实用技巧。针对常见问题如内存管理、按钮数量限制、动画效果等给出了专业建议,特别强调了消息框作为用户交互关键环节的优化重要性,建议通过异步删除、合理父对象选择等方式提升稳定性。文章包含大量实际项目经验总结,

m0_50546716的博客 153

【必看收藏】微软R&D-Agent-Quant:用AI驱动量化投资研发,大模型赋能自动化策略全流程

微软亚洲研究院推出R&D-Agent-Quant,以"用AI驱动AI"理念构建智能量化研发体系。系统包含规范、构思、实现、验证和分析五大功能单元,实现从假设生成到策略回测的全链路自动化。通过因子-模型协同优化机制,在实验中展现出效率、稳健性与收益表现的显著优势,使用因子数量减少70%以上同时提升性能。相关代码已在GitHub开源,论文被NeurIPS 2025接收,为量化投资提供了智能化新方向。

嘴巴吃糖了 1544

AI大模型探索之路-训练篇3:大语言模型全景解读

大规模语言模型(Large Language Models,LLM),也称大语言模型或大型语言模型,是一种由包含数百亿以上参数的深度神经网络构建的语言模型,通常使用自监督学习方法通过大量无标注文本进行训练。

寻道AI,探索AI无限可能! 6279

Devexpress16.2.6破解工具

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

火爆Cursor的开源平替Melty;微软开源的agent工作流AutoGen Studio 2.0;等六个开源项目

Melty是一款开源的AI代码编辑器,旨在通过全面了解用户在命令行及GitHub的操作,协助用户编写符合生产标准的代码。该平台为用户提供了方便的界面,使得即便是初学者也能直观地定义和修改智能体及其工作流程,极大地降低了AI开发的入门门槛。Kraken 是一个开源项目,主要用于提供一个灵活和易于使用的框架,旨在简化和加速开发工作流程。在GitHub上,Kraken项目吸引了许多开发者的关注和贡献,目前已有一定数量的星标和分支。:用户可以在“构建”部分创建特定任务所需的技能,并逐步构建自定义的智能代理。

haleycat的博客 3945

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

无名杀网页版:免费开源的三国杀,浏览器直接开局

想玩三国杀,又不想装客户端、不想靠内购一个个解锁武将的话,开源项目**无名杀网页版**(noname)是个更省心的选择——它是一套直接在浏览器里运行的三国杀卡牌游戏,几百名武将、几十个卡牌包、十几种游戏模式全部免费开放,源码完全公开,看也能改也能上手。 ## 🔍 它到底是个什么东西? noname 是一个 GPL-3.0 开源协议的在线三国杀复刻版,游戏逻辑、武将数据、卡牌定义全部用 Jav

gitblog_00808的博客 531

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Qlib终极指南:微软AI量化投资平台的完整解决方案

在量化投资领域,传统方法往往面临数据处理效率低下、模型单一、部署复杂等痛点。Qlib作为微软开源的AI量化投资平台,为这些挑战提供了创新性的解决方案。这个平台不仅集成了最前沿的人工智能技术,还提供了从数据准备到策略部署的完整工作流,让量化研究变得更加高效和智能。 ## 为什么选择Qlib?量化投资的AI革命 传统量化工具通常需要分析师花费大量时间在数据清洗、特征工程和模型调优上,而Qlib通过

gitblog_00813的博客 975

mootdx 完整入门指南:5 分钟让 Python 读通通达信行情与财务数据

写 A 股策略时最劝退的往往不是模型,而是数据——商业行情接口要钱,爬虫三天两头失效。mootdx 就是一个通达信数据获取的 Python 封装:在线行情、本地 .day 文件、历史财务报表,三条数据线统一封装成简单接口,结果直接是 pandas DataFrame,MIT 协议免费使用。 ## 三分钟装好,跑通第一行情代码 🚀 先说结论:一条 pip 命令加四行代码,你就能拿到第一份 K

gitblog_00274的博客 238

深入浅出:微软和IBM都在推的 Agent-Framework | LeetTalk Daily

“LeetTalk Daily”,每日科技前沿,由LeetTools AI精心筛选,为您带来最新鲜、最具洞察力的科技新闻。在当今快速发展的科技领域,人工智能(AI)正逐渐成为推动各行业创新和效率提升的重要力量。微软和IBM作为全球领先的科技公司,近期分别推出了各自的智能代理框架——微软的Magnetic-One和IBM的Bee Agent Framework。这些框架都是希望通过自动化复杂任务,提...

LinkTime_Cloud的博客 980
上一篇: Agent 进入工程时代!吴恩达详解 AI Agent 构建全流程,核心不在模型,而是任务拆解与评估机制
下一篇: Qwen团队发布长上下文Reasoning模型QwenLong-L1,超越o3-mini
Python_金钱豹
博客等级 码龄5年 1万+粉丝 2841原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值