以使用 OpenAI 的聊天模型(如 GPT-4)为例,从设置环境、初始化模型、调用模型到处理响应的各个方面进行介绍:

1. 环境设置

  • 安装 langchain-openai 包。
  • 设置环境变量 OPENAI_API_KEY,用于认证(以linux为例,windows也可以手动添加环境变量)
pip install -U langchain-openai
export OPENAI_API_KEY="your-api-key"

2. 初始化参数

  • 模型参数:如模型名称、温度(temperature)、最大生成令牌数(max_tokens)等。
  • 客户端参数:如请求超时时间(timeout)、最大重试次数(max_retries)、API 密钥(api_key)等。
from langchain_openai import ChatOpenAIllm = ChatOpenAI(model="gpt-4o",temperature=0,max_tokens=None,timeout=None,max_retries=2,# api_key="...",# base_url="...",# organization="...",# other params...
)

3. 调用模型

  • 通过 invoke 方法调用模型,传入对话消息。
  • 支持同步和异步调用。
messages = [("system", "You are a helpful translator. Translate the user sentence to French."),("human", "I love programming."),
]
response = llm.invoke(messages)
print(response.content)

完整代码:

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage# 使用LangChain调用DeepSeek模型
llm = ChatOpenAI(model="gpt-4o",  # 使用完整的模型名称temperature=0,max_tokens=None,timeout=None,max_retries=2,api_key="******",base_url="https://openrouter.ai/api/v1",  # 添加OpenRouter的基础URLopenai_api_base="https://openrouter.ai/api/v1",  # 有些版本可能需要这个参数
)
# 创建消息列表 - 使用LangChain的消息格式
messages = [SystemMessage(content="你是一个有帮助的助手,请用中文回答用户的问题。"),HumanMessage(content="今天天气如何?")
]try:response = llm.invoke(messages)print(response.content)
except Exception as e:print(f"发生错误: {e}")

4. 流式响应

  • 使用 stream 方法获取流式响应,逐步处理生成的文本。
for chunk in llm.stream(messages):print(chunk.text(), end="")

完整代码:

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage# 使用LangChain调用DeepSeek模型
llm = ChatOpenAI(model="gpt-4o",  # 使用完整的模型名称temperature=0,max_tokens=None,timeout=None,max_retries=2,api_key="******",base_url="https://openrouter.ai/api/v1",  # 添加OpenRouter的基础URLopenai_api_base="https://openrouter.ai/api/v1",  # 有些版本可能需要这个参数
)
# 创建消息列表 - 使用LangChain的消息格式
messages = [SystemMessage(content="你是一个有帮助的助手,请用中文回答用户的问题。"),HumanMessage(content="今天天气如何?")
]try:for chunk in llm.stream(messages):print(chunk.text(), end="")
except Exception as e:print(f"发生错误: {e}")

5. 异步调用

  • 支持异步调用,适用于需要非阻塞操作的场景。
await llm.ainvoke(messages)

6. 工具调用

  • 可以绑定工具(如天气查询、人口查询等),模型会自动调用这些工具。
from pydantic import BaseModel, Fieldclass GetWeather(BaseModel):location: str = Field(..., description="The city and state, e.g. San Francisco, CA")llm_with_tools = llm.bind_tools([GetWeather])
response = llm_with_tools.invoke("What is the weather in LA?")

完整代码:

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
from pydantic import BaseModel, Fieldclass GetWeather(BaseModel):location: str = Field(..., description="The city and state, e.g. San Francisco, CA")# 使用LangChain调用DeepSeek模型
llm = ChatOpenAI(model="gpt-4o",  # 使用完整的模型名称temperature=0,max_tokens=None,timeout=None,max_retries=2,api_key="******",base_url="https://openrouter.ai/api/v1",  # 添加OpenRouter的基础URLopenai_api_base="https://openrouter.ai/api/v1",  # 有些版本可能需要这个参数
)llm_with_tools = llm.bind_tools([GetWeather])# 创建消息列表 - 使用LangChain的消息格式
messages = [SystemMessage(content="你是一个有帮助的助手,请用中文回答用户的问题。"),HumanMessage(content="北京,今天天气如何?")
]try:for chunk in llm_with_tools.stream(messages):print(chunk.text(), end="")
except Exception as e:print(f"发生错误: {e}")

7. 内置工具

  • 使用 OpenAI 的内置工具,如搜索、文档解析等。
tool = {"type": "web_search"}
llm_with_tools = llm.bind_tools([tool])
response = llm_with_tools.invoke("What was a positive news story from today?")

8. 对话状态管理

  • 通过 previous_response_id 维护对话状态,确保对话连贯性。
response = llm.invoke("Hi, I'm Bob.")
second_response = llm.invoke("What is my name?", previous_response_id=response.response_metadata["id"])

9. 结构化输出

  • 可以指定输出格式为特定的 Pydantic 模型。
class Joke(BaseModel):setup: str = Field(description="The setup of the joke")punchline: str = Field(description="The punchline to the joke")structured_llm = llm.with_structured_output(Joke)
response = structured_llm.invoke("Tell me a joke about cats")

