Streamlit プロジェクト: Xunfei Xinghuo 認知ビッグ モデルに基づく Web インテリジェント対話アプリケーションの開発

ここに画像の説明を挿入

1 はじめに

HKUST Xunfei は、 2023 年 8 月 15 日にXunfei 認知モデル V2.0をリリースしました。これは、クロスドメインの知識と言語理解機能を統合した新世代の認知知能モデルです。一昨日、ブロガーが Xunfei 認知モデルの詳細な分析を実施しました 詳細については、ブログ投稿「Spark of the Spark: 国内 Xunfei Xunhuo モデルを使用した実際の体験 (GPT との比較)」を参照してください。

一般に、Xunfei Xinghuo 認知ビッグ モデルは優れた全体的なパフォーマンスを示し、多くの分野で優れたレベルを示し、マルチモーダル インタラクションの独自の能力により、より幅広い分野に適用できます。特に注目すべきは意味論テスト、常識テスト、イベント分類テストであり、これらのテスト項目により、Xunfei の認知モデルと GPT の違いが明らかになります。常識テストとイベント分類テストでは、Xunfei 認知ビッグ モデルの方が優れたパフォーマンスを示しましたが、セマンティック テストでは、皮肉を正確に識別する点で GPT の方がさらに優れていました。

本篇博文聚焦于利用讯飞星火认知大模型的API,基于Streamlit构建个人Web智能对话应用的实践案例。

この記事では、Xunfei Xinghuo Cognitive Big Model の強力な機能を使用して、個人の Web アプリケーションにインテリジェントな対話機能を与える方法について詳しく説明します。開発プロセス全体の手順と技術的な詳細を紹介し、いくつかの重要な使用経験と最適化戦略を共有します。インテリジェントな対話アプリケーションの開発に興味がある開発者であっても、実際のアプリケーションにおける Xunfei Xinghuo コグニティブラージ モデルのパフォーマンスを理解したい研究者であっても、この記事は貴重な参考資料と実践的な経験を提供します。

Streamlit に興味があり、さらに詳しく知りたい場合は、私のコラム「最も完全な Streamlit チュートリアル」に注目することを強くお勧めします

このコラムでは、一連の徹底的で詳細な Streamlit チュートリアルと実際の事例を紹介します。基本概念から高度な機能まであらゆる側面を網羅し、Web アプリケーション開発における Streamlit の幅広い応用を探ります。

これらのチュートリアルを通じて、Streamlit の中心原則、ワークフロー、一般的な使用法を深く理解できます。Streamlit のさまざまなコンポーネントと機能を分析し、すぐに使い始めて素晴らしい対話型アプリケーションを構築するのに役立つ実用的なサンプル コードとヒントを提供します。

ここに画像の説明を挿入

2 API取得

Xunfei Spark Cognitive Big Modelの機能を利用するには、 Xunfei公式に申請フォーム(公式サイトアドレス)を提出する必要があります。

ここに画像の説明を挿入

ページ上の「API テスト アプリケーション」をクリックし、指示に従ってアプリケーションを作成します。正しい情報を入力した後、Xunfei から SMS 通知を受信するまで 1 ~ 2 日待つだけです。次に、開発者ワークベンチにログインして、appid、api_secret、api_key などの主要な情報を取得できます。

3 公式ドキュメントの呼び出しコード

Python 環境で Streamlit ツールを使用するために、ブロガーは Xunfei の公式ドキュメントにある Python 呼び出しの例をダウンロードして、ツールをよりよく理解し、適用しました。次のリンクから公式ドキュメントをダウンロードできます:ダウンロード リンク

解凍したフォルダーには、SparkApi.py と test.py という 2 つの Python ファイルがあります。このうち、SparkApi.py は Xunfei が提供する公式ライブラリファイルであり、修正の必要はありません。ここでは、test.py ファイルの調査と変更に焦点を当てます。
ここに画像の説明を挿入
現在の環境で、このブログ投稿で説明されているプロジェクトを正常にビルドするには、少なくとも次の必要なライブラリをインストールする必要があります。

pip install streamlit
pip install websocket-client
pip install streamlit_chat

test.py ファイル内のコードを見てみましょう。

