使用 ChatGPT(简单)+ GitHub 存储库创建 C# 聊天机器人

news2025/4/15 18:35:51

在本指南中,我们将深入探讨使用 ChatGPT 和 C# 构建聊天机器人的过程。我们将涵盖从设置 ChatGPT API 访问到部署聊天机器人的所有内容。让我们开始吧!

最后你会发现 GitHub Repo

设置您的 ChatGPT API 访问权限

在我们开始构建我们的聊天机器人之前,我们需要设置对 ChatGPT API 的访问。

注册 OpenAI

如果您已有 OpenAI 帐户,请跳过此部分

要访问 ChatGPT API,您首先需要注册一个 OpenAI 帐户。按着这些次序:

  1. 访问 OpenAI 网站
  2. 填写所需信息并创建您的帐户。
  3. 创建帐户后,登录并导航至 API 部分。

获取 API 访问密钥

要在您的 C# 项目中使用 ChatGPT API,您需要一个 API 访问密钥。以下是获得方法:

1. 登录您的 OpenAI 帐户。

2. 转到“查看 API 密钥”部分。

3. 单击“Create API Key”并为其命名。

4. 复制 API 密钥,因为您稍后会需要它。

上面的 API Key 不要尝试使用它,它不起作用。

确保您的 API 密钥安全,因为它会授予您使用 ChatGPT API 的权限。

为您的 ChatGPT 聊天机器人创建 C# 项目

现在我们已经设置了 ChatGPT API 访问权限,是时候为我们的聊天机器人创建一个新的 C# 项目了。

设置一个新的 C# 项目

要创建新的 C# 项目,您可以使用 Visual Studio、Visual Studio Code 或任何其他支持 C# 的 IDE。按着这些次序:

  1. 打开您喜欢的 IDE 并创建一个新的 C# 项目。
  2. 选择“控制台应用程序”模板并为您的项目提供名称。
  3. 单击“创建”以生成项目。

安装必要的包

我们需要安装一些 NuGet 包来帮助我们与 ChatGPT API 进行交互:

  • RestSharp: 一个用于发出 HTTP 请求的库。
  • Newtonsoft.Json:用于处理 JSON 数据的库。

要安装这些包,请在 IDE 的包管理器控制台中运行以下命令:

<span style="color:#171717"><span style="background-color:#ffffff"><span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-text-color)">Install</span><span style="color:var(--syntax-text-color)">-</span><span style="color:var(--syntax-text-color)">Package</span> <span style="color:var(--syntax-text-color)">RestSharp</span>
<span style="color:var(--syntax-text-color)">Install</span><span style="color:var(--syntax-text-color)">-</span><span style="color:var(--syntax-text-color)">Package</span> <span style="color:var(--syntax-text-color)">Newtonsoft</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">Json</span>
</code></span></span></span></span>

将 ChatGPT API 与您的 C# 项目集成

项目设置完成后,就可以集成 ChatGPT API 了。

创建 ChatGPT API 客户端

首先,让我们创建一个 C# 类来与 ChatGPT API 交互。我们称之为ChatGPTClient. 这是基本结构:

<span style="color:#171717"><span style="background-color:#ffffff"><span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">using</span> <span style="color:var(--syntax-text-color)">System</span><span style="color:var(--syntax-text-color)">;</span>
<span style="color:var(--syntax-declaration-color)">using</span> <span style="color:var(--syntax-text-color)">RestSharp</span><span style="color:var(--syntax-text-color)">;</span>
<span style="color:var(--syntax-declaration-color)">using</span> <span style="color:var(--syntax-text-color)">Newtonsoft.Json</span><span style="color:var(--syntax-text-color)">;</span>

<span style="color:var(--syntax-declaration-color)">public</span> <span style="color:var(--syntax-declaration-color)">class</span> <span style="color:var(--syntax-name-color)">ChatGPTClient</span>
<span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-declaration-color)">private</span> <span style="color:var(--syntax-declaration-color)">readonly</span> <span style="color:var(--syntax-declaration-color)">string</span> <span style="color:var(--syntax-text-color)">_apiKey</span><span style="color:var(--syntax-text-color)">;</span>
    <span style="color:var(--syntax-declaration-color)">private</span> <span style="color:var(--syntax-declaration-color)">readonly</span> <span style="color:var(--syntax-text-color)">RestClient</span> <span style="color:var(--syntax-text-color)">_client</span><span style="color:var(--syntax-text-color)">;</span>

    <span style="color:var(--syntax-comment-color)">// Constructor that takes the API key as a parameter</span>
    <span style="color:var(--syntax-declaration-color)">public</span> <span style="color:var(--syntax-name-color)">ChatGPTClient</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-declaration-color)">string</span> <span style="color:var(--syntax-text-color)">apiKey</span><span style="color:var(--syntax-text-color)">)</span>
    <span style="color:var(--syntax-text-color)">{</span>
            <span style="color:var(--syntax-text-color)">_apiKey</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-text-color)">apiKey</span><span style="color:var(--syntax-text-color)">;</span>
            <span style="color:var(--syntax-comment-color)">// Initialize the RestClient with the ChatGPT API endpoint</span>
            <span style="color:var(--syntax-text-color)">_client</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-declaration-color)">new</span> <span style="color:var(--syntax-name-color)">RestClient</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"https://api.openai.com/v1/engines/text-davinci-003/completions"</span><span style="color:var(--syntax-text-color)">);</span>
    <span style="color:var(--syntax-text-color)">}</span>

    <span style="color:var(--syntax-comment-color)">// We'll add methods here to interact with the API.</span>
