28 篇文章带有标签 “langchain”

用通俗易懂的方式理解 Harness Engineering

Harness 工程:给 AI 智能体一个"可靠的家"

想象一下,你有一个非常聪明但有点冲动的助手——它知识渊博、能说会道,但有时候会:

  • 忘记五分钟前你们讨论的事情
  • 直接执行危险操作而不问你
  • 在复杂任务中迷路,绕来绕去
  • 做错了事,但你不知道为什么

这就是没有 Harness 的 LLM 智能体。

什么是 Harness?

Harness 这个词在英文里有"马具"、"安全带"的意思。在 AI 智能体的世界里,它就是那个让智能体既能够发挥能力,又不会失控的"安全脚手架"。

这个隐喻是有意的:

  • 是 AI 模型——强大、快速,但它自己不知道去哪里
  • Harness是基础设施——约束、护栏、反馈循环,以富有成效地引导模型的力量
  • 骑手是人类工程师——提供方向,而不是亲自奔跑

用一个更贴近生活的比喻:Harness 就像是智能体的"驾驶舱 + 安全带 + 导航系统 + 黑匣子"的组合体

根据 Harness Engineering 将原始模型能力转化为可靠 Agent 行为的脚手架。实用的 Agent 最好被理解为在 Harness 内部运行的模型,而不是带有外围能力的模型。

真实故事:Harness 工程的威力

在我们深入技术细节之前,让我们看看几个真实的例子,了解为什么 Harness 工程如此重要:

Harness Engineering(驾驭工程):2026 AI 软件工程新范式

Harness Engineering 是 AI 时代的全新软件工程学科 —— 设计和实现系统来约束、引导、验证和修正 AI 智能体的行为,让强大但不可预测的 AI 模型能够可靠地完成复杂任务。

📚 目录

核心概念

什么是 Harness Engineering?

Harness Engineering 是设计和实现系统的学科,这些系统能够:

  1. 约束:定义 AI 智能体可以做什么(架构边界、依赖规则)
  2. 告知:告诉智能体应该做什么(上下文工程、文档体系)
  3. 验证:检查智能体是否正确完成任务(测试、 linting、CI 验证)
  4. 修正:当智能体出错时引导其自我修复(反馈循环、自我修正机制)

类比:AI 模型是一匹强大但无方向的骏马,Harness 是缰绳、马鞍和全套马具,人类工程师是骑手。没有 Harness 的 AI 是开阔场地里的纯种马——速度快、令人印象深刻,但完全无法用来完成任何实际工作。

为什么 Harness Engineering 至关重要?

模型是商品,Harness 是护城河

AI 行业正在达成一个共识:底层模型的重要性远低于围绕它的系统。LangChain 的实验最能证明这一点:他们的编码智能体在 Terminal Bench 2.0 上的得分从 52.8% 提升到 66.

Harness Engineering|软件工程师的角色革命,从写代码到设计环境

Harness Engineering 是 2026 年软件工程领域涌现的一门新学科,其核心理念是:在生成式 AI 时代,由于模型能力已趋于同质化(Commodity),构建可靠、可扩展的 AI 智能体系统的关键不再是模型本身,而是在模型周围设计的“Harness”(支架/编排系统)

通过分析提供的资料,可以从以下几个维度深入理解 Harness Engineering:

1. 核心定义与马车隐喻

“Harness”一词源于马具(如缰绳、马鞍、嚼子),这个隐喻生动地解释了三者的关系:

  • 马(Horse):指代 AI 模型。它拥有强大的动力和速度,但本身并不知道要去哪里,也不具备自我约束力。
  • Harness(马具/支架):指代基础设施。包括约束机制、护栏和反馈回路,用于将模型的原始能力转化为生产力。
  • 骑手(Rider):指代人类工程师。负责提供方向和意图,而不是亲自奔跑(写代码)。

正式定义上,Harness engineering 是设计和实现一个能够约束、告知、验证并纠正 AI 智能体行为的系统学科。

2. Harness Engineering 的三大支柱

