基于大模型的结构化输出方案

概述

langchain 1.0 是一个强大的中文大语言模型框架,支持多种结构化输出功能。本文将介绍如何实现 LLM 的结构化输出。

什么是结构化输出

结构化输出是指让大语言模型按照预定义的结构(如 JSON、XML、YAML 等格式)返回结果,而不是自由文本。这种输出方式具有以下优势:

  1. 易于解析:程序可以直接解析结构化数据
  2. 格式统一:输出格式标准化,便于后续处理
  3. 类型安全:可以定义数据类型和约束
  4. 自动化友好:便于集成到自动化流程中

结构化输出实现

环境准备

首先安装必要的依赖:

1
2
3
4
pip install --pre -U langchain==1.0.0a9
pip install pydantic
pip install -U langchain-openai==1.0.0a2
pip install -U langchain-core==1.0.0a4

基于Pydantic Model实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
# -*- coding: utf-8 -*-
from pydantic import BaseModel, Field
from typing import List, Optional
from langchain.agents import create_agent
import json
import os

# 定义产品信息输出结构
class ProductInfo(BaseModel):
name: Optional[str] = Field(description="产品名称")
catalog_number: Optional[str] = Field(description="规格货号")
description: Optional[str] = Field(description="产品描述")
validity_period: Optional[str] = Field(description="有效期")
storage_temperature: Optional[str] = Field(description="保存温度")

# 设置环境变量(推荐方式)
os.environ["OPENAI_API_BASE"] = "https://{HOST}/v1"
os.environ["OPENAI_API_KEY"] = "sk-XXX"

# 创建代理 - 使用环境变量配置
agent = create_agent(
model="openai:XXXX",
tools=[], # 可以添加工具,这里暂时为空
response_format=ProductInfo # Auto-selects ProviderStrategy
)

def extract_product_info(text: str) -> ProductInfo:
"""从文本中提取产品结构化信息"""

try:
# 使用 langchain agent 进行结构化提取
result = agent.invoke({
"messages": [{"role": "user", "content": f"""
请从以下产品说明书中提取结构化信息:

文本内容:
{text}

请提取以下信息:
1. 产品名称
2. 规格货号(产品编号)
3. 产品描述
4. 有效期
5. 保存温度
6. 注意事项列表

请严格按照ProductInfo模型的结构返回结果。
"""}]
})

# 返回结构化响应
return result["structured_response"]

except Exception as e:
print(f"API调用失败: {e}")
# 返回一个默认的产品信息对象
return ProductInfo(
name="提取失败",
catalog_number="未知",
description="无法提取产品描述",
validity_period="未知",
storage_temperature="未知",
precautions=["提取过程中出现错误"]
)

