LangChain实战:5分钟搞定Ollama本地模型与DeepSeek、通义千问API的接入配置

张开发
2026/4/17 22:50:26 15 分钟阅读

分享文章

LangChain实战:5分钟搞定Ollama本地模型与DeepSeek、通义千问API的接入配置
LangChain实战5分钟搞定Ollama本地模型与主流API的集成配置当开发者第一次接触LangChain框架时最迫切的需求往往是如何快速接入不同来源的大语言模型。本文将手把手带你完成从环境配置到多模型调用的全流程特别针对本地运行的Ollama模型与国内主流API服务如DeepSeek、通义千问的集成场景。1. 环境准备与密钥管理在开始集成前我们需要确保开发环境正确配置。不同于简单的Python脚本LangChain项目通常需要管理多个API密钥和环境变量。以下是推荐的最佳实践# 创建项目目录并初始化虚拟环境 mkdir langchain_demo cd langchain_demo python -m venv .venv source .venv/bin/activate # Linux/Mac # .venv\Scripts\activate # Windows接下来创建.env文件管理敏感信息这是比直接硬编码更安全的做法# .env 文件示例 OLLAMA_BASE_URLhttp://localhost:11434 DEEPSEEK_API_KEYyour_api_key_here QWEN_API_KEYyour_api_key_here通过python-dotenv加载这些变量from dotenv import load_dotenv import os load_dotenv() # 默认加载.env文件 ollama_url os.getenv(OLLAMA_BASE_URL) deepseek_key os.getenv(DEEPSEEK_API_KEY)2. Ollama本地模型集成Ollama是目前最受欢迎的本地大模型运行方案之一。假设你已经在本地11434端口运行了Ollama服务并下载了qwen3:14b模型集成步骤非常简单from langchain_ollama import ChatOllama ollama_llm ChatOllama( base_urlos.getenv(OLLAMA_BASE_URL), modelqwen3:14b, temperature0.7 # 控制生成随机性 ) # 测试调用 response ollama_llm.invoke(用一句话解释量子计算) print(response.content)关键参数说明base_url: Ollama服务地址默认http://localhost:11434model: 已下载的模型名称如llama3、qwen3:14b等temperature: 值越高输出越有创意越低则越确定3. 国内主流API接入实战3.1 DeepSeek API集成DeepSeek提供了多种模型选择包括通用对话模型和专用代码模型。首先确保已申请API密钥from langchain_deepseek import ChatDeepSeek deepseek_llm ChatDeepSeek( modeldeepseek-chat, # 也可用deepseek-coder api_keyos.getenv(DEEPSEEK_API_KEY), max_tokens1024 # 限制生成长度 ) # 流式输出示例 for chunk in deepseek_llm.stream(如何用Python实现快速排序): print(chunk.content, end, flushTrue)3.2 通义千问API配置阿里云的通义千问需要通过Dashscope平台获取API密钥from langchain_community.chat_models import ChatTongyi qwen_llm ChatTongyi( modelqwen-max, # 最新旗舰模型 api_keyos.getenv(QWEN_API_KEY), top_p0.8 # 核采样参数 ) # 批量处理多个问题 questions [Python的GIL是什么, 解释RESTful API设计原则] responses qwen_llm.batch(questions) for q, r in zip(questions, responses): print(fQ: {q}\nA: {r.content}\n)4. 多模型统一调用接口LangChain最强大的特性之一是提供了统一的模型调用接口。我们可以轻松切换不同模型而不必重写业务逻辑from langchain_core.messages import HumanMessage def ask_models(question): messages [HumanMessage(contentquestion)] # 获取各模型响应 ollama_res ollama_llm.invoke(messages) deepseek_res deepseek_llm.invoke(messages) return { ollama: ollama_res.content, deepseek: deepseek_res.content } # 对比不同模型的输出 results ask_models(如何评价Transformer架构) for model, answer in results.items(): print(f--- {model} ---\n{answer}\n)5. 高级功能与性能优化5.1 异步并发调用当需要同时查询多个模型时异步接口能显著提升效率import asyncio async def async_query(): tasks [ ollama_llm.ainvoke(用比喻解释神经网络), deepseek_llm.ainvoke(用比喻解释神经网络) ] return await asyncio.gather(*tasks) # 运行异步查询 responses asyncio.run(async_query()) for i, res in enumerate(responses): print(fModel {i1}:\n{res.content}\n)5.2 记忆与上下文管理LangChain的Memory模块可以让模型记住对话历史from langchain.memory import ConversationBufferMemory memory ConversationBufferMemory() memory.save_context( {input: 我的名字是张三}, {output: 你好张三我是AI助手} ) # 下次对话会包含上下文 response ollama_llm.invoke( 还记得我叫什么吗, memorymemory.load_memory_variables({}) ) print(response.content) # 应该会回应张三5.3 性能调优参数不同模型支持的特殊参数可以优化输出质量参数OllamaDeepSeek通义千问作用temperature✓✓✓控制随机性top_p✓✓✓核采样max_tokens✓✓✓最大输出长度frequency_penalty✗✓✗降低重复输出presence_penalty✗✓✗鼓励新话题# 优化后的DeepSeek调用示例 optimized_deepseek ChatDeepSeek( modeldeepseek-chat, api_keyos.getenv(DEEPSEEK_API_KEY), temperature0.3, frequency_penalty0.5, max_tokens512 )在实际项目中我发现模型集成最常遇到的坑是参数兼容性问题。比如Ollama的stop_sequences参数在通义千问中可能叫stop_words需要仔细查阅各模型的文档。另一个实用技巧是为不同模型编写适配器函数统一参数接口。

更多文章