根据 OpenAI 和 NxCode 的实践,一个成熟的 Harness 系统包含三大核心组件:

  • 上下文工程(Context Engineering):确保智能体在正确的时间获得正确的信息。这要求将代码库视为唯一的真理来源,不仅包含代码,还包括架构决策、API 契约和动态的观测数据(如日志、指标)。
  • 架构约束(Architectural Constraints):通过机械化的手段强制执行“好代码”的标准。例如使用确定性的 Linter、结构化测试(如 ArchUnit)和严格的依赖层级校验,防止 AI 智能体在生成代码时由于灵活性过高而导致架构腐化。
  • 熵管理/垃圾回收(Entropy Management / Garbage Collection):AI 生成的代码库容易积累“AI 废料(AI Slop)”,文档也容易过时。Harness 系统需要定期运行专门的智能体来清理不一致的文档、修复违反架构约束的代码以及优化冗余逻辑。

一文读懂 Harness Engineering:AI 时代软件工程的全新范式

本文综合 Anthropic、OpenAI、Martin Fowler、LangChain、Mitchell Hashimoto、NxCode、MiniMax 等前沿文章的分析报告。

一、什么是 Harness Engineering?

1.1 词源与隐喻

"Harness" 直译为"马具"——缰绳、鞍座、嚼子,是用来驾驭一匹强大但不可预测的动物的工具。这个隐喻极其精准:

隐喻 对应实体
马匹 AI 模型——强大、快速,但自身不知道该去哪里
马具(Harness) 基础设施——约束、护栏、反馈循环,引导模型的力量
骑手 人类工程师——提供方向,而不是亲自奔跑

没有 Harness 的 AI Agent 就像旷野中的野马——速度快、令人印象深刻,但对完成任何目标完全无用。

1.2 正式定义

Harness Engineering 是设计和实现以下系统的学科:

  1. 约束(Constrain)——限制 AI Agent 能做什么(架构边界、依赖规则)
  2. 告知(Inform)——告诉 Agent 它该做什么(上下文工程、文档)
  3. 验证(Verify)——检查 Agent 是否正确完成了任务(测试、Linter、CI)
  4. 纠正(Correct)——当 Agent 出错时进行修复(反馈循环、自我修复机制)

1.3 与相关概念的区别

Harness Engineering:AI时代的软件工程新范式

Harness Engineering,是在AI大模型时代,以确定性系统外壳约束概率性AI行为,通过上下文工程、架构约束、熵管理三位一体,构建可长期稳定运行的AI Agent系统,推动软件工程从代码实现转向系统设计,成为下一代AI工程化的核心范式。

引言

在人工智能,特别是大型语言模型(LLM)能力迅速发展的时代,软件开发领域正经历一场深刻的范式转移。传统以代码为中心的工程方法正在被一种以语言为中心的新范式所取代。这一新范式将工程设计的核心原则,如控制、可靠性和可扩展性,应用到了人与AI的交互界面上。本报告将深入探讨这一新兴领域,提出“Harness Engineering”(驾驭工程)这一术语,用以描述其背后的系统性原则、核心实践、行业案例及未来挑战。报告旨在为软件工程师、技术领导者及行业观察家提供一个全面的框架,以理解并应用这一即将定义未来技术格局的关键技术。

一、超越提示词与上下文

在深入探讨Harness Engineering之前,必须首先理解它所处的演化脉络。它并非一个凭空出现的概念,而是对已有AI工程实践的一次系统性整合与升华。它标志着行业的焦点从与AI模型的“单次对话”转向了构建一个让AI能够“持续可靠工作”的完整系统。

1.1 定义Harness Engineering

Harness Engineering(驾驭工程)被定义为一个新兴的工程学科,其核心目标是设计和实现一套围

Harness Engineering

Harness Engineering 定义

Harness engineering 是一门设计和构建约束、反馈循环和生命周期系统的工程学科,用于让 AI 智能体能够可靠地构建软件。它的核心思想是:不直接让 AI 写代码,而是创建一个环境(harness),让 AI 在这个环境中可靠地构建代码

三大核心支柱

1. Context Engineering(上下文工程)

  • 增强的知识库
  • 动态上下文注入(可观测性数据、浏览器导航等)
  • 提供 AI 完成任务所需的完整信息

