LangChain完全入門を試してみる
これから試して見る予定。適宜メモ記述
動作環境
Win11+VSC+Python3.11.5
確認日時:2023/12/28~
動作不具合点と修正内容
基本的に概ねサンプルソースままでSW動作しますが、時間経過しているせいかOR環境設定違いのせいか、そのままでは動作しない箇所は幾つかありました。
Section3
pydantic_output_parser_2.py
エラーメッセージ
PydanticDeprecatedSince20: Pydantic V1 style `@validator` validators are deprecated. You should migrate to Pydantic V2 style `@field_validator` validators, see the migration guide for more details. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.4/migration/
pydantic.errors.PydanticUserError: The `field` and `config` parameters are not available in Pydantic V2, please use the `info` parameter instead.
以下に修正
from langchain.chat_models import ChatOpenAI
from langchain.output_parsers import OutputFixingParser #←OutputFixingParserを追加
from langchain.output_parsers import PydanticOutputParser
from langchain.schema import HumanMessage
#from pydantic import BaseModel, Field, validator
from pydantic import BaseModel, Field, field_validator
chat = ChatOpenAI()
class Smartphone(BaseModel):
release_date: str = Field(description="スマートフォンの発売日")
screen_inches: float = Field(description="スマートフォンの画面サイズ(インチ)")
os_installed: str = Field(description="スマートフォンにインストールされているOS")
#model_name: str = Field(description="スマートフォンのモデル名")
model2_name: str = Field(description="スマートフォンのモデル名")
@field_validator("screen_inches") #← validatorを使って値を検証する
#@validator("screen_inches")
def validate_screen_inches(cls, field):
if field <= 0:
raise ValueError("Screen inches must be a positive number")
return field
parser = OutputFixingParser.from_llm( #← OutputFixingParserを使用するように書き換え
parser=PydanticOutputParser(pydantic_object=Smartphone), #← parserを設定
llm=chat #← 修正に使用する言語モデルを設定
)
result = chat([HumanMessage(content="Androidでリリースしたスマートフォンを1個挙げて"), HumanMessage(content=parser.get_format_instructions())])
parsed_result = parser.parse(result.content)
print(f"モデル名: {parsed_result.model2_name}")
#print(f"モデル名: {parsed_result.model_name}")
print(f"画面サイズ: {parsed_result.screen_inches}インチ")
print(f"OS: {parsed_result.os_installed}")
print(f"スマートフォンの発売日: {parsed_result.release_date}")
chat_1.py
Chainlitが上手く動作反応しない。→色々変更試したがエラー解消しない。分かる方教えてください!※ChainLit全て同じ箇所でNG
![](https://assets.st-note.com/img/1703764836851-3aeVn7D2II.png?width=1200)
2023-12-28 20:57:14 - can only concatenate str (not "Message") to str
Traceback (most recent call last):
File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\chainlit\utils.py", line 39, in wrapper
return await user_function(**params_values)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\xxxxx\Documents\dev\vs\langchain-book\03_retrieval\chat_1.py", line 10, in on_message
print("入力されたメッセージ: " + input_message)
~^
TypeError: can only concatenate str (not "Message") to str
Section05
llmchain.py
以下は警告のみ
UserWarning: Importing LLMChain from langchain root module is no longer supported. Please use langchain.chains.LLMChain instead.
UserWarning: Importing PromptTemplate from langchain root module is no longer supported. Please use langchain.prompts.PromptTemplate instead.
#from langchain import LLMChain, PromptTemplate #← LLMChainをインポート
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain.chat_models import ChatOpenAI
chat = ChatOpenAI(
model="gpt-3.5-turbo",
)
prompt = PromptTemplate(
template="{product}はどこの会社が開発した製品ですか?",
input_variables=[
"product"
]
)
chain = LLMChain( #← LLMChainを作成する
llm=chat,
prompt=prompt,
)
result = chain.predict(product="iPhone") #← LLMChainを実行する
print(result)