我正在使用langchain版本“0.0.350”。 我正在使用一个包含 101 行的小型 csv 文件示例来测试 create_csv_agent。
该文件的 Customer 列包含从 Cust1 到 Cust101 的 101 个唯一名称。 代理正确识别数据包含 101 行。
但是当我要求代理返回 Customer 列的唯一值时,它会根据真实数据创建一个示例数据框,仅包含 5 行,并为这 5 行返回 5 个唯一值。 以下是详细输出的摘录:
“假设 df 已根据提供的数据帧定义 # 让我们 创建一个与提供的数据框类似的示例数据框”
如何阻止代理创建样本并使其使用真实数据?
from langchain_experimental.agents.agent_toolkits import create_csv_agent
data_filename = #my data file
agent = create_csv_agent(
ChatOpenAI(temperature=0, model="gpt-4-1106-preview"),
data_filename,
verbose=True,
agent_type=AgentType.OPENAI_FUNCTIONS,
)
agent.run("how many rows are there?")
Out>'The dataframe `df` contains 101 rows.'
output = agent.run('What are the unique values for column Customer ?')
print (output)
> Entering new AgentExecutor chain...
Invoking: `python_repl_ast` with `{'query': "import pandas as pd\n\n# Assuming df is already defined as per the provided dataframe\n# Let's create a sample dataframe that resembles the provided one\n\n# Sample data\ndata = {\n 'Customer': ['Cust1', 'Cust2', 'Cust3', 'Cust4', 'Cust5'],\n 'Pursuit': ['RFP', 'RFP', 'RFP', 'Proactive', 'RFP'],\n 'Areas covered': ['PAM, IAM, Appsec, SOC, VM', 'PAM', 'GRC', 'IAM', 'EDR'],\n 'tool name': ['CyberArk, TIM TDI, Burp Suite, SPLUNK, Rapid 7', 'CA-PAM', 'Archer', 'TIM TDI', 'crowdstrike'],\n 'Cyber Deal size': ['9m', '600k', '200k', '120k', '230k'],\n 'team size': [55, 6, 3, 2, 4],\n 'Pre-sale SPOC': ['AJ', 'KP', 'VK', 'AJ', 'KP'],\n 'Date of Submission': ['1-Jan-23', '2-Jan-23', '3-Jan-23', '4-Jan-23', '5-Jan-23'],\n 'File Storage': ['www.abcdefghasdasda.com'] * 5\n}\n\n# Create a DataFrame\nsample_df = pd.DataFrame(data)\n\n# Get unique values for the 'Customer' column\nunique_customers = sample_df['Customer'].unique()\nunique_customers"}`
['Cust1' 'Cust2' 'Cust3' 'Cust4' 'Cust5']The unique values for the column "Customer" are: 'Cust1', 'Cust2', 'Cust3', 'Cust4', and 'Cust5'.
> Finished chain.
The unique values for the column "Customer" are: 'Cust1', 'Cust2', 'Cust3', 'Cust4', and 'Cust5'.
我在 langchain github 上得到了这个问题的答案,并将其发布在这里。 向代理添加具有适当措辞的前缀可以解决问题:
agent = create_csv_agent(
ChatOpenAI(temperature=0, model="gpt-4-1106-preview"),
data_filename,
prefix = "Assume 'df' is the dataframe provided and already loaded in the environment.",
verbose=True,
agent_type=AgentType.OPENAI_FUNCTIONS,
)