2. Architectural Constraints(架构约束)

  • 由 AI 智能体监控
  • 自定义 lint 规则
  • 结构性测试
  • 确保生成的代码符合架构规范

3. Entropy Cleanup(熵清理/垃圾回收)

  • 定期运行的智能体来发现不一致和违规
  • 对抗系统随时间的退化
  • 保持代码库的长期质量

典型架构模式

Anthropic 的三智能体架构:

  • Planner(规划智能体):任务分解
  • Generator(生成智能体):代码生成
  • Evaluator(评估智能体):质量评估(基于 Design quality、Originality、Craft、Functionality 等标准)

关键实践

  1. 迭代改进:将智能体的困难视为信号,据此添加工具/护栏/文档
  2. 自我验证循环:build-test-fix 闭环
  3. 循环检测中间件:防止无限循环
  4. "推理三明治":计算预算策略
  5. 状态传递:在智能体之间清晰传递任务状态

构建AI代理:5个常见障碍及解决方案

构建AI代理的新手指南,帮助您克服挑战。

AI代理正变得越来越复杂,能够自动化工作流程、做出决策并与外部工具集成。然而,在现实世界中部署AI代理面临着很多挑战,这些挑战会影响其可靠性、性能和准确性。现在优先建立AI代理设计的强大基础,将为未来可靠、安全的自主系统奠定基础。

👉 本指南探讨了开发人员在创建AI代理时面临的五个最常见障碍,以及克服这些障碍的实用解决方案。 无论您是刚刚入门的新手还是正在改进方法的资深开发人员,这些最佳实践都将帮助您设计出在复杂环境中更可靠、更具扩展性和更有效的AI代理。

让我们开始构建代理式AI吧!

1. 管理工具集成

随着AI代理变得越来越复杂,管理它们对各种工具的访问和使用变得越来越具有挑战性每增加一个工具都会引入新的潜在故障点安全考虑因素性能影响。确保代理适当地使用工具并优雅地处理工具故障对于可靠运行至关重要。

解决这一挑战请为代理工具箱中的每个工具创建精确的定义。包括何时使用该工具的明确示例有效参数范围预期输出构建能够强制执行这些规范的验证逻辑,并从一小组定义明确的工具开始,而不是许多定义松散的工具。定期监控将帮助您识别哪些工具最有效,以及哪些定义需要完善

2. 管理模型推理和决策

构建AI代理的一个基本挑战是确保一致可靠的决策。与遵循明确规则的传统软件系统不同,AI代理必须解释用户意图,对复杂问题进行推理,并最终基于概率分布做出决策。

LangChain Blog: In the Loop

What is an agent?

“什么是代理?”

几乎每天都会有人问我这个问题。在 LangChain,我们构建工具来帮助开发者构建 LLM 应用程序,特别是那些充当推理引擎并与外部数据和计算源交互的应用程序。这包括通常被称为“代理”的系统。

每个人似乎对代理都有稍微不同的定义。我的定义可能比大多数人更技术性:

💡 代理是一个使用 LLM 来决定应用程序控制流的系统。

即使在这里,我也承认我的定义并不完美。人们通常认为代理是高级的、自主的、类人的——但如果是一个简单的系统,LLM 在两个不同路径之间进行路由呢?这符合我的技术定义,但不符合人们对代理应具备能力的普遍看法。很难准确定义什么是代理!

这就是为什么我非常喜欢 Andrew Ng 上周的推文。在推文中,他建议“与其争论哪些工作应被包括或排除为真正的代理,我们可以承认系统可以有不同程度的代理性。”就像自动驾驶汽车有不同的自动化级别一样,我们也可以将代理能力视为一个光谱。我非常同意这个观点,我认为 Andrew 表达得很好。将来,当有人问我什么是代理时,我会转而讨论什么是“代理性”。

什么是代理性(agentic)?

去年我在 TED 演讲中谈到了 LLM 系统,并使用下面的幻灯片讨论了 LLM 应用程序中存在的不同自主级别。

一个系统越“代理性”,LLM 决定系统行为的程度就越高。

使用 LLM 将输入路由到特定的下游工作流中具有一些小的“

