鸿蒙原生大模型对话应用开发过程记录

2025年2月10日

项目地址

AIChatApp

欢迎各位提issue :L

部分代码参考:

对话组件实现参考

目前效果展示

网络请求可能有响应波动,演示中回复比较慢。
img

图中展示的是基于阿里云百炼平台的RAG智能体应用API实现的一个鸿蒙开发者文档助手对话应用页面Demo

支持中文以及英语的对话以及文档查询功能,同时基于千问大模型的推理以及学习能力,能够快速为用户分析总结鸿蒙开发相关知识库中的相关技术内容,给出合理的参考回答。

目前实现了最基本的智能体API单轮调用以及对话式输出显示。

解决的问题

解决了2025年2月8日-周报中提到的问题。

1.定义请求体类
由于阿里云的API文档中只提供了适用于Node.js的axios的http请求规范文档,需要根据此文档对重新实现适用于鸿蒙的请求结构,而ArkTS在语法上有非常严格的约束,对于JS和TS而言非常简单灵活实现的请求体对象,根据ArkTS的规范是无法通过编译的。根据ArkTS的规范,不允许使用字面量直接初始化一个对象实例,以及所有的对象都要事先声明以及明确标注每一个字段的类型。文档中的请求体是具有嵌套结构的JSON对象,而且部分字段具有可选属性(发送请求时JSON内可以不包含这部分字段),对于这种情况,解决方式是使用interface来定义请求体的数据结构,然后通过interface的嵌套定义实现具有嵌套结构的请求体。

2."@ohos/axios"规范使用
鸿蒙上的axios使用时必须要声明对应的范型参数。

const response: AxiosResponse<ResponseData> = await axios.post<ResponseData, AxiosResponse<ResponseData>, RequestData>(url, data, {
    headers: {
        'Authorization': `Bearer ${apiKey}`,
        'Content-Type': 'application/json'
    }
});

在 axios.post 方法中,泛型参数用于指定请求和响应的数据类型。具体来说,axios.post 方法的泛型参数有三个,分别对应请求数据和响应数据的类型。以下是这些泛型参数的详细说明:

第一个泛型参数 :指定响应数据的类型。在这个例子中,ResponseData 是响应数据的类型。
第二个泛型参数 <AxiosResponse>:指定 axios 响应对象的类型。在这个例子中,AxiosResponse 是 axios 响应对象的类型,它包含了响应数据。
第三个泛型参数 :指定请求数据的类型。在这个例子中,RequestData 是请求数据的类型。
这些泛型参数与 axios.post 方法的参数对应关系如下:

url:请求的 URL。
data:请求的数据,类型为 RequestData。
config:请求的配置选项,包括请求头等。

存在的问题

应用功能上

还有很多功能没有实现

例如:

  • 对话记录存储与管理
  • 多轮对话上下文支持
  • 文本选择以及复制功能
  • 编辑已有对话
  • 会话管理:实现新建会话窗口功能
  • 用户设置功能:提供api配置功能,实现对其他大模型api的统一调用支持

技术

还需要根据未来需要实现的上述功能,学习鸿蒙系统中的数据存储管理,用户配置文件的加载调用等等相关技术。

项目工程文件结构上也不够规范

未来需要引入更多功能,不规范的文件结构会导致冲突以及潜在的bug.

规划安排

根据需要实现的功能,按照规范规划工程文件结构

学习相关功能对应的鸿蒙相关功能技术

posted @ 2025-02-10 17:32  EmptyEmeraldTablet  阅读(141)  评论(0)    收藏  举报