受欢迎的博客标签

How LLM works(LLamaSharp)?c# .Net

Published

 

namespace appLLama
{
    internal class Program
    {
        static void Main<span class="token punctuation">(</span>string<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span>
        {
            Chart<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        }


        static async Task Chart<span class="token punctuation">(</span><span class="token punctuation">)</span>
        {
            string modelPath <span class="token operator">=</span> <span class="token variable">@"E:\Models\llama-2-7b-chat.Q4_K_M.gguf"</span><span class="token punctuation">;</span> <span class="token comment">// change it to your own model path.</span>


            var parameters <span class="token operator">=</span> new ModelParams<span class="token punctuation">(</span>modelPath<span class="token punctuation">)</span>
            {
                ContextSize <span class="token operator">=</span> <span class="token number">1024</span><span class="token punctuation">,</span> <span class="token comment">// The longest length of chat as memory.</span>
                GpuLayerCount <span class="token operator">=</span> <span class="token number">5</span> <span class="token comment">// How many layers to offload to GPU. Please adjust it according to your GPU memory.</span>
            }<span class="token punctuation">;</span>
            <span class="token keyword">using</span> var model <span class="token operator">=</span> LLamaWeights<span class="token punctuation">.</span>LoadFromFile<span class="token punctuation">(</span>parameters<span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token keyword">using</span> var context <span class="token operator">=</span> model<span class="token punctuation">.</span>CreateContext<span class="token punctuation">(</span>parameters<span class="token punctuation">)</span><span class="token punctuation">;</span>
            var executor <span class="token operator">=</span> new InteractiveExecutor<span class="token punctuation">(</span>context<span class="token punctuation">)</span><span class="token punctuation">;</span>


            <span class="token comment">// Add chat histories as prompt to tell AI how to act.</span>
            var chatHistory <span class="token operator">=</span> new ChatHistory<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            chatHistory<span class="token punctuation">.</span>AddMessage<span class="token punctuation">(</span>AuthorRole<span class="token punctuation">.</span>System<span class="token punctuation">,</span> <span class="token string">"Transcript of a dialog, where the User interacts with an Assistant named Bob. Bob is helpful, kind, honest, good at writing, and never fails to answer the User's requests immediately and with precision."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            chatHistory<span class="token punctuation">.</span>AddMessage<span class="token punctuation">(</span>AuthorRole<span class="token punctuation">.</span><span class="token keyword">User</span><span class="token punctuation">,</span> <span class="token string">"Hello, Bob."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            chatHistory<span class="token punctuation">.</span>AddMessage<span class="token punctuation">(</span>AuthorRole<span class="token punctuation">.</span>Assistant<span class="token punctuation">,</span> <span class="token string">"Hello. How may I help you today?"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>


            ChatSession <span class="token keyword">session</span> <span class="token operator">=</span> new<span class="token punctuation">(</span>executor<span class="token punctuation">,</span> chatHistory<span class="token punctuation">)</span><span class="token punctuation">;</span>


            InferenceParams inferenceParams <span class="token operator">=</span> new InferenceParams<span class="token punctuation">(</span><span class="token punctuation">)</span>
            {
                MaxTokens <span class="token operator">=</span> <span class="token number">256</span><span class="token punctuation">,</span> <span class="token comment">// No more than 256 tokens should appear in answer. Remove it if antiprompt is enough for control.</span>
                AntiPrompts <span class="token operator">=</span> new List<span class="token operator">&lt;</span>string<span class="token operator">&gt;</span> { <span class="token string">"User:"</span> } <span class="token comment">// Stop generation once antiprompts appear.</span>
            }<span class="token punctuation">;</span>


            Console<span class="token punctuation">.</span>ForegroundColor <span class="token operator">=</span> ConsoleColor<span class="token punctuation">.</span>Yellow<span class="token punctuation">;</span>
            Console<span class="token punctuation">.</span><span class="token keyword">Write</span><span class="token punctuation">(</span><span class="token string">"The chat session has started.\nUser: "</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            Console<span class="token punctuation">.</span>ForegroundColor <span class="token operator">=</span> ConsoleColor<span class="token punctuation">.</span>Green<span class="token punctuation">;</span>
            string userInput <span class="token operator">=</span> Console<span class="token punctuation">.</span>ReadLine<span class="token punctuation">(</span><span class="token punctuation">)</span> ?? <span class="token string">""</span><span class="token punctuation">;</span>


            <span class="token keyword">while</span> <span class="token punctuation">(</span>userInput <span class="token operator">!=</span> <span class="token string">"exit"</span><span class="token punctuation">)</span>
            {
                await foreach <span class="token punctuation">(</span> <span class="token comment">// Generate the response streamingly.</span>
                    var <span class="token keyword">text</span>
                    <span class="token operator">in</span> <span class="token keyword">session</span><span class="token punctuation">.</span>ChatAsync<span class="token punctuation">(</span>
                        new ChatHistory<span class="token punctuation">.</span>Message<span class="token punctuation">(</span>AuthorRole<span class="token punctuation">.</span><span class="token keyword">User</span><span class="token punctuation">,</span> userInput<span class="token punctuation">)</span><span class="token punctuation">,</span>
                        inferenceParams<span class="token punctuation">)</span><span class="token punctuation">)</span>
                {
                    Console<span class="token punctuation">.</span>ForegroundColor <span class="token operator">=</span> ConsoleColor<span class="token punctuation">.</span>White<span class="token punctuation">;</span>
                    Console<span class="token punctuation">.</span><span class="token keyword">Write</span><span class="token punctuation">(</span><span class="token keyword">text</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                }
                Console<span class="token punctuation">.</span>ForegroundColor <span class="token operator">=</span> ConsoleColor<span class="token punctuation">.</span>Green<span class="token punctuation">;</span>
                userInput <span class="token operator">=</span> Console<span class="token punctuation">.</span>ReadLine<span class="token punctuation">(</span><span class="token punctuation">)</span> ?? <span class="token string">""</span><span class="token punctuation">;</span>
            }
        }
    }
}

 

<pre class="has-pre-numbering language-sql" tabindex="0"><code class="language-sql"><span class="token keyword">using</span> LLama<span class="token punctuation">.</span>Common<span class="token punctuation">;</span>
<span class="token keyword">using</span> LLama<span class="token punctuation">;</span>


namespace appLLama
{
    internal class Program
    {
        static void Main<span class="token punctuation">(</span>string<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span>
        {
            Chart<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        }


        static async Task Chart<span class="token punctuation">(</span><span class="token punctuation">)</span>
        {
            string modelPath <span class="token operator">=</span> <span class="token variable">@"E:\Models\llama-2-7b-chat.Q4_K_M.gguf"</span><span class="token punctuation">;</span> <span class="token comment">// change it to your own model path.</span>


            var parameters <span class="token operator">=</span> new ModelParams<span class="token punctuation">(</span>modelPath<span class="token punctuation">)</span>
            {
                ContextSize <span class="token operator">=</span> <span class="token number">1024</span><span class="token punctuation">,</span> <span class="token comment">// The longest length of chat as memory.</span>
                GpuLayerCount <span class="token operator">=</span> <span class="token number">5</span> <span class="token comment">// How many layers to offload to GPU. Please adjust it according to your GPU memory.</span>
            }<span class="token punctuation">;</span>
            <span class="token keyword">using</span> var model <span class="token operator">=</span> LLamaWeights<span class="token punctuation">.</span>LoadFromFile<span class="token punctuation">(</span>parameters<span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token keyword">using</span> var context <span class="token operator">=</span> model<span class="token punctuation">.</span>CreateContext<span class="token punctuation">(</span>parameters<span class="token punctuation">)</span><span class="token punctuation">;</span>
            var executor <span class="token operator">=</span> new InteractiveExecutor<span class="token punctuation">(</span>context<span class="token punctuation">)</span><span class="token punctuation">;</span>


            <span class="token comment">// Add chat histories as prompt to tell AI how to act.</span>
            var chatHistory <span class="token operator">=</span> new ChatHistory<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            chatHistory<span class="token punctuation">.</span>AddMessage<span class="token punctuation">(</span>AuthorRole<span class="token punctuation">.</span>System<span class="token punctuation">,</span> <span class="token string">"Transcript of a dialog, where the User interacts with an Assistant named Bob. Bob is helpful, kind, honest, good at writing, and never fails to answer the User's requests immediately and with precision."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            chatHistory<span class="token punctuation">.</span>AddMessage<span class="token punctuation">(</span>AuthorRole<span class="token punctuation">.</span><span class="token keyword">User</span><span class="token punctuation">,</span> <span class="token string">"Hello, Bob."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            chatHistory<span class="token punctuation">.</span>AddMessage<span class="token punctuation">(</span>AuthorRole<span class="token punctuation">.</span>Assistant<span class="token punctuation">,</span> <span class="token string">"Hello. How may I help you today?"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>


            ChatSession <span class="token keyword">session</span> <span class="token operator">=</span> new<span class="token punctuation">(</span>executor<span class="token punctuation">,</span> chatHistory<span class="token punctuation">)</span><span class="token punctuation">;</span>


            InferenceParams inferenceParams <span class="token operator">=</span> new InferenceParams<span class="token punctuation">(</span><span class="token punctuation">)</span>
            {
                MaxTokens <span class="token operator">=</span> <span class="token number">256</span><span class="token punctuation">,</span> <span class="token comment">// No more than 256 tokens should appear in answer. Remove it if antiprompt is enough for control.</span>
                AntiPrompts <span class="token operator">=</span> new List<span class="token operator">&lt;</span>string<span class="token operator">&gt;</span> { <span class="token string">"User:"</span> } <span class="token comment">// Stop generation once antiprompts appear.</span>
            }<span class="token punctuation">;</span>


            Console<span class="token punctuation">.</span>ForegroundColor <span class="token operator">=</span> ConsoleColor<span class="token punctuation">.</span>Yellow<span class="token punctuation">;</span>
            Console<span class="token punctuation">.</span><span class="token keyword">Write</span><span class="token punctuation">(</span><span class="token string">"The chat session has started.\nUser: "</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            Console<span class="token punctuation">.</span>ForegroundColor <span class="token operator">=</span> ConsoleColor<span class="token punctuation">.</span>Green<span class="token punctuation">;</span>
            string userInput <span class="token operator">=</span> Console<span class="token punctuation">.</span>ReadLine<span class="token punctuation">(</span><span class="token punctuation">)</span> ?? <span class="token string">""</span><span class="token punctuation">;</span>


            <span class="token keyword">while</span> <span class="token punctuation">(</span>userInput <span class="token operator">!=</span> <span class="token string">"exit"</span><span class="token punctuation">)</span>
            {
                await foreach <span class="token punctuation">(</span> <span class="token comment">// Generate the response streamingly.</span>
                    var <span class="token keyword">text</span>
                    <span class="token operator">in</span> <span class="token keyword">session</span><span class="token punctuation">.</span>ChatAsync<span class="token punctuation">(</span>
                        new ChatHistory<span class="token punctuation">.</span>Message<span class="token punctuation">(</span>AuthorRole<span class="token punctuation">.</span><span class="token keyword">User</span><span class="token punctuation">,</span> userInput<span class="token punctuation">)</span><span class="token punctuation">,</span>
                        inferenceParams<span class="token punctuation">)</span><span class="token punctuation">)</span>
                {
                    Console<span class="token punctuation">.</span>ForegroundColor <span class="token operator">=</span> ConsoleColor<span class="token punctuation">.</span>White<span class="token punctuation">;</span>
                    Console<span class="token punctuation">.</span><span class="token keyword">Write</span><span class="token punctuation">(</span><span class="token keyword">text</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                }
                Console<span class="token punctuation">.</span>ForegroundColor <span class="token operator">=</span> ConsoleColor<span class="token punctuation">.</span>Green<span class="token punctuation">;</span>
                userInput <span class="token operator">=</span> Console<span class="token punctuation">.</span>ReadLine<span class="token punctuation">(</span><span class="token punctuation">)</span> ?? <span class="token string">""</span><span class="token punctuation">;</span>
            }
        }
    }
}</code><ul class="pre-numbering" id="code_id_3" style="display: block;"><li>1.</li><li>2.</li><li>3.</li><li>4.</li><li>5.</li><li>6.</li><li>7.</li><li>8.</li><li>9.</li><li>10.</li><li>11.</li><li>12.</li><li>13.</li><li>14.</li><li>15.</li><li>16.</li><li>17.</li><li>18.</li><li>19.</li><li>20.</li><li>21.</li><li>22.</li><li>23.</li><li>24.</li><li>25.</li><li>26.</li><li>27.</li><li>28.</li><li>29.</li><li>30.</li><li>31.</li><li>32.</li><li>33.</li><li>34.</li><li>35.</li><li>36.</li><li>37.</li><li>38.</li><li>39.</li><li>40.</li><li>41.</li><li>42.</li><li>43.</li><li>44.</li><li>45.</li><li>46.</li><li>47.</li><li>48.</li><li>49.</li><li>50.</li><li>51.</li><li>52.</li><li>53.</li><li>54.</li><li>55.</li><li>56.</li><li>57.</li><li>58.</li><li>59.</li><li>60.</li><li>61.</li><li>62.</li><li>63.</li><li>64.</li><li>65.</li><li>66.</li><li>67.</li><li>68.</li><li>69.</li></ul></pre>

 

https://www.51cto.com/article/790611.html