Closed6

langchainとlangsmithでLLMモニタリング

もぶもぶもぶもぶ

環境

langchain==0.0.310
langsmith==0.0.43

参考 LangSmith

  • LangSmithでAPIキー発行
  • 環境変数を.envファイルに設定
OPENAI_API_KEY=sk-xxx
LANGCHAIN_TRACING_V2=true
LANGCHAIN_ENDPOINT=https://api.smith.langchain.com
LANGCHAIN_API_KEY=ls__xxx
  • テストプログラムを実行
from langchain.chat_models import ChatOpenAI
from dotenv import load_dotenv

load_dotenv()

llm = ChatOpenAI()
print(llm.predict("Hello, how are you?"))
もぶもぶもぶもぶ

積み残し

  • Streaming時のMonitoringができるか
  • Function CallingのMonitoringができるか
  • エージェントのMonitoringができるか
もぶもぶもぶもぶ

Function CallingのMonitoringもできてそう

確認プログラム

from langchain.agents import Tool
from langchain.chains import LLMMathChain
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.tools.render import format_tool_to_openai_function
from langchain.agents.format_scratchpad import format_to_openai_functions
from langchain.agents.output_parsers import OpenAIFunctionsAgentOutputParser
from langchain.agents import AgentExecutor
from dotenv import load_dotenv

load_dotenv()


llm = ChatOpenAI(model="gpt-3.5-turbo-0613")
llm_math_chain = LLMMathChain.from_llm(llm=llm, verbose=True)

tools = [
    Tool(
        name="Calculator",
        func=llm_math_chain.run,
        description="useful for when you need to answer questions about math",
    )
]

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a helpful assistant"),
        ("user", "{input}"),
        MessagesPlaceholder(variable_name="agent_scratchpad"),
    ]
)

llm_with_tools = llm.bind(functions=[format_tool_to_openai_function(t) for t in tools])
agent = (
    {
        "input": lambda x: x["input"],
        "agent_scratchpad": lambda x: format_to_openai_functions(
            x["intermediate_steps"]
        ),
    }
    | prompt
    | llm_with_tools
    | OpenAIFunctionsAgentOutputParser()
)

agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
agent_executor.invoke(
    {
        "input": "2の14乗は何ですか?",
    }
)

もぶもぶもぶもぶ

まさにこういうのを確認したかったんだよな~
SaaSじゃなくOSSでできないかなぁ......

もぶもぶもぶもぶ

もうちょっと簡易化したテストプログラム
ReActのときはエージェントのプロンプト構築処理が複雑だったけど、OpenAI_Functionsはツールが増えてもシステムプロンプトは複雑にならないのが良い

from langchain.agents import Tool, initialize_agent, AgentType
from langchain.chains import LLMMathChain
from langchain.chat_models import ChatOpenAI
from dotenv import load_dotenv

load_dotenv()


llm = ChatOpenAI(model="gpt-3.5-turbo-0613")
llm_math_chain = LLMMathChain.from_llm(llm=llm, verbose=True)

tools = [
    Tool(
        name="Calculator",
        func=llm_math_chain.run,
        description="useful for when you need to answer questions about math",
    )
]

agent_executor = initialize_agent(
    tools, llm, agent=AgentType.OPENAI_FUNCTIONS, verbose=True
)

agent_executor.invoke(
    {
        "input": "2の14乗は何ですか?",
    }
)
このスクラップは2023/10/07にクローズされました