随着人工智能技术的迅猛发展,开发具备自主调用工具和处理复杂任务能力的智能体(Agent)已成为AI应用开发的重要方向。本文将基于LangChain框架,系统讲解如何将自定义功能封装为工具,循序渐进地构建基础智能体,帮助开发者掌握LangChain AI Agent开发的核心思路与关键操作流程,为后续将Agent能力转化为LangChain工具组件奠定基础。

什么是 AgentSkills?

在 LangChain 框架中,AgentSkills 是指将各种实用能力(如网络搜索、表格理解、代码执行等)封装为标准工具,然后集成到 Agent 中。虽然 LangChain 本身没有直接提供名为 AgentSkills 的模块,但我们可以手动实现这些技能,将其转化为 LangChain 兼容的工具组件。

核心思路:将 AgentSkills 定义的核心能力在 LangChain 中实现为可调用的工具函数,由 Agent 根据用户问题自主决策和调度。

实战案例:构建表格理解技能

本文将以"财务数据分析"为例,演示如何实现一个 Table Understanding 技能。假设我们需要让 Agent 能够读取公司的财务数据并回答相关问题。

第一步:环境准备

首先安装必要的依赖包:

pip install langchain pandas openai tabulate

如果在使用过程中遇到导入错误,可以尝试升级到最新版本:

pip install -U langchain langchain-openai langchain-core langchain-community

第二步:导入依赖包

import pandas as pd
from langchain_classic.agents import create_tool_calling_agent, tool, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

第三步:定义工具函数

这是整个流程的核心环节。我们可以编写多个工具函数组成工具库,供Agent调用。这种方式实现了"一次开发、多次复用"的目标,能够快速构建Agent。本文将以获取公司财务数据的简单案例为例进行说明。

重要提示:函数的文档字符串(docstring)非常重要!AI 会根据函数的描述来判断是否调用该工具,因此务必清晰地描述函数的功能、参数和返回值。

def get_describe(loc):
    """
    查询公司的财务数据情况函数
    :param loc: 必要参数,字符串类型,用于表示查询公司的财务数据
    :return: 公司的财务数据
    """
    data = {
        '年份': [2023, 2023, 2023, 2023, 2024, 2024, 2024, 2024],
        '季度': ['Q1', 'Q2', 'Q3', 'Q4', 'Q1', 'Q2', 'Q3', 'Q4'],
        '营业收入_万元': [1200, 1350, 1500, 1600, 1300, 1420, 1580, 1700],
        '营业成本_万元': [800, 890, 950, 1020, 860, 940, 1000, 1080],
        '毛利润_万元': [400, 460, 550, 580, 440, 480, 580, 620],
        '毛利率_%': [33.3, 34.1, 36.7, 36.3, 33.8, 33.8, 36.7, 36.5],
        '销售费用_万元': [100, 110, 120, 130, 105, 115, 125, 135],
        '管理费用_万元': [60, 65, 70, 75, 62, 68, 72, 78],
        '净利润_万元': [200, 230, 280, 300, 210, 240, 290, 310],
        '净利润率_%': [16.7, 17.0, 18.7, 18.8, 16.2, 16.9, 18.4, 18.2],
        '员工人数': [120, 125, 130, 135, 138, 142, 148, 152],
        '新增客户数': [850, 920, 980, 1050, 900, 960, 1020, 1100],
        '客户留存率_%': [88.5, 89.2, 90.1, 91.0, 88.8, 89.5, 90.3, 91.2]
    }
    
    describe = pd.DataFrame(data)
    return describe

第四步:构建提示词模板

提示词模板是 Agent 工作的基础,它定义了 Agent 的角色和行为模式。

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是财务专家,请根据用户的问题,给出相应的财务分析结果"),
    ("human", "{input}"),
    ("placeholder", "{agent_scratchpad}")  # 此处语法固定,不可修改
])

注意{agent_scratchpad} 是 Agent 的工作记忆区,用于存储中间推理过程,这个占位符的写法是固定的。

第五步:配置大语言模型

model = ChatOpenAI(
    model="kimi-k2-turbo-preview",
    api_key="your_api_key_here",  # 请替换为你的 API Key
    base_url="https://api.moonshot.cn/v1",
    temperature=0.0  # 设置为 0 以获得更确定性的输出
)

第六步:创建并运行 Agent

现在,我们将所有组件整合在一起,创建一个完整的 Agent 系统。

# 定义工具列表
tools = [get_describe]

