protenus代做网站企业信息公共服务平台
2026/2/6 6:30:27 网站建设 项目流程
protenus代做网站,企业信息公共服务平台,哈尔滨建设工程招聘信息网站,仪征做网站公司大模型Agent面试精选15题#xff08;第三辑#xff09;本文是Agent面试题的第三辑#xff0c;精选15道关于LangChain框架与Agent开发的高频面试题#xff0c;涵盖LangChain Agent框架、工具集成、记忆管理、链式调用、性能优化、部署方案等核心知识点#xff0c;适合准备大…大模型Agent面试精选15题第三辑本文是Agent面试题的第三辑精选15道关于LangChain框架与Agent开发的高频面试题涵盖LangChain Agent框架、工具集成、记忆管理、链式调用、性能优化、部署方案等核心知识点适合准备大模型应用岗位面试的同学。字数约 8000预计阅读 16 分钟一、LangChain框架基础篇3题01LangChain Agent 框架的核心组件有哪些它们如何协作参考答案核心组件LLM/ChatModel封装各种大模型OpenAI、Anthropic、本地模型等提供统一的调用接口支持流式输出和异步调用Tools工具定义可调用的工具接口集成外部工具搜索、计算器、API等工具描述和参数定义Agent智能体不同类型的Agent实现工具选择和执行逻辑与LLM和Tools交互Memory记忆对话历史管理状态持久化上下文维护Chains链组合多个组件定义执行流程支持条件分支和循环Prompts提示词提示词模板管理动态提示词生成Few-shot示例协作流程用户输入 ↓ Agent理解意图选择工具 ↓ LLM生成工具调用 ↓ Tools执行工具 ↓ Memory更新状态 ↓ Chains组合结果 ↓ 返回用户示例fromlangchain.agentsimportinitialize_agent,Toolfromlangchain.llmsimportOpenAI# 定义工具tools[Tool(nameSearch,funcsearch_function,description搜索工具)]# 初始化Agentagentinitialize_agent(toolstools,llmOpenAI(),agentzero-shot-react-description,verboseTrue)# 执行resultagent.run(查询北京天气)优势模块化设计易于扩展统一的接口和规范丰富的组件生态良好的文档和社区支持02LangChain Agent 和原生 Agent 有什么区别各有什么优缺点参考答案LangChain Agent特点基于框架实现标准化的组件和接口丰富的工具集成开箱即用的功能优点快速开发提供现成的组件开发效率高标准化统一的接口和规范易于维护生态丰富大量工具和集成社区活跃文档完善详细的文档和示例缺点灵活性受限框架约束定制化程度有限性能开销框架层可能带来额外开销学习成本需要学习框架API版本依赖框架更新可能影响兼容性原生 Agent特点从零开始实现完全自定义直接控制所有细节无框架依赖优点完全控制可以精确控制每个环节性能优化无框架开销性能可能更好灵活定制可以按需实现任何功能无依赖不依赖外部框架缺点开发成本高需要实现所有功能维护困难代码量大维护成本高重复造轮子很多功能需要自己实现缺少生态没有现成的工具和集成对比特性LangChain Agent原生 Agent开发速度快慢灵活性中高性能中高优化后维护性高中学习成本中低无框架生态支持丰富无选择建议快速原型 → LangChain Agent生产环境性能要求高→ 原生 Agent复杂工具集成 → LangChain Agent完全定制需求 → 原生 Agent03LangChain 中有哪些类型的 Agent它们各有什么特点参考答案Agent 类型Zero-shot ReAct Agent特点不需要示例直接推理和行动适用通用任务工具选择灵活优点简单直接适应性强缺点可能选择错误工具ReAct Docstore Agent特点专门用于文档检索适用文档问答、知识检索优点针对文档优化缺点功能单一Self-Ask-with-Search Agent特点自我提问并搜索适用需要多步搜索的任务优点可以分解复杂问题缺点可能产生过多搜索Conversational ReAct Agent特点支持多轮对话适用对话式交互优点保持对话上下文缺点上下文管理复杂Plan-and-Execute Agent特点先规划再执行适用复杂多步骤任务优点规划系统完整缺点执行效率可能较低代码示例fromlangchain.agentsimportinitialize_agent,AgentType# Zero-shot ReActagentinitialize_agent(toolstools,llmllm,agentAgentType.ZERO_SHOT_REACT_DESCRIPTION)# Conversational ReActagentinitialize_agent(toolstools,llmllm,agentAgentType.CONVERSATIONAL_REACT_DESCRIPTION,memorymemory)# Plan-and-Executefromlangchain.agentsimportPlanAndExecute agentPlanAndExecute(plannerplanner,executorexecutor)选择建议简单任务 → Zero-shot ReAct文档检索 → ReAct Docstore复杂搜索 → Self-Ask-with-Search对话场景 → Conversational ReAct复杂任务 → Plan-and-Execute二、LangChain工具与集成篇3题04如何在 LangChain 中集成自定义工具有哪些步骤参考答案集成步骤定义工具函数实现工具的具体功能定义输入输出格式处理错误情况创建 Tool 对象使用Tool类包装函数定义工具名称和描述设置参数说明注册到 Agent将工具添加到工具列表在 Agent 初始化时传入配置工具权限测试工具单独测试工具功能测试 Agent 调用工具验证错误处理示例fromlangchain.toolsimportToolfromlangchain.agentsimportinitialize_agent# 1. 定义工具函数defget_weather(city:str)-str:获取城市天气# 调用天气APIapi_keyyour_api_keyurlfhttps://api.weather.com/v1/current?city{city}key{api_key}responserequests.get(url)returnresponse.json()[weather]# 2. 创建Tool对象weather_toolTool(nameGetWeather,funcget_weather,description获取指定城市的当前天气。输入应该是城市名称例如北京、上海)# 3. 注册到Agenttools[weather_tool]agentinitialize_agent(toolstools,llmllm,agentzero-shot-react-description)# 4. 使用resultagent.run(北京今天天气怎么样)高级用法# 使用装饰器fromlangchain.toolsimporttooltooldefcalculate(expression:str)-str:计算数学表达式try:resulteval(expression)returnstr(result)except:return计算错误# 动态工具classDynamicTool:def__init__(self,name,func,description):self.namename self.funcfunc self.descriptiondescriptiondefto_langchain_tool(self):returnTool(nameself.name,funcself.func,descriptionself.description)最佳实践清晰的工具描述完善的错误处理参数验证工具文档化05LangChain 如何管理工具的调用顺序和依赖关系参考答案管理方式工具描述优化在工具描述中说明依赖关系明确工具的使用顺序提供使用示例Agent 提示词设计在系统提示词中说明工具顺序使用 Few-shot 示例展示顺序引导 Agent 按顺序调用Chain 组合使用 SequentialChain 定义顺序使用 RouterChain 处理分支使用 TransformChain 转换数据自定义 Agent重写工具选择逻辑实现依赖检查控制执行顺序示例fromlangchain.chainsimportSequentialChain,LLMChain# 定义多个链chain1LLMChain(llmllm,promptprompt1,output_keystep1_result)chain2LLMChain(llmllm,promptprompt2,output_keystep2_result)# 顺序执行sequential_chainSequentialChain(chains[chain1,chain2],input_variables[input],output_variables[step1_result,step2_result])resultsequential_chain.run(查询北京天气并给出建议)依赖管理classToolDependencyManager:def__init__(self):self.dependencies{analyze_data:[fetch_data],generate_report:[analyze_data]}defcheck_dependencies(self,tool_name,executed_tools):检查工具依赖depsself.dependencies.get(tool_name,[])fordepindeps:ifdepnotinexecuted_tools:returnFalse,f需要先执行{dep}returnTrue,Nonedefget_execution_order(self,tools):获取执行顺序# 拓扑排序order[]visitedset()defdfs(tool):iftoolinvisited:returndepsself.dependencies.get(tool,[])fordepindeps:dfs(dep)visited.add(tool)order.append(tool)fortoolintools:dfs(tool)returnorder最佳实践明确工具依赖关系使用 Chain 管理顺序提供清晰的错误提示支持依赖检查06LangChain 如何实现工具的批量调用和并行执行参考答案实现方式工具并行调用使用异步工具并发执行多个工具等待所有结果批量处理将多个任务批量处理使用批处理工具优化资源利用结果聚合合并多个工具结果处理部分失败情况返回统一格式示例importasynciofromlangchain.toolsimportTool# 异步工具定义asyncdefasync_search(query:str)-str:异步搜索# 模拟异步调用awaitasyncio.sleep(1)returnf搜索结果:{query}asyncdefasync_calculate(expression:str)-str:异步计算awaitasyncio.sleep(0.5)returnstr(eval(expression))# 并行调用asyncdefparallel_tools():resultsawaitasyncio.gather(async_search(Python),async_calculate(22),async_search(LangChain))returnresults# 使用resultsasyncio.run(parallel_tools())批量处理fromlangchain.agentsimportAgentExecutorfromlangchain.toolsimportToolclassBatchTool:def__init__(self,base_tool):self.base_toolbase_tooldefbatch_run(self,inputs):批量执行results[]forinput_itemininputs:try:resultself.base_tool.run(input_item)results.append({success:True,result:result})exceptExceptionase:results.append({success:False,error:str(e)})returnresults# 使用batch_toolBatchTool(search_tool)resultsbatch_tool.batch_run([query1,query2,query3])优化策略使用异步提高效率批量处理减少开销合理控制并发数处理超时和错误三、LangChain记忆管理篇3题07LangChain 中有哪些记忆类型各适用于什么场景参考答案记忆类型ConversationBufferMemory特点存储完整对话历史适用短对话、需要完整上下文优点信息完整缺点token消耗大ConversationSummaryMemory特点存储对话摘要适用长对话、需要压缩历史优点节省token缺点可能丢失细节ConversationBufferWindowMemory特点只保留最近N轮对话适用中等长度对话优点平衡完整性和效率缺点可能丢失早期信息ConversationSummaryBufferMemory特点结合摘要和窗口适用超长对话优点兼顾完整性和效率缺点实现复杂VectorStoreRetrieverMemory特点使用向量存储检索适用需要语义检索记忆优点支持语义搜索缺点需要向量数据库代码示例fromlangchain.memoryimport(ConversationBufferMemory,ConversationSummaryMemory,ConversationBufferWindowMemory)# Buffer Memorybuffer_memoryConversationBufferMemory()buffer_memory.save_context({input:你好},{output:你好有什么可以帮助你的})# Summary Memorysummary_memoryConversationSummaryMemory(llmllm)summary_memory.save_context({input:长对话内容...},{output:回复内容...})# Window Memorywindow_memoryConversationBufferWindowMemory(k5# 只保留最近5轮)选择建议短对话10轮 → BufferMemory中等对话10-50轮 → BufferWindowMemory长对话50轮 → SummaryMemory需要语义检索 → VectorStoreRetrieverMemory08如何在 LangChain 中实现长期记忆和知识库集成参考答案实现方式向量数据库集成使用 Chroma、Pinecone 等存储长期记忆支持语义检索关系数据库集成使用 SQL 数据库存储结构化记忆支持复杂查询文件系统存储持久化对话历史定期备份支持恢复示例fromlangchain.vectorstoresimportChromafromlangchain.embeddingsimportOpenAIEmbeddingsfromlangchain.memoryimportVectorStoreRetrieverMemory# 创建向量存储vectorstoreChroma(embedding_functionOpenAIEmbeddings(),persist_directory./memory_db)# 创建记忆memoryVectorStoreRetrieverMemory(retrievervectorstore.as_retriever(),memory_keychat_history)# 保存记忆memory.save_context({input:用户偏好喜欢喝咖啡},{output:已记录您的偏好})# 检索记忆relevant_memoriesmemory.load_memory_variables({input:我喜欢什么})知识库集成fromlangchain.document_loadersimportTextLoaderfromlangchain.text_splitterimportRecursiveCharacterTextSplitterfromlangchain.vectorstoresimportFAISS# 加载知识库loaderTextLoader(knowledge_base.txt)documentsloader.load()# 分割文档text_splitterRecursiveCharacterTextSplitter(chunk_size1000,chunk_overlap200)docstext_splitter.split_documents(documents)# 创建向量存储vectorstoreFAISS.from_documents(docs,embeddings)# 集成到Agentfromlangchain.agentsimportTool retrievervectorstore.as_retriever()knowledge_toolTool(nameKnowledgeBase,funclambdaq:retriever.get_relevant_documents(q),description从知识库检索信息)最佳实践定期更新知识库优化检索策略处理记忆冲突保护隐私数据09LangChain 如何优化记忆管理的性能和成本参考答案优化策略记忆压缩使用摘要压缩长对话只保留关键信息定期清理旧记忆选择性存储只存储重要记忆过滤无关信息基于重要性评分缓存机制缓存常用记忆减少检索次数提高响应速度批量处理批量写入记忆批量检索减少API调用示例classOptimizedMemory:def__init__(self,max_tokens4000):self.max_tokensmax_tokens self.cache{}self.importance_threshold0.7defshould_store(self,message,importance_score):判断是否存储ifimportance_scoreself.importance_threshold:returnFalsereturnTruedefcompress_memory(self,memories):压缩记忆ifself.get_total_tokens(memories)self.max_tokens:returnmemories# 按重要性排序sorted_memoriessorted(memories,keylambdax:x.importance,reverseTrue)# 保留最重要的compressed[]total_tokens0formemoryinsorted_memories:tokensself.count_tokens(memory)iftotal_tokenstokensself.max_tokens:compressed.append(memory)total_tokenstokenselse:breakreturncompresseddefget_cached(self,key):获取缓存returnself.cache.get(key)defset_cache(self,key,value):设置缓存iflen(self.cache)100:# 限制缓存大小# 删除最旧的oldest_keymin(self.cache.keys())delself.cache[oldest_key]self.cache[key]value成本优化减少不必要的API调用使用本地模型处理摘要批量处理降低单位成本监控token消耗四、LangChain链式调用篇3题10LangChain 的 Chain 是什么有哪些常用的 Chain 类型参考答案Chain 概念Chain 是 LangChain 的核心抽象将多个组件组合成执行流程支持顺序、并行、条件执行常用 Chain 类型LLMChain最简单的链LLM Prompt适用于单次调用SequentialChain顺序执行多个链前一个链的输出作为下一个链的输入适用于多步骤任务RouterChain根据输入路由到不同的链支持条件分支适用于多场景处理TransformChain数据转换链不调用LLM适用于数据预处理AgentExecutorAgent执行链工具调用和决策适用于复杂任务示例fromlangchain.chainsimportLLMChain,SequentialChainfromlangchain.promptsimportPromptTemplate# LLMChainpromptPromptTemplate(input_variables[topic],template写一篇关于{topic}的短文)chainLLMChain(llmllm,promptprompt)resultchain.run(人工智能)# SequentialChainchain1LLMChain(llmllm,promptprompt1,output_keysummary)chain2LLMChain(llmllm,promptprompt2,output_keyanalysis)sequentialSequentialChain(chains[chain1,chain2],input_variables[input],output_variables[summary,analysis])选择建议简单任务 → LLMChain多步骤任务 → SequentialChain条件分支 → RouterChain数据转换 → TransformChain工具调用 → AgentExecutor11如何在 LangChain 中实现条件分支和循环逻辑参考答案实现方式RouterChain条件分支根据输入选择不同的链支持多路分支使用LLM判断路由自定义Chain循环实现循环逻辑设置终止条件控制迭代次数示例fromlangchain.chains.routerimportMultiPromptChainfromlangchain.chainsimportConversationChain# 条件分支prompt_infos[{name:technical,description:技术问题,prompt_template:你是技术专家回答{input}},{name:business,description:商业问题,prompt_template:你是商业顾问回答{input}}]chainMultiPromptChain.from_prompts(llmllm,prompt_infosprompt_infos,default_chainConversationChain.from_llm(llm))# 循环逻辑classLoopChain:def__init__(self,max_iterations10):self.max_iterationsmax_iterationsdefrun(self,input_text):resultinput_textforiinrange(self.max_iterations):# 执行一步resultself.step(result)# 检查终止条件ifself.should_stop(result):breakreturnresultdefstep(self,input_text):# 执行一步处理returnllm.predict(input_text)defshould_stop(self,result):# 判断是否终止return完成inresultor结束inresult最佳实践明确终止条件限制循环次数处理异常情况记录执行过程12LangChain Chain 的错误处理和重试机制如何实现参考答案错误处理异常捕获捕获链执行中的异常分类处理不同错误提供友好的错误信息重试机制对临时性错误重试指数退避策略设置最大重试次数降级处理主链失败时使用备用链简化处理流程返回部分结果示例fromlangchain.chainsimportLLMChainimporttimefromtenacityimportretry,stop_after_attempt,wait_exponentialclassRobustChain:def__init__(self,chain,max_retries3):self.chainchain self.max_retriesmax_retriesretry(stopstop_after_attempt(3),waitwait_exponential(multiplier1,min2,max10))defrun_with_retry(self,input_text):带重试的执行try:returnself.chain.run(input_text)exceptExceptionase:ifself.is_retryable_error(e):raise# 触发重试else:returnself.fallback(input_text)defis_retryable_error(self,error):判断是否可重试retryable_errors[timeout,rate limit,connection error]returnany(errinstr(error).lower()forerrinretryable_errors)deffallback(self,input_text):降级处理# 使用简化版本returnf处理失败简化结果{input_text[:100]}最佳实践分类处理错误合理的重试策略完善的日志记录用户友好的错误提示五、LangChain性能与部署篇3题13如何优化 LangChain Agent 的性能有哪些策略参考答案优化策略模型选择根据任务选择合适模型简单任务用小模型复杂任务用大模型缓存机制缓存LLM响应缓存工具结果减少重复计算并行处理并行工具调用异步执行批量处理提示词优化精简提示词减少token消耗提高响应速度示例fromlangchain.cacheimportInMemoryCachefromlangchain.globalsimportset_llm_cache# 启用缓存set_llm_cache(InMemoryCache())# 异步执行importasyncioasyncdefasync_agent_run(agent,query):resultawaitagent.arun(query)returnresult# 批量处理defbatch_process(agent,queries):results[]forqueryinqueries:resultagent.run(query)results.append(result)returnresults性能监控importtimefromfunctoolsimportwrapsdefmonitor_performance(func):wraps(func)defwrapper(*args,**kwargs):start_timetime.time()resultfunc(*args,**kwargs)end_timetime.time()print(f{func.__name__}执行时间:{end_time-start_time:.2f}秒)returnresultreturnwrappermonitor_performancedefagent_run(agent,query):returnagent.run(query)最佳实践使用缓存减少API调用异步处理提高并发监控性能指标持续优化14LangChain Agent 如何部署到生产环境有哪些方案参考答案部署方案API服务部署使用FastAPI/Flask封装提供RESTful API支持多实例部署容器化部署Docker容器化Kubernetes编排支持弹性扩展Serverless部署AWS Lambda云函数按需计费微服务架构拆分不同组件独立部署和扩展服务间通信示例# FastAPI部署fromfastapiimportFastAPIfromlangchain.agentsimportinitialize_agent appFastAPI()agentinitialize_agent(...)app.post(/chat)asyncdefchat(request:ChatRequest):resultagent.run(request.message)return{response:result}# Docker部署# DockerfileFROM python:3.9WORKDIR/app COPY requirements.txt.RUN pip install-r requirements.txt COPY..CMD[uvicorn,main:app,--host,0.0.0.0,--port,8000]部署考虑资源需求CPU、内存、GPU并发处理能力错误处理和监控安全性和权限15LangChain 与其他 Agent 框架如 AutoGPT、BabyAGI有什么区别参考答案框架对比特性LangChainAutoGPTBabyAGI定位通用框架自主Agent任务管理Agent复杂度中高中定制性高中中生态丰富一般一般适用场景通用应用自主任务任务规划LangChain优势模块化、生态丰富、文档完善适用快速开发、通用应用特点提供完整工具链AutoGPT优势高度自主、持续执行适用复杂长期任务特点自主规划和反思BabyAGI优势任务管理、优先级适用任务队列管理特点任务分解和执行选择建议快速开发 → LangChain自主执行 → AutoGPT任务管理 → BabyAGI复杂定制 → LangChain总结本文精选了15道关于LangChain框架与Agent开发的高频面试题涵盖了LangChain框架基础核心组件、与原生Agent对比、Agent类型工具与集成自定义工具、依赖管理、并行执行记忆管理记忆类型、长期记忆、性能优化链式调用Chain类型、条件分支、错误处理性能与部署性能优化、部署方案、框架对比核心要点LangChain提供了完整的Agent开发框架模块化设计便于扩展和定制丰富的组件和工具集成支持多种部署方案活跃的社区和生态面试建议熟悉LangChain的核心组件掌握工具集成和记忆管理了解性能优化和部署方案能够对比不同框架的优缺点具备实际项目经验希望这些题目能帮助您更好地准备大模型应用岗位的面试

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询