# 示例文本
sample_text = """
## 达优

## Mouse IL-22 Precoated ELISA Kit

Cat#:1212202/1212203

ELISA 试剂盒 说明书

本试剂盒仅供科研使用,请勿用于诊断 使用前请仔细阅读说明书并检查试剂盒组分
## Mouse IL-22

## Precoated ELISA Kit

ELISA试剂盒

## | 检测原理

达优ELISA 试剂盒采用双抗体夹心酶联免疫吸附检测技术。特异性的抗体包 被到酶标板上,标准品或样本加入孔中,样本中含有的目标物质被固定化的抗体 捕获,加入检测抗体,形成抗体-抗原-抗体的复合体,加入酶和底物,在酶的催 化下底物发生反应,且反应的颜色与目标物质的含量成正比,加入终止液后,在 酶标仪中测定反应的吸光值。

## | 预期用途

定量检测血清、血浆、缓冲液或细胞培养液中的IL-22含量。

## | 知识背景

白细胞介素22(Interleukin-22, IL-22)又称白细胞介素 10 相关 T 细胞衍 生诱导因子,与IL-10,IL-19,IL-20,IL-24 和 IL-26 同属于 IL-10 调节性细胞 因子。 它主要由Th22 细胞分泌, IL-23 和 IL-6 可直接刺激初始 T 细胞产生 IL-22, 某些NK细胞也可以产生IL-22。其次,IL-22以皮肤,胰腺,肝脏等组织细胞为 主要靶细胞,调节这些组织细胞的功能,它在感染免疫,组织修复、肝炎产生和 肝癌形成中起重要作用。

## | 保存条件

未开封试剂盒在2℃~8℃可稳定保存12个月。

## 开封后各组分保存条件见下:

## Cat#:1212202

| 组分 | 规格 | 数量 | 保存条件 |
|------------------------|-------|------|--------------------------------------|
| Cytokine Standard | | 2瓶 | 48 T 复溶后-25℃~-15℃保存15天,分装保 存,不可重复冻融。 |
| Biotinylated Antibody | μL | 2管 | 50 原液2℃~8℃可稳定保存1个月,稀释 后不可保存。 |
| Streptavidin-HRP | 50 μL | 2管 | 原液2℃~8℃可稳定保存1个月,稀释 后不可保存。 |
| Dilution Buffer R (1×) | 10 mL | 3瓶 | 2℃~8℃可稳定保存1个月。 |
| Washing Buffer (50×) | 15 mL | 1瓶 | 原液2℃~8℃可稳定保存1个月,稀释 后不可保存。 |
| TMB | 10 mL | 1瓶 | 2℃~8℃可稳定保存1个月。 |
| Stop Solution | 10 mL | 1瓶 | 2℃~8℃可稳定保存1个月。 |
| Precoated ELISA plate | 96 T | 1块 | 2℃~8℃可稳定保存1个月,密封保存。 |
| 封板膜 | / | | 4张 / |
| 说明书 | / | 1份 | / |

Cat#:1212203

| 组分 | 规格 | 数量 | 保存条件 |
|-------------------------|--------|------|----------------------------------|
| Cytokine Standard | 48 T | 10瓶 | 复溶后-25℃~-15℃保存15天, 分装 保存,不可重复冻融。 |
| Biotinylated Antibody | 50 μL | 10管 | 原液2℃~8℃可稳定保存1个月,稀 释后不可保存。 |
| Streptavidin-HRP | 500 μL | 1管 | 原液2℃~8℃可稳定保存1个月,稀 释后不可保存。 |
| Dilution Buffer R (10×) | 18 mL | 1瓶 | 2℃~8℃可稳定保存1个月。 |
| Washing Buffer (50×) | 75 mL | 1瓶 | 原液2℃~8℃可稳定保存1个月,稀 释后不可保存。 |
| TMB | 50 mL | 1瓶 | 2℃~8℃可稳定保存1个月。 |
| Stop Solution | 50 mL | 1瓶 | 2℃~8℃可稳定保存1个月。 |
| Precoated ELISA plate | 96 T | 5块 | 2℃~8℃可稳定保存1个月,密封保 存。 |
| 封板膜 | / | 20张 | / |
| 说明书 | / | 1份 | / |

## | 需自备的材料设备

+ 能够检测450nm和630nm吸光度的酶标仪
+ 微量加液器及枪头、加样槽
+ 蒸馏水或去离子水
+ 旋涡振荡器或磁力搅拌器

## | 注意事项

1. 试剂按标签和说明书储存,使用前平衡至室温。
2. 标准品按照标签溶解,充分混匀,按照一次使用量分装保存。
3. 预包被板条使用前平衡至室温;剩余板条及时密封保存。
4. Washing Buffer (50×)在 2℃~8℃保存可能有结晶析出,若有析出加热或 平衡温度使其溶解后再使用。
5. 离心管试剂体积量较小,使用前高速短暂离心收集试剂到管底。
6. 实验操作中请使用一次性的吸头,避免交叉污染。
7. 使用前检查试剂盒内各种试剂;试剂稀释及加样时注意混匀试剂。
8. 实验板孔加入试剂的顺序应一致,以保证所有反应孔的孵育时间一致。
9. 使用干净的容器配制试剂。
10. 洗涤后孔中残留的洗涤液应在吸水纸上充分拍干,直至吸水纸上看不到 水印。请勿直接将孔中的洗涤液吸干。
11. TMB 对光和金属敏感,避免长时间暴露于光下,避免与金属接触。未使 用的TMB若变为蓝色,表明TMB已经污染,请丢弃。
12. 请严格按照说明书建议的反应时间和温度进行孵育。 冬季室内温度偏低, 建议使用恒温箱或培养箱孵育。
13. 请在保质期内使用试剂盒,且不同批号试剂不要混用。
14. 200 pg/mL 以上的结果为非线性的,根据此标准曲线无法得到精确的结
果。大于200pg/mLIL-22 的样本应稀释后重新测试。在结果分析时,结合考虑 相应的稀释度。

15. 安全提示: 使用本试剂盒时请做好合适的防护措施,如穿戴白大褂、乳 胶手套、安全眼镜等;避免试剂接触皮肤和眼睛,如不慎接触,立即用大量清水 清洗。
16. 废弃处置: 终止液使用碱性溶液中和或稀释后,再用大量水冲入废水系 统。其他成分按一般废弃物处理方法和当地相关法规的要求进行处理。

## | 样本处理说明

新鲜标本尽早检测,对收集后当天就进行检测的标本,及时储存2℃~8℃。 如有特殊原因需要周期性收集标本,请在取材后,将标本及时分装并放在-25℃ ~-15℃或更低温度条件下保存,避免反复冻融。

+ 血清*: 室温血液自然凝固10~20分钟后,离心20分钟(2000~3000 转/分),仔细收集上清。保存过程中如有沉淀形成,应再次离心取上清。
+ 血浆*: 应根据标本的要求选择EDTA、柠檬酸钠或肝素作为抗凝剂,混 合10~20 分钟后,离心 20 分钟(2000~3000 转/分),仔细收集上清。保存过 程中如有沉淀形成,应再次离心。
+ 细胞培养上清: 检测分泌性的成份时,请用无菌管收集细胞培养悬液, 离心20分钟(2000~3000 转/分),仔细收集上清。检测细胞内的成份时,用 1×PBS(pH 7.2~7.4)将细胞悬液稀释至 10 6 cell/mL 左右,反复冻融,以使细 胞破碎释放细胞内成份,离心20分钟(2000~3000转/分),仔细收集上清。 细胞培养上清保存过程中如有沉淀形成,应再次离心。

* 血浆血清样本检测之前需用DilutionBufferR(1×)至少稀释 2 倍后检测, 以降低样本 基质效应。具体稀释倍数需预实验确定。


## | 试剂的配制

1. 提前20分钟将Washing Buffer(50×)和即用溶液从试剂盒中取出,平衡 至室温。
2. 需稀释配制成工作液的试剂现配现用。
3. Cytokine Standard:先按标签说明将冻干粉溶解,溶解后的浓度为 200 pg/mL,再用 1×Dilution Buffer R (1×)进行倍比稀释。稀释前将标准品轻轻 振荡5分钟。
+ 推荐标准品浓度梯度为: 200 pg/mL、100 pg/mL、50 pg/mL、 25 pg/mL、12.5 pg/mL、6.25 pg/mL、3.13 pg/mL,为确保标准品稀释的准 确性,建议在实验孔外进行标准品的倍比稀释。
+ 稀释步骤: 校准品按瓶标签进行溶解后移入EP管中,标记为C7。再取 6 个 EP 管,分别标记为 C6/C5/C4/C3/C2/C1,每个管中加 250 μL 稀释液,从 C7 中取出 250 μL 高浓度校准品至 C6 管中进行 2 倍倍比稀释,以同样方式稀释 C5/C4/C3/C2/C1 管中,以稀释液作为 C0。
4. Biotinylated Antibody:1:100 用 Dilution Buffer R (1×)稀释,混匀制 成Biotinylated Antibody 工作液。
5. Streptavidin-HRP:1:100 用 Dilution Buffer R (1×)稀释,混匀制成 Streptavidin-HRP 工作液。
6. Washing Buffer (50×):1:50 用蒸馏水稀释。
7. *Dilution Buffer R (10×): 1:9 用 1×PBS (pH=7.2~7.4) 配制成 1×Dilution Buffer R 工作液,只用于稀释 Cytokine Standard、Biotinylated Antibody、 Streptavidin-HRP 和样品

*此步骤适用于Cat#:1212203 试剂盒,Cat#:1212202 中本试剂为 1×工作液,无需 稀释。


## | 即用型试剂

+ Dilution Buffer R (1×):用于稀释 Cytokine Standard、样本、 Biotinylated Antibody 和 Streptavidin-HRP。
+ TMB
+ Stop Solution


## | 操作过程

1. 使用前,将所有试剂充分混匀,避免产生泡沫。
2. 根据实验孔(空白和标准品)数量,确定所需的板条数目。样本(含标准 品)和空白都应做复孔。
3. 加样: 100 μL/well 加入稀释后的 Cytokine Standard 至标准品孔, 100 μL/well 加入样本至样本孔, 100 μL/well 加入 Dilution Buffer R (1×)至空 白对照孔,37℃孵育90分钟。
4. 洗板: 扣去孔内液体,300 μL/well 加入 1×Washing Buffer 工作液;停 留1分钟后弃去孔内液体。重复4次,每一次在滤纸上扣干。
5. 加检测抗体 :100 μL/well 加入 Biotinylated Antibody 工作液。混匀后 盖上封板膜,37℃孵育60分钟。
6. 洗板:重复步骤4。
7. 加酶: 100 μL/well 加入 Streptavidin-HRP 工作液。盖上封板膜,37℃ 孵育30分钟。
8. 洗板:重复步骤4。
9. 显色: 100 μL/well 加入 TMB,37℃避光孵育 10~20 分钟。可根据孔内 颜色的深浅判断,校准曲线最高值孔为深蓝色,空白孔无明显蓝色时即可终止反 应。
10. 终止反应: 100 μL/well 迅速加入 Stop Solution 终止反应。
11. 读板: 终止反应10分钟内在酶标仪进行双波长读板,设置检测波长 450 nm 和参考波长 610 nm~630 nm;校正后的 OD 值为检测波长的测定值减 去参考波长的测定值。

## | 结果分析

1. 推荐拟合曲线坐标对数或自然数,拟合方程常见为直线、二次方程及四参 数方程,通过各种应用软件拟合选取最佳标准曲线,根据样本OD值查找相应浓 度。
2. 稀释的样本计算浓度时应乘以稀释倍数;若样品浓度高于最高线性值,需 稀释样本并重新测定。
3. 示例数据仅供参考, 每次实验 必须制备当次实验的标准曲线。

| Mouse IL-22 Concentration (pg/mL) | OD | OD | Average OD |
|-------------------------------------|-------|-------|--------------|
| 200 | 3.436 | 3.455 | 3.446 |
| 100 | 2.693 | 2.687 | 2.69 |
| 50 | 1.547 | 1.584 | 1.566 |
| 25 | 0.957 | 0.839 | 0.898 |
| 12.5 | 0.407 | 0.449 | 0.428 |
| 6.25 | 0.236 | 0.247 | 0.242 |
| 31.3 | 0.146 | 0.128 | 0.137 |
| 0 | 0.044 | 0.043 | 0.044 |## | 性能数据

- 1. 灵敏度: 1 pg/mL,10 个空白样本的对应浓度平均值加上三倍标准偏差。
- 2. 精密度: 板内精密度:3个已知浓度的样本板内重复测定10次,计算得 到板内变异系数;板间精密度:3个已知浓度的样本板间分别重复测定3次,计 算得到板间变异系数

| | 板内精密度 | 板内精密度 | 板内精密度 | 板间精密度 | 板间精密度 | 板间精密度 |
|------------|---------|---------|---------|---------|---------|---------|
| 样本 | 1 | 2 | 3 | 1 | 2 | 3 |
| 测试次数 | 10 | 10 | 10 | 9 | 9 | 9 |
| 标准差 | 0.46 | 1.46 | 5.15 | 0.56 | 1.56 | 5.14 |
| 平均值(pg/mL) | 6.74 | 25.8 | 116.36 | 6.74 | 25.63 | 114.81 |
| 变异系数CV(%) | 6.79 | 5.67 | 4.43 | 8.31 | 6.09 | 4.47 |

- 3. 校准: 试剂盒校准品为达优校准的高纯度重组IL-22。

## | 参考文献

[1] Jia, L., Jiang, Y., Wu, L.et al.Porphyromonas gingivalis aggravates colitis via a gut microbiota-linoleic acid metabolism-Th17/Treg cell balance axis[J].Nat Commun, 2024.

[2] Huang,R.,Jia,B.,Su,D.,Li,M.,Xu,Z.,He,C.,Huang,Y.,Fan,H.,Chen,H., &Cheng,F.(2023).Plant exosomes fused with engineered mesenchymal stemcell-derived nanovesicles for synergistic therapy of autoimmune skin disorders[J].Journal of Extracellular Vesicles.


"""

