使用 JSON Mode,串连大模型与应用代码
除了应用在用户的日常对话外, 阶跃星辰大模型还可以用于和应用自身的逻辑代码进行一些操作,来实现自然语言到应用逻辑的转化。 比如,你可以使用大模型来实现用户评论内容的情绪判断、使用大模型来实现内容评分等功能。你可以通过 Prompt Engineering 的方式,来让大模型返回特定格式的内容并进行解析。阶跃星辰为开发者提供了 JSON Mode 的支持,帮助开发者获取到可以解析的 JSON 数据,更加容易与系统进行集成。
使用方法
在使用 JSON Mode 时,你需要做三件事:
- 在 System Prompt 中,放置你预期大模型给出的输出的 JSON 的结构和说明(推荐使用 JSON Schema 的结构描述,帮助大模型理解)。
- 请求时,设置response_format 为
{ "type": "json_object" }
,从而来让大模型返回可解析的 JSON 结果。 - 解析大模型返回的结果,并验证是否符合预期。符合预期后即可使用在业务系统中对接。
参考代码
以使用大模型进行评论的情感分析为例子,你可以通过参考如下代码,让大模型返回 JSON 结果。
from openai import OpenAI
# 初始化 阶跃星辰 Client
STEPFUN_KEY = ""
client = OpenAI(
base_url="https://api.stepfun.com/v1",
api_key=STEPFUN_KEY
)
# 在 System Prompt 中定义返回结果
system_prompt = """
你是一个评论分析师,会根据用户的输入,分析用户输入的情感,并给出评论的情感分析结果
## 分析规则
1. 如果用户的评论中包含了负面情感词汇,那么情感分析结果为 negative
2. 如果用户的评论中包含了正面情感词汇,那么情感分析结果为 positive
3. 如果用户的评论中没有包含正面或者负面情感词汇,那么情感分析结果为 neutral
## 正面情感词汇
- 好
- 棒
- 优秀
## 负面情感词汇
- 差
- 糟糕
- 糟
## 例子
### 例子 1
#### 输入内容
"这个产品真的很好,我很喜欢"
#### 输出内容
{
"emotion": "positive",
"score": 0.9.
"reason": "用户评论中包含了正面情感词汇"
}
### 例子 2
#### 输入内容
"这个产品好垃圾,我很讨厌"
#### 输出内容
{
"emotion": "negative",
"score": 0.9,
"reason": "用户评论中包含了负面情感词汇"
}
## 输入内容
用户的评论文本
## 输出内容
按照如下结构输出 JSON 结果
class Response:
emotion: str # 用户评论的情感分析结果,可选项为 positive, negative, neutral
score: float # 用户评论的情感分析得分,范围为 0 到 1 之间
reason: str # 用户评论的情感分析结果的原因
"""
response = client.chat.completions.create(
model="step-1-8k",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": "这个产品还行?"}
],
response_format={ "type": "json_object" },
)
print(response)
注意事项
- 在使用 JSON Mode 时,你需要检查返回结果的 finish_reason 是否为 stop。如 finish_reason 为 length,则是大模型因为受到 max_token 的限制导致无法完整返回内容,所返回的 Message 可能无法被正常解析。
- 在使用 JSON Mode 时,可以通过在 Prompt 中加入输入和输出的范例,来帮助大模型理解你的场景和需求,给出更加符合预期的输出。