DeepSeek Harness:让AI记住历史决策的工程实践

之前在业务迭代中,经常遇到一个很头疼的问题:AI 每次给出的方案好像都“忘了”昨天刚确认过的结论。产品经理说“这个需求上周不是已经讨论过不做吗”,AI 却一本正经地给出完全反向的建议。后来我在调研决策类 Agent 落地时,注意到一种叫 DeepSeek Harness 的思路——它本质上不是某个神秘框架,而是把“模型调用”外面再包一层决策 harness,让每一次 AI 的关键判断都能被记录、被检索、被回放到下一次上下文里。这篇文章就把这套方法拆开,结合实际项目讲清楚怎么让 AI 真正“记住”历史决策。

如果你是正在做 AI 客服、智能助手、自动化决策系统,或者只是被“AI 没有长期记忆”折磨过的开发者,这篇内容都适用。读完你会掌握:决策数据的结构化设计、历史上下文的注入方式、一个可运行的项目示例,以及常见坑位的排查思路。

1. 让 AI 记住历史决策,到底难在哪

1.1 大模型的“记忆”本质是上下文

先看一个最基础的结论:像 DeepSeek 这类大模型本身是没有持久记忆的。每次调用 API,它看到的只有你这一次请求携带的 messages。之前聊过什么、拍板过什么,模型一概不知道。它能把对话续上,是因为你把历史记录重新传给了它;一旦这些历史没有被保存,模型就会“失忆”。

所以“让 AI 记住历史决策”这个问题,本质上不是模型能力问题,而是工程问题。你需要自己在外部维护一套记忆系统,在合适的时候把历史决策压缩、筛选、注入到模型上下文里。

1.2 普通对话记录为什么不够用

很多人第一反应是:把聊天记录全部存下来,下次全量传给模型不就行了?听起来简单,但实际会踩几个坑:

第一,上下文窗口有限。哪怕现在模型支持 128K 甚至更大,也扛不住长期多轮对话的无脑堆叠,很快会超限,而且成本急剧上升。

第二,全量历史里充满噪音。日常对话里大量内容是寒暄、确认过程、临时数据,真正“拍板”的决策点可能只有 20%。把这些噪音全部喂给模型,反而会干扰判断。

第三,缺少结构性。决策往往是“在什么背景下,基于什么依据,选了什么方案,放弃了什么方案”。普通聊天记录里这些信息是散落的,模型很难在下次决策时精准复用。

1.3 DeepSeek Harness 方法的核心

DeepSeek Harness 给我的启发是:不要把所有历史交互都交给模型自己理解,而是用一层 harness 把决策这个过程显式地“钳制”住。具体来说,它把每次决策拆成几个固定的字段,比如决策编号、触发场景、可选方案、决策结论、原因、影响、后续状态。然后把这些字段持久化到数据库中。下一次需要决策时,harness 先查询相关的历史决策,生成一份“决策摘要”注入到系统提示词里。

这样一来,AI 看到的不是一堆聊天记录,而是一份类似“项目决策记录”的结构化记忆。模型能快速理解:过去在哪些约束下做过什么选择,结果如何,哪些条件变了需要重新决策。

我理解这个方法的核心价值在于:把“记忆”从模型的隐状态里解放出来,变成显式的、可查询、可审计的工程资产。这不仅解决了记忆问题,还让整个 AI 决策过程变得可追溯、可回放、可复盘。

需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。

2. 环境准备与整体方案设计

以下示例以 Python 3.9+ 为基础,数据库使用 SQLite——它轻量、零配置,适合演示和中小项目起步。大模型接口我们按 OpenAI 兼容接口来写,DeepSeek 的调用方式也遵循这个协议,但代码不绑定具体厂商,只要你的模型服务支持 chat/completions 接口,都能适配。

项目目录建议这样组织:

code复制ai-decision-harness/
├── main.py                 # 入口,跑一个完整示例
├── decision_store.py       # 决策存储层,负责读写 SQLite
├── llm_client.py           # 模型调用层,封装 chat/completions
├── prompts.py              # 提示词模板
├── decisions.db            # SQLite 数据库,首次运行自动创建
└── requirements.txt        # 依赖清单

依赖只需要一个 openai Python 包,用来调用兼容接口:

bash复制pip install openai

版本需要根据你的实际环境调整,比如 openai>=1.0.0。如果你不使用 SDK,也可以用 requests 直接调用 HTTP 接口,属于具体情况具体分析。

需要强调:本文的代码重点在于演示“决策记忆”的工程思路,模型返回的内容可能因版本、服务商不同而存在差异,建议你跑通以后再接入自己的业务数据。

3. 核心原理拆解:决策日志、上下文注入、回放

3.1 决策日志:把一次判断变成一条记录

想记住决策,首先要定义“决策长什么样”。我建议至少包含以下字段:

  • decision_id:全局唯一,方便回溯。
  • scene:决策场景,用来筛选相关历史。比如“需求优先级评审”“技术方案选型”“故障处理”。
  • context:做决策时的背景信息。可以是一段文本,也可以是结构化 JSON。
  • options:当前有哪些可选方案。
  • conclusion:最终选了哪个方案,或者结论是什么。
  • reason:为什么选这个,放弃其他方案的理由。
  • status:决策状态,比如 active、superseded、executed。
  • created_at:决策时间。

把这些字段存入一张表,相当于给 AI 建立了一本“决策日记”。写日志这一步必须在模型返回结论后立刻执行,因为决策过程是不可重来的,错过就没有了。

3.2 上下文注入:只带“相关决策”而不是全量历史

