news 2026/6/10 23:51:11

LangChain使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangChain使用

首先我们需要安装ollama,官方网站为:https://ollama.com/

下载好了以后,我们需要下载deepseek模型,可以使用ollama run deepseek-r1:1.5b

完成前面两部准备工作以后,我们就可以开启langchain的学习之路了。

本地大模型调用方法

首先我们需要安装langchain包

pip install langchain ==1.0.1

然后需要安装ollama集成库

pip install langchain-ollama==1.0.0

调用代码实例

from langchain_ollama import ChatOllama # 初始化大模型 llm =ChatOllama( model="deepseek-r1:1.5b", base_url = "http://127.0.0.1:11434", temperature=0.7, ) # 调用大模型 res = llm.invoke("你好,你是谁") print(res.content)

通过API调用大模型

首先我们需要安装langchain与deepseek的集成包

pip install langchain-deepseek==1.0.0

调用deepseek

我们需要去deepseek官网(https://www.deepseek.com/)去申请一个apikey并且放到我们的环境变量当中

from langchain_deepseek import ChatDeepSeek import os # 初始化大模型 llm = ChatDeepSeek( model="deepseek-chat", api_key=os.environ["DEEPSEEK_API_KEY"], ) # 调用模型 print(llm.invoke("你好,你是?").content)

调用阿里大模型

我们需要去阿里百炼获取apikey:https://bailian.console.aliyun.com/

此外我们还需要安装langchain-openai库

pip install langchain-openai
from langchain_openai import ChatOpenAI import os llm = ChatOpenAI( base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model="qwen-plus", api_key=os.environ["DASHSCOPE_API_KEY"], ) print(llm.invoke("1+1等于多少").content)

大模型选择策略LLMs

LLMs特点:功能简单,仅支持一问一答的纯文本交互,不支持工具调用、结构化输出。

应用场景(适用于无复杂逻辑的文本交互场景):

  • 日常闲聊(如讲笑话、聊生活);
  • 基础知识问答(如“地球周长是多少”);
  • 短文本创作(如写打油诗、小段子)。
from langchain_ollama import OllamaLLM # 初始化大模型 llm =OllamaLLM( model="deepseek-r1:1.5b", base_url = "http://127.0.0.1:11434", temperature=0.7, ) result = llm.invoke("你好,你是?") print(result)

LLMs因功能局限,目前实际开发中较少使用,复杂场景建议选择支持工具调用、结构化输出的大模型类型。

大模型选择策略ChatModel

ChatModel特点:支持多轮对话,采用结构化消息格式(区分system/user/assistant角色),可保留上下文语境,比基础LLMs更适合交互场景。

应用场景(适用于需要上下文记忆的交互场景):

  • 智能客服(记住用户历史问题,连贯解答);
  • 聊天机器人(多轮闲聊、主题对话);
  • 任务引导(分步指导用户完成操作,如注册流程)。
from langchain_ollama import ChatOllama # 初始化大模型 llm =ChatOllama( model="deepseek-r1:1.5b", base_url = "http://127.0.0.1:11434", temperature=0.7, ) # 多轮消息列表(含上下文) messages = [ {"role": "system", "content": "你是贴心助手,需记住用户偏好"}, {"role": "user", "content": "我喜欢科幻电影"}, {"role": "user", "content": "推荐几部类似的"} ] response = llm.invoke( messages) print(response.content) # 会基于“喜欢科幻电影”的上下文推荐

大模型消息格式

作用:标准化多轮对话的上下文传递,明确角色(系统、用户、助手)与内容,保证大模型交互的连贯性和准确性。

类型

  • SystemMessage:定义大模型的角色、规则(如“你是C/C++语言专家”)。
  • HumanMessage:用户的输入内容。
  • AIMessage:大模型的输出内容(调用时一般无需手动构造,接收回复时使用)。
from langchain_ollama import ChatOllama from langchain_core.messages import SystemMessage, HumanMessage # 初始化大模型 llm = ChatOllama( model="deepseek-r1:1.5b", base_url="http://127.0.0.1:11434", temperature=0.7, ) # 构造消息列表 langchain_messages = [ SystemMessage(content="你是一个C/C++语言专家"), HumanMessage(content="帮我用C++语言写一个冒泡排序算法") ] # 调用模型 result = llm.invoke(langchain_messages) print(result.content)

  • 消息需严格区分角色类型(SystemMessage/HumanMessage/AIMessage),不可混淆。
  • 多轮对话时,消息列表需按“系统 → 用户 → 助手 → 用户 → 助手...”的逻辑顺序排列,保证上下文连贯。

大模型流式输出

传统 lvm.invoke 需等大模型生成全部内容后才输出,流式输出(lvm.stream)可逐字/逐段返回结果,提升交互实时性,适合聊天、实时内容展示等场景。

from langchain_ollama import ChatOllama from langchain_core.messages import SystemMessage, HumanMessage # 构造消息 langchain_messages = [ SystemMessage(content="你是一个C/C++语言专家"), HumanMessage(content="帮我用C++语言写一个冒泡排序算法") ] # 初始化大模型 llm =ChatOllama( model="deepseek-r1:1.5b", base_url = "http://127.0.0.1:11434", temperature=0.7, ) # 流式输出调用 for chunk in llm.stream(input=langchain_messages): print(chunk.content, end="")
  • 流式输出返回的是生成器对象,需通过循环迭代获取每段输出;
  • 部分大模型对流式支持存在差异,需确认所使用的模型是否兼容流式调用。

工具调用(Function Calling)

大模型虽智能,但无法直接执行发送邮件、网页数据抓取、复杂计算等操作。Function Calling可让大模型自主选择并调用外部工具(函数),拓展其能力边界,实现“思考 + 执行”的闭环。

from langchain_core.messages import AIMessage, ToolMessage from langchain_ollama import ChatOllama from langchain_core.tools import tool # 定义工具函数 @tool def plus_tool(a: int, b: int) -> int: """ 计算两数相加 @参数1:a整数 @参数2:b整数 """ print(f"调用工具:plus_tool,参数:a={a}, b={b}") return a + b @tool def sub_tool(a: int, b: int) -> int: """计算两数相减""" print(f"调用工具:sub_tool,参数:a={a}, b={b}") return a - b # 工具绑定:将工具与大模型关联 tools = [plus_tool, sub_tool] # 初始化大模型 llm =ChatOllama( model="qwen3:4b", base_url = "http://127.0.0.1:11434", temperature=0.7, ) tools_with_llm = llm.bind_tools(tools) messages = [ {"role": "system", "content": "你是一个计算器助手"}, {"role": "user", "content": "帮我计算2+3等于多少"}] # 调用带工具的大模型 response: AIMessage = tools_with_llm.invoke(messages) # 执行所有工具调用参数 # 获取大模型返回的工具 for tool_call in response.tool_calls: tool_call_name = tool_call.get("name") tool_call_id = tool_call.get("id") tool_call_args = tool_call.get("args") print(f"调用工具:{tool_call_name}, 参数:{tool_call_args}") # 执行工具 for tool in tools: if tool.name == tool_call_name: result = tool.invoke(tool_call_args)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/31 3:30:12

央企应用里,asp.net如何支持文件夹的上传和下载?

.NET程序员外包项目大文件上传解决方案(原生JSASP.NET WebForm) 兄弟,我懂你的苦!甲方爸爸要兼容IE8,要文件夹层级,要20G大文件,还要加密传输存储,预算还卡得死死的。但咱是搞技术的…

作者头像 李华
网站建设 2026/6/10 4:29:23

python基于协同过滤算法个性化动漫推荐系统hx3637

前言随着动漫产业的蓬勃发展,网络上涌现出海量的动漫资源。对于动漫爱好者来说,在众多选择中找到符合自己口味的动漫作品变得愈发困难。因此,开发一个基于协同过滤算法的个性化动漫推荐系统显得尤为重要。该系统旨在通过分析用户的历史行为数…

作者头像 李华
网站建设 2026/6/10 10:51:58

计算机毕业设计springboot大学生毕业设计管理系统 基于SpringBoot的高校毕业设计全流程数字化管理平台设计与实现 Java Web技术驱动的高校毕业生课题与答辩综合监管系统开发

计算机毕业设计springboot大学生毕业设计管理系统09cf6v1r (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。 在高等教育体系不断深化改革的背景下,毕业设计作为本科生…

作者头像 李华
网站建设 2026/6/8 12:39:33

创业公司必看:5招搞定批量软著申请,成本降低90%

去年公司申请高企认定,需要6个软著。找了家代办公司报价4800,说是包过。结果材料被退了两次,来回折腾一个多月,差点耽误申报窗口。 后来换了个思路,用AI工具自己生成材料,6个软著花了不到500块&#xff0c…

作者头像 李华
网站建设 2026/5/23 2:07:39

开发电影/电视剧推荐工具,输入喜好类型,(悬疑/喜剧/言情)推荐适配作品,标注评分及看点,过滤烂片,帮用户节省选片的时间。

1. 实际应用场景与痛点分析 场景描述 - 周末想看电影或追剧,但面对海量片库,用户常遇到: 1. 不知道选什么类型,刷半天找不到合适的。 2. 选到烂片,浪费时间。 3. 想看高分作品,但不知道哪些符合自己口味。 …

作者头像 李华
网站建设 2026/6/10 17:27:20

基于AI多维度分析:金价惊险跳水重挫超百美元背后的市场逻辑

摘要:本文通过运用AI算法对贵金属市场价格波动数据、宏观经济数据以及地缘事件信息进行整合分析,结合市场情绪模型与风险评估模型,剖析金价重挫超百美元及贵金属市场整体波动的内在逻辑与外在影响因素。 AI价格波动监测与关联分析&#xff1a…

作者头像 李华