侧边栏壁纸
  • 累计撰写 16 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

LangChain学习笔记(三)- Agent

NewBoy
2025-03-19 / 0 评论 / 0 点赞 / 13 阅读 / 0 字

LangChain Agent 学习笔记

目录

  1. 什么是 Agent?
  2. Agent 的核心组件
  3. 如何使用 Agent
  4. 自定义 Tools
  5. 多轮对话与 Memory

什么是 Agent?

Agent 是 LangChain 中的一个核心组件,它能够根据用户的输入动态选择工具(Tools)或步骤来完成任务。与 Chain 不同,Agent 的流程是动态的,而不是固定的。Agent 可以根据上下文选择最合适的工具,适用于复杂的任务场景。


Agent 的核心组件

  1. Tools

    • 用于执行特定任务的函数或 API。
    • 例如:搜索工具、计算工具、数据库查询工具。
  2. Memory

    • 用于存储和检索对话历史。
    • 例如:ConversationBufferMemoryConversationSummaryMemory
  3. Prompts

    • 用于生成语言模型输入的模板。
    • 例如:ChatPromptTemplate
  4. LLM(大语言模型)

    • 提供语言理解和生成能力。
    • 例如:OpenAI、DeepSeek。

如何使用 Agent

初始化 Agent

以下是一个初始化 Agent 的示例代码:

"""
lesson_4.py 使用 Agent 进行对话,并调用search Tool

本文件演示如何使用 LangChain 的 Agent 框架,通过调用自定义的搜索工具来完成用户请求。
"""

import dotenv
from langchain.agents import Tool, initialize_agent, AgentType

from util.llm_factory import LLMFactory

# 加载环境变量
dotenv.load_dotenv()


def search_api(query: str) -> str:
    """
    模拟搜索API,返回格式化后的搜索结果

    Args:
        query (str): 用户输入的搜索关键词

    Returns:
        str: 格式化后的搜索结果字符串
    """
    return f"搜索结果:「{query}」"


# 定义可用工具列表
tools = [
    Tool(
        name="Search",  # 工具名称
        description="搜索的工具",  # 工具描述,用于Agent选择工具
        func=search_api,  # 工具对应的执行函数
    )
]

# 初始化LLM模型
llm = LLMFactory.create_llm(llm_type="deepseek")

# 初始化Agent
agent = initialize_agent(
    tools,  # 可用工具列表
    llm,  # 语言模型
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,  # 使用零样本推理的Agent类型
    verbose=True,  # 开启详细输出模式,方便调试
)

# 运行Agent,处理用户请求
result = agent.run("帮我搜索一下关于python的资料")

# 输出结果
print(result)

运行 Agent

运行 Agent 并处理用户输入:

> Entering new AgentExecutor chain...
我需要搜索关于Python的资料,以便提供相关信息。  
Action: Search  
Action Input: Python programming language resources  
Observation: 搜索结果:「Python programming language resources」
Thought:Thought: 我已经获取了关于Python编程语言的资源信息,现在可以回答用户的问题。  
Final Answer: Python是一种广泛使用的高级编程语言,以其简洁易读的语法和强大的功能而闻名。它适用于多种应用场景,包括Web开发、数据分析、人工智能、科学计算等。你可以通过官方文档(https://www.python.org/)、在线教程(如Codecademy、Coursera等)以及书籍(如《Python编程:从入门到实践》)

> Finished chain.
Python是一种广泛使用的高级编程语言,以其简洁易读的语法和强大的功能而闻名。它适用于多种应用场景,包括Web开发、数据分析、人工智能、科学计算等。你可以通过官方文档(https://www.python.org/)、在线教程(如Codecademy、Coursera等)以及书籍(如《Python编程:从入门到实践》)

自定义 Tools

Agent 的核心功能之一是调用 Tools。你可以根据需要创建自定义 Tools。

示例:计算器工具

from langchain.tools import BaseTool

class CalculatorTool(BaseTool):
    name: str = "calculator"
    description: str = "计算器"

    def _run(self, expression: str) -> str:
        try:
            result = eval(expression)
            return f"计算结果:{result}"
        except Exception as e:
            return f"计算失败:{e}"

集成自定义 Tools

将自定义 Tools 集成到 Agent 中:

tools = [CalculatorTool()]
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

多轮对话与 Memory

为了实现多轮对话,Agent 需要使用 Memory 来存储和检索对话历史。

示例:使用 ConversationBufferMemory

from langchain.memory import ConversationBufferMemory

# 初始化 Memory
memory = ConversationBufferMemory(memory_key="chat_history")

# 初始化带 Memory 的 Agent
agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,
    verbose=True,
    memory=memory,
    handle_parsing_errors=True,
)

运行多轮对话

result = agent.run("计算 2 + 2")
print(result)

result = agent.run("上面计算的结果,再乘以2的结果。")
print(result)

执行结果

> Entering new AgentExecutor chain...

Thought: Do I need to use a tool? Yes
Action: calculator
Action Input: 2 + 2
Observation: 计算结果:4
Thought:```
Thought: Do I need to use a tool? No
AI: 2 + 2 的计算结果是 4。


> Finished chain.
2 + 2 的计算结果是 4。

Entering new AgentExecutor chain...

Thought: Do I need to use a tool? Yes
Action: calculator
Action Input: 4 * 2
Observation: 计算结果:8
Thought:Do I need to use a tool? No  
AI: 上面计算的结果是 4,再乘以 2 的结果是 8。

> Finished chain.
上面计算的结果是 4,再乘以 2 的结果是 8。

总结

通过本笔记,我们学习了如何使用 LangChain 的 Agent 完成以下任务:

  • 初始化并运行 Agent。
  • 自定义 Tools 并集成到 Agent 中。
  • 使用 Memory 实现多轮对话。

Agent 是 LangChain 中非常强大的组件,适用于复杂的任务场景。通过模块化设计和性能优化,可以构建高效、稳定的企业级 Agent。

0

评论区