当模型需要做新决策时,我们要从库里捞出一批历史决策。这里有两个关键点:

第一是筛选。根据当前场景和关键词,只选出与该决策相关的记录。比如现在要评审新需求,就只查 scene='需求优先级评审' 的记录,最多再补一些同类型的相似决策。

第二是压缩。找到的历史记录可能还是很多,需要转成摘要。最简单的做法是只保留“结论 + 原因 + 状态”,并且传给模型时加上“以下是从前决策记录中提取的历史摘要,仅供参考,如果当前条件发生变化可以推翻旧结论”的提示。这样可以避免模型把历史决策当成不可变更的教条。

注入位置建议放在系统提示词里,或者作为第一条用户消息的前缀。不要放在最后,否则模型可能忽略较早的内容,也可能被新内容淹没。

3.3 回放与追溯:让每次决策有据可查

Harness 方法还有一个容易被忽略的价值:回放。当 AI 给了一个建议,你可以反查“它参考了哪些历史决策”,甚至把当时的上下文重新拼接出来,看看旧决策是否合理。这个能力在项目复盘、事故排查、合规审计里非常有用。

回放不需要复杂算法。只要在生成决策时,记录本次参考了哪些 decision_id,然后通过 id 拉取完整记录即可。这个字段我通常叫 ref_decision_ids,用 JSON 数组存储。

4. 实战:做一个带历史决策记忆的需求评审助手

下面我们做一个具体的小系统:“需求优先级评审助手”。用户每次提一个新需求,系统先检索历史决策,再调用大模型给出优先级建议,最后把这条建议连同用户的反馈存成新决策。代码可以完整运行。

4.1 配置模型调用客户端

文件路径:llm_client.py

python复制from openai import OpenAI

client = OpenAI(
    api_key="你的API密钥",
    base_url="https://api.deepseek.com/v1"
)

def chat(messages, temperature=0.3):
    resp = client.chat.completions.create(
        model="deepseek-chat",
        messages=messages,
        temperature=temperature
    )
    return resp.choices[0].message.content

这里需要特别注意:base_url 和 model 必须以你的服务商文档为准,上述只是示例。千万不要把真实密钥提交到公共仓库。如果你用的是私有化部署模型,base_url 换成你内网网关地址即可。

4.2 实现决策存储层

文件路径:decision_store.py

这段代码负责建表、插入决策、按场景查询历史决策。

python复制import sqlite3
import json
from datetime import datetime

DB_PATH = "decisions.db"

def get_conn():
    conn = sqlite3.connect(DB_PATH)
    conn.row_factory = sqlite3.Row
    return conn

def init_db():
    with get_conn() as conn:
        conn.execute("""
            CREATE TABLE IF NOT EXISTS decisions (
                decision_id TEXT PRIMARY KEY,
                scene TEXT NOT NULL,
                context TEXT,
                options TEXT,
                conclusion TEXT,
                reason TEXT,
                status TEXT DEFAULT 'active',
                ref_decision_ids TEXT,
                created_at TEXT
            )
        """)
        conn.execute("""
            CREATE INDEX IF NOT EXISTS idx_decisions_scene
            ON decisions(scene)
        """)

def save_decision(decision: dict):
    with get_conn() as conn:
        conn.execute(
            "INSERT OR REPLACE INTO decisions VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
            (
                decision["decision_id"],
                decision["scene"],
                decision.get("context", ""),
                json.dumps(decision.get("options", []), ensure_ascii=False),
                decision.get("conclusion", ""),
                decision.get("reason", ""),
                decision.get("status", "active"),
                json.dumps(decision.get("ref_decision_ids", []), ensure_ascii=False),
                decision.get("created_at", datetime.now().isoformat())
            )
        )

def query_history(scene: str, limit: int = 10):
    with get_conn() as conn:
        rows = conn.execute(
            "SELECT * FROM decisions WHERE scene = ? ORDER BY created_at DESC LIMIT ?",
            (scene, limit)
        ).fetchall()
    return [dict(row) for row in rows]

def get_decision(decision_id: str):
    with get_conn() as conn:
        row = conn.execute(
            "SELECT * FROM decisions WHERE decision_id = ?",
            (decision_id,)
        ).fetchone()
    return dict(row) if row else None

这段代码里有几个设计点值得说明:

  • 用 INSERT OR REPLACE,便于重复跑示例时覆盖同一条决策。
  • options 和 ref_decision_ids 存成 JSON 字符串,读取时再 json.loads。这样能保持数据结构完整性,也方便以后迁移到 PostgreSQL 的 JSON 字段。
  • 查询只按 scene 过滤,因为示例场景简单。真实项目建议再加关键词匹配或向量检索。

4.3 构建历史摘要和提示词

文件路径:prompts.py

这里要定义把历史记录转成摘要的模板。核心原则是:控制长度,保留关键信息,并明确告诉模型“历史决策可以被新条件推翻”。

python复制def build_history_summary(history_records: list) -> str:
    if not history_records:
        return "暂无历史决策记录。"
    lines = []
    for i, rec in enumerate(history_records, 1):
        options = rec["options"]
        if options:
            options = ", ".join(json.loads(options))
        else:
            options = "无"

        lines.append(
            f"{i}. 决策ID: {rec['decision_id']}"
            f" | 结论: {rec['conclusion']}"
            f" | 原因: {rec['reason']}"
            f" | 已放弃方案: {options}"
            f" | 状态: {rec['status']}"
        )
    return "\n".join(lines)

