大模型应用开发实战:基于LangChain与Langfuse构建可观测、可评估的智能体系统 这次我们来看一个面向2026年大模型面试的综合性学习与评估项目。它不是一个单一的软件或模型而是一个精心设计的、以实战为导向的知识体系与工具链集合。核心目标非常明确帮助开发者系统性地准备大模型应用开发岗位的面试覆盖从基础概念到复杂系统设计的全栈能力。项目的核心亮点在于其“学、练、评”一体化设计。它不仅整理了海量的面试题八股文、场景题更重要的是引入了Langfuse这样的专业工具来进行Agent 追踪与评估让你能真实地搭建、运行并量化分析基于LangChain和LangGraph的智能体应用。这意味着你不再只是背诵答案而是能亲手构建一个可观测、可评估的 RAG 或 Agent 系统并用数据来证明你的设计是有效的。对于正在准备面试或希望深入掌握大模型应用开发的朋友来说这个项目直击痛点面试官越来越关注实际工程能力和系统设计思维而不仅仅是理论。通过这个项目你可以掌握核心框架深入理解 LangChain 的模块化设计与 LangGraph 的状态图工作流。构建可评估系统学习使用 Langfuse 对 Agent 的每一步决策进行追踪、记录和评估这是生产级应用的关键。应对复杂场景通过实战场景题和 RAG/Agent 项目锻炼解决实际问题的能力。巩固基础知识用高质量的八股文查漏补缺夯实大模型原理、微调、评估等理论基础。本文将带你梳理这个“面试100问”项目的核心内容框架并重点演示如何结合 Langfuse、LangChain 和 LangGraph 搭建一个可追踪、可评估的智能体系统为你提供一套从学习到实践再到效果验证的完整方法论。1. 核心能力速览能力项说明项目类型大模型面试准备知识库与实战工具链集成核心组件Langfuse (追踪/评估)、LangChain (框架)、LangGraph (工作流)、RAG/Agent 场景题技术栈Python, LLM APIs (OpenAI/通义千问/DeepSeek等), 向量数据库, 观测评估平台硬件门槛无特殊要求。本地开发依赖 Python 环境Langfuse 可本地部署或使用云服务大模型推理通常调用 API无需本地 GPU。关键产出面试题解、可运行的 Agent 示例代码、Langfuse 评估看板、系统设计文档适合场景个人面试准备、团队技术培训、大模型应用原型开发与效果评估2. 适用场景与使用边界这个项目主要服务于以下几类人群求职者针对大模型应用开发、AI 工程师、LLM 应用架构师等岗位进行系统性备战。在校学生/研究者希望通过实战项目深入理解 LangChain、LangGraph 和 Agent 评估等工业界主流技术。团队技术负责人寻找一套可用于培训团队成员、统一技术栈和评估项目效果的方案。个人开发者希望构建一个可观测、可评估的智能体应用并学习最佳实践。它能解决的问题知识体系化将分散的面试知识点八股文和实战技能场景题进行结构化整理。技能可验证通过 Langfuse 的追踪和评估功能将抽象的“会做 Agent”转化为可量化的指标如准确率、耗时、成本。工程化思维培养引导开发者思考如何设计可维护、可观测、可评估的 AI 系统而不仅仅是写 prompt。使用边界与注意事项非开箱即用产品这是一个学习项目和工具链指南需要你具备基本的 Python 开发能力并主动配置和运行代码。模型服务依赖大部分示例需要接入大模型 API如 OpenAI GPT-4, Claude, 国内各大模型会产生相应费用。评估的客观性Langfuse 提供了强大的数据收集和评估框架但评估标准评分模型、评估提示词需要根据具体任务精心设计否则可能无法真实反映系统性能。版权与合规项目中涉及的面试题、场景设计应仅用于学习目的。在构建自己的 RAG 系统时务必确保数据源的版权合规性。3. 环境准备与前置条件在开始实战之前需要准备好以下环境。由于项目涉及多个工具我们分步进行。3.1 基础开发环境操作系统Windows 10/11, macOS, 或 Linux (推荐 Ubuntu)。Python版本 3.10 或 3.11。建议使用conda或venv创建独立的虚拟环境。包管理工具pip。代码编辑器VS Code (推荐) 或 PyCharm。Git用于克隆项目仓库如果项目以代码库形式提供。3.2 核心服务与 API 准备大模型 API准备一个或多个大模型的 API Key。例如OpenAI: 平台地址阿里云通义千问 平台地址深度求索 DeepSeek 平台地址Anthropic Claude 平台地址将 API Key 设置为环境变量这是最安全的方式。# 在终端中设置 (临时) export OPENAI_API_KEYyour-api-key-here # 或者在 .env 文件中配置 (推荐)Langfuse 服务选项A云服务最简单直接注册 Langfuse Cloud 获取LANGFUSE_PUBLIC_KEY,LANGFUSE_SECRET_KEY和LANGFUSE_HOST。选项B本地部署数据可控通过 Docker 在本地部署 Langfuse。# 使用 Docker Compose 部署 git clone https://github.com/langfuse/langfuse.git cd langfuse/docker # 编辑 docker-compose.yml 中的环境变量如密码 docker-compose up -d # 部署后访问 http://localhost:3000 初始化账号同样将 Langfuse 的密钥设置为环境变量。export LANGFUSE_PUBLIC_KEYpk-lf-... export LANGFUSE_SECRET_KEYsk-lf-... export LANGFUSE_HOSThttp://localhost:3000 # 如果是本地部署向量数据库可选用于 RAG 场景对于学习和测试可以使用轻量级的Chroma内存模式或FAISS。对于更严肃的项目可以考虑Qdrant,Weaviate或Pinecone云服务。4. 项目结构与核心内容解析假设这个“面试100问”项目以一个代码仓库的形式组织其核心目录可能如下所示2026-llm-interview-100q/ ├── README.md # 项目总览 ├── requirements.txt # Python 依赖包列表 ├── .env.example # 环境变量示例 ├── docs/ # 文档 │ ├── 01_basics/ # 八股文原理、微调、评估基础 │ ├── 02_langchain/ # LangChain 核心概念与面试题 │ ├── 03_langgraph/ # LangGraph 工作流设计面试题 │ ├── 04_rag/ # RAG 系统设计场景题 │ └── 05_agent/ # Agent 设计场景题 ├── examples/ # 可运行的代码示例 │ ├── langfuse_tracing/ # Langfuse 追踪集成示例 │ │ ├── simple_chain.py # 基础链的追踪 │ │ ├── agent_tracing.py # Agent 的完整追踪 │ │ └── evaluation_setup.py # 设置评估与评分 │ ├── langchain_agents/ # 多种 Agent 实现 │ ├── langgraph_workflows/ # 状态图工作流示例 │ └── rag_systems/ # 端到端 RAG 系统 └── datasets/ # 测试用的数据集如有 └── eval_questions.jsonl # 用于评估的问题集核心学习路径建议理论奠基从docs/01_basics开始回顾大模型核心原理、微调方法、评估指标。框架掌握学习docs/02_langchain和docs/03_langgraph理解 LCEL、Tools、Agents、StateGraph 等关键概念。实战入门运行examples/langfuse_tracing/simple_chain.py首先确保基础环境连通能看到 Langfuse 上的追踪记录。系统构建选择examples/rag_systems或examples/langchain_agents中的一个示例将其跑通。评估深化修改示例为其添加复杂的评估逻辑evaluation_setup.py在 Langfuse 平台上分析结果。场景突破针对docs/04_rag和docs/05_agent中的场景题尝试设计并实现自己的解决方案并用 Langfuse 进行评估。5. 实战搭建可追踪与评估的 LangChain Agent接下来我们通过一个具体的例子将 LangChain、LangGraph 和 Langfuse 串联起来。目标是构建一个简单的“研究助手”Agent它能根据用户问题搜索网络并总结同时整个过程被 Langfuse 完整追踪和评估。5.1 安装依赖首先在虚拟环境中安装必要的库。pip install langchain langchain-community langchain-openai langgraph langfuse # 如果需要网络搜索安装 duckduckgo-search pip install duckduckgo-search5.2 编写可追踪的 Agent 代码创建一个文件research_agent_traced.py。import os from langfuse import Langfuse from langfuse.callback import CallbackHandler from langchain_openai import ChatOpenAI from langchain.agents import AgentExecutor, create_openai_tools_agent from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_community.tools import DuckDuckGoSearchRun from langchain_core.messages import HumanMessage # 1. 初始化 Langfuse (会自动读取环境变量) langfuse Langfuse() # 创建回调处理器用于自动追踪 handler CallbackHandler() # 2. 定义工具 search DuckDuckGoSearchRun(nameweb_search, descriptionSearch the web for current information.) # 3. 初始化 LLM llm ChatOpenAI(modelgpt-4-turbo-preview, temperature0) # 4. 构建 Agent 的 Prompt prompt ChatPromptTemplate.from_messages([ (system, You are a helpful research assistant. Use the web search tool to find accurate and current information to answer the users question. Always cite your sources.), MessagesPlaceholder(variable_namechat_history), (human, {input}), MessagesPlaceholder(variable_nameagent_scratchpad), ]) # 5. 创建 Agent tools [search] agent create_openai_tools_agent(llm, tools, prompt) agent_executor AgentExecutor(agentagent, toolstools, verboseTrue) # 6. 使用 Langfuse 回调来执行并追踪 question What are the latest breakthroughs in quantum computing as of 2024? # 将回调处理器传入 result agent_executor.invoke( {input: question, chat_history: []}, config{callbacks: [handler]} ) print(Agent Answer:, result[output]) # 7. 手动记录一次评估也可以在 Langfuse UI 上操作 trace langfuse.trace( nameresearch_agent_trace, inputquestion, outputresult[output], metadata{model: gpt-4-turbo-preview, agent_type: openai-tools} ) # 可以为这次 Trace 添加一个评分例如基于事实准确性 trace.score( namefactual_accuracy, value0.8, # 假设我们手动评分为 0.8/1 commentAnswer seems factually correct based on quick verification of cited points. ) print(fTrace created: {trace.id})关键点解析CallbackHandler这是 LangChain 与 Langfuse 集成的核心。将其传入invoke的callbacks参数即可自动追踪链、模型、工具的所有调用细节。langfuse.trace()用于手动创建一个顶级追踪记录可以关联输入、输出和元数据。trace.score()用于对该次追踪进行评分这是评估的基础。5.3 运行与查看追踪结果确保你的OPENAI_API_KEY和LANGFUSE_*环境变量已正确设置。运行脚本python research_agent_traced.py程序执行后打开你的 Langfuse 控制台本地http://localhost:3000或云平台。在Traces页面你应该能看到一条名为research_agent_trace的记录。点击进入可以看到完整的执行轨迹总览输入、输出、耗时、Token 使用量、成本。详细轨迹以树形结构展示AgentExecutor-LLM-Tool的层层调用关系。输入/输出查看每一步的详细输入和输出。评分可以看到我们手动添加的factual_accuracy评分。至此你已经成功构建了一个被完整追踪的 Agent。但这只是观测评估还需要更系统化的方法。6. 进阶使用 Langfuse 进行系统化评估单纯的追踪只能告诉我们“发生了什么”而评估要回答“做得好不好”。Langfuse 的评估功能允许我们定义评估标准并批量对任务结果进行评分。6.1 创建评估数据集和评分标准假设我们有一个包含多个问题的 JSONL 文件datasets/eval_questions.jsonl{id: 1, question: What is the capital of France?, expected_answer: Paris} {id: 2, question: Explain the concept of attention in transformers., expected_answer: A mechanism that allows the model to focus on different parts of the input sequence.} {id: 3, question: What are the main features of LangGraph?, expected_answer: Stateful, cyclic, multi-actor workflows for building complex agents.}6.2 编写批量评估脚本创建一个文件batch_evaluate_agent.py。import os import json from langfuse import Langfuse from langfuse.callback import CallbackHandler from langchain_openai import ChatOpenAI from langchain.agents import AgentExecutor, create_openai_tools_agent from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_community.tools import DuckDuckGoSearchRun from langchain.evaluation import load_evaluator from langchain.evaluation.criteria import Criteria # 初始化 langfuse Langfuse() llm ChatOpenAI(modelgpt-4-turbo-preview) search DuckDuckGoSearchRun() tools [search] prompt ChatPromptTemplate.from_messages([...]) # 同上一节的prompt agent create_openai_tools_agent(llm, tools, prompt) agent_executor AgentExecutor(agentagent, toolstools) # 加载评估器 - 使用LLM作为裁判来评估“相关性” evaluator load_evaluator( labeled_criteria, criteriaCriteria.RELEVANCY, # 评估输出是否与输入相关 llmllm, ) def run_agent_and_evaluate(question, expected_answer): 运行Agent并对结果进行评估 handler CallbackHandler() try: result agent_executor.invoke( {input: question, chat_history: []}, config{callbacks: [handler]} ) actual_answer result[output] # 使用LangChain评估器进行自动评分 eval_result evaluator.evaluate_strings( predictionactual_answer, inputquestion, referenceexpected_answer ) score_value 1.0 if eval_result[value] Y else 0.0 score_reason eval_result[reasoning] # 在Langfuse中记录Trace和Score trace langfuse.trace( namebatch_eval_trace, inputquestion, outputactual_answer, metadata{expected: expected_answer, question_id: id} ) trace.score( namerelevancy, valuescore_value, commentscore_reason ) print(fQ: {question[:50]}... | Score: {score_value} | Reason: {score_reason[:50]}...) return actual_answer, score_value except Exception as e: print(fError processing question: {question}. Error: {e}) return None, 0.0 # 主循环读取数据集并评估 with open(datasets/eval_questions.jsonl, r) as f: total_score 0 count 0 for line in f: data json.loads(line) answer, score run_agent_and_evaluate(data[question], data[expected_answer]) if answer: total_score score count 1 if count 0: print(f\n 评估总结 ) print(f总计问题数: {count}) print(f平均相关性得分: {total_score / count:.2f})6.3 在 Langfuse 中分析评估结果运行上述脚本后所有追踪和评分都会记录在 Langfuse 中。进入 Langfuse 控制台的Scores页面或Analytics面板。你可以筛选查看所有namerelevancy的评分。聚合查看平均分、分布直方图。下钻点击低分项直接查看对应的 Trace分析 Agent 在哪里出了错是工具调用失败还是 LLM 总结有误。对比如果你修改了 Agent 的 Prompt 或工具重新运行评估Langfuse 可以帮你对比不同版本通过metadata区分的性能差异。这种“运行 - 追踪 - 评估 - 分析 - 迭代”的闭环正是生产级 LLM 应用开发的核心流程也是面试中展示你工程化能力的有力证据。7. 结合 LangGraph 构建复杂、有状态的 Agent对于更复杂的场景如多轮对话、需记忆的流程LangChain Agent 可能不够灵活。这时就需要LangGraph来定义基于状态图的工作流。7.1 一个简单的 LangGraph 工作流示例创建一个research_agent_graph.py文件实现一个具有“搜索”和“总结”两个节点的图。from typing import TypedDict, Annotated, List import operator from langgraph.graph import StateGraph, END from langchain_core.messages import HumanMessage, SystemMessage, AIMessage from langchain_openai import ChatOpenAI from langchain_community.tools import DuckDuckGoSearchRun from langfuse.callback import CallbackHandler # 1. 定义状态结构 class AgentState(TypedDict): messages: Annotated[List, operator.add] # 对话历史 question: str # 原始问题 search_results: str # 搜索结果 final_answer: str # 最终答案 # 2. 定义工具和LLM llm ChatOpenAI(modelgpt-4-turbo-preview) search_tool DuckDuckGoSearchRun() # 3. 定义节点函数 def search_node(state: AgentState): 执行搜索 print(f[Search Node] Searching for: {state[question]}) results search_tool.invoke(state[question]) return {search_results: results} def summarize_node(state: AgentState): 基于搜索结果进行总结 print(f[Summarize Node] Summarizing results...) prompt f 基于以下搜索结果回答这个问题{state[question]} 搜索结果 {state[search_results]} 请给出一个清晰、准确、有引用的总结。 message [HumanMessage(contentprompt)] response llm.invoke(message) return {final_answer: response.content, messages: [AIMessage(contentresponse.content)]} def route_after_search(state: AgentState): 路由逻辑搜索后总是进入总结节点 return summarize # 4. 构建图 workflow StateGraph(AgentState) workflow.add_node(search, search_node) workflow.add_node(summarize, summarize_node) workflow.set_entry_point(search) workflow.add_conditional_edges( search, route_after_search, {summarize: summarize} # 目前只有一条路径 ) workflow.add_edge(summarize, END) # 编译图 app workflow.compile() # 5. 使用 Langfuse 回调执行 if __name__ __main__: handler CallbackHandler() config {callbacks: [handler]} initial_state {messages: [], question: What is LangGraph and how does it differ from LangChain?, search_results: , final_answer: } # 执行图 final_state app.invoke(initial_state, configconfig) print(\n Final Answer ) print(final_state[final_answer])7.2 LangGraph 与 Langfuse 集成的优势更清晰的追踪在 Langfuse 的 Trace 视图中每个节点search,summarize都会成为独立的 Span整个图的结构一目了然。这对于调试复杂的工作流至关重要。状态可视化你可以将AgentState中的关键字段记录到 Trace 的 metadata 中方便回溯每个步骤的中间状态。评估粒度更细你可以针对图中特定的节点输出进行评估。例如单独评估“搜索”节点返回的结果是否相关再评估“总结”节点的输出是否准确。8. 面试场景题实战设计一个可评估的 RAG 系统“设计一个 RAG 系统”是高频面试题。结合本项目你可以这样回答并展示1. 系统设计阐述数据层使用Unstructured或Markdown加载器处理文档用OpenAIEmbeddings或BGE生成向量存入Chroma或Qdrant。检索层实现多路检索语义检索关键词检索使用LangChain Retriever抽象。生成层使用ChatOpenAI等模型设计包含上下文和历史的 Prompt。观测评估层集成Langfuse追踪每一次查询的检索来源、生成过程并设置评估如检索相关性、答案忠实度、有用性。2. 用代码证明# 简化的 RAG 链示例集成 Langfuse 追踪 from langchain.chains import RetrievalQA from langchain.vectorstores import Chroma from langchain.embeddings import OpenAIEmbeddings from langfuse.callback import CallbackHandler # ... 初始化向量库、检索器、LLM ... qa_chain RetrievalQA.from_chain_type(llmllm, retrieverretriever) handler CallbackHandler() result qa_chain.invoke({query: What is the revenue of Company X in 2023?}, config{callbacks: [handler]})3. 展示评估看板向面试官展示 Langfuse 平台上该 RAG 系统的追踪列表和评估分数图表证明你不仅实现了功能还建立了质量监控体系。4. 讨论优化点根据 Langfuse 中“低分”案例分析是检索不准还是生成不佳。提出优化方案重排序Re-ranking、查询改写、HyDE、迭代检索等并说明如何用同样的评估框架来衡量优化效果。9. 常见问题与排查方法在学习和实践过程中你可能会遇到以下问题问题现象可能原因排查方式解决方案Langfuse 控制台无数据1. 环境变量未设置或错误。2. 网络问题云服务。3. 本地 Docker 服务未启动。1. 检查LANGFUSE_PUBLIC_KEY,LANGFUSE_SECRET_KEY,LANGFUSE_HOST。2. 运行langfuse.auth_check()测试连通性。3. 检查 Docker 容器状态docker ps。1. 正确配置环境变量。2. 确保网络通畅或检查防火墙。3. 重启 Langfuse Docker 服务。LangChain Agent 执行报错Tool not foundAgent 的tools参数与 Prompt 中描述的工具不匹配。检查create_openai_tools_agent传入的tools列表确保每个工具都有正确的name和description。确保工具列表、LLM 和 Prompt 中对工具的描述保持一致。LangGraph 图编译或执行错误1. 状态State定义错误。2. 节点函数返回值与状态注解不匹配。3. 边Edges配置错误。1. 仔细检查TypedDict定义和Annotated操作符。2. 打印每个节点的输入/输出状态进行调试。3. 使用workflow.get_graph().draw_mermaid()可视化图结构。参考 LangGraph 官方文档从简单图开始逐步构建。确保节点函数返回字典的键与状态定义字段对应。评估分数不准确或波动大1. 评估标准Criteria定义模糊。2. 用作裁判的 LLM 本身有偏差。3. 评估数据集质量差。1. 在 Langfuse UI 中手动检查低分 Trace看评分是否合理。2. 尝试不同的评估模型或更具体的 Criteria如CONCISENESS,CORRECTNESS。3. 审查评估数据集的“标准答案”是否客观。细化评估标准结合自动评分和人工抽查。对于关键任务建立“黄金标准”测试集。程序运行慢Token 消耗高1. 检索返回上下文过长。2. Agent 进行了不必要的多轮工具调用。3. 使用了昂贵的大模型。1. 在 Langfuse Trace 中观察每一步的 Token 消耗和耗时。2. 检查检索器的k值返回文档数是否过大。3. 分析 Agent 的思考scratchpad步骤是否过多。1. 优化检索使用重排序或摘要减少上下文长度。2. 为 Agent 设置max_iterations限制。3. 对于简单任务换用更轻量的模型。10. 最佳实践与使用建议从简到繁不要一开始就构建复杂的 LangGraph。先用 LangChain 简单的 LCEL 链或 Agent 跑通流程集成 Langfuse 看到数据再逐步增加复杂度。评估先行在开发功能前先想好如何评估它。定义清晰、可量化的评估指标如相关性、准确性、有用性、耗时并提前在 Langfuse 中配置好评分模型或提示词。善用 Metadata在创建 Trace 或 Span 时充分利用metadata和tags字段。记录模型版本、参数配置、会话ID等信息便于后续筛选和对比分析。建立基准对核心流程保存一组“黄金标准”测试用例。每次重大改动后都运行这组用例在 Langfuse 中对比关键指标确保没有回归。关注成本与性能利用 Langfuse 的 Token 和成本追踪功能持续监控应用的开销。优化提示词、减少不必要的上下文、选择合适的模型是控制成本的关键。为面试做准备理解原理能说清楚 LangChain 的 LCEL、LangGraph 的状态图、RAG 的各个环节以及 Langfuse 的追踪评估原理。展示代码准备好一个你最熟悉的、可运行的示例项目如本文的研究助手并能解释每一行代码。展示数据准备好 Langfuse 看板的截图或演示展示你如何分析问题、评估效果、迭代优化。思考边界能讨论当前方案的局限性如检索精度、评估主观性、成本以及可能的改进方向。通过这个“2026大模型面试100问”项目你真正获得的不只是一份面试题答案列表而是一套应对大模型应用开发挑战的完整方法论和实战工具链。从理解框架、构建系统、到观测评估和持续优化这条路径正是当今业界对高级AI工程师的核心要求。建议你按照本文的步骤亲手搭建、运行并评估一个属于自己的智能体应用这将成为你技术履历中最有说服力的一笔。