import SparkApi
#以下密钥信息从控制台获取
appid = "XXXXXXXX"     #填写控制台中获取的 APPID 信息
api_secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"   #填写控制台中获取的 APISecret 信息
api_key ="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"    #填写控制台中获取的 APIKey 信息

#用于配置大模型版本,默认“general/generalv2”
domain = "general"   # v1.5版本
# domain = "generalv2"    # v2.0版本
#云端环境的服务地址
Spark_url = "ws://spark-api.xf-yun.com/v1.1/chat"  # v1.5环境的地址
# Spark_url = "ws://spark-api.xf-yun.com/v2.1/chat"  # v2.0环境的地址


text =[]

# length = 0

def getText(role,content):
    jsoncon = {
    
    }
    jsoncon["role"] = role
    jsoncon["content"] = content
    text.append(jsoncon)
    return text

def getlength(text):
    length = 0
    for content in text:
        temp = content["content"]
        leng = len(temp)
        length += leng
    return length

def checklen(text):
    while (getlength(text) > 8000):
        del text[0]
    return text
    


if __name__ == '__main__':
    text.clear
    while(1):
        Input = input("\n" +"我:")
        question = checklen(getText("user",Input))
        SparkApi.answer =""
        print("星火:",end = "")
        SparkApi.main(appid,api_key,api_secret,Spark_url,domain,question)
        getText("assistant",SparkApi.answer)
        # print(str(text))


在上述代码中,我们需要从控制台获取以下信息:appid、api_secret、api_key。为了确保代码顺利运行,我们需要将 domain 和 Spark_url 更改为 V2.0 版本。

此外,确保 SparkApi.py 文件与 test.py 文件在同一目录下,以便能够轻松地进行导入操作。同样,在将此功能嵌入到 Streamlit 网页项目时,也需要遵循同样的文件路径规则和导入方式。

これらの情報は、Xunfei API にアクセスするために必要な資格情報と認証情報です。この情報は、iFLYTEK の開発者コンソールで取得できます。Xunfei API に正常に接続して必要なデータと結果を取得できるように、入力した資格情報が正しいことを確認してください。

操作の結果は次のとおりです。

ここに画像の説明を挿入

とても良い!iFLYTEK API が正常に呼び出され、望ましい結果が得られました。ユーザーの利便性とエクスペリエンスを高めるために、この関数を Streamlit Web ページに埋め込むことができるようになりました。

4 Streamlit Webページの構築

4.1 コードとエフェクトの表示

公式サンプルコードに基づいて、Streamlit を使用して Web ページを構築することに成功しました。以下は完全な Web ページのソース コードです (コメントは非常に詳細です)。

import streamlit as st
from streamlit_chat import message

import SparkApi

# 以下密钥信息从控制台获取
appid = "XXXXXXXX"  # 填写控制台中获取的 APPID 信息
api_secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"  # 填写控制台中获取的 APISecret 信息
api_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"  # 填写控制台中获取的 APIKey 信息

# 用于配置大模型版本,默认“general/generalv2”
# domain = "general"   # v1.5版本
domain = "generalv2"  # v2.0版本
# 云端环境的服务地址
# Spark_url = "ws://spark-api.xf-yun.com/v1.1/chat"  # v1.5环境的地址
Spark_url = "ws://spark-api.xf-yun.com/v2.1/chat"  # v2.0环境的地址

text = []  # 用于存储对话内容的列表

def getText(role, content):
    """
    构造包含角色和内容的对话信息,并添加到对话列表中
    
    参数:
    role (str): 对话角色,可以是 "user"(用户)或 "assistant"(助手)
    content (str): 对话内容
    
    返回值:
    text (list): 更新后的对话列表
    """
    jsoncon = {
    
    }
    jsoncon["role"] = role
    jsoncon["content"] = content
    text.append(jsoncon)
    return text

def getlength(text):
    """
    计算对话列表中所有对话内容的字符长度之和
    
    参数:
    text (list): 对话列表
    
    返回值:
    length (int): 对话内容的字符长度之和
    """
    length = 0
    for content in text:
        temp = content["content"]
        leng = len(temp)
        length += leng
    return length

