LangChain智能体开发:从零构建Agent的简单示例
本文基于LangChain框架,详细介绍了如何开发具备表格理解能力的AI智能体(Agent)。主要内容包括:1) 通过定义工具函数封装财务数据分析能力;2) 构建提示词模板明确Agent角色;3) 配置大语言模型并整合各组件;4) 实现Agent自动调用工具完成财务分析任务。文章强调工具函数文档和提示词设计的关键作用,并提供了完整的示例代码。该框架可扩展至网络搜索、代码执行等多种技能开发,为构建复
随着人工智能技术的迅猛发展,开发具备自主调用工具和处理复杂任务能力的智能体(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 会经历以下步骤:
- 理解问题:Agent 接收用户的问题"公司的财务经营情况如何"
- 决策工具:Agent 分析问题后,决定调用
get_describe工具获取财务数据 - 调用工具:执行工具函数,获取 DataFrame 格式的财务数据
- 分析数据:Agent 基于获取的数据进行财务分析
- 生成回答:将分析结果以自然语言形式返回给用户
关键要点总结
- 工具函数文档至关重要:清晰的函数说明能帮助 Agent 正确判断何时使用该工具
- 提示词模板的重要性:好的系统提示能让 Agent 更好地理解自己的角色定位
- 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 开发之旅提供一个良好的起点。
更多推荐



所有评论(0)