# 执行产品信息结构化提取
try:
result = extract_product_info(sample_text)
print("产品信息提取结果:")
print(json.dumps(result.model_dump(), ensure_ascii=False, indent=2))
except Exception as e:
print(f"提取失败:{e}")

最终结构化输出:

1
2
3
4
5
6
7
{
"name": "Mouse IL-22 Precoated ELISA Kit",
"catalog_number": "1212202",
"description": "Mouse IL-22 Precoated ELISA Kit,用于定量检测血清、血浆、缓冲液或细胞培养液中的IL-22含量。采用双抗体夹心酶联免疫吸附检测技术。",
"validity_period": "12个月",
"storage_temperature": "2℃~8℃"
}

基于 JSON Schema 的结构化输出

除了使用 Pydantic 模型,langchain 1.0 还支持直接使用 JSON Schema 定义输出格式。这种方式更加灵活,特别适合动态配置的场景。

JSON Schema 实现示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# -*- coding: utf-8 -*-
from langchain.agents import create_agent
import json
import os

# 定义产品信息的 JSON Schema(对应基础实现中的ProductInfo结构)
product_info_schema = {
"type": "object",
"description": "Product information extracted from documentation.",
"properties": {
"name": {"type": "string", "description": "产品名称"},
"catalog_number": {"type": "string", "description": "规格货号"},
"description": {"type": "string", "description": "产品描述"},
"validity_period": {"type": "string", "description": "有效期"},
"storage_temperature": {"type": "string", "description": "保存温度"}
},
"required": []
}

