C# Bot框架中的形式和意图,即ai
我有一个问题:我的机器人不遵循形式,它只是继续威胁下一个答案作为意图 当我键入第一条消息“Паааааа”时,它会启动我的表单tests.BuildForm,但下一个答案会导致我离开表单,因为我得到的意图不同 我所期望的是什么:在我定义的意图上,机器人启动表单并不断向表单提问,直到它们得到回答 它在“Пааааааааааааааа1072。并在消息的意图与大小写不匹配时离开。这是预期行为吗?如果是这样的话,我应该如何改变我的代码,让表单提问,直到所有问题都无法回答 我的代码:C# Bot框架中的形式和意图,即ai,c#,botframework,wit-ai,C#,Botframework,Wit Ai,我有一个问题:我的机器人不遵循形式,它只是继续威胁下一个答案作为意图 当我键入第一条消息“Паааааа”时,它会启动我的表单tests.BuildForm,但下一个答案会导致我离开表单,因为我得到的意图不同 我所期望的是什么:在我定义的意图上,机器人启动表单并不断向表单提问,直到它们得到回答 它在“Пааааааааааааааа1072。并在消息的意图与大小写不匹配时离开。这是预期行为吗?如果是这样的话,我应该如何改变我的代码,让表单提问,直到所有问题都无法回答 我的代码: using S
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;
using com.valgut.libs.bots.Wit;
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Builder.FormFlow;
using Microsoft.Bot.Connector;
namespace IoT_NULP_Bot.Controllers
{
[Serializable]
public class Exams
{
[Prompt("Для початку, ваш результат з Математики?")]
public float Math { get; set; }
[Prompt("Українська мова та Література?")]
public float Ukrainian { get; set; }
[Prompt("Вибіркова дисціпліна - Іноземна мова, Фізика або Історія України")]
public float LanguagePhysics { get; set; }
public static IForm<Exams> BuildForm()
{
return new FormBuilder<Exams>()
.Message("Давайте порахуємо ваш конкурсний бал при вступі на ІоТ :) Для цього дайте мені відповіді на наступні запитання")
.Field(nameof(Ukrainian))
.Field(nameof(Math))
.Field(nameof(LanguagePhysics))
.Build();
}
}
[BotAuthentication]
public class MessagesController : ApiController
{
private static IoT_BotDbEntities db = new IoT_BotDbEntities();
/// <summary>
/// POST: api/Messages
/// Receive a message from a user and reply to it
/// </summary>
public async Task<HttpResponseMessage> Post([FromBody] Activity activity)
{
ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
var wit = new WitClient("RKIJ5LVF4GKLEWJ5O5NPUPXVCQMKGLJW");
switch (activity.Type)
{
case ActivityTypes.Message:
var msg = wit.Converse(activity.From.Id, activity.Text);
var intent = string.Empty;
double conf = 0;
try
{
var a = msg.entities["intent"];
if (a != null)
{
foreach (var z in msg.entities["intent"])
{
if (z.confidence > conf)
{
conf = z.confidence;
intent = z.value.ToString();
}
}
}
}
catch (KeyNotFoundException)
{
}
Activity reply = activity.CreateReply();
switch (intent)
{
case "порахуй конкурсний бал":
await Conversation.SendAsync(activity, MakeRoot);
break;
case "статистика вступу":
reply.Attachments = new List<Attachment>();
Attachment attachment = new Attachment();
attachment.ContentType = "image/png";
attachment.ContentUrl =
@"http://image.prntscr.com/image/ee2502f6a68041e1813f1bcd125a8bb2.png";
Attachment secondAttachment = new Attachment();
secondAttachment.ContentType = "image/png";
secondAttachment.ContentUrl =
@"http://image.prntscr.com/image/258aa8e844d74ab7b63447a9f551ecbd.png";
reply.Attachments.Add(attachment);
reply.Attachments.Add(secondAttachment);
reply.Text = GetReplyFromDb(intent);
break;
case "фото":
var photo = GetRandomPhoto();
reply.Attachments = new List<Attachment>();
Attachment attachment1 = new Attachment();
attachment1.ContentType = "image/png";
attachment1.ContentUrl = photo.photoLink;
reply.Attachments.Add(attachment1);
reply.Text = photo.descrip;
break;
default:
reply.Text = GetReplyFromDb(intent);
break;
}
await connector.Conversations.ReplyToActivityAsync(reply);
break;
default:
break;
}
var response = Request.CreateResponse(HttpStatusCode.OK);
return response;
}
internal static IDialog<Exams> MakeRoot()
{
return Chain.From(() => FormDialog.FromForm(Exams.BuildForm));
}
private static Photo GetRandomPhoto()
{
var arrToRandomFrom = db.Photos.ToArray();
return arrToRandomFrom[new Random().Next(arrToRandomFrom.Length)];
}
private static string GetReplyFromDb(string intent)
{
var arrToRandomFrom = db.Responses.Where(x => x.Intent.content == intent).ToArray();
if (arrToRandomFrom.Length > 0)
return arrToRandomFrom[new Random().Next(arrToRandomFrom.Length)].content;
else
{
var noreply = db.Responses.Where(x => x.Intent.content == "noreply").ToArray();
return noreply[new Random().Next(noreply.Length)].content;
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
Net系统;
使用System.Net.Http;
使用System.Threading.Tasks;
使用System.Web.Http;
使用com.valgut.libs.bots.Wit;
使用Microsoft.Bot.Builder.Dialogs;
使用Microsoft.Bot.Builder.FormFlow;
使用Microsoft.Bot.Connector;
命名空间IoT\u NULP\u Bot.Controllers
{
[可序列化]
公开课考试
{
[提示(“ааааааааааззаааааааз1072
公共浮点数学{get;set;}
[提示(“ааааааааааааааааааа
公共浮点数{get;set;}
[提示(“аааааааааааааааааа-заааа,Ф
公共浮点语言物理{get;set;}
公共静态表单BuildForm()
{
返回新的FormBuilder()
.信息(“ааааааааааааааааааааааааааааааа:аааа
.字段(名称(乌克兰))
.字段(名称(数学))
.字段(名称(语言物理))
.Build();
}
}
[身份验证]
公共类消息控制器:ApiController
{
私有静态IoT_BotDbEntities db=新IoT_BotDbEntities();
///
///帖子:api/Messages
///接收来自用户的消息并回复
///
公共异步任务发布([FromBody]活动)
{
ConnectorClient连接器=新的ConnectorClient(新Uri(activity.ServiceUrl));
var wit=新的WitClient(“RKIJ5LVF4GKLEWJ5O5NPUPXVCQMKGLJW”);
开关(activity.Type)
{
案例活动类型。消息:
var msg=wit.Converse(activity.From.Id,activity.Text);
var intent=string.Empty;
双形态=0;
尝试
{
var a=消息实体[“意图”];
如果(a!=null)
{
foreach(msg.entities[“intent”]中的变量z)
{
如果(z.confidence>conf)
{
conf=z.置信度;
intent=z.value.ToString();
}
}
}
}
catch(KeyNotFoundException)
{
}
活动回复=Activity.CreateReply();
开关(意图)
{
“Пааааааааааааааа
wait Conversation.sendaync(活动,MakeRoot);
打破
案例“аааааааааааааааааааааа107
reply.Attachments=新列表();
附件=新附件();
附件.ContentType=“image/png”;
附件.ContentUrl=
@"http://image.prntscr.com/image/ee2502f6a68041e1813f1bcd125a8bb2.png";
附件二附件=新附件();
secondAttachment.ContentType=“image/png”;
secondAttachment.ContentUrl=
@"http://image.prntscr.com/image/258aa8e844d74ab7b63447a9f551ecbd.png";
答复.附件.增加(附件);
答复.附件.添加(第二附件);
reply.Text=GetReplyFromDb(intent);
打破
案例“ф砦砦砦砦砦砦”:
var photo=GetRandomPhoto();
reply.Attachments=新列表();
附件attachment1=新附件();
附件1.ContentType=“image/png”;
attachment1.ContentUrl=photo.photoLink;
答复.附件.添加(附件1);
reply.Text=photo.descripp;
打破
违约:
reply.Text=GetReplyFromDb(intent);
打破
}
等待连接器.Conversations.ReplyToActivityAsync(reply);
打破
违约:
打破
}
var response=Request.CreateResponse(HttpStatusCode.OK);
返回响应;
}
内部静态IDialog MakeRoot()
{
返回链.From(()=>FormDialog.FromForm(Exams.BuildForm));
}
私有静态照片GetRandomPhoto()
{
var arrToRandomFrom=db.Photos.ToArray();