Windows Live Ag... 的个人资料Windows Live Agents照片日志列表 工具 帮助

日志


4月25日

BuddyScript Subpatterns

Subpatterns are much like functions in that they can be used as filters for data -- one value is passed in, evaluated, and another possibly different value is returned. That's why we can do things like this:
 
subpattern Basketball
+ (basketball|basket ball)
+ (b ball|bball) {MACRO_SYN}
+ (hoops|one on one|1 one 1) {MACRO_WEAK_SYN}
  return "basketball"
 
subpattern Baseball
+ (baseball|base ball)
+ ball {MACRO_WEAKER_SYN}
  return "baseball"
 
subpattern ASport
+ VAR=Basketball
+ VAR=Baseball
  return VAR
 
+ i like SPORT=ASport
  - I like SPORT too!
 
User: i like bball
Agent:  I like basketball too!
 
Let's look at a slightly different kind of subpattern.
 
stored variable G_DESSERTS
 
function DessertIsOnMenu(DESSERT_NAME)
   return Exist(G_DESSERTS[DESSERT_NAME])
 
subpattern Dessert
  if DessertIsOnMenu(VALUE)
    return 100
  return 0
 
The Dessert subpattern above is a BuddyScript subpattern -- a subpattern that returns its match score based on some logic defined within it.  VALUE is a special variable made available for this kind of subpattern and contains the token being evaluated -- here it is passed to the DessertIsOnMenu function, which returns true if the parameter it receives exists as a key in the G_DESSERTS object. If this is the case, the token will match to Dessert with a score of 100.
 
Using BuddyScript subpatterns enables scenarios in which you can match in a dynamic way, tightly controlling how matches are evaluated and scored.
4月23日

Microsoft Partner Program

Hello Developers,

 

As we are nearing the public release of our new Visual Studio SDK and Partner on-boarding system, we wanted to make sure that we expose our developers to all the benefits from Microsoft in terms of certifications.  We realize there are a large number of Agent developers that make their business through the Agent platform and we are working closely with the rest of Windows Live Platform to get you the recognition you need with your customers.  In the future, Windows Live will have a program specifically within the Microsoft Partner Program (MSPP) and you’ll be able to fully leverage that designation.  Membership in MSPP is free with graduated levels of certification (fee and skill based).   In the past, there was a notion of “MSN Bot Certified”, but because of business and technology reasons, this designation has essentially expired and won’t be recognized by Microsoft.  Windows Live is moving forward with MSPP as the official method of partnering and we encourage you to start MSPP enrollment at your earliest convenience. 

 

We look forward to building out this developer community with you!

4月17日

So, you think you know everything about Buddyscript?

So, you think you know everything about Buddyscript?

 

Well, let’s see how much of such a statement is true. Try to answer this short quiz! If you score all of them it doesn’t mean you are an expert, but you could say you are getting there ;-)

 

1-    Let’s talk about matching. Say we want to match precisely on full URLs (and only full URLs) during a conversation, which one of the following cases would be the way to go:

