Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Bot框架中的形式和意图,即ai_C#_Botframework_Wit Ai - Fatal编程技术网

C# Bot框架中的形式和意图,即ai

C# Bot框架中的形式和意图,即ai,c#,botframework,wit-ai,C#,Botframework,Wit Ai,我有一个问题:我的机器人不遵循形式,它只是继续威胁下一个答案作为意图 当我键入第一条消息“Паааааа”时,它会启动我的表单tests.BuildForm,但下一个答案会导致我离开表单,因为我得到的意图不同 我所期望的是什么:在我定义的意图上,机器人启动表单并不断向表单提问,直到它们得到回答 它在“Пааааааааааааааа1072。并在消息的意图与大小写不匹配时离开。这是预期行为吗?如果是这样的话,我应该如何改变我的代码,让表单提问,直到所有问题都无法回答 我的代码: using S

我有一个问题:我的机器人不遵循形式,它只是继续威胁下一个答案作为意图

当我键入第一条消息“Паааааа”时,它会启动我的表单tests.BuildForm,但下一个答案会导致我离开表单,因为我得到的意图不同

我所期望的是什么:在我定义的意图上,机器人启动表单并不断向表单提问,直到它们得到回答

它在“Пааааааааааааааа1072。并在消息的意图与大小写不匹配时离开。这是预期行为吗?如果是这样的话,我应该如何改变我的代码,让表单提问,直到所有问题都无法回答

我的代码:

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();