<span style="color:var(--syntax-text-color)">}</span>
</code></span></span></span></span>

在此类中,我们存储 API 密钥并创建一个RestClient指向 ChatGPT API 端点的实例。

现在让我们添加一个方法来向 API 发送消息:

<span style="color:#171717"><span style="background-color:#ffffff"><span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-comment-color)">// Method to send a message to the ChatGPT API and return the response</span>
        <span style="color:var(--syntax-declaration-color)">public</span> <span style="color:var(--syntax-declaration-color)">string</span> <span style="color:var(--syntax-name-color)">SendMessage</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-declaration-color)">string</span> <span style="color:var(--syntax-text-color)">message</span><span style="color:var(--syntax-text-color)">)</span>
        <span style="color:var(--syntax-text-color)">{</span>
            <span style="color:var(--syntax-comment-color)">// Create a new POST request</span>
            <span style="color:var(--syntax-declaration-color)">var</span> <span style="color:var(--syntax-text-color)">request</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-declaration-color)">new</span> <span style="color:var(--syntax-name-color)">RestRequest</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">""</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-text-color)">Method</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">Post</span><span style="color:var(--syntax-text-color)">);</span>
            <span style="color:var(--syntax-comment-color)">// Set the Content-Type header</span>
            <span style="color:var(--syntax-text-color)">request</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">AddHeader</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"Content-Type"</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">"application/json"</span><span style="color:var(--syntax-text-color)">);</span>
            <span style="color:var(--syntax-comment-color)">// Set the Authorization header with the API key</span>
            <span style="color:var(--syntax-text-color)">request</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">AddHeader</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"Authorization"</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">$"Bearer </span><span style="color:var(--syntax-text-color)">{</span><span style="color:var(--syntax-text-color)">_apiKey</span><span style="color:var(--syntax-text-color)">}</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">);</span>

            <span style="color:var(--syntax-comment-color)">// Create the request body with the message and other parameters</span>
            <span style="color:var(--syntax-declaration-color)">var</span> <span style="color:var(--syntax-text-color)">requestBody</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-declaration-color)">new</span>
            <span style="color:var(--syntax-text-color)">{</span>
                <span style="color:var(--syntax-text-color)">prompt</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-text-color)">message</span><span style="color:var(--syntax-text-color)">,</span>
                <span style="color:var(--syntax-text-color)">max_tokens</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-literal-color)">100</span><span style="color:var(--syntax-text-color)">,</span>
                <span style="color:var(--syntax-text-color)">n</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-literal-color)">1</span><span style="color:var(--syntax-text-color)">,</span>
                <span style="color:var(--syntax-text-color)">stop</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-declaration-color)">string</span><span style="color:var(--syntax-text-color)">?)</span><span style="color:var(--syntax-declaration-color)">null</span><span style="color:var(--syntax-text-color)">,</span>
                <span style="color:var(--syntax-text-color)">temperature</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-literal-color)">0.7</span><span style="color:var(--syntax-text-color)">,</span>
            <span style="color:var(--syntax-text-color)">};</span>

            <span style="color:var(--syntax-comment-color)">// Add the JSON body to the request</span>
            <span style="color:var(--syntax-text-color)">request</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">AddJsonBody</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">JsonConvert</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">SerializeObject</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">requestBody</span><span style="color:var(--syntax-text-color)">));</span>

            <span style="color:var(--syntax-comment-color)">// Execute the request and receive the response</span>
            <span style="color:var(--syntax-declaration-color)">var</span> <span style="color:var(--syntax-text-color)">response</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-text-color)">_client</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">Execute</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">request</span><span style="color:var(--syntax-text-color)">);</span>

            <span style="color:var(--syntax-comment-color)">// Deserialize the response JSON content</span>
            <span style="color:var(--syntax-declaration-color)">var</span> <span style="color:var(--syntax-text-color)">jsonResponse</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-text-color)">JsonConvert</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">DeserializeObject</span><span style="color:var(--syntax-text-color)"><</span><span style="color:var(--syntax-declaration-color)">dynamic</span><span style="color:var(--syntax-text-color)">>(</span><span style="color:var(--syntax-text-color)">response</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">Content</span> <span style="color:var(--syntax-text-color)">??</span> <span style="color:var(--syntax-declaration-color)">string</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">Empty</span><span style="color:var(--syntax-text-color)">);</span>

            <span style="color:var(--syntax-comment-color)">// Extract and return the chatbot's response text</span>
            <span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-text-color)">jsonResponse</span><span style="color:var(--syntax-text-color)">?.</span><span style="color:var(--syntax-text-color)">choices</span><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">]?.</span><span style="color:var(--syntax-text-color)">text</span><span style="color:var(--syntax-text-color)">?.</span><span style="color:var(--syntax-name-color)">ToString</span><span style="color:var(--syntax-text-color)">()?.</span><span style="color:var(--syntax-name-color)">Trim</span><span style="color:var(--syntax-text-color)">()</span> <span style="color:var(--syntax-text-color)">??</span> <span style="color:var(--syntax-declaration-color)">string</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">Empty</span><span style="color:var(--syntax-text-color)">;</span>
        <span style="color:var(--syntax-text-color)">}</span>
</code></span></span></span></span>

此方法将消息作为输入,使用适当的标头和 JSON 正文创建对 ChatGPT API 的 POST 请求,并从 API 返回响应。

实施聊天机器人逻辑

有了我们ChatGPTClient,让我们在我们的类中实现聊天机器人逻辑Program

<span style="color:#171717"><span style="background-color:#ffffff"><span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code>        <span style="color:var(--syntax-declaration-color)">class</span> <span style="color:var(--syntax-name-color)">Program</span>
        <span style="color:var(--syntax-text-color)">{</span>
            <span style="color:var(--syntax-declaration-color)">static</span> <span style="color:var(--syntax-declaration-color)">void</span> <span style="color:var(--syntax-name-color)">Main</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-declaration-color)">string</span><span style="color:var(--syntax-text-color)">[]</span> <span style="color:var(--syntax-text-color)">args</span><span style="color:var(--syntax-text-color)">)</span>
            <span style="color:var(--syntax-text-color)">{</span>
                <span style="color:var(--syntax-comment-color)">// Replace with your ChatGPT API key</span>
                <span style="color:var(--syntax-declaration-color)">string</span> <span style="color:var(--syntax-text-color)">apiKey</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-string-color)">"your_api_key_here"</span><span style="color:var(--syntax-text-color)">;</span>
                <span style="color:var(--syntax-comment-color)">// Create a ChatGPTClient instance with the API key</span>
                <span style="color:var(--syntax-declaration-color)">var</span> <span style="color:var(--syntax-text-color)">chatGPTClient</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-declaration-color)">new</span> <span style="color:var(--syntax-name-color)">ChatGPTClient</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">apiKey</span><span style="color:var(--syntax-text-color)">);</span>

                <span style="color:var(--syntax-comment-color)">// Display a welcome message</span>
                <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">WriteLine</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"Welcome to the ChatGPT chatbot! Type 'exit' to quit."</span><span style="color:var(--syntax-text-color)">);</span>

                <span style="color:var(--syntax-comment-color)">// Enter a loop to take user input and display chatbot responses</span>
                <span style="color:var(--syntax-declaration-color)">while</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-declaration-color)">true</span><span style="color:var(--syntax-text-color)">)</span>
                <span style="color:var(--syntax-text-color)">{</span>
                    <span style="color:var(--syntax-comment-color)">// Prompt the user for input</span>
                    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">ForegroundColor</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-text-color)">ConsoleColor</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">Green</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-comment-color)">// Set text color to green</span>
                    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">Write</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"You: "</span><span style="color:var(--syntax-text-color)">);</span>
                    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">ResetColor</span><span style="color:var(--syntax-text-color)">();</span> <span style="color:var(--syntax-comment-color)">// Reset text color to default</span>
                    <span style="color:var(--syntax-declaration-color)">string</span> <span style="color:var(--syntax-text-color)">input</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">ReadLine</span><span style="color:var(--syntax-text-color)">()</span> <span style="color:var(--syntax-text-color)">??</span> <span style="color:var(--syntax-declaration-color)">string</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">Empty</span><span style="color:var(--syntax-text-color)">;</span>

                    <span style="color:var(--syntax-comment-color)">// Exit the loop if the user types "exit"</span>
                    <span style="color:var(--syntax-declaration-color)">if</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">input</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">ToLower</span><span style="color:var(--syntax-text-color)">()</span> <span style="color:var(--syntax-text-color)">==</span> <span style="color:var(--syntax-string-color)">"exit"</span><span style="color:var(--syntax-text-color)">)</span>
                        <span style="color:var(--syntax-declaration-color)">break</span><span style="color:var(--syntax-text-color)">;</span>

                    <span style="color:var(--syntax-comment-color)">// Send the user's input to the ChatGPT API and receive a response</span>
                    <span style="color:var(--syntax-declaration-color)">string</span> <span style="color:var(--syntax-text-color)">response</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-text-color)">chatGPTClient</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">SendMessage</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">input</span><span style="color:var(--syntax-text-color)">);</span>

                    <span style="color:var(--syntax-comment-color)">// Display the chatbot's response</span>
                    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">ForegroundColor</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-text-color)">ConsoleColor</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">Blue</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-comment-color)">// Set text color to blue</span>
                    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">Write</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"Chatbot: "</span><span style="color:var(--syntax-text-color)">);</span>
                    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">ResetColor</span><span style="color:var(--syntax-text-color)">();</span> <span style="color:var(--syntax-comment-color)">// Reset text color to default</span>
                    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">WriteLine</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">response</span><span style="color:var(--syntax-text-color)">);</span>
                <span style="color:var(--syntax-text-color)">}</span>
            <span style="color:var(--syntax-text-color)">}</span>
        <span style="color:var(--syntax-text-color)">}</span>