CrewAI 快速入门

CrewAI

安装

pip install 'crewai[tools]'

CrewAI 使用 Ollama 运行本地 LLM

.env

OPENAI_API_BASE=http://localhost:11434/v1
OPENAI_MODEL_NAME=aya:8b
OPENAI_API_KEY=NULL

agent.py

版本1

每次执行结果都不一样

from dotenv import load_dotenv
load_dotenv()

from crewai import Agent, Task, Crew
from langchain_openai import ChatOpenAI


general_agent = Agent(
    role = "数学教授", 
    goal = """为提问数学问题的学生提供解决方案并给出答案。""", 
    backstory = """您是一位优秀的数学教授,喜欢以每个人都能理解的方式解决数学问题。""", 
    allow_delegation = False,
    verbose = True
)

// ...

版本2

稳定地生成结果

大型语言模型驱动的自主代理

Application scenarios of AI agents(AI代理的应用场景)

AI代理是LLM应用的重要场景,构建代理应用将是2024年的重要技术领域。目前我们主要的智能形式有单AI代理,多AI代理,混合AI代理等三种。

Single AI Agent(单一人工智能代理)

在特定任务场景下完成的工作,比如 GitHub Copilot Chat 下的代理工作区,就是根据用户需求完成特定编程任务的一个例子。基于 LLM 的能力,单个代理可以根据任务执行不同的动作,比如需求分析、项目阅读、代码生成等。它也可以应用于智能家居和自动驾驶。

Multi-AI Agents(多人工智能代理)

这就是AI代理之间相互交互的工作。例如上述Semantic Kernel代理实现就是一个例子。脚本生成的AI代理与执行脚本的AI代理进行交互。多代理应用场景在高度协同的工作中非常有帮助,例如软件行业开发、智能生产、企业管理等。

Hybrid AI Agent(混合人工智能代理)

这就是人机交互,在同一个环境下做决策。比如智慧医疗、智慧城市等专业领域,可以利用混合智能来完成复杂的专业工作。

Intro of AI agent, & AI agent projects s

使用大型语言模型进行命名实体识别

总结

  • Qwen 模型的指令遵循还是差强人意,这里使用的参数应该是 72B
  • 大型语言模型发挥了它的生成能力,会在原文的基础上给你增加内容,如:济南
  • 问题变化多样,示例也不可能覆盖所有的情况,写的越多占用的上下文长度越大。
  • 在实验二中
    • 明确说明Date实体类型的值,并没有很好的识别出来,如:3月识别为Month一季度识别为Quarter今年识别为Year。这个跟模型有关,ChatGPT就识别的不错。
  • 在实验三中
    • 明确说明不要增加实体类型,但还是增加了,如:County实体类型。
    • 识别的实体有重叠文字,如:曹县曹县供电公司
    • 位置很容易出错,一旦出错后面的实体位置都是错误的了。
  • 使用XML标记方式比输出json结果方式效果更好。

代码 from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import PromptTemplate from langchain_core.runnables import RunnablePassthrough from langchain_community.chat_models.

Gradio Chatbot

Gradio Chatbot

DashScope

import os
import pandas as pd
import gradio as gr
from http import HTTPStatus
from dashscope import Generation
from dashscope.api_entities.dashscope_response import Role
from typing import List, Optional, Tuple, Dict, Generator
from urllib.error import HTTPError


DEFAULT_SYSTEM = '您是一个有用的助手。'

History = List[Tuple[str, str]]
Messages = List[Dict[str, str]]

// ...

LangChain ChatTongyi

Meta Llama 3

Llama3

模型

下载

数据集

HuggingFaceH4/no_robots

No Robots 是由熟练的人类注释者创建的包含 10,000 条指令和演示的高质量数据集。该数据可用于监督微调(SFT),使语言模型更好地遵循指令。 No Robots 是根据 OpenAI 的 InstructGPT 论文中描述的指令数据集进行建模的。

介绍 Llama 3 最大的变化是采用了新的 Tokenizer,将词汇表大

Anthropic Claude

Claude 3 模型