def build_system_prompt(history_summary: str):
    return f"""你是一名资深产品和技术顾问,负责评估新需求的优先级。
请参考下面的历史决策记录,但注意:历史决策反映的是过去的背景和约束。
如果当前需求与历史记录的前提条件不同,你可以做出不同的判断。

历史决策记录:
{history_summary}

请按以下结构输出,不要输出额外解释:
优先级: 高/中/低
理由: 不超过120字
建议方案: 最多3条,用分号分隔
"""

注意 build_system_prompt 里没有直接拼接新需求,因为它属于用户输入,应该放在用户消息里,避免和系统指令混淆。

4.4 主流程:检索历史、调用模型、存储新决策

文件路径:main.py

python复制import uuid
from datetime import datetime
from decision_store import init_db, save_decision, query_history
from llm_client import chat
from prompts import build_history_summary, build_system_prompt

def review_requirement(requirement: str):
    init_db()

    # 场景设定
    scene = "需求优先级评审"

    # 1. 检索历史决策
    history = query_history(scene, limit=5)
    history_summary = build_history_summary(history)
    system_prompt = build_system_prompt(history_summary)

    # 2. 调用模型
    messages = [
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": f"新需求如下:{requirement}"}
    ]
    result = chat(messages)

    # 3. 把模型输出转成决策记录
    decision = {
        "decision_id": uuid.uuid4().hex,
        "scene": scene,
        "context": requirement,
        "options": ["高优先级", "中优先级", "低优先级"],
        "conclusion": parse_conclusion(result),
        "reason": parse_reason(result),
        "status": "active",
        "ref_decision_ids": [rec["decision_id"] for rec in history],
        "created_at": datetime.now().isoformat()
    }
    save_decision(decision)

    print("本次决策已记录。")
    print(result)
    return decision

def parse_conclusion(result: str) -> str:
    for line in result.splitlines():
        if line.startswith("优先级:"):
            return line.split(":", 1)[1].strip()
    return result[:30]

def parse_reason(result: str) -> str:
    for line in result.splitlines():
        if line.startswith("理由:"):
            return line.split(":", 1)[1].strip()
    return ""

if __name__ == "__main__":
    # 第一次决策
    review_requirement("上线一个用户积分兑换页面,用于提高老用户活跃度")
    # 第二次相同场景决策,AI 会看到第一条记录
    review_requirement("开发一个用户等级体系,需要评估是否比积分兑换页面优先")

这里有两个值得注意的点:

  • parse_conclusion 和 parse_reason 是简单的行解析。如果模型输出格式不稳定,建议用 JSON 模式或函数调用(function calling)来保证结构化返回,避免解析失败。
  • 第二次输入时,代码会从数据库里查到第一次的决策,并作为摘要注入系统提示词。这就是“记住历史决策”的体现。

4.5 运行与验证

在命令行执行:

bash复制python main.py

预期输出类似:

code复制本次决策已记录。
优先级: 中
理由: 积分兑换属于运营活动,能短期提升活跃度,但复杂度不高,建议在核心链路稳定后快速上线。
建议方案: 先做简化版;配合用户分群触达;上线后观察7日留存。

本次决策已记录。
优先级: 高
理由: 历史决策中积分兑换尚未实施,用户等级体系是长期激励框架,且与积分体系可结合,建议优先规划,避免重复建设。

你可以用一个简单的 SQL 去检查数据库里的记录:

bash复制sqlite3 decisions.db "select decision_id, scene, conclusion, reason, ref_decision_ids from decisions;"

这时会发现第二次决策的 ref_decision_ids 里放着第一次的 decision_id,证明 AI 在生成第二次建议时确实参考了历史决策。

5. 常见问题与排查思路

我在实际跑这类方案时,遇到过不少问题。下面整理成表,方便你直接对照排查。

问题现象 常见原因 解决思路
模型好像没记住历史决策 历史摘要没注入到请求里,或者注入位置靠后 检查 system 消息内容,确认历史记录出现在模型返回前
注入历史后回答质量反而变差 历史记录过多、格式串行、噪声太大 缩小 limit,只保留最重要字段,必要时用向量检索替代简单固定查询
模型输出的结论解析失败 输出格式不稳定,用普通文本解析不可靠 改用 JSON 输出模式,或使用工具调用,让模型按固定结构返回
决策库越积越大,查询越来越慢 SQLite 单表存储,缺少索引和归档 给 scene 和 created_at 建联合索引,定期归档旧数据到冷存储
多用户共用一套决策库,互相干扰 缺少用户或项目维度 数据表增加 owner_id 字段,查询时必须带该字段
历史决策里的敏感信息被注入到模型 未脱敏直接入库再查询 在入库前做脱敏处理,比如把手机号、身份证替换为占位符,或限制字段级别存储

最常见的排查顺序是:先打印出实际传给模型的 system 消息,看看历史摘要是否真的存在。很多时候问题不是模型没记住,而是你的 prompt 里根本没有带上记忆。

6. 工程最佳实践与生产落地建议

6.1 从 SQLite 升级到专用存储

本文示例用 SQLite 是为了让你最快跑通。生产环境建议换成 PostgreSQL。它天然支持 JSONB,可以做 scene + owner_id 联合索引,还能用 tsvector 做全文检索。如果规模再大,可以把决策向量化后用向量数据库做相似度召回,让 AI 不只靠场景查询,还能根据语义找到历史相似决策。

不过升级的前提是先把“决策记录写入”和“历史查询”封装成接口,而不是让业务代码到处写 SQL。这样以后换存储层,改一个实现类就行。

6.2 决策记录必须带“版本”概念

