Skip to main content

CSV代理

This notebook shows how to use agents to interact with a csv. It is mostly optimized for question answering.

注意:此代理在底层调用Pandas DataFrame代理,后者又调用Python代理,执行LLM生成的Python代码 - 如果LLM生成的Python代码有害,这可能是不好的。请谨慎使用。

from langchain.agents import create_csv_agent
from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI
from langchain.agents.agent_types import AgentType

使用ZERO_SHOT_REACT_DESCRIPTION

这显示了如何使用ZERO_SHOT_REACT_DESCRIPTION代理类型初始化代理。请注意,这是上述方法的替代方法。

agent = create_csv_agent(
OpenAI(temperature=0),
"titanic.csv",
verbose=True,
agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
)

使用OpenAI函数

这显示了如何使用OPENAI_FUNCTIONS代理类型初始化代理。请注意,这是上述方法的替代方法。

agent = create_csv_agent(
ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613"),
"titanic.csv",
verbose=True,
agent_type=AgentType.OPENAI_FUNCTIONS,
)
agent.run("有多少行?")
    Error in on_chain_start callback: 'name'



Invoking: `python_repl_ast` with `df.shape[0]`


891数据框中有891行。

> Finished chain.





'数据框中有891行。'
agent.run("有多少人有超过3个兄弟姐妹")
    Error in on_chain_start callback: 'name'



Invoking: `python_repl_ast` with `df[df['SibSp'] > 3]['PassengerId'].count()`


30数据框中有30个人有超过3个兄弟姐妹。

> Finished chain.





'数据框中有30个人有超过3个兄弟姐妹。'
agent.run("平均年龄的平方根是多少?")
    Error in on_chain_start callback: 'name'



Invoking: `python_repl_ast` with `import pandas as pd
import math

# 创建一个数据框
data = {'Age': [22, 38, 26, 35, 35]}
df = pd.DataFrame(data)

# 计算平均年龄
average_age = df['Age'].mean()

# 计算平均年龄的平方根
square_root = math.sqrt(average_age)

square_root`


5.585696017507576平均年龄的平方根约为5.59。

> Finished chain.





'平均年龄的平方根约为5.59。'

多个CSV示例

下面的示例显示了代理如何与作为列表传入的多个csv文件进行交互。

agent = create_csv_agent(
ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613"),
["titanic.csv", "titanic_age_fillna.csv"],
verbose=True,
agent_type=AgentType.OPENAI_FUNCTIONS,
)
agent.run("两个数据框的年龄列中有多少行不同?")
    Error in on_chain_start callback: 'name'



Invoking: `python_repl_ast` with `df1['Age'].nunique() - df2['Age'].nunique()`


-1年龄列中有1行在两个数据框之间不同。

> Finished chain.





'年龄列中有1行在两个数据框之间不同。'