a)    subpattern AFullUrl /^www`.`S+`.(com|fr|org|net)$/ {minlength=3, example=”www.microsoft.com”}

b)    subpattern AFullUrl + www =Anything (com|fr|org|net) {canskip=”no”, minlength=3}

c)    subpattern AFullUrl www.=Anything.(com|fr|org|net) {canskip=”no” minlength=3}

 

2-    Nl-bricks? Only one of the following affirmations is true:

a)  “NL- bricks” along with “regular subpatterns” are processed during the “patternization” process, but “NL-bricks” have precedence over “regular subpatterns”.

b)  “NL- bricks” are the minimum expression of a meaning unit, and are “patternized” into “regular subpatterns” at compile time.

c)  “NL-bricks” are “skippable”, as opposed to “regular subpatterns” that need to have the property {canskip=”yes”}

 

3-    Defining macros in Buddyscript, only one of the following statements is true:

a)    If the code contains any line breaks, it should be placed immediately below the first line of the statement. If you want your macro to contain an empty line, add a line containing only the character “\”. The first empty line defines the end of the macro.

b)    If you want your macro to contain an empty line, add a line containing the character “\” at the end of the line before. I will add an empty line right between this and the following line. The first empty line defines the end of the macro.

c)    Macro definitions can’t contain line breaks. The first empty line defines the end of the macro.

 

4-    Only one of the following statements is true:

a)    The “always match as” statement allows you to associate a variable name with a particular subpattern throughout a group of patterns only.

b)    The “always match asstatement allows you to associate a variable name with a particular subpattern throughout a group of patterns, a package, or an entire domain.

c)    The “always match as” statement allows you to associate a variable name with a particular subpattern in a routine, or in a multi-line of code.

 

5-    What do you know about composite subpatterns? Only one of the following is true!

a)    Composite sub-patterns let you assemble multiple static subpatterns together, so that a candidate string is filtered through the first subpattern, then the result of this filtering is passed to the second one, etc.

b)    The minimum number of compositions is one, but there’s not a limit on the maximum number of compositions you can add.

c)    The default values for the properties of a composite subpattern are those of the outer-most subpattern, since it's going to be evaluated last.

 

6-    Hum, have you ever tried to create datasources? Let’s see if you know which one of the following is true:

a)    The “postprocess-block“ of a datasource is a BuddyScript routine used to set the offset and the total count of rows when the “preprocess-block” didn't return any of those values, or if the value returned is not accurate.

b)    “Expire” is a common property to the different datasource kinds. This information allows the platform to remember (cache) the result for a certain time. By default, expire is set to “now” (information is not stored). If you want the information to be cached, set it to “never”, or when the information won't be valid anymore (in 5 minutes, in 2 days, etc.)

c)    Datasources are BuddyScript tools to access external data. The external data retrieved can be accessed through many methods, including gateway calls, SQL queries, SOAP methods, datatables, etc.

 

7-    How about rephrasing rules? We want to use the property “MACRO_BEST_ONLY” when:

a)    We need to make sure the rule it’s only applied when it matches best from all of the other rephrasing rules.

b)    We want the rule to be applied only when it matches best, and no other rule can be applied after.

c)    We want to avoid matching on rules scoring lower than 80.

 

Solutions: 1-a, 2-b, 3-a, 4-b, 5-b, 6-c, 7-a

 If you failed the quiz, and you want to know more about Buddyscript, besides this blog you can browse the Windows Live Agents forum in MSDN, and of course read the documentation shipped with the platform.

4月7日

Quality Analysis Audits

Audits are an important piece to the ongoing maintenance of your agent. The purpose of auditing is to take a look at how users are interacting with the agent, and identify ways to improve the experience. Any issues that you uncover in audits should be addressed in a regularly scheduled agent update window.

There are two types of audits—Query and Session.

Session audits answer the question “Was this session satisfactory to the user?“ and are best for evaluating the overall user experience. Did the user find the information he or she was looking for? Was the answer complete? Did the user express any frustration that was not appropriately addressed? As a client, do you feel that the interaction served your purpose in deploying the agent?

Query audits answer the question “Was the query answered by the correct topic?” and are ideal for fine-tuning the Natural Language comprehension and finding commonly unanswered queries.

Once your agent launches, it’s preferred that you audit every 2-3 days for the first two weeks and then once every 2 weeks for the remainder of the agent’s life. Of course, it is up to you to determine how often you audit your agent. If your agent has a ton of traffic, you might want to audit more often.

If you choose not to audit your agent, the agent will never improve and you will supply users with a poor experience. Auditing your agent will not only improve it, but improve your development style and guidelines for future agents.

Auditing Guidelines

Session Audit

Suggestions for how to score sessions in a session audit:

  • Misunderstood: If the query is not recognized correctly and the user...
    • eventually gets the correct answer – Yes
    • would have gotten the right answer if he had continued another step (selected menu topic, typed more, etc) – Yes
    • doesn’t get the right answer  No
  • Content: If the query seemed to be understood reasonably well but the response...
    • clearly does not answer the question – Yes, but consider improving content
    • does not answer the question but includes a URL to a page that should logically answer the question – Yes, test the link, consider improving content if it does not
  • Menu: If a query is answered with an appropriate menu...
    • but should have been answered directly to a topic on the menu – Yes, notify WLA Team of misunderstood query
    • but is beyond the scope of the agent (too specific, technical)  Yes
    • but the user does not select any of the options – Yes
    • but the user does not select the correct option – Yes, consider  improving the menu if possible
  • Long/multiple: If the query is long or contains multiple questions and...
    • hits “catch” or gives the correct answer  Yes, bravo
    • user eventually gets the correct answer – Yes
    • user doesn’t eventually get the right answer – No
    • user gets the wrong answer and gives up – N/A
  • Dialogs: If a user engages agent in a dialog it cannot handle (responds to an answer with “I already tried that” or similar – Ignore that query
  • Ambiguity: If the user hit an ambiguity and...
    • the correct topic is listed, but the query was specific enough that it should have been answered directly – Yes, notify WLA Team
    • neither option is correct – No
    • at least one of the options is incorrect/irrelevant –  Yes, notify WLA Team
  • Entry message/empty session: If session only contains entry messages – N/A
  • Looping: If topics are looping – No
  • Nonsensical: When the user types nonsense, mark the query or session as N/A.             

Query Audit

* All internal query audits should use the option to "Only include queries relevant to natural language."

Suggestions for how to score queries in a query audit:

  • Non-NL Queries: Despite selecting the option* above, the auditor may still need to manually discard non-natural-language queries
    • Menu selections: a # (followed by line of NL-comprehension code in parentheses) – N/A
    • Any dialogue queries such as: more, yes, no, show related topics – N/A
    • “?” – N/A
  • Nonsensical: When the user types nonsense or question unrelated to products covered – N/A
  • Beyond the scope of the agent: When the user asks a very technical or specific question and
    • gets a menu or somewhat related answer – Yes
    • doesn’t get an approximate answer – N/A
  • Mismatched: Any reasonable query that
    • does not match an appropriate response in the agent – No
    • is known not to have an appropriate response in the agent and
      • doesn’t match anything at all relevant – No
      • matches something somewhat relevant – still Yes, but consider improving content
    • mismatched because the user tried to engage in a dialogue such as “I already tried that” – N/A
  • Menu: If a query matches to an appropriate menu but was specific enough to have matched directly to a topic– No
  • Long/multiple: If the query is long or contains multiple questions and...
    • gives the correct answer  Yes, bravo
    • matches reasonably well – Yes
    • hits “catch” – Yes
    • mismatches – N/A
  • Unanswered/Catch section: If the user makes a valid query (not nonsense) that will probably be asked again at some point – No
  • Ambiguity: test each query in this section
    • the correct topic is listed, but the query was specific enough that it should have matched directly – No
    • neither option was correct – No
    • at least one of the options is incorrect/irrelevant No

 

 

4月2日

Customizing WLATemplate

 

Ideally you start creating a new Agent using the WLATemplate! Detailed information on how to instantiate a new project [currently available languages are: English, Chinese (simplified), French, German, Italian, Japanese, and Spanish] from the WLATemplate: http://windowsliveagents.spaces.live.com/blog/cns!5BCD45E519E07634!446.entry

 

As you can imagine, this is only the beginning... In order to make your Agent a success and stand out in the crowd, you have to customize it to whatever you want your Agent to be, simple things like giving your Agent a personality and making "him" or "her" more natural. Here are a bunch of former blog posts that talk about exactly that:

 

Creating a Personality Spec - http://windowsliveagents.spaces.live.com/blog/cns!5BCD45E519E07634!317.entry

 

Customizing Chat - http://windowsliveagents.spaces.live.com/blog/cns!5BCD45E519E07634!230.entry

 

Welcome Messages and ABGreetingProc - http://windowsliveagents.spaces.live.com/blog/cns!5BCD45E519E07634!408.entry

 

Changing PSM, Friendly Name, and Icon - http://windowsliveagents.spaces.live.com/blog/cns!5BCD45E519E07634!315.entry

 

 

Best Practices for Developing a Windows Live Agent:

 

Part 1 [Use the WLATemplate Project as a Starting Point] - http://windowsliveagents.spaces.live.com/blog/cns!5BCD45E519E07634!149.entry

 

Part 2 [Create Good Subpatterns] - http://windowsliveagents.spaces.live.com/blog/cns!5BCD45E519E07634!150.entry

 

Part 3 [Use Dialogs] - http://windowsliveagents.spaces.live.com/blog/cns!5BCD45E519E07634!151.entry

 

Part 4 [Use Canonical Questions] - http://windowsliveagents.spaces.live.com/blog/cns!5BCD45E519E07634!152.entry

 

Part 5 [Remember User Information] - http://windowsliveagents.spaces.live.com/blog/cns!5BCD45E519E07634!156.entry

 

Part 6 [Create a Clear and Concise Welcome Message] - http://windowsliveagents.spaces.live.com/blog/cns!5BCD45E519E07634!160.entry

 

Part 7 [Be Careful When Using Public Variables] - http://windowsliveagents.spaces.live.com/blog/cns!5BCD45E519E07634!163.entry

 

Part 8 [Make Your Project Modular] - http://windowsliveagents.spaces.live.com/blog/cns!5BCD45E519E07634!164.entry

 

Part 9 [Make Your Agent Chatty] - http://windowsliveagents.spaces.live.com/blog/cns!5BCD45E519E07634!166.entry

 

Part 10 [Conclusion of Best Practices Series] - http://windowsliveagents.spaces.live.com/blog/cns!5BCD45E519E07634!176.entry

 

 

-----------------------------------------

Blog post contributor(s): Mirco