历史决策不是永远正确。当你发现某条决策过时,不要直接删掉它,推荐把状态改成 superseded,同时新建一条新决策,并在新决策里记录它替代了哪条旧决策。这样既保留完整的历史轨迹,又避免 AI 反复参考已被推翻的结论。

实现上可以在 save_decision 里增加一个逻辑:更新旧记录状态为 superseded,写入新记录。这是除了记忆之外,另一个对 AI 决策质量很有帮助的工程细节。

6.3 控制上下文开销,设置预算熔断

每次注入的历史记录越多,token 成本越高。建议限制注入条数,比如最多 20 条;如果某条历史决策的记录特别长,可以只取 conclusion 和 reason,不取完整 context。还可以为每次请求做一个 token 计数器,如果摘要超过设定阈值,用摘要的摘要来压缩,或者丢弃最早的历史。

在团队协作中,更应该为每个调用设置预算熔断。如果某次请求连续失败,不应该无限重试,而是记录失败后的降级逻辑——比如不调用模型、返回默认建议,同时保留现场信息。

6.4 权限隔离与安全边界

如果你的系统服务多个业务方,决策库必须做 data isolation。每个用户或项目只能查询自己的历史决策,否则一个用户的数据会泄漏给另一个用户。最简单的实现是在所有查询条件里强制带 owner_id,并通过后端服务统一注入,而不是信任前端传参。

同时要考虑:决策记录里可能包含未公开的商业模式、价格策略等敏感信息。入库前可以做字段级的白名单过滤,只存必要的上下文。在把历史决策注入模型之前,再做一次脱敏处理,避免敏感数据外泄。

6.5 用审计日志支撑复盘

几个星期后你可能会问:某条决策当初为什么那么定?此时只有 conclusion 和 reason 还不够,最好还要有完整的原始快照,包括当时的用户输入、模型返回、历史摘要、以及最终人工是否采纳。

建议为每条决策增加一个 snapshot 字段,存放完整的 messages 数组,但这是个高成本字段,要限制保存条数。也可以把这部分内容落到对象存储或日志平台,只保留链接在数据库里。这样既保证可追溯,又不会让决策库变得臃肿。

7. 这套方法还能怎么延伸

如果你已经跑通了上面的示例,下一步可以尝试加入三个能力。

一是人工反馈回路。模型给出的决策不一定被采纳,增加一个“是否采纳”字段,用人工确认结果修正历史记录。比如模型建议“高优先级”,但产品经理决定“低优先级”,那么这条人工修正后的结论比模型原始输出更有价值。下次再把历史注入模型时,应该告诉模型“用户最终采纳的是低优先级”,而不是只看模型自己的建议。

二是相似度检索。把 context 和 conclusion 组合成向量,用向量数据库检索 Top-K 相似决策。这样即使场景描述不完全一致,AI 也能找到“上次类似情况下是怎么处理的”。

三是决策指标评估。为每条决策绑定后续指标,比如“按高优先级处理后,用户活跃度提升了多少”。把结果反馈给模型,模型就能在下次决策时更好地判断哪种优先级策略真正有效。这就不是简单的记忆了,而是形成了“决策-执行-反馈”的自我进化闭环。

这些延伸方向,本质上还是围绕 Harness 方法的核心:把 AI 决策变成可记录的工程实体,而不是每次从零开始的“灵光一闪”。掌握了这个思路,你不仅能解决“让 AI 记住历史决策”的问题,还能让 AI 在复杂业务中越来越像真正的团队成员。

内容推荐

