878 字
2 分钟
LangChainlangchain
LangChain 前置:OpenAI API 调用基线

在正式进入 LangChain 之前,先建立最小调用心智:同步、异步、流式和常见参数到底是什么。

这篇被我放在 LangChain 学习路径的最前面。它严格来说不是 LangChain 本体,而是为了先弄明白"模型调用本身长什么样",后面看 Models、Messages、Streaming 时会顺很多。

1. 介绍与安装#

官网的介绍是:OpenAI API 可应用于理解或生成自然语言、代码或图像的几乎所有任务。我们提供一系列不同功率级别的模型,适用于不同的任务,并具有微调自定义模型的能力。这些模型可以用于从内容生成到语义搜索和分类的一切。

我们要调用了解OpenAI包的用法,可以前往OpenAI Python API library查看;如果想快速用了解怎么用这个包来开发,可以看OpenAI Developers的接口文档。笔者整理的时候,这个包在pypi上的stable版本已经v2.29.0,一些教程还在用旧版的接口。

首先,最基本的当然是从PyPI安装

pip install openai

安装完成用pip show openai可以看到

Name: openai
Version: 2.29.0
Summary: The official Python library for the openai API
Home-page: https://github.com/openai/openai-python
Author:
Author-email: OpenAI <support@openai.com>
License: Apache-2.0
Location: /opt/homebrew/anaconda3/envs/agent/lib/python3.13/site-packages
Requires: anyio, distro, httpx, jiter, pydantic, sniffio, tqdm, typing-extensions
Required-by:

2. 快速使用#

(1) 主流新接口 - responses.create(…)#

github页提供了一个示例。由于我们没有OpenAI额度😭,我们换中转API。

一般情况下,我们会用python-dotenv的方法将API秘钥添加到.env中,然后载入,防止直接写进源码。下面写法也可以不用find_dotenv,直接一句load_dotenv(),就会去默认环境找。

Python3 点击展开代码
18 lines 展开代码

alt text

(2) 传统聊天信息 - chat.completions#

这是偏"传统聊天消息"的接口风格。相比而言,新版的instructions + input更像直接回答,而messages更像多轮聊天形式。

另外需要注意的是,这里的role必须是标准角色,比如system、user、assistant。

对比两者,还有接口返回的结构不同,可以观察一下。

Python3 点击展开代码
26 lines 展开代码

alt text

(3) 图像#

可以在input里面用content加入type键。默认input_text换成input_image即可图像即可,有两种形式,一种是用在线图像的URL,一般用{"type": "input_image", "image_url": f"{img_url}"},一种是base64,base64包的用法在这里略掉,可以在Base64包用法里面查看。

(4) 异步使用#

与正常使用几乎没区别,只是换成了AsyncOpenAI,举例如下:

Python3 点击展开代码
21 lines 展开代码

(5) aiohttp#

默认情况下,异步客户端使用 HTTP 请求。然而,为了提高并发性能,也可以使用 aiohttp 作为 HTTP 后端。不过aiohttp暂时还没看,skip一下。

(6) 流式回答#

流式回答可以让模型不要等整段生成完再一次性返回,而是边生成边把事件流发回来。官方文档描述为server-sent events,SDK中会拿到一个可迭代对象,所以能一直打印,直到收到完成事件为止。

直接print会打印整个对象的一大堆信息,我们也可以看一下:

ResponseTextDeltaEvent(content_index=0, delta='善', item_id='msg_01cd90f5c2f813180069c3fef6a7e08190b9a175ce86233099', logprobs=[], output_index=0, sequence_number=492, type='response.output_text.delta', obfuscation='JRiZxCSRiPjcp8M')

如果想呈现目前常见的打字机输出,可以只打印每个事件的delta字段,然后把flush设置为True(即将缓存区的数据立刻写入文件同时清空缓冲区)。

Python3 点击展开代码
24 lines 展开代码

暂时经常用到的应该就是这些,后面可以边学边看

3. 参数#

API字典在这里,可以随用随看,里面包含一大堆参数。

专题阅读

LangChain

这篇文章属于同一条阅读链。你可以直接在这里切换,不用再回到列表页重新找。

当前进度2 / 11

留言区

留言

欢迎纠错、补充、交流。昵称和评论内容必填;如果你愿意,也可以留下联系方式,仅站主可见。

0

正在加载评论...

0 / 2000

阅读导航

文章目录

当前阅读位置将在这里显示

0 节