</code></span></span></span></span>

在这里,我们创建了一个ChatGPTClient使用 API 密钥的实例,然后进入一个循环,该循环接受用户输入,将其发送到 ChatGPT API,并打印聊天机器人的响应。

测试和增强您的 ChatGPT 聊天机器人

现在我们已经实现了聊天机器人,让我们测试并增强它。

测试你的聊天机器人

要测试您的聊天机器人,只需运行您的 C# 项目。您应该会看到一个控制台窗口,您可以在其中键入消息并接收来自 ChatGPT 聊天机器人的响应。

处理错误和边缘情况

处理聊天机器人中的错误和边缘情况非常重要。例如,您可以检查空输入、为 API 请求添加错误处理或为长时间运行的请求实施超时。

<span style="color:#171717"><span style="background-color:#ffffff"><span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">public</span> <span style="color:var(--syntax-declaration-color)">string</span> <span style="color:var(--syntax-name-color)">SendMessage</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-declaration-color)">string</span> <span style="color:var(--syntax-text-color)">message</span><span style="color:var(--syntax-text-color)">)</span>
<span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-comment-color)">// Check for empty input</span>
    <span style="color:var(--syntax-declaration-color)">if</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-declaration-color)">string</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">IsNullOrWhiteSpace</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">message</span><span style="color:var(--syntax-text-color)">))</span>
    <span style="color:var(--syntax-text-color)">{</span>
        <span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-string-color)">"Sorry, I didn't receive any input. Please try again!"</span><span style="color:var(--syntax-text-color)">;</span>
    <span style="color:var(--syntax-text-color)">}</span>

    <span style="color:var(--syntax-declaration-color)">try</span>
    <span style="color:var(--syntax-text-color)">{</span>
        <span style="color:var(--syntax-comment-color)">// The rest of the SendMessage method implementation...</span>
    <span style="color:var(--syntax-text-color)">}</span>
    <span style="color:var(--syntax-declaration-color)">catch</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">Exception</span> <span style="color:var(--syntax-text-color)">ex</span><span style="color:var(--syntax-text-color)">)</span>
    <span style="color:var(--syntax-text-color)">{</span>
        <span style="color:var(--syntax-comment-color)">// Handle any exceptions that may occur during the API request</span>
        <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">WriteLine</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">$"Error: </span><span style="color:var(--syntax-text-color)">{</span><span style="color:var(--syntax-text-color)">ex</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">Message</span><span style="color:var(--syntax-text-color)">}</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">);</span>
        <span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-string-color)">"Sorry, there was an error processing your request. Please try again later."</span><span style="color:var(--syntax-text-color)">;</span>
    <span style="color:var(--syntax-text-color)">}</span>
<span style="color:var(--syntax-text-color)">}</span>
</code></span></span></span></span>

改善用户体验

考虑以下技巧来增强聊天机器人的可用性:

  • 添加帮助命令以提供有关使用聊天机器人的指导。
<span style="color:#171717"><span style="background-color:#ffffff"><span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-comment-color)">// Enter a loop to take user input and display chatbot responses</span>
<span style="color:var(--syntax-declaration-color)">while</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-declaration-color)">true</span><span style="color:var(--syntax-text-color)">)</span>
<span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-comment-color)">// Prompt the user for input</span>
    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">ForegroundColor</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-text-color)">ConsoleColor</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">Green</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-comment-color)">// Set text color to green</span>
    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">Write</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"You: "</span><span style="color:var(--syntax-text-color)">);</span>
    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">ResetColor</span><span style="color:var(--syntax-text-color)">();</span> <span style="color:var(--syntax-comment-color)">// Reset text color to default</span>
    <span style="color:var(--syntax-declaration-color)">string</span> <span style="color:var(--syntax-text-color)">input</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">ReadLine</span><span style="color:var(--syntax-text-color)">()</span> <span style="color:var(--syntax-text-color)">??</span> <span style="color:var(--syntax-declaration-color)">string</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">Empty</span><span style="color:var(--syntax-text-color)">;</span>

    <span style="color:var(--syntax-comment-color)">// Exit the loop if the user types "exit"</span>
    <span style="color:var(--syntax-declaration-color)">if</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">input</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">ToLower</span><span style="color:var(--syntax-text-color)">()</span> <span style="color:var(--syntax-text-color)">==</span> <span style="color:var(--syntax-string-color)">"exit"</span><span style="color:var(--syntax-text-color)">)</span>
        <span style="color:var(--syntax-declaration-color)">break</span><span style="color:var(--syntax-text-color)">;</span>

    <span style="color:var(--syntax-comment-color)">// Display help message if the user types "help"</span>
    <span style="color:var(--syntax-declaration-color)">if</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">input</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">ToLower</span><span style="color:var(--syntax-text-color)">()</span> <span style="color:var(--syntax-text-color)">==</span> <span style="color:var(--syntax-string-color)">"help"</span><span style="color:var(--syntax-text-color)">)</span>
    <span style="color:var(--syntax-text-color)">{</span>
        <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">WriteLine</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"Chatbot commands:"</span><span style="color:var(--syntax-text-color)">);</span>
        <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">WriteLine</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"- Type your message to chat with the bot."</span><span style="color:var(--syntax-text-color)">);</span>
        <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">WriteLine</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"- Type 'exit' to quit the chat."</span><span style="color:var(--syntax-text-color)">);</span>
        <span style="color:var(--syntax-declaration-color)">continue</span><span style="color:var(--syntax-text-color)">;</span>
    <span style="color:var(--syntax-text-color)">}</span>

    <span style="color:var(--syntax-comment-color)">// Send the user's input to the ChatGPT API and receive a response</span>
    <span style="color:var(--syntax-declaration-color)">string</span> <span style="color:var(--syntax-text-color)">response</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-text-color)">chatGPTClient</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">SendMessage</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">input</span><span style="color:var(--syntax-text-color)">);</span>

    <span style="color:var(--syntax-comment-color)">// Display the chatbot's response</span>
    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">ForegroundColor</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-text-color)">ConsoleColor</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">Blue</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-comment-color)">// Set text color to blue</span>
    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">Write</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"Chatbot: "</span><span style="color:var(--syntax-text-color)">);</span>
    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">ResetColor</span><span style="color:var(--syntax-text-color)">();</span> <span style="color:var(--syntax-comment-color)">// Reset text color to default</span>
    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">WriteLine</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">response</span><span style="color:var(--syntax-text-color)">);</span>