# 设置环境变量
os.environ["OPENAI_API_BASE"] = "https://{HOST}/v1"
os.environ["OPENAI_API_KEY"] = "sk-XXX"

# 创建代理 - 使用 JSON Schema 作为响应格式
agent = create_agent(
model="openai:XXXX",
tools=[], # 可以添加工具,这里暂时为空
response_format=product_info_schema # Auto-selects ProviderStrategy
)

def extract_product_info_json(text: str) -> dict:
"""从文本中提取产品结构化信息(使用JSON Schema)"""

try:
# 使用 langchain agent 进行结构化提取
result = agent.invoke({
"messages": [{"role": "user", "content": f"""
请从以下产品说明书中提取结构化信息:

文本内容:
{text}

请提取以下信息:
1. 产品名称
2. 规格货号(产品编号)
3. 产品描述
4. 有效期
5. 保存温度

请严格按照JSON Schema的结构返回结果。
"""}]
})

# 返回结构化响应
return result["structured_response"]

except Exception as e:
print(f"API调用失败: {e}")
# 返回一个默认的产品信息对象
return {
"name": "提取失败",
"catalog_number": "未知",
"description": "无法提取产品描述",
"validity_period": "未知",
"storage_temperature": "未知"
}

# 示例文本(使用基础实现中的相同示例)
sample_text = """
## 达优

## Mouse IL-22 Precoated ELISA Kit

Cat#:1212202/1212203

ELISA 试剂盒 说明书

本试剂盒仅供科研使用,请勿用于诊断 使用前请仔细阅读说明书并检查试剂盒组分
## Mouse IL-22

## Precoated ELISA Kit

ELISA试剂盒

## | 检测原理

达优ELISA 试剂盒采用双抗体夹心酶联免疫吸附检测技术。特异性的抗体包 被到酶标板上,标准品或样本加入孔中,样本中含有的目标物质被固定化的抗体 捕获,加入检测抗体,形成抗体-抗原-抗体的复合体,加入酶和底物,在酶的催 化下底物发生反应,且反应的颜色与目标物质的含量成正比,加入终止液后,在 酶标仪中测定反应的吸光值。

## | 预期用途

定量检测血清、血浆、缓冲液或细胞培养液中的IL-22含量。

## | 保存条件

未开封试剂盒在2℃~8℃可稳定保存12个月。
"""

