本文详细介绍了如何使用LangChain生态系统中的LangGraph构建AI智能体,并通过LangSmith平台进行跟踪、监控和评估。通过数学问题求解的实战案例,展示了API密钥设置、智能体创建、实验运行及结果分析的全过程。这种组合能有效追踪AI系统成本、性能和准确性,是开发者构建可靠AI系统的必备工具。
LangChain创造了一个包含LangChain、LangGraph、LangSmith和LangServe的良好生态系统。利用这些工具,我们可以构建、部署、评估和监控智能体 AI 系统 (Agentic AI systems)。
在构建AI智能体时,我不禁想:“为什么不展示一个简单的Demo来演示LangGraph和LangSmith是如何协作的呢?” 这将会非常地有用,因为AI智能体通常需要多次调用LLM,并且费用较高。这种组合将有助于跟踪开支并使用自定义数据集评估系统。
LangGraph
简而言之,AI智能体是具备思考/推理能力的LLM,它们可以访问工具来弥补自身的不足或获取实时信息。LangGraph是一个基于LangChain的智能体 AI 框架,用于构建这些AI智能体。LangGraph有助于构建基于图的智能体 (graph-based Agents);此外,LangGraph/LangChain库中已经存在的许多内置功能简化了智能体工作流 (Agentic workflows)的创建。
什么是 LangSmith?
LangSmith是LangChain推出的一个监控和评估平台。它不依赖于特定框架,旨在与任何智能体框架(例如LangGraph)甚至完全从头构建的智能体配合使用。
可以轻松配置LangSmith来跟踪 (trace)运行过程,并追踪智能体系统的开支。它还支持对系统进行实验 (experiments),例如更改系统中的提示词 (prompt) 和模型,并比较结果。它具有预定义的评估器,如有用性 (helpfulness)、正确性 (correctness)和幻觉 (hallucinations)。你也可以选择定义自己的评估器。让我们看一下LangSmith平台以获得更好的理解。
LangSmith 平台功能
让我们先注册/登录平台:https://www.langchain.com/langsmith
平台包含多个选项卡:
- Tracing Projects (跟踪项目):跟踪多个项目及其轨迹 (traces)或运行集 (sets of runs)。在这里,可以跟踪成本、错误、延迟 (latency)以及许多其他信息。
- Monitoring (监控):在这里你可以设置警报,例如,在系统失败或延迟超过设定的阈值时发出警告。
- Dataset & Experiments (数据集与实验):在这里,你可以使用人工制作的数据集运行实验,或者使用平台创建AI生成的数据集来测试你的系统。你还可以更改模型以查看性能如何变化。
- Prompts (提示词):在这里你可以存储一些提示词,稍后更改措辞或指令顺序,以查看结果的变化。
LangSmith 实践
我们将构建一个使用简单工具来解决数学表达式的智能体,然后启用可追溯性 (traceability)。随后,我们将检查LangSmith仪表板,看看可以使用该平台跟踪哪些信息。
获取API密钥:
访问LangSmith仪表板并点击‘Setup Observability’按钮。然后你会看到这个界面:https://www.langchain.com/langsmith
点击‘Generate API Key’选项,并将LangSmith密钥放在手边。
现在访问Google AI Studio以获取Gemini API key:https://aistudio.google.com/api-keys
点击右上角的‘Create API key’,如果项目不存在则创建一个,并将密钥放在手边。
代码实现
安装
!pip install -q langgraph langsmith langchain !pip install -q langchain-google-genai★注意: 请确保在此处继续之前重启会话 (restart the session)。
设置环境
在提示时输入API密钥。
from getpass import getpassLANGCHAIN_API_KEY=getpass('Enter LangSmith API Key: ')GOOGLE_API_KEY=getpass('Enter Gemini API Key: ')import osos.environ['LANGCHAIN_TRACING_V2'] = 'true'os.environ['LANGCHAIN_API_KEY'] = LANGCHAIN_API_KEYos.environ['LANGCHAIN_PROJECT'] = 'Testing'★ 注: 建议使用不同的项目名称来跟踪不同的项目;将其命名Testing
设置和运行智能体
这里我们使用一个智能体可以用来解决数学表达式的简单工具。
我们使用LangGraph内置的create_react_agent,我们只需要定义模型,赋予工具访问权限,即可开始使用。
from langgraph.prebuilt import create_react_agentfrom langchain_google_genai import ChatGoogleGenerativeAIdef solve_math_problem(expression: str) -> str: """Solve a math problem.""" try: # Evaluate the mathematical expression result = eval(expression, {"__builtins__": {}}) returnf"The answer is {result}." except Exception: return"I couldn't solve that expression."# Initialize the Gemini model with API keymodel = ChatGoogleGenerativeAI( model="gemini-2.5-flash", google_api_key=GOOGLE_API_KEY)# Create the agentagent = create_react_agent( model=model, tools=[solve_math_problem], prompt=( "You are a Math Tutor AI. " "When a user asks a math question, reason through the steps clearly " "and use the tool `solve_math_problem` for numeric calculations. " "Always explain your reasoning before giving the final answer." ),)# Run the agentresponse = agent.invoke( {"messages": [{"role": "user", "content": "What is (12 + 8) * 3?"}]})print(response)输出:
我们可以看到智能体使用了工具的响应‘The answer is 60’,并且在回答问题时没有产生幻觉。现在让我们查看LangSmith仪表板。
LangSmith 仪表板
Tracing Projects选项卡
我们可以看到项目已以‘testing’名称创建;你可以点击它查看详细日志。
这里显示了按运行划分的详细信息:
- Total Tokens (总 Tokens 数)
- Total Cost (总成本)
- Latency (延迟)
- Input (输入)
- Output (输出)
- Time when the code was executed (代码执行时间)
Monitoring选项卡
在这里你可以看到一个包含项目、运行和总成本的仪表板。
LLM 作为评判者
LangSmith允许使用带有输入 (input)和输出 (output)键的简单字典来创建数据集 (dataset)。这个带有预期输出的数据集可以用于评估AI系统生成的输出在有用性、正确性和幻觉等指标上的表现。
我们将使用类似的数学智能体,创建数据集,并评估我们的智能体系统。
安装
!pip install -q openevals langchain-openai环境设置
import osfrom google.colab import userdataos.environ['OPENAI_API_KEY']=userdata.get('OPENAI_API_KEY')定义智能体
from langsmith import Client, wrappersfrom openevals.llm import create_llm_as_judgefrom openevals.prompts import CORRECTNESS_PROMPTfrom langchain_openai import ChatOpenAIfrom langgraph.prebuilt import create_react_agentfrom langchain_core.tools import toolfrom typing import Dict, Listimport requests# STEP 1: Define Tools for the Agent =====@tooldef solve_math_problem(expression: str) -> str: """Solve a math problem.""" try: # Evaluate the mathematical expression result = eval(expression, {"__builtins__": {}}) returnf"The answer is {result}." except Exception: return"I couldn't solve that expression."# STEP 2: Create the LangGraph ReAct Agent =====def create_math_agent(): """Create a ReAct agent with tools.""" # Initialize the LLM model = ChatOpenAI(model="gpt-4o-mini", temperature=0) # Define the tools tools = [solve_math_problem] # Create the ReAct agent using LangGraph's prebuilt function agent = create_react_agent( model=model, tools=[solve_math_problem], prompt=( "You are a Math Tutor AI. " "When a user asks a math question, reason through the steps clearly " "and use the tool `solve_math_problem` for numeric calculations. " "Always explain your reasoning before giving the final answer." ), ) return agent创建数据集
让我们创建一个包含简单和困难数学表达式的数据集,我们稍后可以使用它来运行实验。
client = Client()dataset = client.create_dataset( dataset_name="Math Dataset", description="Hard numeric + mixed arithmetic expressions to evaluate the solver agent.")examples = [ # Simple check { "inputs": {"question": "12 + 7"}, "outputs": {"answer": "The answer is 19."}, }, { "inputs": {"question": "100 - 37"}, "outputs": {"answer": "The answer is 63."}, }, # Mixed operators and parentheses { "inputs": {"question": "(3 + 5) * 2 - 4 / 2"}, "outputs": {"answer": "The answer is 14.0."}, }, { "inputs": {"question": "2 * (3 + (4 - 1)*5) / 3"}, "outputs": {"answer": "The answer is 14.0."}, }, # Large numbers & multiplication { "inputs": {"question": "98765 * 4321"}, "outputs": {"answer": "The answer is 426,373,565."}, }, { "inputs": {"question": "123456789 * 987654321"}, "outputs": {"answer": "The answer is 121,932,631,112,635,269."}, }, # Division, decimals, rounding { "inputs": {"question": "22 / 7"}, "outputs": {"answer": "The answer is approximately 3.142857142857143."}, }, { "inputs": {"question": "5 / 3"}, "outputs": {"answer": "The answer is 1.6666666666666667."}, }, # Exponents, roots { "inputs": {"question": "2 ** 10 + 3 ** 5"}, "outputs": {"answer": "The answer is 1128."}, }, { "inputs": {"question": "sqrt(2) * sqrt(8)"}, "outputs": {"answer": "The answer is 4.0."}, }, # Edge / error / “unanswerable” cases { "inputs": {"question": "5 / 0"}, "outputs": {"answer": "I couldn’t solve that expression."}, }, { "inputs": {"question": "abc + 5"}, "outputs": {"answer": "I couldn’t solve that expression."}, }, { "inputs": {"question": ""}, "outputs": {"answer": "I couldn’t solve that expression."}, },]client.create_examples( dataset_id=dataset.id, examples=examples)太棒了!我们创建了一个包含13条记录的数据集。
定义目标函数
此函数调用智能体并返回响应。
def target(inputs: Dict) -> Dict: agent = create_math_agent() agent_input = { "messages": [{"role": "user", "content": inputs["question"]}] } result = agent.invoke(agent_input) final_message = result["messages"][-1] answer = final_message.content if hasattr(final_message, 'content') else str(final_message) return {"answer": answer}定义评估器
我们使用预构建的llm_as_judge函数,并从openevals库中导入提示词。
我们目前使用4o-mini来保持低成本,但推理模型可能更适合此任务。
def correctness_evaluator(inputs: Dict, outputs: Dict, reference_outputs: Dict) -> Dict: evaluator = create_llm_as_judge( prompt=CORRECTNESS_PROMPT, model="openai:gpt-4o-mini", feedback_key="correctness", ) eval_result = evaluator( inputs=inputs, outputs=outputs, reference_outputs=reference_outputs ) return eval_result运行评估
experiment_results = client.evaluate( target, data="Math Dataset", evaluators=[correctness_evaluator], experiment_prefix="langgraph-math-agent", max_concurrency=2,)输出:
运行后将生成一个链接。点击该链接,你将被重定向到LangSmith的‘Datasets & Experiments’选项卡,在那里你可以看到实验结果。
我们成功地进行了使用LLM作为评判者的实验。这在发现边缘案例 (edge cases)、成本和token使用方面具有洞察力。
这里的错误大多是由于使用逗号或存在长小数导致的不匹配。这可以通过更改评估提示词或尝试推理模型来解决。或者简单地在工具级别添加逗号并确保小数格式。
总结
就是这样!我们成功展示了LangGraph(用于构建智能体)和LangSmith(用于跟踪和评估它)的交织工作。这种组合对于跟踪开支和确保你的智能体通过自定义数据集按预期运行非常强大。虽然我们专注于跟踪和实验,但LangSmith的能力不止于此。你还可以探索更强大的功能,例如在生产环境中对不同提示词进行A/B 测试、将人工干预反馈 (human-in-the-loop feedback)直接添加到轨迹中,以及创建自动化来简化你的调试工作流。
AI时代,未来的就业机会在哪里?
答案就藏在大模型的浪潮里。从ChatGPT、DeepSeek等日常工具,到自然语言处理、计算机视觉、多模态等核心领域,技术普惠化、应用垂直化与生态开源化正催生Prompt工程师、自然语言处理、计算机视觉工程师、大模型算法工程师、AI应用产品经理等AI岗位。
掌握大模型技能,就是把握高薪未来。
那么,普通人如何抓住大模型风口?
AI技术的普及对个人能力提出了新的要求,在AI时代,持续学习和适应新技术变得尤为重要。无论是企业还是个人,都需要不断更新知识体系,提升与AI协作的能力,以适应不断变化的工作环境。
因此,这里给大家整理了一份《2025最新大模型全套学习资源》,包括2025最新大模型学习路线、大模型书籍、视频教程、项目实战、最新行业报告、面试题等,带你从零基础入门到精通,快速掌握大模型技术!
由于篇幅有限,有需要的小伙伴可以扫码获取!
1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。
2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)
3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。
4. 大模型项目实战
学以致用,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。
5. 大模型行业报告
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
6. 大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
为什么大家都在学AI大模型?
随着AI技术的发展,企业对人才的需求从“单一技术”转向 “AI+行业”双背景。企业对人才的需求从“单一技术”转向 “AI+行业”双背景。金融+AI、制造+AI、医疗+AI等跨界岗位薪资涨幅达30%-50%。
同时很多人面临优化裁员,近期科技巨头英特尔裁员2万人,传统岗位不断缩减,因此转行AI势在必行!
这些资料有用吗?
这份资料由我们和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
大模型全套学习资料已整理打包,有需要的小伙伴可以
微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费】