模型 模型名称 价格(MTok) 能力
Opus claude-3-opus-20240229 Input: 15<br>Output:15<br>Output:75 处理复杂的分析、多步骤的长期任务,以及更高阶的数学和编码任务
Sonnet claude-3-sonnet-20240229 Input: 3<br>Output:3<br>Output:15 适用于高效、高吞吐量的任务
Haiku claude-3-haiku-20240307 Input: 0.25<br>Output:0.25<br>Output:1.25 执行轻量级操作,速度领先行业
  • MTok = million tokens.(百万 Token)
  • 所有 Claude 3 模型都支持视觉和 200,000 个 Token 上下文窗口。

例子

LangChain : SQL Chain & SQL Agent

SQL Chain

from datetime import datetime
from operator import itemgetter

from langchain.chains import create_sql_query_chain

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.runnables import RunnableLambda

from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_community.utilities import SQLDatabase
from langchain_community.tools.sql_database.tool import QuerySQLDataBaseTool


// ...

LangChain : Tagging and Extraction Using OpenAI functions

Extraction

from enum import Enum
from typing import Optional, Type
from langchain.pydantic_v1 import BaseModel, Field


class ProvinceEnum(str, Enum):
    """省、直辖市、自治区"""
    山东省 = "山东省"

class CityEnum(str, Enum):
    """山东省地级市"""
    济南 = "济南"
    青岛 = "青岛"
    淄博 = "淄博"
    枣庄 = "枣庄"
// ...

OpenAI

from langchain_openai import ChatOpenAI

model = ChatOpenAI(temperature=0).bind(
    functions=functions,
    function_call={"name": PowerSupplyStationLocation.__name__}
)

response = model.invoke(prompt)
print(response)

LangChain Chat Models Function & Tool Calling

Chat Models Functions & Tools

Model Function Calling Tool Calling Python Package
ChatOpenAI langchain-openai
ChatTongyi langchain-community
ChatOllama langchain-community
OllamaFunctions langchain-experimental

自定义工具

在构建自己的代理时,您需要为其提供一个工具列表,供其使用。除了实际调用的函数之外,工具还包括几个组件:

  • name (str):是必需的,并且在提供给代理的一组工具中必须是唯一的。
  • description (str):可选,但建议提供,因为代理使用它来确定工具的使用。
  • args_schema (Pydantic BaseModel):可选,但建议提供,可用于提供更多信息(例如,少量示例)或对预期参数进行验证。

定义 Function

DashScope 模型服务灵积

DashScope 模型服务灵积

让大模型能力触达每位开发者

灵积模型服务建立在“模型即服务”(Model-as-a-Service,MaaS)的理念基础之上。

灵积通过灵活、易用的模型API服务,让各种模态模型的能力,都能方便的为AI开发者所用。通过灵积API,开发者不仅可以直接集成大模型的强大能力,也可以对模型进行训练微调,实现模型定制化。

通义千问大型语言模型

模型 描述 上下文长度 计量单价
qwen-turbo 通义千问超大型语言模型,支持中文、英文等不同语言输入。 8k 0.008元/1000 tokens
qwen-plus 通义千问超大型语言模型增强版,支持中文、英文等不同语言输入。 32k 0.02元/1000 tokens
qwen-max 通义千问千亿级别超大型语言模型,支持中文、英文等不同语言输入。 8k 0.12元/1000 tokens
qwen-max-longcontext 通义千问千亿级别超大型语言模型,支持中文、英文等不同语言输入。 30k 0.12元/1000 tokens
qwen-72b-chat 通义千问开源 720 亿参数大型语言模型 8k 0.02元/1000 tokens
qwen1.5-72b-chat 通义千问开源 720 亿参数大型语言模型 32k

LangChain 调用

LangChain Text2SQL Agent

OpenAI Function Call (Extraction)

这个方法只有 OpenAI 的模型支持。

from langchain.agents import tool
from langchain.chat_models import ChatOpenAI
from langchain.tools.render import format_tool_to_openai_function

from langchain.pydantic_v1 import BaseModel, Field
from enum import Enum


# 省份、直辖市
class ProvinceEnum(str, Enum):
    山东省 = "山东省"
    # 其它省份


# 山东省地级市
// ...

OpenAI gpt-3.