OpenAI Assistant API — чтение из файла и возврат ответаC#

Место общения программистов C#
Ответить
Anonymous
 OpenAI Assistant API — чтение из файла и возврат ответа

Сообщение Anonymous »

Я создал помощника в интерфейсе OpenAI, настроил его с помощью поиска и загрузил файл .txt. Когда я задаю вопрос Помощнику в интерфейсе, он правильно отвечает на основе загруженного файла.
Мне хотелось бы иметь приложение WPF для подключения к Помощнику, который я создал ранее, и использовать загруженный файл.
Подключаюсь к созданному Ассистенту с помощью кода ниже:

Код: Выделить всё

try
{
var requestData = new
{
assistant_id = assistantId
};

var _httpClient = new HttpClient();
_httpClient.DefaultRequestHeaders.Authorization = new
AuthenticationHeaderValue("Bearer", OPENAI_API_KEY);
_httpClient.DefaultRequestHeaders.Add("OpenAI-Beta", "assistants=v1");
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var content = new StringContent(JsonConvert.SerializeObject(requestData), Encoding.UTF8, "application/json");
var response = await _httpClient.PostAsync("https://api.openai.com/v1/threads", null);
var responseContent = await response.Content.ReadAsStringAsync();
JObject result = (JObject)JsonConvert.DeserializeObject(responseContent);

return result["id"].ToString();
}
catch (Exception ex)
В этом нет ничего плохого, мне удается получить доступ к Ассистенту, и он возвращает идентификатор потока.
Я запрашиваю Ассистента с помощью следующего кода:< /p>

Код: Выделить всё

    var messageData = new
{
role = "user",
content = questionText
};

var _httpClient = new HttpClient();
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", OPENAI_API_KEY);
_httpClient.DefaultRequestHeaders.Add("OpenAI-Beta", "assistants=v1");
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var content = new StringContent(JsonConvert.SerializeObject(messageData),Encoding.UTF8, "application/json");
var response = await _httpClient.PostAsync("https://api.openai.com/v1/threads", null);
var responseContent = await response.Content.ReadAsStringAsync();
JObject result = (JObject)JsonConvert.DeserializeObject(responseContent);

var runData = new
{
assistant_id = assistantId
};

content = new StringContent(JsonConvert.SerializeObject(runData), Encoding.UTF8, "application/json");
response = await _httpClient.PostAsync($"https://api.openai.com/v1/threads/{threadId}/runs",content);
responseContent = await response.Content.ReadAsStringAsync();
result = (JObject)JsonConvert.DeserializeObject(responseContent);

return result["id"].ToString();
И я получаю результат с помощью следующего кода:

Код: Выделить всё

 var _httpClient = new HttpClient();
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", OPENAI_API_KEY);
_httpClient.DefaultRequestHeaders.Add("OpenAI-Beta", "assistants=v1");
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var response = await _httpClient.GetAsync($"https://api.openai.com/v1/threads/{threadId}/messages");
var responseContent = await response.Content.ReadAsStringAsync();
Root? result = JsonConvert.DeserializeObject(responseContent);

return result.data[^1].content[^1].text.value;
Вот выдержка из ответа:

Код: Выделить всё

  "id": "msg_6OgK2DOxWI8uyAjJoHpCP1Qg",
"object": "thread.message",
"created_at": 1713269774,
"assistant_id": "asst_xxx",
"thread_id": "thread_5owDiegJh0XQerkQrLVVZnFd",
"run_id": "run_FLiEWzUNQIM3YbJKUL6zT69Y",
"role": "assistant",
"content": [
{
"type": "text",
"text": {
"value": "The uploaded file contains a listing of...",
"annotations": []
}
}
],
"file_ids": [],
"metadata": {}
Независимо от того, какой вопрос я задаю Ассистенту, он, кажется, отвечает текстом по умолчанию о том, какие данные содержатся в загруженном файле.
Я могу не запрашиваю конкретно конкретный элемент из загруженного файла, или если я спрашиваю об этом снова и снова, я все равно получаю один и тот же текст с тем же содержанием, слегка перефразированный.
Аннотации не работают. в любом случае содержать что-либо, только свойство text имеет значение.
Но когда я спрашиваю, какое имя загруженного файла, оно возвращает его правильно. p>
Если я затем запрошу конкретный элемент в загруженном файле, я снова получу такой ответ:

Код: Выделить всё

The document you uploaded seems like a .... dataset. Here are some things I could help you with:
Почему связь не непрерывна, как в интерфейсе, если я продолжу разговор через тот же threadId? И еще, почему он не может прочитать из загруженного файла?
Может быть, мне стоит создать в коде сам Ассистент, загрузить файл и использовать его, а не создавать его на портале OpenAI и просто подключиться к нему? Но я не понимаю, почему последний не работает таким образом, если я могу подключиться к нему и просмотреть загруженный файл в Ассистенте.
Большое спасибо за помощь!
Большое спасибо за помощь!
Большое спасибо! п>

Подробнее здесь: https://stackoverflow.com/questions/783 ... n-response
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»