def checklen(text):
    """
    检查对话列表中的对话内容字符长度是否超过限制(8000个字符)
    如果超过限制,删除最早的对话内容,直到满足字符长度限制
    
    参数:
    text (list): 对话列表
    
    返回值:
    text (list): 更新后满足字符长度限制的对话列表
    """
    while getlength(text) > 8000:
        del text[0]
    return text

if __name__ == '__main__':
    # 在 Streamlit 网页上显示欢迎文本
    st.markdown("#### 我是讯飞星火认知模型机器人,我可以回答您的任何问题!")
    
    # 初始化对话历史和生成的响应列表
    if 'generated' not in st.session_state:
        st.session_state['generated'] = []
    if 'past' not in st.session_state:
        st.session_state['past'] = []
    
    # 获取用户输入的问题
    user_input = st.text_input("请输入您的问题:", key='input')
    
    if user_input:
        # 构造用户输入的对话信息
        question = checklen(getText("user", user_input))
        
        # 调用 SparkApi 中的函数进行问题回答
        SparkApi.answer = ""
        print("星火:", end="")
        SparkApi.main(appid, api_key, api_secret, Spark_url, domain, question)
        output = getText("assistant", SparkApi.answer)
        
        # 将用户输入和生成的响应添加到对话历史和生成的响应列表中
        st.session_state['past'].append(user_input)
        st.session_state['generated'].append(str(output[1]['content']))
        
    if st.session_state['generated']:
        # 在网页上显示对话历史和生成的响应
        for i in range(len(st.session_state['generated']) - 1, -1, -1):
            message(st.session_state["generated"][i], key=str(i))
            message(st.session_state['past'][i], is_user=True, key=str(i) + '_user')

コード内で、次の変数を Xunfei Open Platform から取得した情報に置き換えます。

  • appid: APPID に置き換えます。
  • api_secret: APISecret に置き換えます。
  • api_key: APIKey に置き換えます。

Streamlit アプリケーションを実行するためのターミナル:

streamlit run your_app.py

ここに画像の説明を挿入

4.2 Streamlit 関連のナレッジポイント

  1. st.markdown(): Streamlit アプリケーションで Markdown 形式のテキストを表示するために使用されます。
  2. st.text_input(): Streamlit アプリケーションでテキスト入力ボックスを作成し、ユーザー入力を取得するために使用されます。
  3. st.session_state: Streamlit アプリケーションでセッション状態を保存およびアクセスするために使用され、異なる関数間でデータを受け渡すことができます。このコードでは、st.session_state を使用して、会話履歴と生成された応答を保存および取得します。
  4. st.session_state['generated'] および st.session_state['past']: これらの変数は、会話履歴と生成された応答のリストを保存するために使用されます。
  5. message() 関数: これは、メッセージを表示するためのカスタム Streamlit コンポーネントです。このコードでは、message() 関数を使用してダイアログ履歴と生成された応答を表示します。

Streamlit に興味があり、さらに詳しく知りたい場合は、私のコラム「最も完全な Streamlit チュートリアル」に注目することを強くお勧めします

5。結論

このブログ投稿では、Streamlit と Xunfei Xinghuo 認知モデル ロボットを使用して Q&A アプリケーションを構築する方法について説明します。Xunfei オープンプラットフォームの API とカスタム Streamlit コンポーネントを統合することで、リアルタイムの質疑応答機能を実現し、会話履歴や生成された応答を Web ページ上に表示できます。

このコードを使用する前に、Xunfei オープン プラットフォームへのアカウントの登録、アプリケーションの作成、関連情報の取得など、いくつかの準備作業を完了する必要があります。次に、必要な Python ライブラリをインストールし、提供されたソース コードを変更して独自の API キーとアドレス情報に適用する必要があります。最後に、Streamlit アプリケーションを実行し、ブラウザーで生成された URL にアクセスするだけです。

質疑応答機能を実装する過程で、Markdown テキストの表示、テキスト入力ボックスの作成、セッション状態の保存など、Streamlit に関連するいくつかの知識ポイントを学びました。これらの機能により、インタラクティブな Web アプリケーションを簡単に構築できます。

このブログ投稿の導入により、Xunfei Xinghuo 認知モデル ロボットを使用して独自の質問応答アプリケーションの構築を開始できるようになります。これがお役に立てば幸いです。あなたの開発の幸運を祈ります。

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_46043195/article/details/132383775