
大语言模型从原型验证到生产部署涉及多个工程环节。本文基于Python生态和LangChain框架梳理LLM应用开发中的技术选型、核心组件实现及系统优化方法。本文中LangChain为Apache 2.0开源项目.一、技术栈选型与架构设计LLM应用落地涉及多个技术层次以下是工程实践中经过验证的组件选型参考层次可选方案适用场景基础模型开源Qwen/DeepSeek/ 闭源API数据敏感选开源追求效果选闭源开发框架LangChain / LlamaIndex / 自研快速迭代用框架高定制选自研向量数据库Milvus / Qdrant / Chroma百万级以上选Milvus轻量选Chroma推理框架vLLM / TGI / Ollama高并发选vLLM开发测试选Ollama实际项目中选型受以下因素约束数据安全要求金融、医疗须本地部署、延迟敏感度实时场景须低于2秒、GPU资源预算、团队技术储备。二、LangChain核心组件实战2.1 文档问答链LangChain的Chain机制将多个处理步骤串联为可复用流程# document_qa.pyfromlangchain.chainsimportRetrievalQAfromlangchain_community.llmsimportOllamafromlangchain_community.embeddingsimportHuggingFaceEmbeddingsfromlangchain_community.vectorstoresimportFAISSfromlangchain.text_splitterimportRecursiveCharacterTextSplitterfromlangchain_community.document_loadersimportTextLoaderclassDocumentQAPipeline:def__init__(self,model_name:strqwen2:7b):self.llmOllama(modelmodel_name)self.embeddingsHuggingFaceEmbeddings(model_namesentence-transformers/all-MiniLM-L6-v2)self.text_splitterRecursiveCharacterTextSplitter(chunk_size500,chunk_overlap50)self.vector_storeNoneself.qa_chainNonedefload_and_index(self,file_path:str):loaderTextLoader(file_path,encodingutf-8)documentsloader.load()splitsself.text_splitter.split_documents(documents)self.vector_storeFAISS.from_documents(splits,self.embeddings)self.qa_chainRetrievalQA.from_chain_type(llmself.llm,chain_typestuff,retrieverself.vector_store.as_retriever(search_kwargs{k:4}),return_source_documentsTrue)defask(self,question:str)-dict:ifnotself.qa_chain:return{error:请先加载文档}resultself.qa_chain.invoke({query:question})return{answer:result[result],sources:[doc.page_content[:100]...fordocinresult[source_documents]]}2.2 对话记忆管理生产环境中维护多轮对话状态是基本要求# memory_management.pyfromlangchain.memoryimportConversationBufferWindowMemoryfromlangchain.chainsimportConversationChainfromlangchain_community.llmsimportOllamaclassConversationalAgent:def__init__(self,model_name:strqwen2:7b,window_size:int10):self.llmOllama(modelmodel_name)self.memoryConversationBufferWindowMemory(kwindow_size,return_messagesTrue,memory_keyhistory)self.conversationConversationChain(llmself.llm,memoryself.memory,verboseFalse)defchat(self,user_input:str)-str:returnself.conversation.predict(inputuser_input)defclear_memory(self):self.memory.clear()2.3 工具调用实现LLM通过工具与外部系统交互是Agent的核心能力# tool_calling.pyfromlangchain.toolsimportBaseToolfromlangchain.agentsimportinitialize_agent,AgentTypefromlangchain_community.llmsimportOllamafromdatetimeimportdatetimeclassWeatherTool(BaseTool):nameweather_querydescription查询指定城市的当前天气输入城市名称def_run(self,city:str)-str:returnf{city}当前温度22°C天气晴朗classTimeTool(BaseTool):namecurrent_timedescription获取当前日期和时间无需输入参数def_run(self,_:str)-str:returndatetime.now().strftime(%Y-%m-%d %H:%M:%S)defcreate_agent():llmOllama(modelqwen2:7b)tools[WeatherTool(),TimeTool()]returninitialize_agent(toolstools,llmllm,agentAgentType.ZERO_SHOT_REACT_DESCRIPTION,verboseTrue,max_iterations5)三、生产环境关键问题3.1 输出结构化控制通过输出解析器约束LLM输出格式# output_parsing.pyfromlangchain.output_parsersimportPydanticOutputParserfrompydanticimportBaseModel,Fieldfromlangchain.promptsimportPromptTemplatefromlangchain_community.llmsimportOllamafromtypingimportListclassAnalysisResult(BaseModel):summary:strField(description核心结论摘要)key_points:List[str]Field(description关键要点列表)confidence:floatField(description置信度评分0-1,ge0,le1)classStructuredOutputChain:def__init__(self):self.llmOllama(modelqwen2:7b)self.parserPydanticOutputParser(pydantic_objectAnalysisResult)self.promptPromptTemplate(template分析以下内容并按格式输出{input_text}\n{format_instructions},input_variables[input_text],partial_variables{format_instructions:self.parser.get_format_instructions()})defanalyze(self,text:str)-AnalysisResult:responseself.llm.invoke(self.prompt.format_prompt(input_texttext).to_string())returnself.parser.parse(response)3.2 可观测性实现# observability.pyimportloggingimporttimefromfunctoolsimportwrapsfromtypingimportAny,Callable logging.basicConfig(levellogging.INFO)loggerlogging.getLogger(llm_app)deftrace(operation:str):defdecorator(func:Callable)-Callable:wraps(func)defwrapper(*args,**kwargs)-Any:starttime.perf_counter()try:resultfunc(*args,**kwargs)logger.info({operation:operation,latency_ms:round((time.perf_counter()-start)*1000,2),status:success})returnresultexceptExceptionase:logger.error({operation:operation,error:str(e)})raisereturnwrapperreturndecorator四、常见陷阱与优化方向4.1 常见问题问题现象解决思路Prompt漂移同Prompt在不同模型版本输出不一致建立Prompt版本管理定期回归测试上下文超长Token消耗激增响应变慢实现智能摘要滑动窗口工具调用循环Agent反复调用同一工具不收敛设置最大迭代次数添加熔断幻觉信息输出与事实不符但表述自信引入RAG设置低置信度拒绝4.2 性能优化方向推理加速使用vLLM的Continuous Batching吞吐量可提升10倍以上缓存策略对语义相似查询使用Semantic Cache减少重复计算异步处理耗时操作使用异步队列避免阻塞主流程模型量化使用GPTQ/AWQ量化降低显存占用提升并发能力五、总结LLM应用落地是一项系统工程涉及模型选型、框架使用、工具集成、性能优化等多个维度。基于Python和LangChain生态可以快速构建原型但生产级系统需要在以下方面持续投入质量保障建立自动化评估体系覆盖召回率、准确率、响应时间等核心指标成本控制监控Token消耗优化Prompt长度合理设置缓存安全防护实施输入过滤和输出审核防止Prompt注入持续迭代建立用户反馈闭环将Bad Case转化为测试用例从原型到产品差距在于对异常情况的处理、对性能瓶颈的优化、以及对业务需求的深入理解。技术选型服务于业务目标而非相反。