mirror of
https://github.com/langchain-ai/langchain.git
synced 2026-10-09 19:35:20 +03:00
Use numexpr evaluate instead of the python REPL to avoid malicious code injection. Tested against the (limited) math dataset and got the same score as before. For more permissive tools (like the REPL tool itself), other approaches ought to be provided (some combination of Sanitizer + Restricted python + unprivileged-docker + ...), but for a calculator tool, only mathematical expressions should be permitted. See https://github.com/hwchase17/langchain/issues/814
6.5 KiB
6.5 KiB
In [ ]:
# Comment this out if you are NOT using tracing
import os
os.environ["LANGCHAIN_HANDLER"] = "langchain"In [ ]:
from langchain.evaluation.loading import load_dataset
dataset = load_dataset("agent-search-calculator")In [ ]:
from langchain.llms import OpenAI
from langchain.chains import LLMMathChain
from langchain.agents import initialize_agent, Tool, load_tools
from langchain.agents import AgentType
tools = load_tools(['serpapi', 'llm-math'], llm=OpenAI(temperature=0))
agent = initialize_agent(tools, OpenAI(temperature=0), agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)In [ ]:
print(dataset[0]['question'])
agent.run(dataset[0]['question'])In [ ]:
agent.run(dataset[4]['question'])In [ ]:
predictions = []
predicted_dataset = []
error_dataset = []
for data in dataset:
new_data = {"input": data["question"], "answer": data["answer"]}
try:
predictions.append(agent(new_data))
predicted_dataset.append(new_data)
except Exception as e:
predictions.append({"output": str(e), **new_data})
error_dataset.append(new_data)In [ ]:
predictions[0]In [ ]:
from langchain.evaluation.qa import QAEvalChainIn [ ]:
llm = OpenAI(temperature=0)
eval_chain = QAEvalChain.from_llm(llm)
graded_outputs = eval_chain.evaluate(dataset, predictions, question_key="question", prediction_key="output")In [ ]:
for i, prediction in enumerate(predictions):
prediction['grade'] = graded_outputs[i]['text']In [ ]:
from collections import Counter
Counter([pred['grade'] for pred in predictions])In [ ]:
incorrect = [pred for pred in predictions if pred['grade'] == " INCORRECT"]In [ ]:
incorrectIn [ ]: