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

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)

いいなと思ったら応援しよう!