<span style="color:var(--syntax-text-color)">}</span>
</code></span></span></span></span>
  • 通过维护消息之间的上下文来实现更自然的对话流。
<span style="color:#171717"><span style="background-color:#ffffff"><span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">private</span> <span style="color:var(--syntax-declaration-color)">string</span> <span style="color:var(--syntax-text-color)">_conversationHistory</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-declaration-color)">string</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">Empty</span><span style="color:var(--syntax-text-color)">;</span>

<span style="color:var(--syntax-declaration-color)">public</span> <span style="color:var(--syntax-declaration-color)">string</span> <span style="color:var(--syntax-name-color)">SendMessage</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-declaration-color)">string</span> <span style="color:var(--syntax-text-color)">message</span><span style="color:var(--syntax-text-color)">)</span>
<span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-comment-color)">// Check for empty input</span>
    <span style="color:var(--syntax-declaration-color)">if</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-declaration-color)">string</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">IsNullOrWhiteSpace</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">message</span><span style="color:var(--syntax-text-color)">))</span>
    <span style="color:var(--syntax-text-color)">{</span>
        <span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-string-color)">"Sorry, I didn't receive any input. Please try again!"</span><span style="color:var(--syntax-text-color)">;</span>
    <span style="color:var(--syntax-text-color)">}</span>

    <span style="color:var(--syntax-comment-color)">// Update the conversation history with the user's message</span>
    <span style="color:var(--syntax-text-color)">_conversationHistory</span> <span style="color:var(--syntax-text-color)">+=</span> <span style="color:var(--syntax-string-color)">$"User: </span><span style="color:var(--syntax-text-color)">{</span><span style="color:var(--syntax-text-color)">message</span><span style="color:var(--syntax-text-color)">}</span><span style="color:var(--syntax-string-color)">\n"</span><span style="color:var(--syntax-text-color)">;</span>

    <span style="color:var(--syntax-comment-color)">// ... (the rest of the SendMessage method remains unchanged)</span>

    <span style="color:var(--syntax-comment-color)">// Deserialize the response JSON content</span>
    <span style="color:var(--syntax-declaration-color)">var</span> <span style="color:var(--syntax-text-color)">jsonResponse</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-text-color)">JsonConvert</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">DeserializeObject</span><span style="color:var(--syntax-text-color)"><</span><span style="color:var(--syntax-declaration-color)">dynamic</span><span style="color:var(--syntax-text-color)">>(</span><span style="color:var(--syntax-text-color)">response</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">Content</span> <span style="color:var(--syntax-text-color)">??</span> <span style="color:var(--syntax-declaration-color)">string</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">Empty</span><span style="color:var(--syntax-text-color)">);</span>

    <span style="color:var(--syntax-comment-color)">// Extract and return the chatbot's response text</span>
    <span style="color:var(--syntax-declaration-color)">string</span> <span style="color:var(--syntax-text-color)">chatbotResponse</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-text-color)">jsonResponse</span><span style="color:var(--syntax-text-color)">?.</span><span style="color:var(--syntax-text-color)">choices</span><span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-literal-color)">0</span><span style="color:var(--syntax-text-color)">]?.</span><span style="color:var(--syntax-text-color)">text</span><span style="color:var(--syntax-text-color)">?.</span><span style="color:var(--syntax-name-color)">ToString</span><span style="color:var(--syntax-text-color)">()?.</span><span style="color:var(--syntax-name-color)">Trim</span><span style="color:var(--syntax-text-color)">()</span> <span style="color:var(--syntax-text-color)">??</span> <span style="color:var(--syntax-declaration-color)">string</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">Empty</span><span style="color:var(--syntax-text-color)">;</span>

    <span style="color:var(--syntax-comment-color)">// Update the conversation history with the chatbot's response</span>
    <span style="color:var(--syntax-text-color)">_conversationHistory</span> <span style="color:var(--syntax-text-color)">+=</span> <span style="color:var(--syntax-string-color)">$"Chatbot: </span><span style="color:var(--syntax-text-color)">{</span><span style="color:var(--syntax-text-color)">chatbotResponse</span><span style="color:var(--syntax-text-color)">}</span><span style="color:var(--syntax-string-color)">\n"</span><span style="color:var(--syntax-text-color)">;</span>

    <span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-text-color)">chatbotResponse</span><span style="color:var(--syntax-text-color)">;</span>
