news 2026/1/10 6:26:53

利用C#对接BotSharp本地大模型AI Agent示例(2)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
利用C#对接BotSharp本地大模型AI Agent示例(2)

上一篇博文已经介绍了怎么搭建BotSharp本地大模型环境

https://blog.csdn.net/zxy13826134783/article/details/156653773?spm=1001.2014.3001.5501

本文运行环境:

win11

visual studio 2022

本文利用C#对接BotSharp本地大模型的Api,废话不多说,先上代码及运行结果

1 在Vistual Studio中新建名为POSTDemo1的控制台项目,选择.net framework 4.7

2 利用nuget安装Newtonsoft.Json及System.Text.Json,直接安装最新版就行

3 编辑代码如下:

using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Text; using System.Text.Json; using System.Threading.Tasks; namespace POSTDemo1 { internal class Program { static void Main(string[] args) { var base_url = $"http://localhost:5500"; string userName = "admin@gmail.com"; string password = "123456"; string token = GetToken(base_url,userName, password); if (string.IsNullOrEmpty(token)) { Console.WriteLine("获取token失败"); return; } //解析token JsonDocument doc = JsonDocument.Parse(token); string accessToken = doc.RootElement .GetProperty("access_token") .GetString(); if(string.IsNullOrEmpty(accessToken)) { Console.WriteLine("获取access_token失败"); return; } Console.WriteLine($"获取到的token{accessToken}"); //输入的问题 string question = "hello"; //发送对话 PostConverSation(base_url, accessToken, question); Console.WriteLine("运行完毕"); Console.ReadLine(); } private static void SetClientHeader(HttpClient client,string authorization) { client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", authorization); } private static void PostConverSation(string base_url,string token,string question) { var client = new HttpClient(); string agentId = "01e2fc5c-2c89-4ec7-8470-7688608b496c"; //会话Id string conversationId = "abc"; string converSationUrl = $"{base_url}/conversation/{agentId}/{conversationId}"; SetClientHeader(client, token); var data = new { text = question, provider = "llama-sharp", model = "llama-2-7b-chat.Q8_0.gguf" }; Console.WriteLine($"输入的问题:{question}"); string ret=PostJsonData(client, converSationUrl, data, 3); Console.WriteLine($"机器人回复:{ret}"); } private static string PostJsonData(HttpClient client,string url,object data,int timeOut) { string jsonContent = ""; if (data != null) { jsonContent= JsonConvert.SerializeObject(data); } var content = new StringContent(jsonContent, Encoding.UTF8, "application/json"); string result = ""; try { client.Timeout = TimeSpan.FromMinutes(timeOut); // 设置超时时间 var response = client.PostAsync(url, content).Result; if (response.IsSuccessStatusCode) { var responseJson = response.Content.ReadAsStringAsync().Result; result= responseJson; } else { Console.WriteLine($"Error: {response.StatusCode}"); } } catch (HttpRequestException e) { Console.WriteLine($"Network error: {e.Message}"); } return result; } private static string GetToken(string base_url,string userName,string password) { string credentials=Convert.ToBase64String(Encoding.UTF8.GetBytes($"{userName}:{password}")); string authorization = $"Basic {credentials}"; var client = new HttpClient(); string tokenUrl = $"{base_url}/token"; SetClientHeader(client, authorization); return PostJsonData(client, tokenUrl, null, 1); } } }

先启动BotSharp后台服务,再运行该代码,运行结果如下:

机器人回复的文本:

{ "conversation_id": "abc", "sender": { "id": "", "user_name": "", "first_name": "", "last_name": null, "email": null, "phone": null, "type": "client", "role": "user", "full_name": "", "source": null, "external_id": null, "avatar": "/user/avatar", "permissions": [ ], "create_date": "0001-01-01T00:00:00", "update_date": "0001-01-01T00:00:00", "regionCode": "CN" }, "function": null, "rich_content": { "recipient": { "id": "abc" }, "messaging_type": "RESPONSE", "message": { "rich_type": "text", "text": "\uD83D\uDE0A Hello there! *chuckles* I'm here to help you with any questions or tasks you may have. Is there something specific you'd like to chat about or ask?" }, "fill_postback": false, "editor": "text" }, "has_message_files": false, "is_streaming": false, "created_at": "2026-01-07T05:09:14.5500535Z", "message_id": "59b97608-bcd7-4df7-b659-69304524f7b2", "text": "\uD83D\uDE0A Hello there! *chuckles* I'm here to help you with any questions or tasks you may have. Is there something specific you'd like to chat about or ask?", "data": null, "template": null, "states": { "prompt_total": "0", "temperature": "0", "model": "llama-2-7b-chat.Q8_0.gguf", "sampling_factor": "0", "use_stream_message": "false", "provider": "llama-sharp", "llm_total_cost": "0", "channel": "openapi", "completion_total": "0" }, "log_id": null }

同时也可以看到BotSharp的控制台日志有输出回复:

不知道是不是电脑配置问题,输入问题后,要很久才获取到回复,有时候3分钟都没回复就报错了

先要获取到token,token信息从前端BotSharp-UI中的代码中获取到启发

模型的代理agentId是固定的

会话conversationId是唯一的,自己定义,我这里为了偷懒,正常来说还得再调用一个接口(在BotSharp-UI前端界面新建会话时会调用),相当于设置会话Id,直接运行上述代码也会创建会话,但第一次可能返回的结果不是需要的结果,运行第二次就正常了

代理agentId及conversationId可以通过这里直接获取到:

点击上台右边chat小图标,直接进入会话,如下图:

看上图中的浏览器地址栏这里,已经标注AgentId及conversationId

好了,本文到此结束,如果本文对你有帮助,资助2毛钱作为鼓励呗,穷逼一个,就当筹个网费吧

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/7 20:26:43

java注解,零基础入门到精通,收藏这篇就够了

注解的重要性就不用我来说了,controller层有controller注解,service层有service注解,基本上到处都是注解,任何一个Java框架都是通过注解反射来实现的!所以注解是Java程序员的必备技能,如果你对注解还不是很…

作者头像 李华
网站建设 2026/1/7 20:24:43

一文看懂Java内存模型(JMM)收藏这篇就够了

文章目录 Java内存模型介绍 总览图 Java内存模型图线程、主内存、工作内存关系图CPU缓存架构图Java内存模型与硬件内存架构的关系 什么是Java内存模型Java内存模型的意义Java内存模型规范 Java内存模型的主要结构 1、程序计数器(Program Counter Register&#xff0…

作者头像 李华
网站建设 2026/1/7 20:16:28

【免费开源文本编辑器】轻量级文本编辑器——Notepad++ 下载安装教程

需求背景: 在数字时代的编程开发和文本处理工作中,一款功能强大且高效的文本编辑器至关重要。虽然Windows系统自带的记事本能满足基本需求,但在专业场景下显得力不从心。今天为您推荐 Notepad —— Windows平台最受欢迎的免费开源文本编辑器…

作者头像 李华
网站建设 2026/1/7 20:15:55

nums.sort()和nums.sort((a, b) => a - b)

这两者有重要区别: nums.sort() 默认按字符串排序(字典序),即使数组里是数字也会被转换为字符串再比较: let nums [100, 4, 200, 1, 3, 2]; nums.sort(); // [1, 100, 2, 200, 3, 4] console.log(nums); // 错误的顺序…

作者头像 李华
网站建设 2026/1/10 0:31:47

Springboot品牌购物官网rmu1i本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表项目功能:开题报告内容进度安排:1、XXXX年X月X日-XXXX年X月XX日:完成前期资料的搜集与整理,撰写开题报告以及开题PPT。2、XXXX年X月X日-XXXX年X月XX日:设计完成系统的总体框架。3、XXXX年X月X日-XXXX年…

作者头像 李华
网站建设 2026/1/7 20:06:57

HeiXi 配置 Metahuman

效果:PlayerStart(实例) 配置:位置 (0,149,120)角度:(0,-10,-90)

作者头像 李华