# 执行产品信息结构化提取
try:
result = extract_product_info_json(sample_text)
print("产品信息提取结果:")
print(json.dumps(result, ensure_ascii=False, indent=2))
except Exception as e:
print(f"提取失败:{e}")

最终输出:

1
2
3
4
5
6
7
{
"catalog_number": "1212202/1212203",
"description": "定量检测血清、血浆、缓冲液或细胞培养液中的IL-22含量。",
"name": "Mouse IL-22 Precoated ELISA Kit",
"storage_temperature": "2℃~8℃",
"validity_period": "12个月"
}

扩展 JSON Schema 示例

扩展的产品信息 JSON Schema(在基础结构上增加更多字段)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
from langchain.agents import create_agent
import json
import os

extended_product_schema = {
"type": "object",
"description": "Extended product information with additional details",
"properties": {
"name": {"type": "string", "description": "产品名称"},
"catalog_number": {"type": "string", "description": "规格货号"},
"description": {"type": "string", "description": "产品描述"},
"validity_period": {"type": "string", "description": "有效期"},
"storage_temperature": {"type": "string", "description": "保存温度"},
"category": {"type": "string", "description": "产品类别"},
"brand": {"type": "string", "description": "品牌"},
"precautions": {
"type": "array",
"items": {"type": "string"},
"description": "注意事项列表"
},
"specifications": {
"type": "array",
"items": {
"type": "object",
"properties": {
"spec_name": {"type": "string", "description": "规格名称"},
"spec_value": {"type": "string", "description": "规格值"},
"unit": {"type": "string", "description": "单位"}
},
"required": ["spec_name", "spec_value"]
},
"description": "技术规格列表"
}
},
"required": []
}