<span style="color:var(--syntax-text-color)">}</span>
</code></span></span></span></span>
  • 使用更丰富的格式或用户界面元素来提高可读性。
<span style="color:#171717"><span style="background-color:#ffffff"><span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-comment-color)">// Enter a loop to take user input and display chatbot responses</span>
<span style="color:var(--syntax-declaration-color)">while</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-declaration-color)">true</span><span style="color:var(--syntax-text-color)">)</span>
<span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-comment-color)">// Prompt the user for input</span>
    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">ForegroundColor</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-text-color)">ConsoleColor</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">Green</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-comment-color)">// Set text color to green</span>
    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">Write</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"You: "</span><span style="color:var(--syntax-text-color)">);</span>
    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">ResetColor</span><span style="color:var(--syntax-text-color)">();</span> <span style="color:var(--syntax-comment-color)">// Reset text color to default</span>
    <span style="color:var(--syntax-declaration-color)">string</span> <span style="color:var(--syntax-text-color)">input</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">ReadLine</span><span style="color:var(--syntax-text-color)">()</span> <span style="color:var(--syntax-text-color)">??</span> <span style="color:var(--syntax-declaration-color)">string</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">Empty</span><span style="color:var(--syntax-text-color)">;</span>

    <span style="color:var(--syntax-comment-color)">// ... (handle 'exit' and 'help' commands as before)</span>

    <span style="color:var(--syntax-comment-color)">// Send the user's input to the ChatGPT API and receive a response</span>
    <span style="color:var(--syntax-declaration-color)">string</span> <span style="color:var(--syntax-text-color)">response</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-text-color)">chatGPTClient</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">SendMessage</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">input</span><span style="color:var(--syntax-text-color)">);</span>

    <span style="color:var(--syntax-comment-color)">// Display the chatbot's response</span>
    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">ForegroundColor</span> <span style="color:var(--syntax-text-color)">=</span> <span style="color:var(--syntax-text-color)">ConsoleColor</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-text-color)">Blue</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-comment-color)">// Set text color to blue</span>
    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">Write</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"Chatbot: "</span><span style="color:var(--syntax-text-color)">);</span>
    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">ResetColor</span><span style="color:var(--syntax-text-color)">();</span> <span style="color:var(--syntax-comment-color)">// Reset text color to default</span>
    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">WriteLine</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-text-color)">response</span><span style="color:var(--syntax-text-color)">);</span>

    <span style="color:var(--syntax-comment-color)">// Add a separator and some line breaks</span>
    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">WriteLine</span><span style="color:var(--syntax-text-color)">();</span>
    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">WriteLine</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-string-color)">"------------------------------------------------"</span><span style="color:var(--syntax-text-color)">);</span>
    <span style="color:var(--syntax-text-color)">Console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">WriteLine</span><span style="color:var(--syntax-text-color)">();</span>
<span style="color:var(--syntax-text-color)">}</span>
</code></span></span></span></span>

部署您的 ChatGPT 聊天机器人

一旦您对聊天机器人感到满意,就可以部署它了。

部署选项

有多种方法可以部署 C# 聊天机器人,例如:

  1. Web 应用程序:使用 ASP.NET Core 创建一个 Web 应用程序并将聊天机器人嵌入其中。这可以通过为聊天机器人交互创建 API 端点并使用 JavaScript处理用户输入并在浏览器中显示聊天机器人响应来完成。示例项目结构:
  • ChatGPTWebApp: 主 ASP.NET Core 项目
  • ChatGPTWebApp/Controllers:包含用于聊天机器人交互的 API 控制器
  • ChatGPTWebApp/wwwroot: 包含前端的 HTML、CSS 和 JavaScript 文件
  • ChatGPTClient: 现有的 ChatGPT 客户端类
  1. 消息平台:将聊天机器人集成到 Slack 或 Microsoft Teams 等消息平台中。这涉及在所需平台上创建机器人应用程序、配置必要的身份验证和事件处理,以及将 ChatGPT API 连接到机器人的消息处理逻辑。

Slack 机器人的示例项目结构:

  • ChatGPTSlackBot: 主要机器人项目
  • ChatGPTSlackBot/Controllers:包含用于处理 Slack 事件的 API 控制器
  • ChatGPTSlackBot/Services:包含用于处理 Slack API 交互的服务
  • ChatGPTClient:现有的 ChatGPT 客户端类 您需要遵循平台的文档来创建和配置您的机器人,例如Slack 的 API 文档。
  1. 桌面应用程序:使用 WPF 或 WinForms 开发桌面应用程序。这涉及为聊天机器人创建图形用户界面 (GUI)、处理用户输入和显示聊天机器人响应。WPF 应用程序的示例项目结构:
  • ChatGPTWPFApp: 主 WPF 项目
  • ChatGPTWPFApp/Views:包含 GUI 的 XAML 文件
  • ChatGPTWPFApp/ViewModels: 包含用于数据绑定的 ViewModel 类
  • ChatGPTClient: 现有的 ChatGPT 客户端类

