FEATURED · 精选文章

LangChain学习与项目实战2 -- 大模型调用

发布时间 / 2026/9/15 9:09:06
来源 / 创域科博编辑部
栏目 / 资讯中心
LangChain学习与项目实战2 -- 大模型调用 一、大模型主要调用方法1、invoke 调用1invoke输入参数工作模式是阻塞式的有文本输入字典列表、消息对象列表三种入参方式。#基本语法 # input 发送给模型的内容 必填 str | list[dict] | list[Message] 等 # config 高级配置 可选 dict回调函数、元数据、标签等 response model.invoke(input, configNone) #input的输入 # 1、文本输入 response model.invoke(一句话介绍下你自己) # 2、字典列表 较为灵活推荐 # 可以设置系统提示、表达多伦对话历史、JSON兼容易于序列化和网络传输 # 角色 英文 作用 示例 # system System 设定AI的行为、角色、规则 你是一个专业的Python导师 # user Human/User 用户的输入/问题 什么是装饰器 # assistant AI/Assistant AI的历史回复用于对话上下文 装饰器是一种设计模式.... # 2.1 举例1 基础调用 message [ {role: system, content: 你是一个专业的数学老师。}, {role: user, content: 帮我解释下什么是三角函数。}, ] response model.invoke(message) # 2.2 举例2 上下文 message [ {role: system, content: 你是一个专业的数学老师。}, {role: user, content: 12}, {role: assistant, content: 3}, {role: user, content: 我刚才问的什么问题}, ] response model.invoke(message) # 3、消息列表 message [ SystemMessage(content你是一个专业的数学老师。), HumanMessage(12), AIMessage(3), HumanMessage(我刚才问的什么问题), ] response model.invoke(message)2invoke的返回值AIMessage( # 核心内容大模型的回答文本。 content\n\n你好很高兴认识你。, # 模型拒绝回答的情况如触碰安全策略None表示正常。 additional_kwargs{refusal: None}, # 响应的详细原始数据 response_metadata{ token_usage: { completion_tokens: 526, # 生成回答消耗的Token输出 prompt_tokens: 44, # 用户输入消耗的Token输入 total_tokens: 570, # 本次交互总计Token completion_tokens_details: None, prompt_tokens_details: None }, model_provider: openai, # 服务商 model_name: , # 模型名称 system_fingerprint: , id: chatcmpl-30f4a9b9-7ed9-4435-8eb5-e5d09334dabc, # 响应ID finish_reason: stop, # 停止原因正常stop还有length长度超限等 logprobs: None }, idlc_run--01a07ae1-906e-72e3-81b3-6d356857f1a0-0, #LangChain追踪的 tool_calls[], # 正常触发的外部工具调用列表 invalid_tool_calls[], # 触发失败或是格式错误的工具调用 # LangChain标准化后的Token消耗 usage_metadata{ input_tokens: 44, output_tokens: 526, total_tokens: 570, input_token_details: {}, output_token_details: {} } )2、stream 调用stream是流式调用实时返回响应片段调用后返回一个迭代器。可以通过循环来实时处理每一个新生成的chunk块。import os from rich import print from langchain_openai import ChatOpenAI from dotenv import load_dotenv load_dotenv(overrideTrue) DEEPSEEK_API_KEY os.getenv(NEB_API) DEEPSEEK_BASE_URL os.getenv(NEB_URL) llm_deepseek ChatOpenAI( modelnebulacoder-cot-v8.0, api_keyDEEPSEEK_API_KEY, base_urlDEEPSEEK_BASE_URL, ) for chunk in llm_deepseek.stream(帮我解释下什么是人工智能): print(chunk.text, end, flushTrue)3、batch 批量调用允许一次性发送一组请求模型会在后台并行处理然后返回所有的结果列表。与invoke相比可以大幅减少网络往返开销和等待时间。import os from rich import print from langchain_openai import ChatOpenAI from dotenv import load_dotenv load_dotenv(overrideTrue) DEEPSEEK_API_KEY os.getenv(NEB_API) DEEPSEEK_BASE_URL os.getenv(NEB_URL) model ChatOpenAI( modelnebulacoder-cot-v8.0, api_keyDEEPSEEK_API_KEY, base_urlDEEPSEEK_BASE_URL, ) message [ 你好你是谁, 11?, 中国首都在哪里 ] # 根据输入顺序返回 responses model.batch(message) for res in responses: print(res) # 根据完成顺序返回 responses model.batch_as_completed(message) for res in responses: print(res)4、异步调用对于invoke、stream、batch都有对于的异步方法ainvoke、astream、abatch。和同步方法相比异步方法1避免阻塞主线程同步方法会阻塞程序执行而异步方法让程序在等待响应的时候能够保持响应性。2优化资源利用减少空闲等待时间。import asyncio import os import time from rich import print from langchain_openai import ChatOpenAI from dotenv import load_dotenv load_dotenv(overrideTrue) DEEPSEEK_API_KEY os.getenv(NEB_API) DEEPSEEK_BASE_URL os.getenv(NEB_URL) model ChatOpenAI( modelnebulacoder-cot-v8.0, api_keyDEEPSEEK_API_KEY, base_urlDEEPSEEK_BASE_URL, ) async def demo_async_invoke(): print(演示ainvoke异步) start_time time.perf_counter() print(程序开始) print(发起模型调用) async_task asyncio.create_task(model.ainvoke(你好你是谁)) print(模型请求已在后台发送执行本地任务) for i in range(3): await asyncio.sleep(1) # 使用异步等待释放控制权 print(f正在执行第{i1}个任务) print(获取模型结果) response await async_task end_time time.perf_counter() print(f模型返回:{response.content}) print(f运行耗时:{end_time - start_time:.2f}s)5、发送多模态内容举例使用content字段发送图片import base64 import os from langchain_openai import ChatOpenAI from langchain.messages import HumanMessage from dotenv import load_dotenv load_dotenv(overrideTrue) DEEPSEEK_API_KEY os.getenv(NEB_API) DEEPSEEK_BASE_URL os.getenv(NEB_URL) model ChatOpenAI( modelnebulacoder-cot-v8.0, api_keyDEEPSEEK_API_KEY, base_urlDEEPSEEK_BASE_URL, ) def encode_image(img_path, img_typepng): with open(img_path, rb) as img_file: return fdata:image/{img_type};base64,{base64.b64encode(img_file.read()).decode(utf-8)} img_path img_test.png base64_image encode_image(img_path) res model.invoke( [HumanMessage( content[ {type: text, text: 介绍下这张图片}, {type: image_url, image_url: {url: base64_image}} ] )] ) print(res.content)
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