1
1

Pythonの書式指定文字列の中の変数を抜き出す

Posted at

環境

  • Python 3.10.12
  • LangChain 0.0.310

実装

Pythonの書式指定文字列(Format String)は、以下のように使います。

template_text = "こんにちは、{name1}さんと{name2}さん"
print(template_text.format(name1="ほげ", name2="ふが"))
#=> こんにちは、ほげさんとふがさん

この文字列から置換される変数であるname1,name2を抽出するには、string.Formatterparse()メソッドを使います。

from string import Formatter

template_text = "こんにちは、{name1}さんと{name2}さん"
for parsed in Formatter().parse(format_string=template_text):
    print(parsed)
出力
('こんにちは、', 'name1', '', None)
('さんと', 'name2', '', None)
('さん', None, None, None)

LangChainでの利用例

LangChainのPromptTemplateでは、この書式指定文字列の文法に従っています。

from langchain.prompts import PromptTemplate

template_text = "こんにちは、{name1}さんと{name2}さん"

prompt_template = PromptTemplate(template=template_text, input_variables=["name1", "name2"])
print(prompt_template.format(name1="ほげ", name2="ふが"))
#=> こんにちは、ほげさんとふがさん

PromptTemplateを使うにあたってfrom_template()を使うことで、input_variables=["name1", "name2"]を指定しなくても自動で判断してくれます。

from langchain.prompts import PromptTemplate

template_text = "こんにちは、{name1}さんと{name2}さん"

prompt_template = PromptTemplate.from_template(template_text)
print(prompt_template.format(name1="ほげ", name2="ふが"))
#=>こんにちは、ほげさんとふがさん

このfrom_template()の実装では、先程紹介したstring.Formatterparse()メソッドを利用して変数を抽出しています。

https://github.com/langchain-ai/langchain より引用
input_variables = {
    v for _, v, _, _ in Formatter().parse(template) if v is not None
}

謝辞

この記事のコードの一部はColab Generative AIを用いて生成されました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1