shiwake / apis /shiwake.py
Renecto's picture
Update apis/shiwake.py
1f32223 verified
import openai
from openai import AsyncOpenAI
import os
import json
import pandas as pd
async def shiwake(p, openai_key=os.environ.get('OPENAI_KEY'), target="ユーザ"):
"""
input1 (text): 「ペットボトル」という項目は何に仕分けしたら良いですか?
input2 (text): default
input3 (text): 税務署
output1 (dataframe): 仕分け候補
"""
if openai_key == "default":
os.environ['OPENAI_API_KEY'] = os.environ.get('OPENAI_KEY')
else:
os.environ['OPENAI_API_KEY'] = openai_key
header = '{"1":"'
prompt=f'{p}\n{target}にとって納得感のある順位をkeyとして1~の数値をintに、項目をvalueに、1階層のjsonだけを返し、バッククオートなどは含めないでください。\njson:{header}'
#print(prompt)1
client = AsyncOpenAI()
response = await client.chat.completions.create(
model='gpt-4',
messages=[
{
"role": "system",
"content": "あなたは会計士と税理士の資格を持っており、勘定科目名がすらすら出てきます。経費という曖昧な単語は利用しません。全ての質問にjsonで回答します。"
},
{
"role": "user",
"content": prompt
},
],
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
json_data = header + response.choices[0].message.content
try:
# JSONデータを読み込む
j = json.loads(json_data)
except json.decoder.JSONDecodeError as e:
# JSON解析エラーが発生した場合、エラーの位置を特定
error_position = e.pos # エラーが発生した位置
print("JSONデコードエラー:", e)
print("エラーの周辺の文字:", json_data[max(0, error_position-10):error_position+10])
data = []
for k,v in j.items():
data.append([k,v])
return pd.DataFrame(data, columns=['rank', 'theme'])