プッシュ通知
新記事をすぐにお知らせ
LLM(大規模言語モデル)に構造化データを生成させる際、多くの開発者がJSONフォーマットを選択します。しかし、実際のアプリケーション開発において、JSONは意外にも非効率で問題の多い選択肢かもしれません。
この記事では、LLM出力におけるJSONの問題点と、より実用的な代替案としてのCSV/TSVフォーマットについて考察します。
JSONは人間にとって読みやすい形式ですが、LLMの出力としては多くの無駄が含まれています:
{
"users": [
{
"name": "田中太郎",
"age": 25,
"skills": ["Python", "JavaScript", "Go"]
},
{
"name": "佐藤花子",
"age": 30,
"skills": ["Rust", "C++"]
}
]
}
この例では:
{}
、[]
、""
)が大量に含まれるLLMには出力トークン数の制限があります。出力が途中で切れた場合:
{
"users": [
{
"name": "田中太郎",
"age": 25,
"skills": ["Python", "JavaScript"
このような不完全なJSONは:
途中で切れたJSONから続きを生成するのは複雑で、エラー処理が煩雑になります。
同じデータをCSV形式で表現すると:
name,age,skills
田中太郎,25,"Python|JavaScript|Go"
佐藤花子,30,"Rust|C++"
出力が途中で切れても:
name,age,skills
田中太郎,25,"Python|JavaScript|Go"
佐藤花子,30,"Rust|C++"
山田次郎,28,"Java|Kotl
import pandas as pd
from io import StringIO
def parse_partial_csv(llm_output):
"""途中で切れたCSVでも安全にパース"""
try:
return pd.read_csv(StringIO(llm_output))
except:
# 最後の不完全行を除去して再試行
lines = llm_output.strip().split('\n')
if len(lines) > 1:
clean_output = '\n'.join(lines[:-1])
return pd.read_csv(StringIO(clean_output))
return pd.DataFrame()
def generate_continuation_prompt(existing_df, target_count):
"""既存データを基に続きを生成するプロンプト"""
remaining = target_count - len(existing_df)
prompt = f"""
既存のデータ:
{existing_df.to_csv(index=False)}
上記の続きから、残り{remaining}件のデータを生成してください。
ヘッダー行は不要です。同じフォーマットで出力してください。
"""
return prompt
# 使用例
partial_output = """name,age,skills
田中太郎,25,"Python|JavaScript|Go"
佐藤花子,30,"Rust|C++"""
df = parse_partial_csv(partial_output)
continuation_prompt = generate_continuation_prompt(df, 10)
# target_rows:100, generated:1-50
name,age,skills
田中太郎,25,"Python|JavaScript|Go"
佐藤花子,30,"Rust|C++"
id,name,age,skills
1,田中太郎,25,"Python|JavaScript|Go"
2,佐藤花子,30,"Rust|C++"
CSV特殊文字の問題を避けるため、パイプ(|
)を使用:
name|age|skills
田中太郎|25|Python,JavaScript,Go
佐藤花子|30|Rust,C++
LLMの出力フォーマット選択において、JSON偏重から脱却することで:
用途に応じた適切なフォーマット選択により、より実用的なLLMアプリケーションの構築が可能になります。
特に大規模なデータ生成や継続的な処理が必要な場面では、CSV/TSVフォーマットの採用を強く推奨します。
この記事で紹介した手法は、実際のプロダクション環境でのLLM活用において、開発効率と運用安定性の大幅な向上をもたらしました。皆さんのプロジェクトでもぜひお試しください。
記事数の多いカテゴリから探す