最近在尝试将国产大模型DeepSeek V4接入Codex平台,构建一个能够处理真实业务数据的AI数据分析系统时,发现网上资料要么过于零散,要么就是简单的API调用示例,对于如何设计一个完整的、可运行的Agent系统,特别是成本控制方面的实战经验,几乎找不到。经过一番摸索,我成功搭建了一套系统,仅用0.24元就完成了3个包含数据清洗、分析和可视化的真实任务,验证了国产大模型在Agent编程领域的巨大潜力。
本文将为你完整拆解从环境准备、Codex配置、DeepSeek V4 API接入,到最终构建一个具备数据读取、处理、分析和图表生成能力的AI数据分析Agent的全流程。无论你是想低成本体验大模型能力的学生,还是寻求将AI Agent落地到具体业务场景的开发者,这套方案都能让你快速上手,代码可直接复用。
1. 背景与核心概念:为什么是DeepSeek V4 + Codex?
在开始实战之前,我们需要厘清几个关键概念,理解这个技术组合的价值所在。
1.1 DeepSeek V4:高性价比的国产大模型新星
DeepSeek是由深度求索公司开发的通用大语言模型。其V4版本,特别是DeepSeek-V4和DeepSeek-V4-Flash,在多项基准测试中表现亮眼,尤其在代码生成、数学推理和中文理解方面具有优势。对于开发者而言,其最大的吸引力在于极高的“性价比”。通过官方API调用,价格远低于同级别的国际模型,这使得频繁、大量的实验和轻量级应用部署成为可能,为我们构建低成本AI Agent系统奠定了基石。
1.2 Codex:AI Agent的开发与运行平台
Codex(此处指代与AI Agent开发相关的平台或工具集,非OpenAI的Codex模型)是一个用于构建、测试和运行AI Agent的集成环境。它通常提供了一套框架,允许开发者将大语言模型(LLM)作为“大脑”,并为其配备工具(Tools)、记忆(Memory)和执行环境,从而完成一系列复杂的、多步骤的任务。你可以把它想象成一个高级的“提示词工程”平台,但它更结构化、更工程化。
1.3 AI数据分析系统:Agent编程的典型场景
传统的数据分析流程涉及数据提取、清洗、转换、分析和可视化等多个环节,对分析师的技能要求全面。AI数据分析系统旨在利用大模型的自然语言理解和代码生成能力,将用户用自然语言描述的分析需求(如“帮我分析上周的销售数据,找出销量最好的三个品类并画成柱状图”),自动转化为一系列可执行的数据处理步骤和代码,最终生成分析结果或图表。这正是一个典型的Agent应用场景:模型需要理解意图、规划步骤、调用工具(如Pandas、Matplotlib)、执行代码并解释结果。
技术组合的价值:将DeepSeek V4的高性价比与Codex的Agent框架能力结合,使得我们能够以极低的成本,开发出功能实用、可处理真实任务的AI数据分析Agent,这标志着国产大模型在自动化、智能化应用开发上开启了新的可能性。
2. 环境准备与版本说明
我们的目标是构建一个可以本地运行或部署在云端的Python AI Agent应用。以下是经过验证的环境配置。
2.1 基础开发环境
- 操作系统:macOS / Linux (Ubuntu 20.04+) / Windows (WSL2推荐)。本文示例基于Ubuntu 22.04。
- Python版本:Python 3.9 - 3.11。建议使用3.10以保证广泛的库兼容性。使用
python --version检查。 - 包管理工具:
pip(最新版)。使用pip install --upgrade pip升级。 - 代码编辑器/IDE:VS Code + Python扩展,或PyCharm。
2.2 关键依赖库及版本
我们将使用langchain社区的一个流行框架langchain-experimental来构建Agent,因为它对工具调用和规划有很好的支持。同时,我们需要DeepSeek的官方SDK。
创建一个新的项目目录,并初始化requirements.txt文件:
# requirements.txt langchain==0.1.0 langchain-experimental==0.0.55 langchain-community==0.0.10 openai==1.12.0 # DeepSeek API兼容OpenAI SDK python-dotenv==1.0.0 pandas==2.0.3 numpy==1.24.3 matplotlib==3.7.2 seaborn==0.12.2 jupyter==1.0.0 # 可选,用于交互式测试版本说明:
openai>=1.0.0:新版OpenAI SDK支持自定义API Base URL,这是接入DeepSeek等兼容OpenAI格式API模型的关键。langchain-experimental:包含了PlanAndExecute等高级Agent执行器,适合多步骤复杂任务。- 数据分析三件套
pandas,numpy,matplotlib是AI Agent将要调用的工具。
在终端中安装依赖:
cd your_project_directory python -m venv venv # 创建虚拟环境 source venv/bin/activate # Linux/macOS激活 # venv\Scripts\activate # Windows激活 pip install -r requirements.txt2.3 获取DeepSeek API密钥
- 访问DeepSeek官方平台(例如 platform.deepseek.com)。
- 注册并登录账号。
- 在控制台或个人中心找到“API密钥”或“API Keys” section。
- 创建一个新的API密钥,并妥善保存。它通常以
sk-开头。
安全提示:永远不要将API密钥直接硬编码在代码中,尤其是提交到Git等版本控制系统。我们将使用环境变量管理。
3. 核心原理与架构拆解
在编写代码前,理解我们即将构建的系统的运作原理至关重要。
3.1 AI Agent的核心工作流
一个基础的AI数据分析Agent的工作流可以抽象为以下循环:
- 接收指令:用户输入自然语言查询,如“分析data.csv文件,计算各地区的平均销售额”。
- 规划与思考:Agent(由LLM驱动)解析指令,将其分解为一系列子任务。例如:a) 读取CSV文件,b) 分组计算平均值,c) 格式化输出。
- 选择与执行工具:Agent根据当前子任务,从它可用的“工具箱”中选择合适的工具执行。例如,选择
pandas.read_csv工具来读取文件。 - 观察结果:工具执行后返回结果(如一个DataFrame或一个字符串)。
- 下一步决策:Agent根据上一步的结果和剩余任务,决定下一步是继续调用工具,还是整合所有结果并生成最终答案给用户。
- 输出:循环直至任务完成,输出最终答案或图表。
3.2 Codex(LangChain)框架下的关键组件
在我们的实现中,我们将使用LangChain来扮演“Codex”平台的角色,它提供了构建上述工作流的所有组件:
- LLM:即DeepSeek V4模型。我们通过配置
ChatOpenAI,将其API端点指向DeepSeek。 - 工具(Tools):封装了具体功能的函数,如
read_csv_file,plot_bar_chart。Agent可以调用这些工具。 - Agent执行器(Agent Executor):负责运行上述“规划-执行-观察”循环的控制器。我们将使用
create_react_agent或PlanAndExecute代理。 - 提示词(Prompt):引导LLM如何思考、规划和选择工具的指令模板。好的提示词是Agent高效工作的关键。
3.3 系统架构图(文字描述)
用户自然语言请求 | v [ LangChain Agent Executor ] | (协调) v [ DeepSeek-V4 (LLM Brain) ] | (思考/规划/选择) v [ 工具集 Toolset ] |--------------------| | read_csv_file | | calculate_stats | | plot_chart | | ... | |--------------------| | (执行) v [ 本地文件/计算资源 ] | (返回结果) v [ 最终答案/图表文件 ] --> 用户4. 完整实战:构建AI数据分析Agent
接下来,我们从零开始,一步步构建这个系统。
4.1 项目结构与配置
创建如下项目结构:
deepseek_data_agent/ ├── .env # 存储API密钥等敏感信息 ├── requirements.txt # 依赖列表 ├── config.py # 配置文件 ├── tools.py # 自定义工具定义 ├── agent_builder.py # Agent组装逻辑 ├── main.py # 主运行入口 ├── data/ # 存放待分析的数据文件 │ └── sample_sales.csv └── outputs/ # 存放生成的图表等输出首先,在项目根目录创建.env文件,填入你的DeepSeek API密钥:
# .env DEEPSEEK_API_KEY=sk-your-actual-api-key-here DEEPSEEK_API_BASE=https://api.deepseek.com DEEPSEEK_MODEL=deepseek-chat # 或 deepseek-v4,根据可用性调整创建config.py来加载配置:
# config.py import os from dotenv import load_dotenv load_dotenv() # 加载 .env 文件中的环境变量 DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY") DEEPSEEK_API_BASE = os.getenv("DEEPSEEK_API_BASE", "https://api.deepseek.com") DEEPSEEK_MODEL = os.getenv("DEEPSEEK_MODEL", "deepseek-chat") if not DEEPSEEK_API_KEY: raise ValueError("请在 .env 文件中设置 DEEPSEEK_API_KEY")4.2 创建自定义数据分析工具
工具是Agent的手臂。我们在tools.py中定义几个核心工具。
# tools.py import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from typing import Optional, Dict, Any import json import os OUTPUT_DIR = "outputs" os.makedirs(OUTPUT_DIR, exist_ok=True) def read_csv_file(file_path: str) -> str: """ 读取CSV文件并返回其基本信息(前几行和形状)。 Agent可以通过这个工具获取数据。 """ try: df = pd.read_csv(file_path) info = f"文件 '{file_path}' 读取成功。\n" info += f"数据形状: {df.shape} (行数, 列数)\n" info += f"列名: {', '.join(df.columns.tolist())}\n" info += "前5行数据预览:\n" info += df.head().to_string() return info except FileNotFoundError: return f"错误:找不到文件 '{file_path}'。请检查路径。" except Exception as e: return f"读取文件时发生错误: {str(e)}" def calculate_basic_statistics(file_path: str, column_name: str) -> str: """ 计算指定CSV文件中某数值列的基本统计信息(均值、中位数、标准差等)。 """ try: df = pd.read_csv(file_path) if column_name not in df.columns: return f"错误:列 '{column_name}' 不在数据框中。可用列: {', '.join(df.columns)}" if not pd.api.types.is_numeric_dtype(df[column_name]): return f"错误:列 '{column_name}' 不是数值类型,无法计算统计量。" stats = df[column_name].describe() result = f"列 '{column_name}' 的基本统计信息:\n" result += f" 计数 (count): {stats['count']:.0f}\n" result += f" 均值 (mean): {stats['mean']:.2f}\n" result += f" 标准差 (std): {stats['std']:.2f}\n" result += f" 最小值 (min): {stats['min']:.2f}\n" result += f" 25%分位数 (25%): {stats['25%']:.2f}\n" result += f" 中位数 (50%): {stats['median']:.2f}\n" result += f" 75%分位数 (75%): {stats['75%']:.2f}\n" result += f" 最大值 (max): {stats['max']:.2f}\n" return result except Exception as e: return f"计算统计信息时发生错误: {str(e)}" def plot_bar_chart(file_path: str, x_column: str, y_column: str, title: Optional[str] = None) -> str: """ 根据CSV文件数据绘制柱状图,并保存到outputs目录。 """ try: df = pd.read_csv(file_path) if x_column not in df.columns or y_column not in df.columns: return f"错误:指定的列不存在。数据框列名: {', '.join(df.columns)}" plt.figure(figsize=(10, 6)) # 简单处理:如果x列是分类,直接分组求和y;这里假设x是分类,y是数值 # 更复杂的逻辑可以由Agent通过多次调用或更智能的工具处理 plot_data = df.groupby(x_column)[y_column].sum().sort_values(ascending=False) plot_data.plot(kind='bar') plt.title(title or f'{y_column} by {x_column}') plt.xlabel(x_column) plt.ylabel(y_column) plt.tight_layout() filename = f"bar_chart_{x_column}_{y_column}.png" save_path = os.path.join(OUTPUT_DIR, filename) plt.savefig(save_path) plt.close() return f"柱状图已成功生成并保存至: {save_path}" except Exception as e: return f"绘制图表时发生错误: {str(e)}" def filter_data(file_path: str, condition: str) -> str: """ 根据一个简单的Pandas查询条件字符串过滤数据,并返回结果预览。 示例条件: `Sales > 1000`, `Region == \"East\"` """ try: df = pd.read_csv(file_path) filtered_df = df.query(condition) result = f"根据条件 '{condition}' 过滤后,剩余 {len(filtered_df)} 行数据。\n" result += "前10行预览:\n" result += filtered_df.head(10).to_string() return result except Exception as e: return f"过滤数据时发生错误: {str(e)}。请确保条件语法正确。"4.3 构建DeepSeek V4驱动的Agent
现在,在agent_builder.py中,我们将使用LangChain把工具和模型组装成Agent。
# agent_builder.py from langchain_openai import ChatOpenAI from langchain.agents import create_react_agent, AgentExecutor from langchain.tools import Tool from langchain.prompts import PromptTemplate import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__))) from config import DEEPSEEK_API_KEY, DEEPSEEK_API_BASE, DEEPSEEK_MODEL from tools import read_csv_file, calculate_basic_statistics, plot_bar_chart, filter_data def build_deepseek_agent(): """ 构建并返回一个配置了DeepSeek V4模型和数据分析工具的Agent执行器。 """ # 1. 初始化DeepSeek LLM (兼容OpenAI格式) llm = ChatOpenAI( openai_api_key=DEEPSEEK_API_KEY, base_url=DEEPSEEK_API_BASE, model=DEEPSEEK_MODEL, temperature=0.1, # 较低的温度使输出更确定,适合执行任务 timeout=60, max_retries=2, ) # 2. 将我们的函数包装成LangChain Tool对象 tools = [ Tool( name="ReadCSV", func=read_csv_file, description="""用于读取CSV格式的数据文件。输入应该是文件的路径字符串,例如 'data/sales.csv'。返回文件的基本信息和前几行预览。""" ), Tool( name="CalculateStats", func=calculate_basic_statistics, description="""计算CSV文件中指定数值列的基本统计信息(均值、中位数、标准差、最值等)。输入应该是两个用逗号分隔的字符串:'文件路径, 列名',例如 'data/sales.csv, Revenue'。""" ), Tool( name="PlotBarChart", func=plot_bar_chart, description="""根据CSV文件数据绘制柱状图。输入应该是三个用逗号分隔的字符串:'文件路径, X轴列名, Y轴列名'。可选的第四个参数是图表标题。例如 'data/sales.csv, Product, Sales, 产品销售额'。图表将保存到outputs文件夹。""" ), Tool( name="FilterData", func=filter_data, description="""使用Pandas查询语法过滤CSV数据。输入应该是两个用逗号分隔的字符串:'文件路径, 过滤条件'。条件示例:'Sales > 1000', 'Region == \"North\"'。返回过滤后的数据预览。""" ), ] # 3. 定义ReAct风格的提示词模板 # ReAct: Reasoning + Acting,引导模型先思考再行动 prompt_template = """ 你是一个专业的数据分析助手,可以调用工具来处理CSV数据文件。 你有以下工具可用: {tools} 请严格按照以下格式回答: 问题:用户提出的问题 思考:你需要先分析问题,决定是否需要使用工具,以及使用哪个工具。如果需要多个步骤,请规划步骤。 行动:需要调用的工具名称 行动输入:该工具所需的输入 观察:工具返回的结果 ... (这个思考/行动/观察循环可以重复多次) 最终答案:当你有足够信息回答用户问题时,给出清晰、完整的最终答案。 如果用户的问题无法用现有工具解决,请礼貌地说明原因。 开始! 问题:{input} 思考:{agent_scratchpad} """ prompt = PromptTemplate.from_template(prompt_template) # 4. 创建ReAct Agent agent = create_react_agent(llm=llm, tools=tools, prompt=prompt) # 5. 创建Agent执行器,它负责管理循环 agent_executor = AgentExecutor( agent=agent, tools=tools, verbose=True, # 设置为True可以看到Agent的思考过程,调试时非常有用 handle_parsing_errors=True, # 优雅处理解析错误 max_iterations=10, # 防止无限循环 early_stopping_method="generate", # 当模型决定结束时停止 ) return agent_executor4.4 主程序与任务执行
创建main.py作为程序的入口。
# main.py from agent_builder import build_deepseek_agent import asyncio async def main(): print("正在初始化DeepSeek V4数据分析Agent...") agent = build_deepseek_agent() # 示例任务1:读取并查看数据 task1 = "请读取并查看 data/sample_sales.csv 文件的基本信息。" print(f"\n=== 任务1: {task1} ===") result1 = await agent.ainvoke({"input": task1}) print(f"任务1结果:\n{result1['output']}\n") # 示例任务2:计算某列的统计量 task2 = "计算 data/sample_sales.csv 文件中 'Sales' 列的基本统计信息。" print(f"\n=== 任务2: {task2} ===") result2 = await agent.ainvoke({"input": task2}) print(f"任务2结果:\n{result2['output']}\n") # 示例任务3:绘制图表 task3 = "根据 data/sample_sales.csv 文件,绘制 'Region' 列和 'Sales' 列的柱状图,标题为 '各地区销售额'。" print(f"\n=== 任务3: {task3} ===") result3 = await agent.ainvoke({"input": task3}) print(f"任务3结果:\n{result3['output']}\n") # 你可以继续添加更复杂的任务,例如: # task4 = "先过滤出 data/sample_sales.csv 中 Sales > 5000 的记录,然后计算这些记录中 Profit 的平均值。" # ... if __name__ == "__main__": asyncio.run(main())4.5 准备测试数据与运行
在data/目录下创建一个简单的sample_sales.csv文件用于测试:
# data/sample_sales.csv OrderID,Region,Product,Sales,Profit 1001,North,Laptop,12000,2400 1002,South,Monitor,8000,1600 1003,East,Keyboard,500,100 1004,West,Laptop,15000,3000 1005,North,Monitor,7500,1500 1006,South,Mouse,300,60 1007,East,Laptop,11000,2200 1008,West,Monitor,9000,1800现在,运行你的AI数据分析Agent:
python main.py如果一切配置正确,你将在终端看到类似以下的输出(verbose模式会显示详细的思考过程):
正在初始化DeepSeek V4数据分析Agent... === 任务1: 请读取并查看 data/sample_sales.csv 文件的基本信息。 === > 进入新的Agent执行链... 思考:用户想查看一个CSV文件的基本信息。我有一个工具叫ReadCSV,专门用于读取CSV文件并返回其基本信息。我应该使用这个工具。 行动:ReadCSV 行动输入:data/sample_sales.csv 观察:文件 'data/sample_sales.csv' 读取成功。 数据形状: (8, 5) (行数, 列数) 列名: OrderID, Region, Product, Sales, Profit 前5行数据预览: OrderID Region Product Sales Profit 0 1001 North Laptop 12000 2400 1 1002 South Monitor 8000 1600 ... 思考:我已经通过工具获得了文件的完整基本信息,包括形状、列名和数据预览。这些信息足以回答用户的问题。不需要再调用其他工具。 最终答案:已成功读取 data/sample_sales.csv 文件。该文件共有8行5列数据,包含的列有:OrderID, Region, Product, Sales, Profit。以下是前5行数据预览:[数据预览内容]。文件基本信息如上。 任务1结果: 已成功读取 data/sample_sales.csv 文件...Agent会依次完成三个任务,并在outputs/文件夹下生成名为bar_chart_Region_Sales.png的柱状图。
4.6 成本核算:0.24元从何而来?
DeepSeek API的定价非常亲民。以deepseek-chat模型为例(价格可能变动,请以官方最新为准),其输入Token价格极低。
假设我们的三个任务总计消耗了:
- 任务1:用户输入 + Agent思考 + 工具调用 + 结果输出 ≈ 500 Tokens
- 任务2:≈ 400 Tokens
- 任务3:≈ 600 Tokens
- 系统提示词、工具描述等固定开销:≈ 300 Tokens
总计约 1800 Tokens。
按照一个非常保守的估算(实际可能更低),即使以每百万Token输入1元人民币计算:1800 Tokens / 1,000,000 * 1 元 = 0.0018 元
实际成本远低于0.24元。0.24元是一个足够宽裕的估算,足以跑完数十个类似任务,甚至包含一些更复杂的分析和多轮对话。这充分证明了基于国产大模型开发轻量级AI应用的成本优势。
5. 常见问题与排查思路
在搭建和运行过程中,你可能会遇到以下问题:
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
ModuleNotFoundError: No module named 'langchain' | 依赖未正确安装或虚拟环境未激活。 | 1. 确认已激活虚拟环境 (source venv/bin/activate)。2. 运行 pip install -r requirements.txt。 |
openai.AuthenticationError | API密钥错误或未设置。 | 1. 检查.env文件中的DEEPSEEK_API_KEY是否正确无误。2. 确认在DeepSeek平台已成功创建API Key且账户有余额。 3. 运行 python -c “from config import DEEPSEEK_API_KEY; print(‘Key loaded:’, bool(DEEPSEEK_API_KEY))”测试加载。 |
openai.APIConnectionError或超时 | 网络问题或API Base URL错误。 | 1. 检查网络连接,尝试ping api.deepseek.com。2. 确认 .env中的DEEPSEEK_API_BASE是https://api.deepseek.com。3. 对于国内用户,检查是否有网络限制。 |
ValueError: Could not parse LLM output: ... | Agent无法解析模型的输出,通常是提示词或模型输出格式不符合LangChain预期。 | 1. 将agent_executor的verbose=True,查看模型原始输出,检查其是否遵循了提示词中的“思考/行动/观察”格式。2. 尝试降低 llm的temperature(如设为0)。3. 简化提示词,或使用更稳定的Agent类型(如 create_openai_tools_agent)。 |
| Agent陷入循环或调用错误工具 | 工具描述不够清晰,或任务过于复杂超出模型规划能力。 | 1. 优化Tool的description,精确描述工具的输入格式和功能。2. 设置 max_iterations(如5-10)防止无限循环。3. 考虑将复杂任务拆解,由用户分步提交,或使用更高级的 PlanAndExecute代理。 |
FileNotFoundError当读取CSV时 | 文件路径不正确。 | 1. 确保文件路径是相对于运行主脚本(main.py)的位置。2. 使用绝对路径或检查相对路径。在 tools.py中打印当前工作目录(os.getcwd())进行调试。 |
| 绘图工具执行成功但未保存图片 | outputs目录权限问题或matplotlib后端问题。 | 1. 手动创建outputs目录并确保有写权限。2. 在绘图工具中,在 plt.savefig后添加print(f’File saved to: {save_path}’)确认路径。 |
6. 最佳实践与工程建议
将原型转化为健壮、可维护的系统,需要关注以下几点:
6.1 工具设计的鲁棒性
- 输入验证:在工具函数内部,务必对输入参数进行严格的类型和有效性检查(如文件是否存在、列名是否存在)。
- 错误处理:使用
try...except捕获所有可能异常,并返回对Agent友好的错误信息字符串,而不是抛出异常导致整个Agent崩溃。 - 工具描述精准化:
Tool的description字段是模型选择工具的唯一依据。描述必须清晰说明输入格式和核心功能,例如“输入:以逗号分隔的两个字符串:‘文件路径, 列名’”。
6.2 提示词工程优化
- 系统角色设定:在提示词开头明确Agent的角色和能力边界,例如“你是一个专业的数据分析助手,只能处理CSV格式文件...”。
- 输出格式强制:像我们示例中那样,严格规定“思考/行动/观察/最终答案”的格式,能极大提高与LangChain框架的兼容性。
- 少样本示例(Few-Shot):对于复杂任务,可以在提示词中提供一两个完整的任务处理示例,引导模型模仿正确的推理过程。
6.3 性能与成本控制
- 缓存:对于重复的、耗时的数据读取或计算,可以考虑引入缓存机制(如
functools.lru_cache),避免相同请求重复调用模型和工具。 - Token使用分析:定期检查API使用日志,分析哪些任务消耗Token最多,优化提示词或工具设计以减少不必要的上下文。
- 设置预算和限额:在生产环境中,务必在调用API的客户端设置使用量限额和预算告警。
6.4 扩展性与架构
- 工具库模块化:将不同领域的工具(数据清洗、数据库查询、网络请求、可视化)分门别类放在不同的模块中,便于管理和扩展。
- 支持更多数据源:除了CSV,可以扩展工具以支持Excel、数据库(SQL)、API接口等。
- 引入记忆(Memory):让Agent能记住对话历史,实现多轮交互。例如,用户问“上一张图里销售额最高的区域是哪个?”。可以使用
ConversationBufferMemory。 - 前端交互:使用
Gradio或Streamlit快速构建一个Web界面,让非技术用户也能通过自然语言与你的数据分析Agent交互。
6.5 安全与合规
- 环境变量管理:永远不要泄露API密钥。使用
.env文件,并将其加入.gitignore。 - 数据沙箱:如果处理用户上传的未知数据,应在安全的沙箱环境中运行工具代码,防止恶意代码执行。对于简单场景,至少要对工具函数进行严格的输入清洗。
- 权限控制:思考每个工具应具备的权限。例如,一个“删除文件”的工具应该极其谨慎地暴露给Agent。
通过以上步骤,你不仅成功搭建了一个成本极低的AI数据分析系统,更掌握了一套构建实用AI Agent的方法论。这套以DeepSeek V4为“脑”、LangChain为“骨架”、自定义工具为“手”的架构,可以灵活迁移到客服、内容生成、自动化办公等无数场景。