在here提出了类似的问题,但从那时起,azure table 软件包已进行了显着更新,并且该解决方案不再起作用。
我正在使用 Azure 数据表包 V12.6.0:https://pypi.org/project/azure-data-tables/12.6.0/
对于我的聊天平台应用程序,我将每个对话保存在表存储的记录中,但是当用户加载聊天页面时,我只想使用其继续令牌每次加载获取 10 个结果,这样我就可以加载 10 个结果更多按需提供。
我见过几个 C# 示例,甚至还有一个 Java 示例,但没有见过一个 Python 示例。
这是我的代码,我用这个
每页结果
但是我似乎没有在工作,因为我获得了所有 200 条记录,而且我不知道在哪里可以找到延续令牌。
def get_chat_history(notebook_id: str, user_id: str):
"""
Get the chat history for a notebook for a user.
"""
table_service_client = connect_table_storage()
table_name = os.getenv("AZURE_CHAT_HISTORY_TABLE_NAME")
table_client = table_service_client.get_table_client(table_name=table_name)
entities = table_client.query_entities(query_filter=f"NotebookId eq '{notebook_id}' and PartitionKey eq '{user_id}'",
select=["Role", "Content"],
results_per_page=10
)
chat_history = []
for entity in entities:
chat_history.append({
"Timestamp": entity._metadata["timestamp"],
"Role": entity["Role"],
"Content": entity["Content"]
})
return chat_history
对于我的聊天平台应用程序,我将每个对话保存在表存储的记录中,但是当用户加载聊天页面时,我只想使用其继续令牌每次加载获取 10 个结果,这样我就可以加载 10 个结果更多按需提供。
您可以使用以下代码,通过 Azure python SDK 生成
Pagination
和 continuation
。
代码:
from azure.data.tables import TableServiceClient
def get_chat_history(notebook_id: str, user_id: str):
table_service_client = TableServiceClient.from_connection_string("xxx"
table_name = "xxx"
table_client = table_service_client.get_table_client(table_name=table_name)
entities = table_client.query_entities(query_filter=f"NotebookId eq '{notebook_id}' and PartitionKey eq '{user_id}'",
select=["Role", "Content"],
results_per_page=25
).by_page(None)
chat_history = []
for page in entities:
for entity in page:
chat_history.append({
"Role": entity["Role"],
"Content": entity["Content"]
})
print(len(chat_history))
get_chat_history("notebook_0", "user_0")
上述代码在表中查询与特定
NotebookId
和 PartitionKey
(user_id) 匹配的实体,仅选择 Role
和 Content
字段,结果按每页 25 个实体分页。
输出:
25
50
75
100
125
150
175
200
225
250
现在,您可以使用 for 循环为每个页面执行逻辑。