openai版本:1.40.0
格式化输出函数
from pydantic import BaseModel
from openai import OpenAI
def ask_gpt(prompt, response_format):
base_url = ""
api_key = ""
client = OpenAI(api_key=api_key, base_url=base_url)
messages = [{
"role": "user",
"content": prompt
}]
completion = client.beta.chat.completions.parse(
model="gpt-4o-2024-08-06",
messages=messages,
response_format=response_format
)
msg = None
message = completion.choices[0].message
if message.parsed:
msg = message.content
else:
msg = message.refusal
return msg
定义输出格式
这里定义的最终类是Books
,其中属性publisher
的值是字符串,属性address
的值是对应Address
类中的格式,属性books
的值是Book
类的列表
class Book(BaseModel):
name: str
author: str
date: str
class Address(BaseModel):
state: str
city: str
street: str
class Books(BaseModel):
publisher: str
address: Address
books: list[Book]
调用:
msg = ask_gpt("随机生成3个书籍信息", Books)
这里传入的参数 Books
就是前面定义的最终的类
上述代码只能实现格式化输出,如果同时需要正常问答的话需要加一个判断,在completion
那里用的是不同的函数:
completion = client.chat.completions.create(
model="gpt-4o-2024-08-06",
messages=messages,
stream=streaming_flg,
输出效果
{
"publisher": "Mystery Horizons",
"address": {
"state": "New York",
"city": "Brooklyn",
"street": "Maple Street"
},
"books": [
{
"name": "Whispers of the Forgotten Woods",
"author": "Eleanor Bryce",
"date": "2021-06-15"
},
{
"name": "Echoes of the Silver Moon",
"author": "Gordon Knight",
"date": "2019-11-23"
},
{
"name": "Shadows of the Vanishing Isle",
"author": "Lila Thompson",
"date": "2020-05-07"
}
]
}