如果你在简历上写了“精通Agent”面试官大概率会追问LangGraph和Harness。这不是危言耸听而是2026年大模型Agent技术栈的硬通货。LangGraph不再是LangChain的一个简单组件而是构建复杂、有状态、可编排Agent系统的核心框架Harness则代表了新一代的Agent工程化与评估平台。不懂这两者所谓的“精通”在面试中会立刻被证伪。这篇文章不讲空洞的概念直接聚焦于实战LangGraph如何设计State并驱动Agent循环Harness又如何对Agent进行压测、评估与部署。我们会从零搭建一个基于LangGraph的多Agent协作系统并用Harness对其进行全链路评估让你不仅知道是什么更能亲手跑通、验证效果并回答面试中的高频问题。1. 核心能力速览LangGraph Harness 技术栈定位在深入代码之前我们先通过一个表格快速厘清这两个核心工具的角色与价值这是理解后续所有内容的基础。能力项LangGraphHarness核心定位Agent编排与状态管理框架Agent全生命周期工程化平台解决痛点Agent间协作混乱、状态难以维护、流程无法可视化。Agent开发黑盒、效果难以量化、性能无法评估、部署复杂。关键概念State状态、Node节点、Edge边、Graph图。Pipeline流水线、Evaluation评估、Load Test压测、Deployment部署。输出物一个可执行的、有状态的Agent工作流图。评估报告、性能指标、可部署的Agent服务。适合场景构建客服机器人、游戏NPC、自动化报告生成、复杂决策系统等需要多步骤、有记忆的Agent应用。对Agent进行回归测试、对比不同模型/提示词的效果、评估系统承载能力、实现CI/CD。硬件门槛无特殊要求依赖底层大模型API或本地模型的资源。无特殊要求通常作为管理平台运行。启动方式Python库通过代码定义和运行。通常提供Web UI、CLI及API支持本地部署或SaaS服务。是否支持API其本身是一个框架构建的Agent图可以暴露为API。是核心功能通过API提供便于集成。是否支持批量任务是可以通过循环和状态管理处理批量输入。核心优势专门设计用于批量评估和压测。简单来说用LangGraph“造”Agent用Harness“测”和“管”Agent。两者结合才能称得上一个完整的、可工程化的Agent解决方案。2. 为什么“精通Agent”必须掌握这两者仅仅会调用ChatGPT API或写几个简单的LangChain Agent已经不够了。面试官考察的是你构建可靠、可维护、可评估的复杂Agent系统的能力。LangGraph考察的是设计能力你能不能用“图”的思维来建模业务逻辑如何设计State来承载对话历史、工具调用结果、中间结论如何控制流程的分支与循环这些是区分初级调用和高级架构的关键。Harness考察的是工程化能力你开发的Agent效果到底怎么样换一个模型或提示词指标是升还是降同时有1000个用户请求你的Agent服务会不会崩如何将Agent像微服务一样部署和监控Harness提供了答案。跳过这两者简历上的“精通Agent”就如同声称精通Web开发却不懂HTTP和数据库一样苍白。3. 环境准备与前置条件我们将构建一个模拟的“多Agent信贷报告生成系统”这涉及到多个LLM调用、工具使用和状态传递。基础环境操作系统Linux (Ubuntu 20.04), macOS, 或 WSL2 (Windows)。Python版本 3.10。包管理工具pip或poetry。核心依赖我们需要安装LangGraph、LangChain用于基础组件和工具以及OpenAI或其他大模型的SDK。Harness部分我们以其开源SDK或API为例。# 创建并进入项目目录 mkdir langgraph-harness-demo cd langgraph-harness-demo python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate # 安装核心库 pip install langgraph langchain langchain-openai # 安装Harness客户端 (以开源或模拟为例具体包名需参考官方文档) # pip install harness-sdk # 注DeepSeek Harness等可能处于内测请以官方发布为准。本文以概念和模式讲解为主。API密钥准备OpenAI API Key用于驱动LLM。你也可以替换为ChatOllama本地模型、ChatAnthropic等。Harness API Key/Token如果需要连接其云服务或私有部署。4. 用LangGraph构建多Agent信贷报告系统假设场景一个Agent系统需要根据企业名称自动生成一份信贷尽职调查报告。它需要协调三个专家Agent信息收集Agent调用搜索工具获取企业公开信息。财务分析Agent解析获取的信息进行财务风险初步评估。报告撰写Agent综合所有信息生成结构化的报告。4.1 定义State系统的“记忆中枢”State是一个Pydantic模型它定义了在整个工作流中传递和更新的所有数据。from typing import TypedDict, List, Annotated from langgraph.graph.message import add_messages import operator # 定义状态结构 class AgentState(TypedDict): # 消息历史LangGraph内置支持 messages: Annotated[List[str], add_messages] # 用户输入企业名称 company_name: str # 中间结果收集到的原始信息 collected_info: str # 中间结果财务分析摘要 financial_analysis: str # 最终输出生成的报告 final_report: str4.2 实现各个功能节点Node每个节点是一个函数接收当前的State执行操作并返回更新后的State。from langchain_openai import ChatOpenAI from langchain.tools import Tool from langchain.agents import AgentExecutor, create_openai_tools_agent from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder import asyncio llm ChatOpenAI(modelgpt-4o-mini, temperature0, api_keyyour-key) # 节点1信息收集Agent def collect_info_node(state: AgentState) - AgentState: 模拟调用搜索工具收集企业信息 print(f[信息收集Agent] 正在查询企业: {state[company_name]}) # 这里应集成真实的搜索API如SerperAPI、Google Search # 为演示我们模拟返回一些信息 simulated_info f {state[company_name]}成立于2015年是一家专注于SaaS软件的科技公司。 近三年营收增长率为15%、25%、30%。净利润率保持在10%左右。 公开信息显示其拥有多项软件著作权客户主要集中在金融行业。 近期有一笔5000万的B轮融资。 return {**state, collected_info: simulated_info} # 节点2财务分析Agent def financial_analysis_node(state: AgentState) - AgentState: 分析收集到的信息评估财务风险 print(f[财务分析Agent] 正在分析信息...) prompt ChatPromptTemplate.from_messages([ (system, 你是一位资深财务分析师。请根据以下企业信息提炼关键财务指标和潜在风险点。输出一段简洁的分析摘要。), (user, 企业信息\n{info}) ]) chain prompt | llm analysis chain.invoke({info: state[collected_info]}).content return {**state, financial_analysis: analysis} # 节点3报告撰写Agent def report_writing_node(state: AgentState) - AgentState: 综合所有信息生成最终报告 print(f[报告撰写Agent] 正在生成信贷尽职调查报告...) prompt ChatPromptTemplate.from_messages([ (system, 你是一位信贷风控专家。请根据企业基本信息、财务分析撰写一份专业的信贷尽职调查报告大纲。报告需包含公司概况、经营分析、财务风险、总体结论与建议。), (user, 企业名称{name} 基础信息{info} 财务分析{analysis} 请生成报告。 ) ]) chain prompt | llm report chain.invoke({ name: state[company_name], info: state[collected_info], analysis: state[financial_analysis] }).content return {**state, final_report: report}4.3 组装成图Graph并定义流程这是LangGraph的核心我们定义节点之间的执行顺序和条件流转。from langgraph.graph import StateGraph, END # 创建图 workflow StateGraph(AgentState) # 添加节点 workflow.add_node(collect_info, collect_info_node) workflow.add_node(financial_analysis, financial_analysis_node) workflow.add_node(report_writing, report_writing_node) # 设置入口点 workflow.set_entry_point(collect_info) # 添加边定义线性流程收集信息 - 财务分析 - 撰写报告 workflow.add_edge(collect_info, financial_analysis) workflow.add_edge(financial_analysis, report_writing) workflow.add_edge(report_writing, END) # 编译图 app workflow.compile()4.4 运行与测试现在我们可以运行这个多Agent工作流了。# 初始化状态 initial_state: AgentState { messages: [], company_name: 深度求索科技有限公司, collected_info: , financial_analysis: , final_report: } # 执行图 try: final_state app.invoke(initial_state) print(\n *50) print(✅ 信贷尽职调查报告生成完成) print(*50) print(final_state[final_report]) except Exception as e: print(f❌ 工作流执行失败: {e})执行上述代码你将在控制台看到三个Agent依次被触发并最终输出一份结构化的报告。这演示了一个简单的线性流程。LangGraph更强大的地方在于支持条件分支和循环例如如果财务分析风险过高可以增加一个“人工审核”节点否则直接生成报告。5. 使用Harness对Agent进行工程化评估构建出Agent只是第一步。它真的可靠吗效果比另一个版本好吗这就需要Harness出场了。Harness的核心功能是对AI Pipeline包括我们刚建的LangGraph图进行评估Evaluation、负载测试Load Testing和监控Monitoring。由于Harness的具体API可能变动以下代码为概念性示例展示了如何集成Harness对LangGraph应用进行评估。5.1 定义评估数据集与指标首先你需要一份测试数据集例如一批不同的公司名称和评估标准例如报告完整性、风险点覆盖度、格式规范性。# 假设的测试用例 test_cases [ {company_name: 深度求索科技有限公司, expected_risk_keywords: [增长, 融资, 软件]}, {company_name: 某传统制造企业, expected_risk_keywords: [成本, 竞争, 转型]}, # ... 更多测试用例 ] # 定义评估函数 (需根据实际业务定制) def evaluate_report(report: str, expected_keywords: list) - dict: 一个简单的评估函数检查报告是否包含预期的关键词 score 0 found_keywords [] for keyword in expected_keywords: if keyword in report: score 1 found_keywords.append(keyword) coverage score / len(expected_keywords) if expected_keywords else 1.0 return { score: score, coverage: coverage, found_keywords: found_keywords, missing_keywords: [k for k in expected_keywords if k not in found_keywords] }5.2 集成Harness SDK进行批量测试与评估import asyncio from datetime import datetime # 假设的Harness SDK导入 # from harness_sdk import HarnessClient, EvaluationRun, LoadTest # 1. 初始化Harness客户端 # harness_client HarnessClient(api_keyyour-harness-api-key) # 2. 为我们的LangGraph应用创建一个评估流水线(Pipeline) async def run_harness_evaluation(): results [] for test_case in test_cases: # 使用我们的LangGraph应用处理一个测试用例 initial_state { messages: [], company_name: test_case[company_name], collected_info: , financial_analysis: , final_report: } final_state app.invoke(initial_state) generated_report final_state[final_report] # 使用自定义函数评估结果 eval_result evaluate_report(generated_report, test_case.get(expected_risk_keywords, [])) # 记录结果 case_result { input: test_case[company_name], output: generated_report[:200] ..., # 截取部分 evaluation: eval_result, timestamp: datetime.utcnow().isoformat() } results.append(case_result) print(f测试用例 {test_case[company_name]} 评估完成。覆盖率: {eval_result[coverage]:.2%}) # 3. 汇总并分析结果 (这里可以上报到Harness Dashboard) avg_coverage sum(r[evaluation][coverage] for r in results) / len(results) print(f\n 批量评估完成。平均关键词覆盖率: {avg_coverage:.2%}) # 模拟将结果发送到Harness平台进行可视化 # await harness_client.report_evaluation_results( # pipeline_idcredit_agent_v1, # resultsresults, # overall_metrics{avg_coverage: avg_coverage} # ) return results # 运行评估 # asyncio.run(run_harness_evaluation())5.3 负载测试Load Testing概念除了功能评估Harness还能模拟高并发请求对你的LangGraph服务进行压力测试。目的找出服务的瓶颈如API速率限制、响应延迟、内存泄漏。方法使用Harness的负载测试工具配置并发用户数、请求速率、持续时间向你的Agent端点如果你将其封装为HTTP服务发起请求。关键指标吞吐量RPS、延迟P50, P95, P99、错误率。# 概念性的Harness负载测试配置 # load_test_config: # target: http://localhost:8000/generate-report # method: POST # duration: 5m # rate: 50 # 每秒50个请求 # payload: # company_name: “{{ .RandomCompany }}” # 使用变量6. 将LangGraph Agent部署为API服务为了能让Harness进行压测也为了实际生产调用我们需要将LangGraph应用包装成一个Web服务。这里使用FastAPI示例。from fastapi import FastAPI, HTTPException from pydantic import BaseModel import uvicorn app FastAPI(title信贷报告Agent API) class ReportRequest(BaseModel): company_name: str class ReportResponse(BaseModel): company_name: str report: str status: str app.post(/generate-report, response_modelReportResponse) async def generate_report(request: ReportRequest): API端点接收公司名称返回生成的报告 try: initial_state: AgentState { messages: [], company_name: request.company_name, collected_info: , financial_analysis: , final_report: } final_state app.invoke(initial_state) return ReportResponse( company_namerequest.company_name, reportfinal_state[final_report], statussuccess ) except Exception as e: raise HTTPException(status_code500, detailf报告生成失败: {str(e)}) if __name__ __main__: # 启动服务Harness可以对这个端口进行压测 uvicorn.run(app, host0.0.0.0, port8000)启动服务后你就可以通过http://localhost:8000/generate-report来调用Agent也为Harness的负载测试提供了目标。7. 面试高频问题与实战解答基于以上实践我们来回答几个面试中可能遇到的棘手问题。Q1: LangGraph中的State和LangChain中的Memory有什么区别A1: LangChain的Memory主要用于管理对话历史如ConversationBufferMemory是一个相对高层和封装的概念。而LangGraph的State是一个更底层、更灵活的数据结构它是一个TypedDict可以定义任何你需要在整个工作流中传递和修改的数据比如本例中的collected_info、financial_analysis。State是图的“血液”承载了所有节点的输入和输出。Q2: 在LangGraph中如何实现条件判断和循环A2: 这是LangGraph的核心优势。通过add_conditional_edges方法实现。条件判断一个节点完成后根据State中的某个值如financial_risk为“高”决定下一个节点是去human_review还是finalize_report。循环让一条边指回之前的某个节点直到满足State中的某个条件如is_complete: True才流向END。这可以用来实现ReAct等循环推理模式。Q3: 为什么要用Harness直接用单元测试不行吗A3: 单元测试如pytest适合测试固定输入输出的确定性函数。而Agent系统具有不确定性LLM输出不固定、评估维度多元相关性、安全性、格式、延迟且需要大规模批量验证。Harness提供了专为AI设计的评估框架内置和自定义评估器LLM-as-a-Judge。可视化对比轻松对比不同模型、提示词、参数下的效果。生产级压测模拟真实用户流量发现性能瓶颈。持续监控在生产环境跟踪Agent的指标漂移。这是普通单元测试无法比拟的。Q4: 如何设计一个可评估的Agent StateA4: 在设计State时就要考虑评估。除了业务数据可以加入metadata字段用于记录评估所需的中间信息。class EvaluableAgentState(TypedDict): company_name: str final_report: str # 用于评估的元数据 metadata: dict # 可包含模型使用成本(tokens)、执行步骤数、每个节点的耗时、调用的工具列表等。这样在Harness评估时不仅能评估最终输出还能分析效率、成本等运营指标。8. 常见问题与排查方法在开发和集成LangGraph与Harness过程中你可能会遇到以下问题问题现象可能原因排查方式解决方案LangGraph图编译或执行失败State结构定义与节点返回值不匹配节点函数未返回完整的State。检查节点函数返回值是否为字典且包含State定义的所有键。使用print或日志在节点内调试。确保每个节点都返回{**state, “your_key”: updated_value}格式。Agent陷入无限循环循环条件设置错误导致始终无法满足退出条件。在State中添加iteration_count计数器并在循环节点中打印。仔细检查条件边的判断逻辑确保在某个条件下能导向END。Harness评估结果不一致测试用例设计不全面评估函数LLM-as-Judge本身具有波动性。增加测试用例数量对同一个用例多次运行观察评估分数的方差。使用更大、更全面的测试集采用多数投票或平均分作为最终评估结果检查评估提示词是否清晰无歧义。API服务在高并发下崩溃LangGraph应用或底层LLM调用非线程安全服务器资源内存、线程不足。使用Harness负载测试观察错误率和资源监控。查看服务日志。1. 确保LLM客户端配置了合理的重试和超时。2. 使用asyncio优化异步处理。3. 对于CPU密集型操作考虑任务队列如Celery。4. 增加服务器资源或水平扩展。无法连接到Harness服务网络问题API密钥错误Harness服务未启动或版本不兼容。使用curl或postman测试Harness API连通性。检查SDK版本和文档。确认网络策略检查API密钥权限参照Harness官方文档进行正确配置。9. 最佳实践与使用建议State设计先行在写节点代码之前先花时间设计好State。它定义了Agent工作流的“数据合约”清晰的State是项目可维护性的关键。节点功能单一化每个节点只做一件事。例如一个节点负责调用搜索另一个节点负责解析结果。这有利于测试、复用和调试。为评估而开发在构建Agent的初期就同步构思如何评估它。准备一小批高质量的测试用例并编写初步的评估脚本。这能极大提升迭代效率。版本控制一切对LangGraph的工作流定义、Harness的评估配置、测试数据集、提示词模板都进行版本控制如Git。这样才能可靠地复现结果和对比不同版本的优劣。安全与合规在实际业务中如信贷报告确保你的Agent不泄露敏感信息其生成内容符合行业法规。在Harness评估中应加入安全性和合规性检查。从简单开始逐步复杂先构建一个能跑通的线性流程再逐步添加条件分支、循环、人工审核节点等复杂逻辑。不要一开始就设计过于复杂的图。10. 总结与下一步通过本文的实战你应该已经清晰“精通Agent”在2026年的技术栈必然包含LangGraph和Harness。LangGraph让你能以工程化的方式构建复杂、有状态的智能体工作流而Harness则为这个工作流提供了工业化生产的质检线、压力测试机和监控仪表盘。最值得尝试的下一步改造现有项目找一个你之前用LangChain简单Agent实现的项目尝试用LangGraph重构体会状态管理和流程编排带来的清晰度提升。设计一个评估方案即使暂时不用Harness平台也为你的Agent设计一份包含10个测试用例的评估数据集并写一个Python脚本自动运行和打分。探索循环与分支在本例的线性图上增加一个“财务风险判断”节点。如果风险高则让流程跳转到一个“请求补充材料”的节点形成循环。关注开源生态Harness的理念正在被广泛接受除了商业/内测版本也可以关注其他开源的AI评估与监控框架如Phoenix、Trulens其核心思想是相通的。掌握这套组合拳你不仅能造出更强大的Agent更能向面试官证明你具备让AI应用落地、可靠、可度量的工程化能力这才是“精通”二字的真正分量。