选择最适合您的需求和目标受众的部署选项。

将聊天机器人集成到您现有的应用程序中

如果您已有 C# 应用程序,则可以通过添加类ChatGPTClient并调整用户界面以适应聊天机器人交互来集成 ChatGPT 聊天机器人。

例如,如果您有一个现有的 WPF 应用程序,您可以按照以下步骤操作:

  1. 将类添加ChatGPTClient到您的项目中。
  2. 为聊天机器人界面创建一个新的 UserControl。这可能包括用于用户输入的 TextBox、用于发送消息的 Button 以及用于显示对话的 ListBox 或 ScrollView。
  3. 在您的 ViewModel 中实施必要的数据绑定和事件处理,以将用户输入发送到 ChatGPT API 并显示聊天机器人的响应。
  4. 将聊天机器人 UserControl 添加到您的主应用程序窗口或导航结构。

请记住根据现有应用程序的特定框架或架构调整这些步骤。

结论和未来的可能性

恭喜!您已使用 C# 构建了 ChatGPT 聊天机器人。我们介绍了设置 ChatGPT API 访问、创建 C# 项目、集成 API、测试、增强和部署聊天机器人。

有许多方法可以扩展和改进您的聊天机器人,例如添加更多功能、改进对话流或与其他 API 集成。可能性是无止境。编码愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/623463.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day4 ARM异常处理

目录 异常 概念 处理机制 ARM异常源 ARM异常模式 ARM异常响应 异常向量表 FIQ和IRQ ARM微架构 指令流水线 多核处理器 异常 概念 处理器在正常执行程序的过程中可能会遇到一些不正常的事件发生这时处理器就要将当前的程序暂停下来转而去处理这个异常的时间异常事件处…

为什么CRM一定要走行业化?

很多企业、很多销售对CRM的负面评价集中在不够贴合行业、不人性化&#xff0c;也就是功能不够细分和实用。因为CRM几乎是所有企业管理系统中最贴近业务实际的&#xff0c;但各行各业的业务千差万别&#xff0c;所以功能完备、使用满意度高的CRM一定是深度行业化、与不同行业业务…

计算机网络第三章——数据链路层(上)

提示&#xff1a;节物风光不相待。桑田碧海须臾改 文章目录 前言3.1.1 数据链路层功能数据链路层功能概述 3.2.1 封装成帧和透明传输封装成帧透明传输组帧的四种方式字符计数法字符填充法零比特填充法违规编码法 3.3.1 差错控制&#xff08;检错编码&#xff09;奇偶校验码CRC循…

【编程语言 · C语言 · while语句】

​while 语句 循环 在前面我们了解到, 程序在运行时可以通过判断, 检验条件作出选择。此处&#xff0c;程序还必须能够重复&#xff0c; 也就是反复执行一段指令&#xff0c; 直到满足某个条件为止。 while 语句 while语句可以执行循环结构。 语法&#xff1a; while(表达…

6.8 互斥锁/读写锁的概念及使用、死锁的避免

目录 线程通讯-互斥 互斥锁初始化-pthread_mutex_init 互斥锁销毁pthread_mutex_destroy 申请锁-pthread_mutex_lock 释放锁-pthread_mutex_unlock 读写锁 死锁的避免 ​编辑 条件变量 线程的GDB调试 笔记 线程的互斥和同步 临界资源概念&#xff1a; 互斥锁的创…

在京东待了几年,感觉自己废了····

在一家公司待久了技术能力反而变弱了&#xff0c;原来的许多知识都会慢慢遗忘&#xff0c;这种情况并不少见。 一个京东员工发帖吐槽&#xff1a;感觉在大厂快待废了&#xff0c;出去面试问自己接口环境搭建、pytest测试框架&#xff0c;自己做点工太久都忘记了。平时用的时候…

【功能超全】基于OpenCV车牌识别停车场管理系统软件开发【含python源码+PyqtUI界面+功能详解】-车牌识别python 深度学习实战项目

车牌识别基础功能演示 摘要&#xff1a;车牌识别系统(Vehicle License Plate Recognition&#xff0c;VLPR) 是指能够检测到受监控路面的车辆并自动提取车辆牌照信息&#xff08;含汉字字符、英文字母、阿拉伯数字及号牌颜色&#xff09;进行处理的技术。车牌识别是现代智能交通…

FMC子卡设计方案原理图:两路250Msps AD、两路600Msps DA FMC子卡

一、板卡概述 ADC采用TI的ADS62P49&#xff0c;2通道250M&#xff0c;14bit&#xff0c;共1片&#xff1b; DAC采用ADI的AD9122&#xff0c;2通道&#xff0c;16bit&#xff0c;可达1.2G&#xff0c;共1片&#xff1b; 时钟采用AD9516&#xff0c;支持板上时钟和外接时钟…

