会话Conversation的概念及其实现方法

会话Conversation是一种新的信息组织形式,不同于“传统功能”以发件箱\收件箱\草稿箱,等文件夹的方式来组织信息,会话会把上下文相关的“往<--->来”信息组织在一起,以方便用户查看管理。所谓上下文相关是指:若某条信息是对另一条信息的‘回复’,则认为它们是上下文相关的。

Messaging应用的首页就是会话列表页面——ConversationList,它列出了用户所有往来信息,及其未发出的草稿信息,这些内容都来自于ConversationListAdapter适配器。

与会话列表相关的查询操作封装在com.android.mms.data.Conversation类中,它是查询会话信息的接口,并在必要时创建新会话(一个全新信息还未有对应的上下文信息时)。该类在应用启动的第一时刻就已经用一个后台线程开始加载会话列表了(加载到Cache中):

MmsApp.onCreate()方法调用了Conversation.init()方法,而该初始化方法是实现如下:

Java代码
  1. public static void init(final Context context) {
  2. new Thread(new Runnable() {
  3. public void run() {
  4. cacheAllThreads(context);
  5. }
  6. }).start();
  7. }
  1. public static void init(final Context context) {
  2. new Thread(new Runnable() {
  3. public void run() {
  4. cacheAllThreads(context);
  5. }
  6. }).start();
  7. }
public static void init(final Context context) {
	new Thread(new Runnable() {
		public void run() {
			cacheAllThreads(context);
		}
	}).start();
} 

cacheAllThreads()方法是关键,它将从content://mms-sms/conversations/位置查询数据,并在查询过程中标示了正在loading的状态——mLoadingThreads=true,它将查询出来的数据构建成Conversation对象放入Cache(或更新已存在于Cache中的对象),最后清理掉在Cache中存在,而未存在于查询结果中存在的Conversation对象(即清理无效的会话数据)

然而令我奇怪的是,listView中显示的数据并非来自Cache中,而始于异步查询工具AsyncQueryHandler的子类ThreadListQueryHandler 它以异步方式查询并得到会话列表,该查询开始于对Conversation.startAsyncQuery()方法的调用。查询完成后,mQueryHandler中调了mListAdapter.changeCursor(cursor),而此时才真正为Adapter注入了有效的Cursor对象

草稿信息也会在会话列表中出现,因为在保存草稿信息时WorkingMessage.saveDraft()会最终呼叫到Conversation.ensureThreadId方法,它会保证在数据表(mmssms.db中的threads表)中创建对应的会话记录,使其正确的显示在会话列表页面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取会话对象的方法会根据你使用的开发框架和语言而有所不同。通常来说,你需要先创建一个机器人实例或会话实例,然后通过调用相关的API或方法来获取会话对象。在基于Python的ChitGPT中,你可以使用Hugging Face Transformers库来创建一个聊天机器人实例,并使用该实例来启动一个会话。例如,可以使用以下代码来创建一个基于GPT模型的聊天机器人实例: ```python from transformers import AutoModelForCausalLM, AutoTokenizer, Conversation, pipeline model_name = "EleutherAI/gpt-neo-2.7B" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name) chat_bot = pipeline( "text2text-generation", model=model, tokenizer=tokenizer, ) ``` 然后,你可以使用以下代码来启动一个会话并与聊天机器人进行对话: ```python conversation = Conversation() while True: user_input = input("You: ") conversation.add_user_input(user_input) chat_bot_input = conversation.history[-1] chat_bot_output = chat_bot(chat_bot_input)["generated_text"] conversation.add_bot_output(chat_bot_output) print("Chat Bot:", chat_bot_output) ``` 在上述代码中,我们使用一个while循环来不断接收用户的输入,并将用户的输入添加到一个Conversation对象中。然后,我们使用Conversation对象中的最后一条历史记录来调用聊天机器人,并将其输出添加到Conversation对象中。最后,我们将聊天机器人的输出打印出来,与用户进行对话。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值