File size: 1,990 Bytes
7089e2c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bbd0e2b
7089e2c
 
 
 
 
 
 
28d095b
7089e2c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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'])