10. JSON 模式

  • 指定响应格式为 JSON 对象。
json_llm = llm.bind(response_format={"type": "json_object"})
response = json_llm.invoke("Return a JSON object with key 'random_ints' and a value of 10 random ints in [0-99]")

11. 图像输入

  • 支持将图像作为输入,模型可以处理图像内容。
import base64
import httpximage_url = "https://example.com/image.jpg"
image_data = base64.b64encode(httpx.get(image_url).content).decode("utf-8")
message = HumanMessage(content=[{"type": "text", "text": "describe the weather in this image"},{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{image_data}"}},]
)
response = llm.invoke([message])

12. 令牌使用

  • 获取每次调用的令牌使用情况,包括输入、输出和总令牌数。
response = llm.invoke(messages)
print(response.usage_metadata)

13. 日志概率

  • 获取生成文本的日志概率信息。
logprobs_llm = llm.bind(logprobs=True)
response = logprobs_llm.invoke(messages)
print(response.response_metadata["logprobs"])

14. 响应元数据

  • 获取响应的元数据,包括模型名称、完成原因等。
response = llm.invoke(messages)
print(response.response_metadata)

15. 灵活处理

  • 使用 OpenAI 的灵活处理(flex processing)服务,适用于非关键任务。
llm = ChatOpenAI(model="o4-mini", service_tier="flex")

16. OpenAI 兼容 API

  • 支持与 OpenAI 兼容的 API(如 LM Studio、vLLM 等),通过 extra_body 参数传递特定参数。
llm = ChatOpenAI(base_url="http://localhost:8000/v1",api_key="EMPTY",model="meta-llama/Llama-2-7b-chat-hf",extra_body={"use_beam_search": True, "best_of": 4},
)

17. 参数选择

  • 使用 model_kwargs 传递标准 OpenAI 参数。
  • 使用 extra_body 传递特定于兼容 API 的自定义参数。

18. 提示缓存优化

  • 使用 prompt_cache_key 参数优化缓存命中率,减少成本。
response = llm.invoke(messages, prompt_cache_key="example-key-a")

总结

本位提供了非常全面的指导,帮助开发者快速集成和使用 OpenAI 的聊天模型,包括环境设置、参数配置、调用方法、工具集成、响应处理等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/98271.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/98271.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/98271.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle为数据大表创建索引方案

在日常业务中,避免不了为数据量大表补充创建索引的情况,如果快速、有效地创建索引成了一个至关重要的问题(注意:虽然提供有ONLINE在线执行的方式,理想状态下不会阻塞DML操作,但ONLINE在开始、结束的两个时刻…

网站服务相关问题

目录 HTTP常见的状态码 http和https的区别以及使用的端口号 http处理请求的过程 https认证过程 正向代理和反向代理的区别 HTTP常见的状态码 HTTP(超文本传输协议)定义了一系列的状态码,用于表示客户端请求的处理结果。以下是一些常见的…

Go并发编程实战:深入理解Goroutine与Channel

Go并发编程实战:深入理解Goroutine与ChannelGo并发编程实战:深入理解Goroutine与Channel概述1. 为什么是Go的并发?从“线程”与“协程”说起2. Goroutine:如何使用?3. Channel:Goroutine间的安全通信创建与…

2025服贸会“海淀之夜”,点亮“科技”与“服务”底色

2025年9月12日傍晚,北京颐和园,十七孔桥旁,2025年中国国际服务贸易交易会“海淀之夜”如约而至。在“海淀之夜”,科技机构、金融机构、咨询服务机构、出海服务企业以及跨国企业和国际友人等,将目光聚焦于此。被第三方机…

qt使用camke时,采用vcpkg工具链设置VTK的qt模块QVTKOpenGLNativeWidget

下载:QVTKOpenGLNativeWidget嵌入qt应用中资源-CSDN下载 1.通过vcpkg安装VTK,目前的VTK里面默认为qt6,如果需要安装qt5,需要将端口配置进行修改 笔者的vcpkg的vtk端口路径:D:\vcpkg\ports\vtk portfile.cmake 修改点: #第一处 #file(READ "${CURRENT_INSTALLED_DIR}/sh…

Axios在鸿蒙应用开发中的使用

目录一、简介二、安装与配置三、axios用法1.axios泛型参数(1).第三个泛型参数-约束data请求参数的类型(2).第二个泛型参数-决定后台返回数据的类型2.axios拦截器3.请求工具封装统一处理业务状态码错误统一处理401或404错误一、简介 Axios 是一个基于 Promise 的网络请求库&…

第九周文件上传

文件上传漏洞 不同的网站要不同的webshell。我们使用是php开发的网站。 一服务器白名单绕过 服务端白名单(Whitelist)是⼀种安全机制,它只允许预定义的合法元素通过(只有有限的元素进入),其他所有内容默认被拒绝。相比黑名单&am…

计算机视觉必读论文:从经典到前沿

计算机视觉必读论文:从经典到前沿 一、前言 二、经典论文解读​ 2.1 图像分类​ 2.1.1 《ImageNet Classification with Deep Convolutional Neural Networks》(AlexNet)​ 2.1.2 《Very Deep Convolutional Networks for Large-Scale Image Recognition》(VGGNet)​ 2.1.…

对比PowerBI的字段参数,QuickBI的已选字段还有改进的空间

对比PowerBI的字段参数,QuickBI的已选字段还有改进的空间 之前分享过QuickBI的已选字段 vs PowerBI的字段参数,QuickBI可以在表格中实现PowerBI的字段参数效果,甚至比PowerBI实现的过程和使用方式更丝滑。 但如果应用到图形中会怎么样呢&am…

飞算JavaAI:Java开发新时代的破晓之光

免责声明:此文章的所有内容皆是本人实验测评,并非广告推广,并非抄袭。如有侵权,请联系,谢谢!【#飞算JavaAl炫技赛】 【#Java开发】摘要:飞算JavaAI作为全球首款聚焦Java的智能开发助手&#xff…

vulntarget-c靶场内网渗透

1. 环境搭建 2.对ubuntu20的渗透 对其进行端口扫描 访问80端口 发现是laravel框架。版本是v8.78.1 使用 kaili 自带的msf 进行渗透 search laravel use exploit/multi/php/ignition_laravel_debug_rce执行利用完成检测 上传木马 先将木马进行base64编码 <?php eval($_P…

基于大模型多模态的人体体型评估:从“尺码测量”到“视觉-感受”范式

基于大模型多模态的人体体型评估&#xff1a;从“尺码测量”到“视觉-感受”范式摘要&#xff1a;传统体型识别依赖CV骨架/关键点与像素量尺&#xff0c;容易受衣物、发型、姿态、光照影响&#xff0c;且“厘米级数值”与穿衣体验、审美感受之间存在鸿沟。本文提出一种基于大模…

【docker】——docker国内可用的源

不知道哪里来的&#xff0c;但是可以用。1. 解决方案打开配置文件&#xff08;若文件不存在&#xff0c;会自动创建&#xff09; sudo vim /etc/docker/daemon.json将以下内容粘贴进去{"builder": {"gc": {"defaultKeepStorage": "20GB&quo…

【Windows端口管理】快速查看和释放被系统保留的TCP端口

问题描述在Windows系统开发时&#xff0c;经常遇到端口无法使用的问题。系统会自动保留一系列TCP/UDP端口范围&#xff0c;导致应用程序无法绑定这些端口。查看所有被保留的端口范围查看TCP保留端口# 查看所有TCP端口排除范围 netsh interface ipv4 show excludedportrange pro…

面经汇总(1)

1.介绍C面向对象的三大特性2.介绍常见的排序算法3.介绍TCP/UDP区别4.TCP三次握手四次挥手5.如果四次挥手第四次客户端的ACK没有发出去会有什么结果&#xff1f;6.介绍MYSQL的事务7.介绍线程池8.主要的线程池有哪几种&#xff1f;9.手撕反转链表10.介绍对象存储以及常见的对象存…

遥感图像数字水印系统优化方案

遥感图像数字水印系统优化方案 1. 引言 遥感图像在现代地理信息系统、环境监测、军事侦察等领域发挥着重要作用。为了保护遥感图像的版权和完整性&#xff0c;数字水印技术被广泛应用。然而&#xff0c;现有的遥感图像水印方案往往在不可见性、鲁棒性和容量之间存在权衡&#x…

鸿蒙高效数据处理框架全攻略:缓存、并行与流式实战

摘要 在如今的物联网和智能设备世界里&#xff0c;数据已经成为最关键的资源。无论是可穿戴设备、智能家居&#xff0c;还是车载系统&#xff0c;每一秒都会产生大量数据。如果缺少一套高效的数据处理框架&#xff0c;开发者就可能面临内存溢出、处理延迟大、设备卡顿等问题。本…

零售企业数字化转型的道、法、术:基于开源AI大模型AI智能名片S2B2C商城小程序的战略重构

摘要 在数字经济与消费升级的双重驱动下&#xff0c;零售企业正经历从"流量争夺"到"用户时间争夺"的范式转变。本文以阿里巴巴、京东、万达三大巨头的战略实践为样本&#xff0c;结合开源AI大模型、AI智能名片与S2B2C商城小程序的技术特性&#xff0c;提出…

瑞云渲染为电影《731》提供云渲染技术支持,助力影片全球上映

在“九一八事变”94周年这一庄严沉重的纪念时刻&#xff0c;抗战电影《731》&#xff08;海外名&#xff1a;《EVIL UNBOUND》&#xff09;于世界各地上映&#xff0c;激起广泛的社会反响与深远的历史思考。 瑞云渲染&#xff08;Renderbus&#xff09;作为全球领先的云渲染服…

EasyDSS视频直播RTMP推流技术如何实现多机型的无人机视频统一直播

在当今这个瞬息万变的传媒时代&#xff0c;无人机与推流直播的结合&#xff0c;正以前所未有的方式重塑着信息传播的边界。无人机以其独特的空中视角和灵活的机动性&#xff0c;为直播行业带来了革命性的变化&#xff0c;而推流直播技术的成熟&#xff0c;则让这一变化得以实时…