deepseek flash vs glm5.2:代码场景模型选型与部署实践
2026/8/31 22:27:02
bashpip install langchain langchain-communityollama pull qwen2.5:7b这里有一个容易混淆的概念:ollama run是给"人"用的命令行聊天工具,而 LangChain 中的ChatOllama是给"程序"用的接口,让 Python 代码去调用本地模型。两者的调用链是:Python 程序 → LangChain(ChatOllama) → Ollama 服务 → 本地模型。### 2.2 一行代码调用本地大模型pythonfrom langchain_community.chat_models import ChatOllamafrom langchain_core.messages import HumanMessagellm = ChatOllama(model="qwen2.5:7b", temperature=0.7)resp = llm.invoke([HumanMessage(content="用一句话解释什么是大模型")])print(resp.content)````temperature` 是控制随机性的关键参数:取 0 时接近贪心解码,输出几乎确定;取值越高越随机、越有创造性。对于事实性问答建议调低,对于创意生成可以调高。## 三、六大核心组件精讲### 3.1 Prompts:提示词模板PromptTemplate 解决的是"LLM 输入格式化"问题,支持变量替换,能把零散的用户输入转化为模型可理解的标准化提示:pythonfrom langchain_core.prompts import PromptTemplatetemplate = PromptTemplate.from_template( “你是一位{role}。请针对以下问题给出专业回答:\n{question}”)prompt = template.format(role=“资深架构师”, question=“如何设计高可用系统?”)模板的价值在于可复用、可版本管理。企业实践中,提示词往往需要经过多轮迭代,把模板单独抽离出来管理,比把提示词硬编码在业务代码里要清晰得多。### 3.2 Chains:把组件串成流水线Chains 是 LangChain 的"流程编排师",能把 LLM、PromptTemplate、工具这些零散组件串成一套有逻辑的自动化流程。它的核心思想是"组合优于继承":pythonfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_openai import ChatOpenAIprompt = ChatPromptTemplate.from_messages([ (“system”, “你是一个严谨的技术编辑”), (“human”, “请把下面这段文字润色得更专业:{text}”),])chain = prompt | ChatOpenAI(model=“gpt-4o”)result = chain.invoke({“text”: “这个功能很好用”})注意这里用了 `|` 管道符,这是 LangChain 新版本推荐的 Runnable 组合方式,比旧的 `LLMChain` 更简洁、更灵活。理解"链"的骨架——PromptTemplate 负责生成带上下文的提示词,LLM 负责核心生成,Tools 负责调用外部能力,OutputParser 负责把原始输出整理成结构化结果——是掌握 LangChain 的基础。### 3.3 Memory:让对话有记忆Memory 组件为 LLM 提供上下文存储能力,解决默认无状态问题。LangChain 提供多种记忆实现,核心区别在于存储方式与上下文压缩策略:pythonfrom langchain.memory import ConversationBufferMemoryfrom langchain.chains import ConversationChainmemory = ConversationBufferMemory()chain = ConversationChain(llm=llm, memory=memory)chain.run(“我叫小明”)chain.run(“我叫什么?”) # 能正确回答"小明"对于长对话,`ConversationBufferWindowMemory` 只保留最近 N 轮,`ConversationSummaryMemory` 则用摘要压缩历史,各有适用场景。### 3.4 Indexes:连接私有数据Indexes 组件是构建 RAG 系统的核心,流程为:文档加载(Loader) → 文本分割(Splitter) → 向量转换(Embedding) → 向量存储(Vector DB) → 检索(Retriever)。LangChain 内置 200+ 文档加载器、10+ 文本分割算法、30+ 向量数据库集成,无需从零开发。### 3.5 Agents:让模型自主决策Agents 是 LangChain 的智能核心,包含计划、执行与决策流。它让模型能根据任务动态选择工具、规划步骤:pythonfrom langchain.agents import initialize_agent, Toolfrom langchain.agents import AgentTypedef search_tool(query: str) -> str: return f"Searching results for: {query}“tools = [Tool(name=“Search”, func=search_tool, description=“联网搜索”)]agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)agent.run(“查找最新的AI新闻并总结”)## 四、实战项目:RAG 文档知识库问答RAG(检索增强生成)是企业最常用的场景。下面是一个完整的可运行示例,把产品手册变成智能问答助手:pythonfrom langchain_community.document_loaders import PyPDFLoaderfrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain_community.embeddings import HuggingFaceEmbeddingsfrom langchain_community.vectorstores import Chromafrom langchain.chains import RetrievalQA# 1. 加载文档loader = PyPDFLoader(“product_manual.pdf”)documents = loader.load_and_split()# 2. 文本分块splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)chunks = splitter.split_documents(documents)# 3. 向量化并存储embeddings = HuggingFaceEmbeddings(model_name=“BAAI/bge-small-zh-v1.5”)vectorstore = Chroma.from_documents(chunks, embeddings)# 4. 构建检索问答链qa = RetrievalQA.from_chain_type(llm=llm, retriever=vectorstore.as_retriever())print(qa.run(“退货政策是什么?”))```这段代码浓缩了 RAG 的完整链路。其中chunk_overlap(重叠区)的设置很关键,它能避免关键信息恰好落在分块边界被切断。## 五、常见报错与解决方案Ollama 连接失败:检查 Ollama 服务是否启动,ollama serve是否在运行,模型名是否拼写正确。向量库加载失败:确认向量数据库依赖已安装,路径权限正确,Embedding 模型能正常下载。回答不准确:优先检查分块策略和检索质量,90% 的问题出在数据层而非模型层。文档读取失败:确认文档格式被加载器支持,PDF 是否为扫描件(需要 OCR)。## 六、我的实践建议第一,先跑通再优化。不要一上来就追求复杂的 Agent 架构,先用"加载→分割→向量化→检索→生成"的最小闭环跑通业务,再逐步引入混合检索、重排序等进阶能力。第二,重视提示词工程。提示词是模型能力的"方向盘”,同样的模型,提示词写得好坏,效果可能天差地别。建议把提示词模板化、版本化,用评测集量化迭代效果。第三,理解框架的边界。LangChain 擅长的是"组合",当业务逻辑变得复杂、需要循环和状态管理时,应该考虑升级到 LangGraph 这类图式编排框架,而不是在 Chain 里硬堆。第四,关注成本与延迟。RAG 链路涉及嵌入、检索、重排序、生成多个环节,每个环节都有成本。要根据业务需求平衡质量与成本,而不是盲目追求"最强"配置。## 结语LangChain 的价值不在于它有多炫酷,而在于它把大模型应用开发从"手工作坊"推进到了"标准化工程"。掌握它的核心组件和组合方式,你就能用几十行代码快速搭建出商用级的 AI 应用。但也要记住,框架只是工具,真正决定应用质量的是你对业务的理解、对数据的治理和对提示词的打磨。把基本功打扎实,才能在 AI 应用开发这条路上走得更远。