『LangChainとLangGraphによるRAG・AIエージェント[実践]入門』の『7.4 Ragasによる合成テストデータの生成』でハマりました。単純なミスだったのですが、エラーメッセージに惑わされて、解決に時間がかかりました。
発生したエラー
以下のコードを実行した際にエラーが発生しました。testsetを作成する処理は省略しています。
# 合成テストデータの保存
inputs = []
outputs = []
metadatas = []
for testset_record in testset.test_data:
inputs.append(
{
"question": testset_record.question,
}
)
outputs.append(
{
"contexts": testset_record.contexts,
"ground_truth": testset_record.ground_truth,
}
)
metadatas.append(
{
"source": testset_record.metadata[0]["source"],
"evolution_type": testset_record.evolution_type,
}
)
# Langsmithに登録
client.create_example(
inputs=inputs,
outputs=outputs,
metadata=metadatas,
dataset_id=dataset.id,
)
発生したエラーは以下の通りです。
langsmith.utils.LangSmithError: Failed to POST /examples in LangSmith API. HTTPError(‘422 Client Error: unknown for url: https://api.smith.langchain.com/examples’, ‘{“detail”:”[\‘inputs\’, \’anyOf\’]: [{\”question\”:\”What steps are required for API key setup to use Anthropic models?\”},{\”question\”:\”What functionalities does EverNote provide for archiving and creating notes?\”},{\”question\”:\”What are the first two steps for accessing the Writer LLM wrapper?\”},{\”question\”:\”How do LLMs differ from chat models in text generation?\”}] is not valid under any of the schemas listed in the \’anyOf\’ keyword”}’)
エラー原因
HTTPの422エラーが発生しているので渡しているデータが悪いと思い調べていました。エラーメッセージにもinputsが表示さており、どのスキーマにも当てはまらないと書いてあります。
しかし、inputsを設定しているコードを何度見返しても間違ってはおらず、公式サイトに載っている記述にしても解消しませんでした。
間違っていたのはデータの作り方ではなくLangSmithにExampleを登録するコードでした。このコードでは複数件のExampleを登録する必要があるので create_examples
を実行する必要があるところを create_example
を実行していました……。
create_example
だと1件ずつ登録なので配列は受け付けません。そのため、「not valid under any of the schemas」とメッセージが表示されていたのでした。
まとめ
今回のようなケアレスミスで動かないときはなかなかミスに気づけません。そんな時には一度離れてみると間違いに気付きやすいです。今回も固定値入れて動かしてみようと公式のコードをコピーした時に「あれ、複数形になってるぞ? もしや……」と間違いに気付くことができました。
『LangChainとLangGraphによるRAG・AIエージェント[実践]入門』は写経で簡単に動かせるのでとても良いです。ただ読むだけなのと自分で一回動かしてみるのとでは天と地ほどの差があると思っています。ぜひ、皆さんも自分の手で書いて動かしながら学習進めましょう。
コメント