CordisBench:用状态机评测大模型对组件生命周期的动态推理能力
CordisBench · 组件生命周期 · 状态机
在动态智能体系统中,组件常于对话过程、工具调度或异步事件流中被动态注册、初始化和销毁,其生命周期比传统后端服务更难跟踪。这要求大模型具备对运行时状态的持续推理能力,而不仅仅是静态代码理解。CordisBench 正是针对这一能力缺口设计的评估方向,它借助组件快照、事件日志与依赖关系构造评测样本,用状态机模拟生命周期迁移,考察模型能否判断当前状态并预测下一事件。本文从状态机与事件驱动原理入手,介绍如何搭建最小生命周期评测脚手架,包括样本生成、Prompt 设计、答案归一化与准确率计算。该方法适用于智能体可观测性、自主运维和 Agent Harness 评估等场景,帮助开发者定位大模型在状态追踪上的真实短板。
Hermes Skill 实战指南:智能体技能注册、编排与安装详解
Hermes Skill · 技能注册 · 技能编排
在智能体与自动化系统开发中,技能模块化是降低维护成本、提升复用性的关键思路。传统直接写死函数调用的方式,在面对多业务流程时会陷入反复修改主流程的困境。基于统一技能抽象层,Hermes Skill 为技能注册、路由、执行与编排提供了标准化的解决方案。开发者只需按规范定义技能描述文件并实现执行器,即可通过扫描或配置完成注册,由框架统一处理鉴权、限流及调用链管理。无论是企业内部自动化流程、多系统集成,还是大模型驱动的智能体平台,这种设计都能让能力管理更规范、替换更灵活。本文从环境准备、核心组件、配置原理到 Spring Boot 项目中的完整安装与验证流程,逐步拆解落地要点,并针对扫描不到技能、接口 404、线程池耗尽等常见问题给出排查建议,帮助开发者在工程实践中快速上手并建立可演进的技能管理体系。
大模型应用开发全家桶:LLM+RAG+Agent+MCP+工作流双技术栈实践
大模型应用开发 · LLM · RAG
大型语言模型(LLM)的工程化落地已从单次对话转向多模块协作,开发者普遍面临如何组织代码以集成RAG、Agent、MCP、工作流和工具调用的难题。本文从工程架构角度,剖析一套不绑定特定厂商、不局限于单一语言的大模型应用全家桶设计思路。通过接口隔离和分层抽象,将模型能力与业务系统解耦,使知识库问答、智能客服、自动化流程等场景快速接入。结合FastAPI与Spring Boot双版本示例,展示LLM接入、检索增强生成、Agent决策循环、工具标准化协议及流程编排的具体实现方法,帮助团队构建可测试、可维护、可跨语言协作的AI应用骨架。
AI大模型应用实战全家桶:从0带敲RAG、Agent与MCP双版本
大模型应用开发 · LLM · RAG
大模型应用开发正在成为后端工程师的新技能栈。除了直接调用LLM接口,还需要理解检索增强生成(RAG)、智能体(Agent)、模型上下文协议(MCP)等核心概念。RAG通过外部知识库检索辅助模型生成,解决私有领域问答;Agent借助工具调用完成多步决策;MCP则统一了外部能力接入方式。这些技术在实际工程中常组合使用,形成知识库问答、智能助手等典型场景。然而,不同技术栈的落地方式差异较大,Python和Java开发者往往需要各自的参考实现。本文介绍一套从0带敲的AI大模型应用实战全家桶,完整覆盖LLM接入、RAG、Agent、MCP、工作流与工具调用,并提供FastAPI和Spring Boot双版本代码,帮助读者在真实业务中快速搭建可复用的大模型应用骨架。
TimesFM:零样本时间序列预测基础模型怎么用?
TimesFM · 时间序列基础模型 · 零样本预测
时间序列预测是数据分析中的经典难题,传统方法往往需要针对每个数据集单独调参,成本高昂。以Transformer为代表的基础模型架构,通过在大规模时序数据上预训练,学到了通用的趋势与周期规律,从而支持零样本预测:直接输入原始序列即可得到合理基线,无需重新训练。TimesFM正是这一技术路线的开源实现,在冷启动、批量基线生成等场景中,能显著降低建模门槛,帮助工程师快速判断数据潜力。理解其patch切分与decoder-only设计,能更好地在实际预测任务中落地。
陌生开源仓库评估实战:从环境配置到批量任务的全流程指南
开源仓库 · 环境配置 · 批量任务
开源软件生态中,面对信息不全的GitHub仓库,如何快速判断其真实用途与可运行性是开发者普遍面临的难题。合理评估一个项目,不能依赖名称或star数量,而应从仓库结构、依赖文件与语言构成反推其类型,再通过环境隔离与硬件检查确保可复现性。最小样例测试是验证输入输出链路的关键手段,参数调整需先理解默认值的边界,而批量任务则考验资源管理与错误隔离能力。本文以Sequoia-X为切入点,系统拆解一套从项目类型判断到生产化评估的完整流程,覆盖依赖管理、硬件适配、性能边界等高频问题,帮助开发者降低试错成本,同时规避文档缺失与维护停滞等潜在风险。
Hermes Skill实战:从安装到编写可复用的AI智能体技能包
Hermes · Skill · AI智能体
在AI智能体开发中,如何让模型从“能用”变成“好用”,关键在于构建一套可复用、可编排的能力单元——技能(Skill)。技能机制将原子工具、Prompt指令与业务规则封装为轻量模块,主程序通过约定协议自动发现并加载,从而提升系统的扩展性与可维护性。基于开放原子基金会的开源项目Hermes Agent,企业可在私有化部署环境下搭建完整的智能体服务,通过安装辅助系统Skill、配置模型接口、编写指令文件等步骤,快速沉淀团队知识资产。本文从技能设计原理出发,结合工程实践演示最小技能包与执行脚本的编写,并梳理环境配置、路径兼容、权限隔离等高频问题的排查思路,帮助开发者从零跑通一套可落地的智能体技能管理体系。
AI大模型应用开发全家桶:LLM、RAG、Agent与MCP实战
大模型应用开发 · LLM · RAG
大模型应用开发正从单一API调用走向系统化工程。理解LLM(大语言模型)的推理能力、RAG(检索增强生成)的知识外挂、Agent的自主决策、MCP(模型上下文协议)的工具标准化,以及工作流的任务编排,是构建生产级AI应用的基础。本文以FastAPI和Spring Boot双技术栈为例,从环境搭建到代码实现,演示如何将模型调用、知识检索、工具调用与任务编排串成完整链路,帮助开发者建立从概念到落地的工程化地图,避开常见工程陷阱。
从0到实战:AI大模型应用全家桶双版本落地指南
LLM · RAG · Agent
AI大模型应用正从单一的对话接口走向复杂的工程链路。理解LLM作为认知底座、RAG补充外部知识、Agent驱动多步决策、MCP标准化工具接入、工作流固化稳定路径,以及工具调用作为执行手段,是构建可落地系统的关键。这些技术协同工作,能帮助企业将大模型能力嵌入真实业务场景,如私有知识问答、自动化流程处理和跨系统协同。本文以FastAPI与SpringBoot双版本为主线,从环境搭建、最小实现到验证与排错,完整拆解一条能跑通的AI应用开发链路,为需要从接口调用进阶到完整应用开发的工程师提供实战参考。
原生统一多模态模型:理解与生成的协同实现指南
原生统一多模态模型 · 理解与生成协同 · 多模态大模型
多模态大模型正从模块拼接走向原生统一架构,核心挑战在于让理解与生成在同一套参数内协同工作。理解-生成协同(Understanding-Generation Synergy)要求模型在表征层、任务层、系统层统一设计:通过VQGAN等图像离散化技术将视觉信息转化为统一token序列,让图像与文本在同一个序列空间自回归建模;将视觉问答、文生图等任务统一为序列生成目标,简化多任务训练;同时兼顾训练与推理的系统工程优化。这种架构能显著降低部署成本,并提升模型对跨模态内容的理解与创作能力。本文面向多模态模型开发者和研究者,拆解原生统一模型的设计逻辑,并给出从表征到任务的代码示例和系统部署建议,帮助读者快速建立多模态理解与生成一体化的工程落地思路。
SpringBoot + AI大模型:在线考试系统智能化改造实战指南
SpringBoot · AI大模型 · 在线考试系统
在线考试系统正从传统客观题判分向智能化方向演进,其核心在于将AI大模型能力与业务场景深度融合。基于SpringBoot构建的考试主链路,通过统一封装模型调用接口、设计异步批改队列和完整的评分记录表,可以实现自动组卷、智能阅卷与考情分析。这类系统广泛应用于校园测评、企业培训、认证考试等标准化考试场景,能够有效降低教师重复劳动、缩短成绩反馈周期。工程落地的关键在于异步化处理、Prompt版本管理、人工复核机制以及token成本控制,同时需关注数据脱敏与合规要求。本文从系统架构、数据库设计、模型接入、组卷算法到智能阅卷全流程,给出可落地的工程实现方案。
AI大模型应用开发实战:LLM+RAG+Agent+MCP+工作流全家桶搭建
LLM · RAG · Agent
在大模型应用开发中,LLM、RAG、Agent、MCP与工作流常被割裂理解,导致落地困难。实际上,这些能力是分层协同的整体:LLM负责生成,RAG提供外部知识,工具调用赋予行动力,Agent驾驭多步推理,MCP统一工具接入,工作流固化业务路径。本文以一次真实请求为例,演示如何通过统一消息格式将这些模块串成一套可运行的后端服务骨架,并同时提供FastAPI与Spring Boot双版本实现。从最小闭环出发,逐步替换生产组件,最终覆盖智能问答、知识检索、自动化工具调用与固定流程编排等场景,帮助企业开发者从“调用模型接口”迈向“搭建完整AI应用服务”。
SpringBoot+AI大模型在线考试系统:智能出题、批改与学情分析实战
SpringBoot · AI大模型 · 在线考试系统
在线考试系统是后台开发中的常见项目,但如何让AI大模型真正参与业务,而不只是简单调用接口?从技术架构看,SpringBoot提供了稳定的业务骨架,AI大模型则负责主观题批改、智能出题与学情分析等核心环节。这类系统在设计上需遵循“AI辅助而非依赖”的原则,通过结构化提示词、异步任务和降级策略保证考试流程可靠。其典型应用场景包括教师批量生成题目、学生交卷后的自动评分以及基于考试数据生成个性化学习报告。对于毕业设计或企业培训平台,掌握AI接口封装、任务状态管理和异常处理,比堆砌功能更有价值。本文围绕系统边界、表结构设计、AI接入位置和性能优化,完整拆解一个生产可用的在线考试系统落地过程。
LLM-as-a-Judge摘要评估实战:机制、提示词设计与避坑指南
LLM-as-a-Judge · 摘要评估 · ROUGE
大语言模型的推理能力为文本质量评估提供了新思路。传统ROUGE指标仅统计词面重叠,难以衡量摘要的语义忠实度与信息覆盖。LLM-as-a-Judge让模型像人一样阅读原文与摘要,按指定维度给出可解释评分,支持相关性、连贯性、忠实度等细粒度诊断。该方案在摘要评测、RAG答案质量验证、模型对比等场景中逐渐成为主流。但评估效果高度依赖提示词设计、评分锚点、采样配置与位置偏差处理。系统拆解了直接打分、成对比较、多维度评估三种机制,并提供最小可行验证流程和常见陷阱排查思路,帮助开发者搭建可靠、可复现的自动评估体系。
轻量快速模型实战:Gemini 3.8 Flash 如何优化成本与批量工作流
Gemini 3.8 Flash · 轻量模型 · 批量处理
在大模型应用逐渐普及的今天,如何平衡推理质量、响应速度与调用成本,成为开发者落地 AI 能力时最现实的考量。轻量快速模型正是为了应对这一挑战而出现:它并非简单弱化版,而是针对低复杂度、高重复度任务重新设计的精度与成本平衡方案。通过降低单次请求延迟、提升并发吞吐能力,这类模型让批量文本抽取、格式化输出、内容预分类等场景得以低成本嵌入现有流程。工程实践中,合理的输入清洗、结构化提示词、输出校验与日志观测,能显著提升模型的稳定性和可维护性。以 Gemini 3.8 Flash 为代表的小模型,尤其适合作为工作流中的“第一层过滤器”,帮助开发者将重复劳动从人工中解放出来,实现更快、更可控的自动化处理。
Claude一小时实战:小应用、Skills、浏览器操作与业务自动化闭环
Claude · 大模型 · 业务自动化
在人工智能与自动化技术加速落地的今天,RPA(机器人流程自动化)与大模型辅助开发已成为企业提升效率的重要抓手。其核心逻辑是:先由模型理解自然语言需求,再通过脚本、标准技能包和浏览器控件将重复动作固化为可复用流程。这种模式显著降低内部工具的开发门槛,让运营与开发人员只需描述输入、处理逻辑、输出形式,即可获得可运行的小应用和业务流程闭环。常见于报表整理、网页填表、摘要生成等高频场景。围绕 Claude 的一小时实战,从环境准备到小应用、Skills、浏览器操作与业务自动化连穿的链路,正是验证这套方法的最短路径。
Gemini 3.8升级指南:多模态与长上下文下的模型评估与接入实践
Gemini 3.8 · 多模态 · 长上下文
大模型版本迭代日益频繁,开发者如何理性应对?从多模态与长上下文两大技术主线出发,解析Gemini系列模型的能力演进与性价比变化。通过建立业务测试集、平行对比输出质量与格式稳定性,以及灰度接入与回滚机制,帮助团队在新模型发布后快速完成技术选型。同时给出Python调用Gemini API的完整示例,覆盖文本、图像及批量回归场景,并提供隐患排查与工程实践建议。无论你正在构建Agent应用还是优化既有AI流程,这套方法都能让你在模型升级中掌握主动权。
Claude新模型升级实践:从API迁移评估到Token成本优化全指南
Claude模型升级 · API迁移 · Token成本控制
在LLM应用开发中,模型迭代频繁,新版本往往宣称“更强、更便宜”,但真实落地时,能力提升和成本下降并不必然转化为业务收益。开发者需要理解大模型API的Token计费结构、上下文缓存机制、输出长度控制等基础原理,才能科学评估迁移价值。模型评测是迁移的第一关,通过建立业务场景基线、对比新旧模型输出质量,才能判断是否值得切换。工程实践中,将模型ID配置化、灰度发布、提示词版本管理、异常排查等环节环环相扣。同时,成本优化不能只看单价,还要关注输出Token膨胀、重复调用、缓存命中率等现实因素。本文梳理了一套从模型评测、API接入、迁移评估到成本控制的实操方法,帮助使用Claude API或做LLM选型的开发者,在模型升级浪潮中稳妥获利。
TimesFM:Google开源时间序列基础模型,零样本预测与工程实践指南
时间序列预测 · 基础模型 · 零样本
时间序列预测是业务决策中的高频需求,但传统建模流程复杂,且每个场景都需要重新调参与训练。TimesFM是Google Research开源的时序基础模型,基于Transformer架构与patching机制,将时间序列切分为patch并预训练在真实世界海量数据上,从而实现对任意新序列的零样本预测。其核心价值在于压缩了从数据到预测的链路,无需特征工程与逐序列训练,即可快速获得可靠的基线结果,显著降低工程交付成本。该模型适用于销量预估、流量监控、库存管理等多序列批量预测场景,尤其适合缺少历史数据或数据质量参差不齐的业务。围绕TimesFM,可以了解其架构原理、输入数据规范、零样本推理流程及反归一化等关键细节,为实际项目选型和工程接入提供直接参考。
AI训练数据退出机制配置指南:防止输入输出用于训练
数据隐私 · AI训练数据 · opt out
在人工智能与数据隐私的交汇点,训练数据合规已成为企业与开发者必须掌握的基础能力。许多AI平台默认将用户输入与输出数据纳入模型优化流程,由此催生了所谓的数据退出(opt out)机制——一种用于阻断服务数据向训练数据流转的设置。理解其原理,即区分“用于服务”与“用于训练”,是应用数据治理与保护敏感信息的关键。该机制广泛应用于个人隐私设置、企业数据管控、API请求声明及本地部署等场景。系统梳理通用退出配置流程、请求级标记方法、验证技巧与兜底策略,为应对外部AI服务中的训练数据采集风险提供了可落地的排查体系。
已经到底了哦
精选内容
热门内容
最新内容
SpringBoot集成AI大模型的在线考试系统:从组卷到学情分析
在企业级应用开发中,如何将大模型能力嵌入传统业务系统是当前工程实践的热点。在线考试系统作为典型的管理信息系统,其核心流程包含题库管理、权限控制、组卷、答题与判分等环节。传统实现往往依赖人工选题与手工评阅,难以高效支撑主观题评分和个性化学情分析。引入AI大模型后,系统能够自动生成候选题目、提供主观题评分参考、并基于考试数据生成学习建议。但工程落地的关键在于将这些能力封装为可靠的服务,与SpringBoot后端、数据库设计和权限体系有机结合。本文基于SpringBoot 3.x,结合Spring Security与MyBatis-Plus,演示一套涵盖AI组卷、AI辅助评分、学情分析的最小可运行系统,并重点讲解接口抽象、结构化输出、异步调用与降级策略,帮助开发者构建可扩展、可追溯的智能考试平台。
Hermes Skill:让大模型 Agent 实现技能化扩展的工程指南
大模型Agent在业务落地中常面临能力固化、扩展困难的问题。技能化扩展机制将模型能力与业务逻辑解耦,把工具调用、规则执行封装为可插拔的技能单元,使Agent能动态适配查询、调度等实际场景。基于清单描述与运行时调度的架构,可显著提升开发效率与系统稳定性。以Hermes Skill为例,展示技能化扩展的概念原理、安装流程、调试方法与最佳实践,为企业构建灵活可控的智能体应用提供工程参考。
Claude工作流实战:提示词、Projects、Skills与连接器组合用法
在AI应用开发与自动化脚本场景中,仅仅将对话式AI视为“智能聊天框”会极大限制其工程价值。真正提升效率的关键,在于构建一套可复用、可维护的AI工作流。核心原理包括四个层面:提示词工程作为交互底座,负责明确任务目标与输出约束;Projects提供跨对话的长期上下文管理,解决模型冷启动问题;Skills将专业处理流程结构化封装,固化代码审查、接口生成等标准动作;连接器则打通外部系统数据,实现实时数据闭环。四者协同可支撑文档生成、团队知识管理等真实业务场景,让模型从被动应答转为主动执行。本文完整拆解这套组合用法,并提供可直接落地的中英双语实践模板,帮助开发者建立稳定高效的Claude使用方式。
千问3.8本地部署Agent:用DeepSeek Harness零成本编排任务
大模型本地部署是当前开发者摆脱付费API依赖的可行路径,通过开源权重模型搭建私有推理环境,能让数据全程不出本机。在此基础上,Agent作为一种具备决策与工具调用能力的运行模式,可自动拆解目标、调用外部工具并循环推进;而任务编排框架(如DeepSeek Harness)则负责将模型、工具与流程串联成稳定的自动化流水线。这类方案对预算有限的开发者、中低端显卡用户以及有数据隔离需求的工程场景尤其有价值,既能完成文件处理、信息抽取等本地Agent任务,又不必承担按Token计费的云端成本。本文以千问3.8本地部署为例,解读如何借助DeepSeek Harness构建可控的多模型协作工作流,同时提醒零成本口号背后的硬件要求、环境调试与维护投入,帮助读者更理性地把控落地节奏。
Codex实战:从自动补全到AI编程代理的完整指南
AI编程工具正从代码补全走向代理式智能体,核心差异在于前者补全单行代码,后者能自主执行命令、读写文件、运行测试并迭代修复。这类工具将一次完整的开发循环从小时级压缩到分钟级,尤其适合重构、补写测试和排查报错等可验证场景。但使用上限取决于需求描述能力,目标、上下文、约束与验收条件缺一不可。Codex作为其中代表性CLI工具,其安全边界与权限控制同样关键。本文从工程实践角度,拆解Codex的安装、任务描述、进阶用法、踩坑排查及适用边界,帮助开发者从“会用”走向“敢用”。
Claude一小时实战:从聊天到小应用、Skills与业务自动化
在AI工具普及的今天,很多人把大模型对话当作搜索引擎使用,但真正的价值在于构建可重复运行的自动化链路。从自然语言交互到工程化落地,核心是利用Claude的对话能力生成小应用、固化可复用的Skills、通过浏览器操作代替人工执行,最终串联成完整的业务自动化流程。理解输入定义、输出验证和过程重跑这三大原理,是技术落地的基础。这种能力不仅适用于程序员,也适合运营、产品等非技术角色处理周报汇总、数据清洗、表单填报等高频重复任务。本文以一小时实践为主线,拆解从临时对话到可复用工具的关键步骤,帮助你在真实业务场景中验证AI的工程价值,避免陷入“聊天式实战”的误区。
Gemini 3.8 Flash API接入实战:从最小请求到生产级配置
大模型应用开发中,API接入往往比模型选型更考验工程细节。理解HTTP请求结构、上下文窗口和生成参数,是构建稳定AI应用的基础。Gemini 3.8 Flash及Flash Cyber作为轻量级大模型,在文本摘要、信息抽取、客服问答等高频低延迟场景中具有实用价值。本文从最小请求出发,逐步讲解多轮会话的contents维护、结构化输出的JSON校验与兜底、403与429等错误码的区分和排查,以及生产环境下的成本控制、安全防护与灰度切换,为后端开发者提供一份可落地的接入清单。
开源项目分析实战:从Sequoia-X看环境配置与源码排错
开源项目是技术选型和工程实践中的重要资源,但面对一个陌生GitHub仓库,初学者往往止步于“能跑起来”。真正高效的分析方法,应建立在对仓库元信息、环境依赖、启动方式、源码链路和排错思路的系统拆解之上。通过掌握README、构建文件、配置项与外部依赖的识别技巧,可以快速判断项目定位;结合最小化启动、日志验证与分支覆盖阅读法,又能从“运行成功”走向“理解原理”。这套方法论适用于任何开源项目,尤其适合需要二次开发或集成到自己系统中的场景。本文以Sequoia-X为例,完整演示从克隆、环境准备到问题排查与PR提交的分析流程,帮助读者建立可复用的开源项目分析模板。
DeepSeek Harness:让AI记住历史决策的工程实践
大语言模型本身不具备持久记忆,每次调用只能依赖当前上下文。在AI客服、智能助手和自动化决策系统中,历史决策的丢失常导致建议反复、结论漂移。解决这一问题的关键在于将AI决策转化为可查询、可回放的显式工程资产。通过结构化的决策日志记录,结合场景化的历史摘要注入,模型能快速复用此前结论。在需求评审、技术选型、故障处理等典型场景中,这种机制不仅提升了决策一致性,还能为后续复盘和优化提供依据。DeepSeek Harness方法正是这样一套实践思路:它不依赖特定框架,而是通过外部存储、检索与提示词构造,让AI真正‘记住’历史决策。本文结合可运行代码示例,拆解其实现原理与常见坑位。
从Demo到生产:完整Agent体系的工具调用、记忆、协同与安全护栏
随着大模型能力的普及,AI Agent 正在成为连接语言模型与真实业务的关键载体。一个可用的 Agent 并非简单的模型循环调用,而是需要构建可控的执行体系。工具调用通过结构化协议让模型安全接入外部能力;长短记忆分层管理对话连续性与跨会话事实;人机协同将高风险决策分包给人工,平衡效率与风险;安全护栏以最小权限、执行边界和全程审计兜底。LangChain 与 LangGraph 等框架为这四层提供了工程化支撑,使 Agent 能真正从 Demo 走向生产。本文结合实战经验,系统拆解这四大核心维度,并为开发者提供从简单循环到完整体系的演进路径与排查思路,帮助你在真实业务中快速定位短板、补齐边界。
已经到底了哦