实现LLM稳定输出JSON的方法
说到GPT这类大语言模型,像ChatGPT、GPT-4、GPT-3 5-turbo,它们的训练数据量相当惊人——互联网、维基百科、公开的GitHub代码,还有各种授权材料,全部吞了进去。这类模型有个特点叫“自回归”,说白了就是综合学过的所有信息来做预测。你给它们一段输入(也就是prompt),它们会
说到GPT这类大语言模型,像ChatGPT、GPT-4、GPT-3.5-turbo,它们的训练数据量相当惊人——互联网、维基百科、公开的GitHub代码,还有各种授权材料,全部吞了进去。这类模型有个特点叫“自回归”,说白了就是综合学过的所有信息来做预测。你给它们一段输入(也就是prompt),它们会盯着这段上下文,然后判断:根据这个输入,下一个单词最可能是什么?本质上就是在预测下一个词。

举个例子,如果输入是“美国最大的城市是”,那答案大概率是“纽约市”。模型会一个字一个字地往外蹦:先蹦出“New”,再蹦“York”,最后是“City”。换成对话场景也一样——问它地球到太阳的距离,它从互联网上学到过这个信息,就会输出“9400万英里”,还是一个字一个字地生成。
底层来看,LLM每次输出一个词时,会先列出一堆候选词,然后给它们分配概率。还是刚才那个例子,“美国最大的城市是”,候选词可能包括“New”(指向纽约或新泽西)、“Los”(洛杉矶)等等。模型认为“New”的概率高达95%,所以通常会选这个,然后继续往下走。第一个词确定后,第二个词的范围就更受限了——现在它知道第一个词是“New”,那么第二个词可能是“York”、“Brunswick”、“Mexico”或“Delhi”等等。等第二个词也确定下来,模型几乎能100%确定答案是“New York City”,尽管它还在考虑一些概率极低的选项,比如“County”、“Metro”、“Times”,但最终还是会选“City”作为答案。
对更专业的读者来说,这个解释有点过于简化了——LLM实际上预测的不是单词,而是 token(词片),因为词片在不同单词中重复出现的效率更高。但概念是一样的:给定上下文,模型连续输出一堆 token,这就是这些语言模型的全部秘密。
ReAct 是如何工作的
ReAct Prompt 模版
TOOL_DESC = """{name_for_model}: Call this tool to interact with the {name_for_human} API. What is the {name_for_human} API useful for? {description_for_model} Parameters: {parameters} Format the arguments as a JSON object."""
REACT_PROMPT = """Answer the following questions as best you can. You ha ve access to the following tools:
{tool_descs}
Use the following format:
Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can be repeated zero or more times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question
Begin!
Question: {query}"""
分析
实践过程中能观察到几个关键点:
- ReAct 严格按 Prompt 中的步骤一步步推进。
- 通过设置停止词,当模型生成的内容与停止词匹配时,生成过程就会停下来。
- 对 Action 和 Action Input 进行解析,然后调用对应的工具。
- 将工具返回的结果按照 ReAct 格式重新组装,再让模型继续往下写。
- 直到遇到
Final Answer:,才算拿到最终答案。
把这个流程和 LLM 的工作原理联系起来,其实就是:给定这个 prompt 和输入,模型预测下一个单词是什么。每一步的“思考-行动-观察”循环,本质上都在利用续写能力。
实践
COND_DATA_PROMPT = """根据提供 json_data 数据和用户问题生成 JSON 格式,其中 key 分别为 'on' 和 'how'。
要求:
- 'on' 的取值规则为两个数据集合对象中相同的key,'how' 的取值只能 outer、inner、left、right 之一,需要根据数据和用户问题进行分析选择其中一个,不能随便编造。
- 请生成包括 'on' 和 'how' 的 JSON。
- 不要输出 JSON 内容以外的其它文本。
按以下格式输出:
用户问题:
近三年东方财富、贵州茅台、中国平安的净利润、经营活动现金流入分别是多少
json_data 数据:
[{"报告期": "20221231", "净利润": 75828913858.79, "机构全称": "贵州茅台"},
{"报告期": "20211231", "净利润": 230951727.5, "机构全称": "贵州茅台"},
{"报告期": "20201231", "净利润": 5062633598.29, "机构全称": "贵州茅台"}]
[{"报告期": "20221231", "经营活动现金流入": 431466.19, "机构全称": "贵州茅台"},
{"报告期": "20211231", "经营活动现金流入": 3225481.84, "机构全称": "贵州茅台"}]
```json
{
"on": ["报告期", "机构全称"],
"how": "outer"
}
Begin!
用户问题:
{question}
json_data 数据:
{json_data}"""
经过多次验证,这个 Prompt 总能输出符合预期的 JSON 结构,稳定性相当不错。
小结
核心思路就是利用大模型的续写能力,让它按照 Prompt 中定义的步骤一步步写下去。给定这个 prompt,给定这个输入,模型预测下一个单词应该是什么——就这么简单。无论是 ReAct 还是其他复杂框架,底层机制都是同一套。
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:实现LLM稳定输出JSON的方法要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
相关热点TP-LINK深圳总部要求全体员工将劳动合同转签至注册资金仅3000万元的全资子公司思码逻辑,因保障缩水风险引发员工强烈抵制。内部投票显示近九成参与员工拒绝签字。与此同时,部分员工社保状态异常,面临断缴风险,叠加此前超140人的裁员以及企业主体迁出等变动,导致内部人心动荡。这家曾占据全球路由器市场4
本田中国5月销量数据出炉,单月总交付量仅为28279辆,同比大幅下滑48 7%,销量近乎腰斩。与2020年前后的市场巅峰期相比,如今整体体量仅剩约两成。这已是本田中国连续第27个月同比下滑,跌幅仍在加深。颓势根源在于电动化战略预判失误,产品梯队崩塌,新能源车型销量惨淡,同时双合资体系内耗严重,部分工
台积电CEO近日在股东会上谈及芯片涨价策略,明确表示不会效仿存储芯片厂商短期价格暴涨数倍的做法,强调公司注重长期稳健经营。然而,供应链消息显示,台积电已计划于2026年下半年上调3纳米制程报价最高15%,2027年可能进一步上涨。CEO指出,AI应用正转向“代理式行动模式”,算力需求激增,全球芯片供
近日,方程豹品牌旗下全新硬派SUV车型“钛9”的路试谍照曝光。新车采用经典的“方盒子”造型,线条平直硬朗,车身立柱垂直,分体式灯组和贯穿式日行灯设计颇具辨识度。侧面配备大轮毂和高离地间隙,车门带有固定踏板,车尾预留外挂备胎位置,整体风格硬派。动力方面,预计将搭载2 0T发动机加双电机的混动系统,综合
- 日榜
- 周榜
- 月榜
热点快看
