-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.py
More file actions
72 lines (51 loc) · 2.36 KB
/
utils.py
File metadata and controls
72 lines (51 loc) · 2.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import json
import os
from langchain_openai import ChatOpenAI
from langchain_experimental.agents.agent_toolkits import create_pandas_dataframe_agent
PROMPT_TEMPLATE = """
你是一位数据分析助手,你的回应内容取决于用户的请求内容。
1. 对于文字回答的问题,按照这样的格式回答:
{"answer": "<你的答案写在这里>"}
例如:
{"answer": "订单量最高的产品ID是'MNWC3-067'"}
2. 如果用户需要一个表格,按照这样的格式回答:
{"table": {"columns": ["column1", "column2", ...], "data": [[value1, value2, ...], [value1, value2, ...], ...]}}
3. 如果用户的请求适合返回条形图,按照这样的格式回答:
{"bar": {"columns": ["A", "B", "C", ...], "data": [34, 21, 91, ...]}}
4. 如果用户的请求适合返回折线图,按照这样的格式回答:
{"line": {"columns": ["A", "B", "C", ...], "data": [34, 21, 91, ...]}}
5. 如果用户的请求适合返回散点图,按照这样的格式回答:
{"scatter": {"columns": ["A", "B", "C", ...], "data": [34, 21, 91, ...]}}
注意:我们只支持三种类型的图表:"bar", "line" 和 "scatter"。
请将所有输出作为JSON字符串返回。请注意要将"columns"列表和数据列表中的所有字符串都用双引号包围。
例如:{"columns": ["Products", "Orders"], "data": [["32085Lip", 245], ["76439Eye", 178]]}
你要处理的用户请求如下:
"""
def dataframe_agent(openai_api_key, openai_base_url, df, query):
if openai_api_key == "os":
openai_api_key = os.getenv("OPENAI_API_KEY")
if openai_base_url == "":
model = ChatOpenAI(
api_key=openai_api_key,
model="gpt-3.5-turbo",
temperature=0
)
else:
model = ChatOpenAI(
api_key=openai_api_key,
base_url=openai_base_url,
model="gpt-3.5-turbo",
temperature=0
)
agent = create_pandas_dataframe_agent(
llm=model,
df=df,
agent_executor_kwargs={"handle_parsing_errors": True},
verbose=True
)
# 无法用format函数,因为提示词里有{},或许需要双{}{}区分才行
# prompt = PROMPT_TEMPLATE.format(query = query)
prompt = PROMPT_TEMPLATE + query
response = agent.invoke({"input", prompt})
response_dict = json.loads(response["output"])
return response_dict