HarmonyOS鸿蒙Next中Chat组件如何接入dify知识库模型

HarmonyOS鸿蒙Next中Chat组件如何接入dify知识库模型

//API版
import { Chat, ChatRole, ChatMessage } from '@changwei/chatui'
import {
  ChatCompletionSystemMessageParam,
  ChatCompletionUserMessageParam,
  IChatCompletionMessageParam,
  ChatCompletionChunk,
  OpenAI,
  ChatCompletion
} from '@changwei/openai'

@Component
struct ChatCompletionPage2 {
  private openaiClient: OpenAI = new OpenAI(
    "API-KEY",
    undefined,
    "Base URL"
  )
  private messages: IChatCompletionMessageParam[] = [new ChatCompletionSystemMessageParam("You are a helpful assistant.")]

  aboutToAppear() {
    // 初始化操作
  }

  build() {
    Row() {
      Column() {
        Chat({
          title: '',
          needTitleBar: true,
          welcomeMessage: '',
          userMessageBackgroundColor: Color.White,
          userMessageTextColor: Color.Black,
          botAvatar: $r('app.media.tb'),
          messageFontSize: 20,
          useMarkdown: true,
          needBackButton: false,
          submitButtonText: '发送',
          inputTextPlaceHolder: '请输入内容',
          inputTextColor: Color.Black,
          onSendMessage: (ctl, message) => {
            // 发送用户消息
            ctl.postMessage(new ChatMessage({ role: ChatRole.User, content: message.content }));
            // 显示回复等待动画
            ctl.setTyping(true);

            this.messages.push(
              new ChatCompletionUserMessageParam(message.content, message.name)
            );
            let streamMode = true;

            // 修改后的流式处理部分代码
            this.openaiClient.chat.completions.create({
              messages: this.messages,
              stream: streamMode,
              model: '模型名称'
            }).then(async (response: ChatCompletion | ChatCompletionChunk[] | string) => {
              if (streamMode) {
                let str = response as string;
                str = `[${str.replace(/\s*data\: \[DONE\]\s*/, '').replaceAll(/\s*data:\s*/g, ',').substring(1)}]`
                let chunks: ChatCompletionChunk[] = [];
                try {
                  chunks = JSON.parse(str);
                } catch (e) {
                  chunks = [];
                }
                let output = '';
                const assistantMsg = new ChatMessage({
                  role: ChatRole.Assistant,
                  content: ''
                });

                for (const chunk of chunks) {
                  const content = chunk.choices?.[0]?.delta?.content;
                  if (content) {
                    output += content;
                    assistantMsg.content = output;
                  }
                }
                ctl.postMessage(assistantMsg, true); // 更新消息内容
                ctl.setTyping(false);
              } else {
                const resp = response as ChatCompletion;
                ctl.postMessage(new ChatMessage({
                  role: ChatRole.Assistant,
                  content: Array.isArray(resp.choices[0]?.message?.content)
                    ? resp.choices[0].message.content.join(' ')
                    : resp.choices[0]?.message?.content ?? ''
                }));
                ctl.setTyping(false);
              }
            }).catch((error: Error) => {
              console.error('API Error:', error.message);
              ctl.setTyping(false);
            });
          }
        })
      }
    }
    .height('100%')
  }
}

export default ChatCompletionPage2

更多关于HarmonyOS鸿蒙Next中Chat组件如何接入dify知识库模型的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next中Chat组件如何接入dify知识库模型的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中接入Dify知识库模型,首先需要在Dify平台上创建并部署知识库模型,获取API Key和模型URL。然后在鸿蒙Next项目中,通过HTTP请求调用Dify的API接口,将用户输入发送到Dify模型并获取响应。具体步骤如下:

  1. 创建Dify模型:在Dify平台上创建并部署知识库模型,获取API Key和模型URL。
  2. 配置HTTP请求:在鸿蒙Next项目中,使用HttpURLConnectionOkHttp等库配置HTTP请求,设置请求头(包括API Key)和请求体(用户输入)。
  3. 发送请求并处理响应:向Dify的API接口发送请求,获取模型生成的响应,并在UI中展示。

通过以上步骤,即可在鸿蒙Next中成功接入Dify知识库模型。

回到顶部