# 设置环境变量
os.environ["OPENAI_API_BASE"] = "https://{HOST}/v1"
os.environ["OPENAI_API_KEY"] = "sk-XXX"


# 创建扩展产品信息提取代理
extended_agent = create_agent(
model="openai:XXXX",
tools=[],
response_format=extended_product_schema
)

def extract_product_info_json(text: str) -> dict:
"""从产品描述中提取扩展信息"""

try:
result = extended_agent.invoke({
"messages": [{"role": "user", "content": f"""
请从以下产品说明书中提取结构化信息:

{text}

请提取以下信息:
1. 产品名称
2. 规格货号(产品编号)
3. 产品描述
4. 有效期
5. 保存温度
6. 产品类别
7. 品牌
8. 注意事项列表
9. 技术规格列表

请严格按照JSON Schema的结构返回结果。
"""}]
})

return result["structured_response"]

except Exception as e:
print(f"扩展产品信息提取失败: {e}")
return {
"name": "提取失败",
"catalog_number": "未知",
"description": "无法提取产品描述",
"validity_period": "未知",
"storage_temperature": "未知",
"category": "未知",
"brand": "未知",
"precautions": ["提取过程中出现错误"],
"specifications": []
}

# 示例文本(使用基础实现中的相同示例)
sample_text = """
## 达优

## Mouse IL-22 Precoated ELISA Kit

Cat#:1212202/1212203

ELISA 试剂盒 说明书

本试剂盒仅供科研使用,请勿用于诊断 使用前请仔细阅读说明书并检查试剂盒组分
## Mouse IL-22

## Precoated ELISA Kit

ELISA试剂盒

## | 检测原理

达优ELISA 试剂盒采用双抗体夹心酶联免疫吸附检测技术。特异性的抗体包 被到酶标板上,标准品或样本加入孔中,样本中含有的目标物质被固定化的抗体 捕获,加入检测抗体,形成抗体-抗原-抗体的复合体,加入酶和底物,在酶的催 化下底物发生反应,且反应的颜色与目标物质的含量成正比,加入终止液后,在 酶标仪中测定反应的吸光值。

## | 预期用途

定量检测血清、血浆、缓冲液或细胞培养液中的IL-22含量。

## | 保存条件

未开封试剂盒在2℃~8℃可稳定保存12个月。
"""