# 使用 create_tool_calling_agent 创建代理
agent = create_tool_calling_agent(model, tools, prompt)

# 使用 AgentExecutor 运行 Agent
agent_executor = AgentExecutor(
    agent=agent, 
    tools=tools, 
    verbose=True  # 设置为 True 可以查看执行细节
)

# 执行查询
response = agent_executor.invoke({"input": "公司的财务经营情况如何"})

print(response)

执行流程解析

当你运行上述代码时,Agent 会经历以下步骤:

  1. 理解问题:Agent 接收用户的问题"公司的财务经营情况如何"
  2. 决策工具:Agent 分析问题后,决定调用 get_describe 工具获取财务数据
  3. 调用工具:执行工具函数,获取 DataFrame 格式的财务数据
  4. 分析数据:Agent 基于获取的数据进行财务分析
  5. 生成回答:将分析结果以自然语言形式返回给用户

关键要点总结

  1. 工具函数文档至关重要:清晰的函数说明能帮助 Agent 正确判断何时使用该工具
  2. 提示词模板的重要性:好的系统提示能让 Agent 更好地理解自己的角色定位
  3. Verbose 参数:在开发阶段建议设置为 True,可以清楚看到 Agent 的思考过程

扩展思路

基于本文的基础框架,你可以进一步扩展更多技能:

  • 网络搜索技能:集成搜索 API,让 Agent 能够获取实时信息
  • 代码执行技能:允许 Agent 编写和执行 Python 代码进行复杂计算
  • 文档处理技能:支持读取 PDF、Word 等多种格式的文档
  • 数据可视化技能:生成图表,让分析结果更直观

完整示例代码

import pandas as pd
from langchain_classic.agents import create_tool_calling_agent, tool, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

# 定义工具函数
def get_describe(loc):
    """
    查询公司的财务数据情况函数
    :param loc: 必要参数,字符串类型,用于表示查询公司的财务数据
    :return: 公司的财务数据
    """
    data = {
        '年份': [2023, 2023, 2023, 2023, 2024, 2024, 2024, 2024],
        '季度': ['Q1', 'Q2', 'Q3', 'Q4', 'Q1', 'Q2', 'Q3', 'Q4'],
        '营业收入_万元': [1200, 1350, 1500, 1600, 1300, 1420, 1580, 1700],
        '营业成本_万元': [800, 890, 950, 1020, 860, 940, 1000, 1080],
        '毛利润_万元': [400, 460, 550, 580, 440, 480, 580, 620],
        '毛利率_%': [33.3, 34.1, 36.7, 36.3, 33.8, 33.8, 36.7, 36.5],
        '销售费用_万元': [100, 110, 120, 130, 105, 115, 125, 135],
        '管理费用_万元': [60, 65, 70, 75, 62, 68, 72, 78],
        '净利润_万元': [200, 230, 280, 300, 210, 240, 290, 310],
        '净利润率_%': [16.7, 17.0, 18.7, 18.8, 16.2, 16.9, 18.4, 18.2],
        '员工人数': [120, 125, 130, 135, 138, 142, 148, 152],
        '新增客户数': [850, 920, 980, 1050, 900, 960, 1020, 1100],
        '客户留存率_%': [88.5, 89.2, 90.1, 91.0, 88.8, 89.5, 90.3, 91.2]
    }

    describe = pd.DataFrame(data)
    return describe
# 提示词模板
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是财务专家,请根据用户的问题,给出相应的财务分析结果"),
    ("human", "{input}"),
    ("placeholder", "{agent_scratchpad}")  # 此处语法固定,不可修改
])
#  配置模型
model = ChatOpenAI(
    model="kimi-k2-turbo-preview",
    api_key="your_api_key_here",  # 请替换为你的 API Key
    base_url="https://api.moonshot.cn/v1",
    temperature=0.0  # 设置为 0 以获得更确定性的输出
)
# 执行Agent
# 定义工具列表
tools = [get_describe]

# 使用 create_tool_calling_agent 创建代理
agent = create_tool_calling_agent(model, tools, prompt)

# 使用 AgentExecutor 运行 Agent
agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    verbose=True  # 设置为 True 可以查看执行细节
)

# 执行查询
response = agent_executor.invoke({"input": "公司的财务经营情况如何"})

结语

通过 LangChain 框架构建 Agent,我们可以轻松地将各种能力模块化、工具化,最终组装成一个强大的智能助手。希望本文能为你开启 Agent 开发之旅提供一个良好的起点。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