Аналогично я создал приложение с потоковой подсветкой с помощью VS-кода. Приложение похоже на то, что я загружаю документ, задаю запрос и получаю ответ на основе загруженного документа, используя поисковый индекс Azure AI и azureopenai. Но я хочу, чтобы под ответом отображалась ссылка/цитата.
Это должна быть информация о странице/источнике, откуда был извлечен ответ.Поля в моем индексе:
content: полное текстовое содержимое документа.
metadata_storage_path: путь, по которому хранится документ.
Metadata_author: Автор документа.
metadata_title: Название документа.
metadata_creation_date: Дата создания документа.
language: Язык документа.
split_text: Сегментированные части текст документа.
keywords: ключевые слова, извлеченные из документа.
summary: краткое изложение содержания документа.
section_titles: заголовки разделов в документе.
metadata_file_type: тип файла документ (например, PDF, DOCX).
merged_content: объединенное содержимое из разных частей документа.
text: основной текст документа.
layoutText: информация о макете текста документа.
Мой код здесь:
Код: Выделить всё
import os
import streamlit as st
from openai import AzureOpenAI
from azure.identity import AzureCliCredential
from azure.core.credentials import AccessToken
# Environment variables
endpoint = os.getenv("ENDPOINT_URL", "https://****************.azure.com/")
deployment = os.getenv("DEPLOYMENT_NAME", "openai-gpt-35-1106")
search_endpoint = os.getenv("SEARCH_ENDPOINT", "https://****************windows.net")
search_key = os.getenv("SEARCH_KEY", ********************************)
search_index = os.getenv("SEARCH_INDEX_NAME", "azureblob-index")
# Setup Azure OpenAI client
credential = AzureCliCredential()
def get_bearer_token() -> str:
token = credential.get_token("https://****************windows.net")
return token.token
client = AzureOpenAI(
azure_endpoint=endpoint,
azure_ad_token_provider=get_bearer_token,
api_version="2024-05-01-preview"
)
# Streamlit UI
st.title("Document Uploader and Query Tool")
# File upload
uploaded_file = st.file_uploader("Upload a document", type=["pdf", "docx", "pptx", "xlsx", "txt"])
if uploaded_file is not None:
file_content = uploaded_file.read()
st.write("Document uploaded successfully!")
# Send query to Azure AI Search and OpenAI
query = st.text_input("Enter your query:")
if st.button("Get Answer"):
if query:
try:
completion = client.chat.completions.create(
model=deployment,
messages=[
{
"role": "user",
"content": query
}
],
max_tokens=800,
temperature=0,
top_p=1,
frequency_penalty=0,
presence_penalty=0,
stop=None,
stream=False,
extra_body={
"data_sources": [{
"type": "azure_search",
"parameters": {
"endpoint": search_endpoint,
"index_name": search_index,
"semantic_configuration": "docs_test",
"query_type": "semantic",
"fields_mapping": {
"content_fields_separator": "\n",
"content_fields": ["content", "merged_content"]
},
"in_scope": True,
"role_information": "You are an AI assistant that helps people find information. The information should be small and crisp. It should be accurate.",
"authentication": {
"type": "api_key",
"key": search_key
}
}
}]
}
)
response = completion.to_dict()
answer = response["choices"][0]["message"]["content"]
references = []
if "references" in response["choices"][0]["message"]:
references = response["choices"][0]["message"]["references"]
st.write("Response from OpenAI:")
st.write(answer)
if references:
st.write("References:")
for i, ref in enumerate(references):
st.write(f"{i + 1}. {ref['title']} ({ref['url']})")
except Exception as e:
st.error(f"Error: {e}")
else:
st.warning("Please enter a query.")
Основная цель существования Tesla, как указано в отчете о воздействии 2019 года, — ускорение переход мира к устойчивой энергетике [doc1]. Эта миссия направлена на минимизацию воздействия продуктов и их компонентов на окружающую среду, особенно на этапе их использования, путем предоставления информации как о производственных, так и о потребительских аспектах продуктов Tesla [doc1].
[doc1] является заполнителем исходной информации. Но я хочу, чтобы это было так:
Ссылка: исходная информация/страница, откуда взят ответ.
Можете ли вы помочь?
Заранее спасибо!!!!!
Подробнее здесь: https://stackoverflow.com/questions/788 ... pplication