# 执行产品信息结构化提取
try:
result = extract_product_info_json(sample_text)
print("产品信息提取结果:")
print(json.dumps(result, ensure_ascii=False, indent=2))
except Exception as e:
print(f"提取失败:{e}")

最后输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"brand": "达优",
"catalog_number": "1212202/1212203",
"category": "ELISA试剂盒",
"description": "本试剂盒采用双抗体夹心酶联免疫吸附检测技术,用于定量检测血清、血浆、缓冲液或细胞培养液中的IL-22含量。",
"name": "Mouse IL-22 Precoated ELISA Kit",
"precautions": [
"本试剂盒仅供科研使用,请勿用于诊断",
"使用前请仔细阅读说明书并检查试剂盒组分",
"未开封试剂盒在2℃~8℃可稳定保存12个月"
],
"storage_temperature": "2℃~8℃",
"validity_period": "12个月"
}

JSON Schema 的优势

  1. 动态配置:可以在运行时动态修改 Schema
  2. 标准化:遵循 JSON Schema 标准,兼容性好
  3. 灵活性:支持复杂的嵌套结构和数组
  4. 验证:可以结合 JSON Schema 验证库进行数据验证
  5. 文档化:Schema 本身就是很好的文档

应用场景

  1. 产品数据库建设:自动提取产品说明书信息,建立结构化产品数据库
  2. 质量控制:标准化产品信息格式,提高信息管理效率
  3. 技术文档处理:批量处理技术文档,提取关键信息
  4. 产品对比分析:结构化产品信息便于进行产品对比和分析
  5. 自动化流程:将产品信息提取集成到自动化工作流中
  6. 医药产品管理:提取试剂盒、药品等医疗产品的规格和保存条件
  7. 实验室管理:自动提取实验试剂和仪器的技术参数

总结

langchain 1.0 提供了强大的结构化输出功能,通过合理的数据模型设计和错误处理机制,可以实现高质量的产品信息结构化提取。本文提供的完整示例代码可以直接运行,为产品信息管理项目提供参考。

通过结构化输出,我们可以更好地将 LLM 的能力集成到产品信息自动化处理流程中,提高数据处理效率和质量,为产品管理和技术文档处理提供有力支持。