驱动--自动创建设备节点

自动创建设备节点 头文件&#xff1a;#include <linux/device.h> 自动创建设备节点&#xff1a; struct class *cls; cls class_create(owner, name) /void class_destroy(struct class *cls) 功能&#xff1a;向用户空间提交目录信息 参数&#xff1a; owner :THIS_MOD…

打卡有礼!快来 2023 开放原子全球开源峰会找龙蜥玩~

回望过去&#xff0c; 2022 年开放原子全球开源峰会上&#xff0c;龙蜥社区携新一届理事成员以及 18 位产学研大咖重磅亮相&#xff0c;社区论坛及展区更是吸引了近 1400 位参会者参与互动&#xff0c;现场热闹非凡。再看今朝&#xff0c;2023 年开放原子全球开源峰会举办在即&…

淘宝618每日一猜答案(6月8日)明星孙怡最喜欢的显瘦单品?

淘宝6月8日每日一猜答案是什么&#xff1f;&#xff0c;接下来也会给大家来介绍一下6月8日淘宝大赢家每日一猜的答案。 淘宝每日一猜6月8日答案分享 活动问题&#xff1a;明星孙怡最喜欢的显瘦单品&#xff1f; 活动答案&#xff1a;【鲨鱼裤】 还有打开手机淘宝&#xff0c…

Java 高效处理千万级数据:技巧与最佳实践

引言 这篇文章主要为大家简单介绍 Java 如何处理千万级数据&#xff0c; 随着大数据时代的到来&#xff0c;数据量持续呈现爆炸式增长。在这种背景下&#xff0c;如何快速、高效地处理和分析千万级甚至更大规模的数据&#xff0c;成为企业和开发者面临的重要挑战。处理大数据…

通过Typora,以CSDN作为图床、解决CSDN防盗链问题、将CSDN博客搬到hexo上

完美将csdn的md(包括图片)复制到hexo上 其实主要就是复制图片&#xff0c;因为csdn有防盗链&#xff0c;自己的hexo上不能拉取csdn上的图片资源 1. 安装Typora Typora作为本地的md编辑器&#xff0c;有在复制网络图片时&#xff0c;直接将其保存到本地的能力&#xff0c;我们…

集权攻防——身份认证协议之NTLM

在Kerberos出现之前&#xff0c;NTLM被广泛应用于工作组和域环境&#xff0c;是更早的用于对用户进行身份验证的协议。 相比于Kerberos&#xff0c;NTLM的认证原理比较简单&#xff0c;主要通过对比客户端和服务端加密后的数据&#xff0c;判断其是否一致&#xff0c;以确定用…

浅析Spring生命周期

前言 Spring框架是一个非常流行的Java企业级应用程序框架&#xff0c;已经成为许多生产环境中的首选技术。它提供了一种便捷的方法来帮助开发人员构建可扩展和模块化的企业级应用程序。在Spring框架中&#xff0c;Bean生命周期是非常重要的一部分&#xff0c;它负责Bean的创建…

【教程】ChuanhuChatGPT本地化部署支持多语言模型支持上传分析文档附件的GPT

原文&#xff1a;【教程】本地化部署支持多语言模型支持上传分析文档附件的GPT_腾讯新闻 说明 该项目要是为 ChatGPT API 和其他多种语言模型&#xff08;Language Language Models&#xff0c;简称 LLM&#xff09;提供一个用户友好的 Web 图形界面(GUI)。这个项目的 GUI 支…

# 文盘Rust -- tokio绑定cpu实践

作者&#xff1a; jiashiwen 原文来源&#xff1a; https://tidb.net/blog/18804515 notice"Rust is a trademark of the Mozilla Foundation in the US and other countries." tokio 是 rust 生态中流行的异步运行时框架。在实际生产中我们如果希望 tokio 应用程…

AI浪潮下,企业如何保障数据安全,不泄露

随着数字经济蓬勃发展&#xff0c;数据对于企业的价值与重要性不断攀升&#xff0c;随之而来的数据安全风险也不断涌现。再加上ChatGPT诞生&#xff0c;推动ai算力技术大步跃进&#xff0c;而算力提升的背后是史诗量级规模的数据投入&#xff0c;数据量越大&#xff0c;用户数据…

函数调用的机器级表示

文章目录 1.Call和ret指令2. 如何访问栈帧里面的数据为什么栈底放在上面&#xff0c;栈顶放在下面X86中的寄存器EBP、ESP寄存器push 、pop 指令mov 指令总结如何访问栈帧 3. 如何切换栈帧函数调用时函数返回时 4. 完整的函数调用过程1. 一个函数的栈帧内包含哪些内容2. 汇编代码…

配置数据库

&#x1f333;&#x1f333;&#x1f333;前言&#xff1a;下载数据库&#xff0c;安装配置数据库&#xff0c;连接Navicat 又又又重新配置数据库害。 目录 一、下载数据库 二、安装 三、解决3306端口占用 四、验证 五、连接Navicat 一、下载数据库 官方链接&#xff1a;M…