用 DeepSeek Harness 手搓一个自己的 Agent

1. 引言

大模型应用开发中,Agent 是当前最热门的落地形态之一。很多人以为 Agent 必须依赖 LangChain、AutoGen 这类重量级框架,其实只要掌握核心思路,用 DeepSeek Harness 这样轻量的工具,也能手搓出一个可用的 Agent。本文从零开始,带你一步步搭建属于自己的 Agent。

2. 什么是 DeepSeek Harness

DeepSeek Harness 是一个面向大模型应用的轻量级编排工具,它把「模型调用、工具注册、任务循环」这几个 Agent 核心环节封装成简洁的接口,让开发者可以专注于业务逻辑,而不是重复造轮子。

它的核心设计理念是「约定优于配置」:你只需要定义好工具函数和提示词,Harness 会自动完成模型调用、结果解析和循环控制。

3. 环境准备

在开始之前,需要先安装依赖并准备好 API Key。

bash 复制代码
pip install deepseek-harness

安装完成后,在环境变量中配置你的 DeepSeek API Key:

bash 复制代码
export DEEPSEEK_API_KEY="sk-你的密钥"

4. 核心概念

在动手写代码之前,先理解 Harness 的三个核心概念:

  • 工具(Tool):Agent 可以调用的外部能力,比如搜索、计算、读写文件。
  • 任务循环(Loop):Agent 反复执行「思考---调用工具---观察结果」的过程,直到完成任务。
  • 提示词模板(Prompt Template):定义 Agent 的角色、目标和行为约束。

5. 手搓一个最小 Agent

下面我们实现一个最简单的 Agent:它能根据用户的问题,决定是否调用「当前时间查询」工具,并给出回答。

python 复制代码
from deepseek_harness import Agent, Tool
from datetime import datetime
1. 定义一个工具
def get_current_time() -> str:
"""返回当前时间"""
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
time_tool = Tool(
name="get_current_time",
description="获取当前日期和时间",
func=get_current_time
)
2. 创建 Agent
agent = Agent(
model="deepseek-chat",
tools=[time_tool],
system_prompt="你是一个智能助手,当用户询问时间时,调用 get_current_time 工具获取答案。"
)
3. 运行
result = agent.run("现在几点了?")
print(result)

运行这段代码,Agent 会自动识别用户意图,调用时间工具,并组织语言返回结果。

6. 让 Agent 学会多步推理

真实场景中,Agent 往往需要多步推理。比如「帮我查一下北京和上海的时差,并告诉我现在上海几点」。这需要 Agent 连续调用多个工具。

python 复制代码
from deepseek_harness import Agent, Tool
def get_city_time(city: str) -> str:
"""获取指定城市的当前时间"""
# 这里简化处理,实际可接入时区 API
timezones = {"北京": "Asia/Shanghai", "上海": "Asia/Shanghai", "东京": "Asia/Tokyo"}
tz = timezones.get(city, "Asia/Shanghai")
from zoneinfo import ZoneInfo
from datetime import datetime
return datetime.now(ZoneInfo(tz)).strftime("%Y-%m-%d %H:%M:%S")
agent = Agent(
model="deepseek-chat",
tools=[Tool(name="get_city_time", description="获取指定城市当前时间", func=get_city_time)],
system_prompt="你是时间助手,用户询问任何城市时间时,请调用工具获取。"
)
result = agent.run("现在东京几点了?和北京差几个小时?")
print(result)

Harness 的任务循环会自动处理多步调用:先查东京时间,再查北京时间,最后对比输出。

7. 接入自定义业务工具

实际项目中,你往往需要接入自己的业务系统。比如让 Agent 查询订单状态:

python 复制代码
def query_order(order_id: str) -> str:
    """根据订单号查询订单状态"""
    # 这里替换为真实的数据库或 API 调用
    mock_db = {"A1001": "已发货", "A1002": "待支付"}
    return mock_db.get(order_id, "订单不存在")
agent = Agent(
model="deepseek-chat",
tools=[Tool(name="query_order", description="查询订单状态", func=query_order)],
system_prompt="你是电商客服助手,用户提供订单号时,调用 query_order 查询状态并友好回复。"
)
print(agent.run("帮我查一下订单 A1001 到哪了?"))

8. 常见问题与优化建议

  • 工具描述要写清楚:模型靠描述决定是否调用工具,描述越准确,调用越可靠。
  • 控制循环次数:给 Agent 设置最大迭代次数,避免死循环。
  • 错误处理:工具内部要捕获异常,返回友好错误信息,让 Agent 能继续尝试。
  • 日志观察:开启 Harness 的日志模式,观察每一步的思考和工具调用,便于调试。

9. 总结

通过 DeepSeek Harness,我们只用了不到 50 行代码就实现了一个具备工具调用能力的 Agent。核心要点就三个:定义工具、配置提示词、交给 Harness 跑循环。掌握了这套思路,你完全可以在此基础上扩展出搜索、写作、数据分析等更复杂的 Agent 应用。

相关推荐
名字还没想好☜1 小时前
Spring @EventListener 事件驱动解耦实战:同步转异步、事务绑定与顺序控制
java·数据库·后端·python·spring
del1 小时前
第十周技术博客
数据库
1314lay_10071 小时前
C#调用Sql Server存储过程,并且使用传入表结构
数据库·经验分享·笔记·sqlserver·c#
anxiao_m1 小时前
2026大文件传输软件推荐,从速度安全多维度客观测评
数据库·文件传输·传输
IT大白鼠1 小时前
MySQL 分布式集群系列 · 第七篇——生产调优实战:NDB 性能、内存、高可用全方位优化
数据库·分布式·mysql
IvorySQL2 小时前
打造下一代 AI Agent 的统一多模智能数据底座——PostgreSQL 与 AI 的融合演进
数据库·人工智能·postgresql
ShineWinsu2 小时前
对于MySQL:内置函数的解析
linux·数据库·c++·mysql·面试·函数·查询
isNotNullX2 小时前
智能问数为什么答不准?数据、语义、模型、SQL四层拆解
数据库
烂蜻蜓3 小时前
Django入门教程(三):django-admin与manage.py命令完全指南
数据库·django·sqlite