Bind runtime args | 🦜?🔗 Langchain
1、有時,我們希望使用常量參數調用Runnable序列中的Runnable,這些參數不是序列中前一個Runnable的輸出的一部分,也不是用戶的輸入,這時可以用Runnable.bind()
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI
prompt = ChatPromptTemplate.from_messages([("system","用代數符號寫出下面的方程,然后求解。 格式EQUATION:...換行SOLUTION:...換行",),("human", "{equation_statement}"),]
)
model = ChatOpenAI(temperature=0)
runnable = ({"equation_statement": RunnablePassthrough()} | prompt | model | StrOutputParser()
)
print(runnable.invoke("x的三次方加7等于12"))
# 使用model.bind,此處限制輸入某些字
runnable = ({"equation_statement": RunnablePassthrough()}| prompt| model.bind(stop="SOLUTION")| StrOutputParser()
)
print('model.bind:',runnable.invoke("x的三次方加7等于12"))
2、通過bind給openAI模型綁定openAI函數、openAI工具
注意以下的方程求解需要GPT4才能給出正確答案,奇怪的是上面不用bind function的gpt3.5可以回答正確
注意name的key不能為中文
function = {"name": "solver","description": "Formulates and solves an equation","parameters": {"type": "object","properties": {"equation": {"type": "string","description": "The algebraic expression of the equation",},"solution": {"type": "string","description": "The solution to the equation",},},"required": ["equation", "solution"],},
}
prompt = ChatPromptTemplate.from_messages([("system","Write out the following equation using algebraic symbols then solve it.",),("human", "{equation_statement}"),]
)
model=model="gpt-3.5-turbo".bind(function_call={"name": "solver"}, functions=[function]
)
runnable = {"equation_statement": RunnablePassthrough()} | prompt | model
print(runnable.invoke("x raised to the third plus seven equals 12"))