> ## Content Index
> Fetch the complete content index at: https://www.hubwiz.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# 用Langchain生成合成数据
- URL: https://www.hubwiz.com/blog/synthetic-data-generation-with-langchain/
- Published: 2025-02-28T06:14:54.000Z
- Updated: 2025-02-28T06:15:59.000Z
- Description: 我们将使用LangChain——一个简化与大型语言模型工作的库来创建合成医疗账单记录。
- Author: admin
- Tags: APPLICATION, LANGCHAIN, SYNTHETIC DATA, OPENAI, #Import 2026-10-14 14:41

在当今以数据为驱动的世界中，获取高质量、真实的数据库对于开发算法、训练机器学习模型和原型设计新系统至关重要。然而，在处理敏感数据（如医疗账单记录）时，隐私问题和有限的数据可用性可能会造成重大障碍。这就是**合成数据**发挥作用的地方。

![](https://www.hubwiz.com/blog/content/images/2025/02/image-735.png)

> 什么是合成数据？

**合成数据**是人工创建的数据，旨在与现实世界的数据相似，但不包含任何实际的敏感或个人信息。它使用数学模型、算法或先进的AI工具（如大型语言模型（LLM））生成，以复制真实数据集的结构和模式。

可以将其视为真实数据的替身：它看起来和行为类似，但保持了隐私安全。这使得它在医疗保健等领域特别有用，其中保护患者信息至关重要。

> 为什么使用合成数据？

合成数据带来了许多好处，特别是在像医疗账单这样的敏感领域。以下是考虑使用它的原因：

1. **隐私和安全**：不包含任何真实的个人信息，消除了隐私泄露的风险。
2. **数据增强**：扩展有限的数据集用于训练机器学习模型。
3. **灵活性**：允许你创建可能不存在于真实数据中的特定或罕见场景。
4. **成本效益**：比收集和清理现实世界的数据更便宜。
5. **法规合规**：符合严格的个人数据保护法律，如GDPR或HIPAA。
6. **模型鲁棒性**：提供多样化的数据以提高AI模型性能。
7. **快速原型设计**：加快测试和开发速度，无需等待真实数据。
8. **受控实验**：允许你模拟特定条件进行研究。
9. **访问数据**：当真实数据稀缺或不可用时提供解决方案。

**注意事项**：虽然合成数据非常有用，但它并不是真实数据的完美替代品。它可能会错过一些现实世界的复杂性，因此在将其用于关键应用之前，请始终评估其质量和适用性。

现在，让我们动手实践！我们将使用**LangChain**——一个简化与大型语言模型工作的库来创建合成医疗账单记录。如果你是AI或编码的新手，不要担心——这个逐步指南旨在易于上手。

## 1、环境设置和依赖安装

首先，我们需要通过安装所需的Python库来设置环境。

```
%%capture  
!pip install -U langchain langchain_experimental openai  
  
import os  
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"

```

```
from langchain.prompts import FewShotPromptTemplate, PromptTemplate  
from langchain.chat_models import ChatOpenAI  
from langchain.pydantic_v1 import BaseModel  
from langchain_experimental.tabular_synthetic_data.base import SyntheticDataGenerator  
from langchain_experimental.tabular_synthetic_data.openai import create_openai_data_generator, OPENAI_TEMPLATE  
from langchain_experimental.tabular_synthetic_data.prompts import SYNTHETIC_FEW_SHOT_SUFFIX, SYNTHETIC_FEW_SHOT_PREFIX

```

## 2、定义数据模型

每个数据集都需要一种结构——或“模式”——以确保一致性。我们将使用Pydantic模型为我们的医疗账单记录定义一种。

```
class MedicalBilling(BaseModel):  
    patient_id: int  
    patient_name: str  
    diagnosis_code: str  
    procedure_code: str  
    total_charge: float  
    insurance_claim_amount: float

```

**分解**：

- patient\_id: 一个唯一的整数（例如，123456）。
- patient\_name: 一个字符串，表示患者的姓名（例如，“John Doe”）。
- diagnosis\_code: 一个字符串，如“J20.9”（急性支气管炎）。
- procedure\_code: 一个字符串，如“99203”（门诊就诊）。
- total\_charge: 一个浮点数，表示总费用（例如，500.0）。
- insurance\_claim\_amount: 一个浮点数，表示保险索赔金额（例如，350.0）。

## 3、提供示例数据

为了帮助生成器理解我们想要什么，我们将提供几个示例记录。

```
examples = [  
    {"example": """Patient ID: 123456, Patient Name: John Doe, Diagnosis Code: J20.9, Procedure Code: 99203, Total Charge: $500, Insurance Claim Amount: $350"""},  
    {"example": """Patient ID: 789012, Patient Name: Johnson Smith, Diagnosis Code: M54.5, Procedure Code: 99213, Total Charge: $150, Insurance Claim Amount: $120"""},  
    {"example": """Patient ID: 345678, Patient Name: Emily Stone, Diagnosis Code: E11.9, Procedure Code: 99214, Total Charge: $300, Insurance Claim Amount: $250"""},  
]

```

## 4、编写提示模板

生成器需要明确的指令，我们通过提示模板提供这些指令。

```
OPENAI_TEMPLATE = PromptTemplate(input_variables=["example"], template="{example}")

```

现在，我们创建一个更详细的FewShotPromptTemplate：

```
prompt_template = FewShotPromptTemplate(  
    prefix=SYNTHETIC_FEW_SHOT_PREFIX,  
    examples=examples,  
    suffix=SYNTHETIC_FEW_SHOT_SUFFIX,  
    input_variables=["subject", "extra"],  
    example_prompt=OPENAI_TEMPLATE,  
)

```

**关键部分**：

- prefix 和 suffix: 预定义的LangChain指令（例如，“基于这些示例生成数据”）。
- examples: 我们的示例记录。
- input\_variables: 动态输入，如“subject”（例如，“medical\_billing”）和“extra”（额外指导）。
- example\_prompt: 如何显示每个示例

## 5、创建数据生成器

有了模式和提示，我们可以设置生成器。

```
synthetic_data_generator = create_openai_data_generator(  
    output_schema=MedicalBilling,  
    llm=ChatOpenAI(temperature=1),  
    prompt=prompt_template,  
)

```

**详细信息**：

- output\_schema: 确保输出符合我们的MedicalBilling结构。
- llm: 使用OpenAI的聊天模型，温度设置为1（平衡创造力）。
- prompt: 我们编写的模板。

## 6、生成合成数据

现在开始创建数据！

```
synthetic_results = synthetic_data_generator.generate(  
    subject="medical_billing",  
    extra="the name must be chosen at random. Make it something you wouldn't normally choose.",  
    runs=10,  
)

```

- **选项**：
- subject: 设置上下文（“medical\_billing”）。
- extra: 添加一个变化（不寻常的名字）。
- runs: 生成10条记录。

**输出**：一个MedicalBilling对象列表。

## 7、可视化生成的数据

让我们检查一下我们创建的内容：

```
type(synthetic_results)  # 应该返回 <class 'list'>  
len(synthetic_results)   # 应该返回 10  
synthetic_results        # 显示原始列表

```

![](https://www.hubwiz.com/blog/content/images/2025/02/image-736.png)

## 8、转换为Pandas DataFrame

为了更容易处理，将数据转换成表格：

```
import pandas as pd  
  
synthetic_data = []  
for item in synthetic_results:  
    synthetic_data.append({  
        'patient_id': item.patient_id,  
        'patient_name': item.patient_name,  
        'diagnosis_code': item.diagnosis_code,  
        'procedure_code': item.procedure_code,  
        'total_charge': item.total_charge,  
        'insurance_claim_amount': item.insurance_claim_amount  
    })  
  
synthetic_df = pd.DataFrame(synthetic_data)  
synthetic_df

```

![](https://www.hubwiz.com/blog/content/images/2025/02/image-737.png)

## 9、结束语

合成数据生成对于处理敏感信息（如医疗账单记录）来说是一个变革者。使用LangChain，你可以快速创建符合项目需求的真实数据集——同时保持隐私安全。我们希望这个指南能激励你在自己的工作中尝试合成数据！

---

原文链接：[Synthetic Data Generation with Langchain](https://medium.com/@danushidk507/synthetic-data-generation-with-langchain-d4217d5dea74?ref=hubwiz.com)

汇智网翻译整理，转载请标明出处