{"id":997686,"date":"2024-01-11T09:00:00","date_gmt":"2024-01-11T17:00:00","guid":{"rendered":"https:\/\/www.microsoft.com\/en-us\/research\/?p=997686"},"modified":"2024-01-11T06:55:46","modified_gmt":"2024-01-11T14:55:46","slug":"taskweaver-a-code-first-agent-framework-for-efficient-data-analytics-and-domain-adaptation","status":"publish","type":"post","link":"https:\/\/www.microsoft.com\/en-us\/research\/blog\/taskweaver-a-code-first-agent-framework-for-efficient-data-analytics-and-domain-adaptation\/","title":{"rendered":"TaskWeaver: A code-first agent framework for efficient data analytics and domain adaptation"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1400\" height=\"788\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1.png\" alt=\"TaskWeaver chat user interface\" class=\"wp-image-997701\" srcset=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1.png 1400w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-300x169.png 300w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-1024x576.png 1024w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-768x432.png 768w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-1066x600.png 1066w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-655x368.png 655w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-343x193.png 343w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-240x135.png 240w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-640x360.png 640w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-960x540.png 960w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-1280x720.png 1280w\" sizes=\"auto, (max-width: 1400px) 100vw, 1400px\" \/><\/figure>\n\n\n\n<p>The advent of large language models (LLMs) has revolutionized human-machine interactions, particularly in natural language understanding and generation applications. These AI- or LLM-backed virtual assistants hold the promise of serving as intelligent <em>agents <\/em>capable of autonomously reasoning, observing, and performing tasks articulated in natural language. However, it is still challenging for most agent frameworks to efficiently handle complex data structures (e.g., DataFrame), which are prevalent in data analytics tasks and domain-specific scenarios.\u00a0<\/p>\n\n\n\n<p>To address these challenges, we introduce <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/publication\/taskweaver-a-code-first-agent-framework\/\" target=\"_blank\" rel=\"noreferrer noopener\">TaskWeaver<\/a> \u2013 a code-first agent framework which can convert natural language user requests into executable code, with additional support for rich data structures, dynamic plugin selection, and domain-adapted planning process. Now publicly available as an open-source framework, TaskWeaver leverages LLMs\u2019 coding capability to implement complex logic and incorporates domain-specific knowledge through customizable examples and plugins. TaskWeaver empowers users to easily build their own virtual assistants that understand diverse domain questions, follow examples, and execute customizable algorithms on complex data structures efficiently.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"motivating-example-anomaly-detection-on-time-series-data\">Motivating example \u2013 Anomaly detection on time-series data<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"scenario\">Scenario<\/h3>\n\n\n\n<p>Amy is a business analyst who wants to identify anomalies on a time series of sales data stored in a SQL database. She would like to get help from an AI assistant for the task with natural language interactions. Moreover, Amy would like to apply her own definition and interpretation of anomalies in the context of sales data, including a customized anomaly detection algorithm. Figure 1 shows the desired conversation between the user and the AI assistant \u2013 the AI assistant should be able to first pull the data from target database, then apply desired algorithms, and return the visualized results.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1306\" height=\"1863\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/figure1TW.png\" alt=\"Figure 1. A sample conversation between user and the AI assistant powered by taskweaver. The user asks to pull data from a database and apply anomaly detection. The ai assistant accomplishes the task by multi-rounds of communication with the user and finally plots a figure of anomalies.\" class=\"wp-image-997890\" style=\"width:437px;height:auto\" srcset=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/figure1TW.png 1306w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/figure1TW-210x300.png 210w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/figure1TW-718x1024.png 718w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/figure1TW-768x1096.png 768w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/figure1TW-1077x1536.png 1077w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/figure1TW-126x180.png 126w\" sizes=\"auto, (max-width: 1306px) 100vw, 1306px\" \/><figcaption class=\"wp-element-caption\">Figure 1. Sample chat between the user and the AI assistant<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"requirements-for-an-agent-framework\">Requirements for an agent framework<\/h3>\n\n\n\n<p>To accomplish the task above, we identify several key requirements that current agent frameworks may lack:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Plugin<\/strong>: The agent needs to first query and collect data from a database, and then detect anomalies using a specialized anomaly detection algorithm. Both <em>require the capability to define and invoke custom plugins<\/em>, e.g., the query_database plugin and the anomaly_detection plugin.&nbsp;<\/li>\n\n\n\n<li><strong>Rich data structure<\/strong>: the agent should <em>be capable of handling data in complex but common structures, such as array, matrix, tabular data<\/em> (e.g., <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" href=\"https:\/\/pandas.pydata.org\/pandas-docs\/stable\/reference\/api\/pandas.DataFrame.html\" target=\"_blank\" rel=\"noopener noreferrer\">pandas DataFrame<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>), to perform advanced data processing actions. Many existing works tend to transform the intermediate outputs as strings in the prompt or save them as local files before reading them again. However, this practice is error-prone and could easily exceed the prompt token limit. Additionally, data in rich structure should be able to transfer easily from one plugin to another. &nbsp;<\/li>\n\n\n\n<li><strong>Stateful execution<\/strong>: The agent engages in iterative interactions with the user, processing user inputs and executing tasks accordingly. The <em>execution states should be preserved<\/em> throughout the entire conversation session across multiple chat rounds.&nbsp;<\/li>\n\n\n\n<li><strong>Reasoning and acting (ReAct)<\/strong>: The agent should have the capability to first <em>observe and then act<\/em>. The database might contain data of various schemas in the real world, leading to different arguments for anomaly detection. Therefore, the agent must first inspect the data schema, understand which columns are appropriate (and ask users to confirm), then feed<strong><em> <\/em><\/strong>the corresponding column names into the anomaly detection algorithm.<\/li>\n\n\n\n<li><strong>Arbitrary code generation<\/strong>: The agent should be able to <em>generate code to accommodate ad-hoc user demands<\/em>, which are not covered by the pre-defined plugins. In the example provided, the agent generates code to visualize the detected anomalies without using any plugins.&nbsp;&nbsp;<\/li>\n\n\n\n<li><strong>Incorporating domain knowledge<\/strong>: The agent should provide a <em>systematic way to incorporate domain-specific knowledge<\/em>. It would help LLMs deliver better planning and accurate tool calling, which in turn produces reliable results, particularly in domain-specific scenarios.<\/li>\n<\/ul>\n\n\n\n\t<div class=\"border-bottom border-top border-gray-300 mt-5 mb-5 msr-promo text-center text-md-left alignwide\" data-bi-aN=\"promo\" data-bi-id=\"1141385\">\n\t\t\n\n\t\n\t<div class=\"row pt-3 pb-4 align-items-center\">\n\t\t\t\t\t\t<div class=\"msr-promo__media col-12 col-md-5\">\n\t\t\t\t<a class=\"bg-gray-300 display-block\" href=\"https:\/\/ai.azure.com\/labs\" aria-label=\"Azure AI Foundry Labs\" data-bi-cN=\"Azure AI Foundry Labs\" target=\"_blank\">\n\t\t\t\t\t<img decoding=\"async\" class=\"w-100 display-block\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2025\/06\/Azure-AI-Foundry_1600x900.jpg\" \/>\n\t\t\t\t<\/a>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t<div class=\"msr-promo__content p-3 px-5 col-12 col-md\">\n\n\t\t\t\t\t\t\t\t\t<h2 class=\"h4\">Azure AI Foundry Labs<\/h2>\n\t\t\t\t\n\t\t\t\t\t\t\t\t<p id=\"azure-ai-foundry-labs\" class=\"large\">Get a glimpse of potential future directions for AI, with these experimental technologies from Microsoft Research.<\/p>\n\t\t\t\t\n\t\t\t\t\t\t\t\t<div class=\"wp-block-buttons justify-content-center justify-content-md-start\">\n\t\t\t\t\t<div class=\"wp-block-button\">\n\t\t\t\t\t\t<a href=\"https:\/\/ai.azure.com\/labs\" aria-describedby=\"azure-ai-foundry-labs\" class=\"btn btn-brand glyph-append glyph-append-chevron-right\" data-bi-cN=\"Azure AI Foundry Labs\" target=\"_blank\">\n\t\t\t\t\t\t\tAzure AI Foundry\t\t\t\t\t\t<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div><!--\/.msr-promo__content-->\n\t<\/div><!--\/.msr-promo__inner-wrap-->\n\t<\/div><!--\/.msr-promo-->\n\t\n\n\n<h2 class=\"wp-block-heading\" id=\"taskweaver-architecture\">TaskWeaver architecture<\/h2>\n\n\n\n<p>Figure 2 shows the three core components in the TaskWeaver architecture. The <strong><em>Planner<\/em><\/strong> serves as the system\u2019s entry point and interacts with the user. Its responsibilities include: (1) planning \u2013 breaking down the user\u2019s request into subtasks and managing the execution process with self-reflection; and (2) responding \u2013 transforming the execution result into a human-readable response for the user. The <strong><em>Code Interpreter<\/em><\/strong> consists of two components: the <strong><em>Code Generator<\/em><\/strong> generates code for a given subtask from the Planner, considering existing plugins and domain-specific task examples; the <strong><em>Code Executor<\/em><\/strong> is responsible for executing the generated code and maintaining the execution state throughout the entire session.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1623\" height=\"624\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/NEWTWFIG2taskweaver_arch.jpg\" alt=\"Figure 2. The architecture of taskweaver, which consists of three parts, planner, code generator and stateful code executor. They communicate with each other to accomplish user\u2019s request.\" class=\"wp-image-997905\" srcset=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/NEWTWFIG2taskweaver_arch.jpg 1623w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/NEWTWFIG2taskweaver_arch-300x115.jpg 300w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/NEWTWFIG2taskweaver_arch-1024x394.jpg 1024w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/NEWTWFIG2taskweaver_arch-768x295.jpg 768w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/NEWTWFIG2taskweaver_arch-1536x591.jpg 1536w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/NEWTWFIG2taskweaver_arch-240x92.jpg 240w\" sizes=\"auto, (max-width: 1623px) 100vw, 1623px\" \/><figcaption class=\"wp-element-caption\">Figure 2. Overview of TaskWeaver <\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"running-workflow-for-motivating-example\">Running workflow for motivating example<\/h3>\n\n\n\n<p>TaskWeaver has a two-layer planning process for dealing with user requests. In the first layer, the <em>Planner <\/em>generates a high-level plan outlining the steps required to fulfill the request. In each subsequent round, the code generator will devise a plan, in terms of chain-of-thought and generated code, to execute the specified step. Figure 3 presents the internal workflow of TaskWeaver when accomplishing the motivating example mentioned above. Note that the prompts shown in Figure 3 are simplified and do not represent the full complex instructions.&nbsp;<\/p>\n\n\n\n<p>The initial step involves the <em>Planner <\/em>taking the user query, <em>Code Interpreter<\/em> description, and planning examples (if provided) to generate a plan. For the given example, the plan first pulls data from the database and describes the data schema. The Code Generator prompt delineates its profile and competencies, providing definitions of all relevant plugins (e.g., function name, description, arguments and return values.) The output from the <em>Code Generator<\/em> is a code snippet that executes the sql_pull_data plugin, retrieves the data into a DataFrame, and provides a description of the data schema.<\/p>\n\n\n\n<p>Next, the code generated is sent to the <em>Code Executor<\/em> for execution, after which the result is sent back to the Planner to determine the next planning step. In the example, the execution result reveals two columns, namely date and value, in the DataFrame. For the next step, the <em>Planner <\/em>can either confirm with the user if these columns correspond to the two input parameters of the anomaly_detection plugin, or directly proceed to the next step.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"2366\" height=\"2483\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/figure3tw.png\" alt=\"The workflow of taskweaver when dealing with the motivating example. The planner first generates a plan by incorporating planner description, code interpreter description and plugin definition. The first step of the plan is passed to the code generator to generate Python code and then forwarded to the code executor. After collecting execution results, the planner responds to the user.\" class=\"wp-image-997899\" style=\"width:740px;height:auto\" srcset=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/figure3tw.png 2366w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/figure3tw-286x300.png 286w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/figure3tw-976x1024.png 976w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/figure3tw-768x806.png 768w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/figure3tw-1464x1536.png 1464w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/figure3tw-1951x2048.png 1951w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/figure3tw-172x180.png 172w\" sizes=\"auto, (max-width: 2366px) 100vw, 2366px\" \/><figcaption class=\"wp-element-caption\">Figure 3. Workflow of TaskWeaver<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"key-design-considerations-of-taskweaver\">Key design considerations of TaskWeaver<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Code-first analytics experience<\/strong>: TaskWeaver converts user requests into Python programs that run on dedicated processes, where the Python program can be plugin invocations, arbitrary code to handle ad-hoc user queries, or both. Unlike other frameworks that rely on text or file-based expressions, TaskWeaver can fully utilize native data structures such as pandas DataFrame and numpy ndarray that exist in the memory. This makes it easy to perform tasks such as pulling data from a database, running machine learning algorithms (e.g., anomaly detection, classification, or clustering), summarizing results, and visualizing analysis outcomes.&nbsp;<\/li>\n\n\n\n<li><strong>Domain adaptation<\/strong>: Incorporating domain-specific knowledge into the model via prompts can help boost LLMs\u2019 performance when the user query is complex. TaskWeaver provides two options to make customizations with the user\u2019s domain knowledge:\n<ul class=\"wp-block-list\">\n<li><em>Customization with plugins<\/em>: Users can define custom plugins (including Python implementation and schema) to incorporate domain knowledge, such as pulling data from a specific database, and running a dedicated algorithm.<\/li>\n\n\n\n<li><em>Customization with examples<\/em>: TaskWeaver also provides an easy-to-implement interface (in YAML format) for users to configure examples to teach the LLMs how to respond to certain requests. The examples can be of two categories: one is used for planning and the other is for code generation.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Stateful code execution<\/strong>: When users make ad-hoc requests for data analytics, it often involves multiple iterations. As a result, TaskWeaver maintains the state of code execution throughout the entire session. This is like programming in Python using the Jupyter Notebook, where users type code snippets in a sequence of cells and the program\u2019s internal state progresses sequentially. The difference in TaskWeaver is that users use natural language instead of programming language. TaskWeaver converts each user request into one or more code snippets in each round, depending on the specific plan.&nbsp;<\/li>\n\n\n\n<li><strong>Others<\/strong>: TaskWeaver also supports other features such as <em>intelligent plan decomposition<\/em> and <em>self-reflection<\/em> to respond to a user\u2019s request in a more reliable and organized manner. Moreover, features like<em> restricted code generation<\/em> can help limit the capabilities of the generated code to reduce security risks.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"getting-started\">Getting started<\/h2>\n\n\n\n<p><a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" href=\"https:\/\/github.com\/microsoft\/TaskWeaver\" target=\"_blank\" rel=\"noopener noreferrer\">TaskWeaver<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> is now publicly available on GitHub. You may run the following commands to quickly get started.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">git clone https:\/\/github.com\/microsoft\/TaskWeaver.git \ncd TaskWeaver \npip install -r requirements.txt   # install the requirements <\/pre>\n\n\n\n<p>Once the installation is finished, users can configure key parameters, such as the LLM endpoint, key and model, and start the TaskWeaver service easily by following the <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" href=\"https:\/\/microsoft.github.io\/TaskWeaver\/docs\/overview\" target=\"_blank\" rel=\"noopener noreferrer\">running examples<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"other-resources\">Other resources<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Video demos: The <a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" href=\"https:\/\/github.com\/microsoft\/TaskWeaver?tab=readme-ov-file#-demo-examples\" target=\"_blank\" rel=\"noopener noreferrer\">Demo Examples<span class=\"sr-only\"> (opens in new tab)<\/span><\/a> show two demo videos, the first one covers the motivating example presented above on&nbsp;anomaly detection;&nbsp;the second&nbsp;shows the case to forecast the price of Invesco QQQ Trust, an exchange-traded fund,&nbsp;over the next week.<\/li>\n\n\n\n<li>For more information, please refer to the&nbsp;<a class=\"msr-external-link glyph-append glyph-append-open-in-new-tab glyph-append-xsmall\" href=\"https:\/\/microsoft.github.io\/TaskWeaver\/\" target=\"_blank\" rel=\"noopener noreferrer\">TaskWeaver documentation.<span class=\"sr-only\"> (opens in new tab)<\/span><\/a>&nbsp;<\/li>\n\n\n\n<li>Technical report with mode details on design considerations: <a href=\"https:\/\/www.microsoft.com\/en-us\/research\/publication\/taskweaver-a-code-first-agent-framework\/\">technical report<\/a>.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>AI-backed virtual assistants face challenges in handling complex data structures. TaskWeaver helps users build assistants that understand diverse domain questions, follow examples, and efficiently execute customizable algorithms on complex data structures.<\/p>\n","protected":false},"author":42735,"featured_media":997701,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"msr-url-field":"","msr-podcast-episode":"","msrModifiedDate":"","msrModifiedDateEnabled":false,"ep_exclude_from_search":false,"_classifai_error":"","msr-author-ordering":[{"type":"user_nicename","value":"Shilin He","user_id":"40258"},{"type":"user_nicename","value":"Liqun Li","user_id":"43104"},{"type":"user_nicename","value":"Xu Zhang","user_id":"41841"},{"type":"user_nicename","value":"Bo Qiao","user_id":"37848"},{"type":"user_nicename","value":"Chaoyun Zhang","user_id":"42387"},{"type":"user_nicename","value":"Yu Kang","user_id":"39381"},{"type":"user_nicename","value":"Rujia Wang","user_id":"42549"},{"type":"user_nicename","value":"Qingwei Lin \u6797\u5e86\u7ef4","user_id":"33318"},{"type":"user_nicename","value":"Saravan Rajmohan","user_id":"41039"},{"type":"user_nicename","value":"Dongmei Zhang","user_id":"31665"}],"msr_hide_image_in_river":0,"footnotes":""},"categories":[1],"tags":[],"research-area":[13556,13563,13545],"msr-region":[],"msr-event-type":[],"msr-locale":[268875],"msr-post-option":[243984],"msr-impact-theme":[264846],"msr-promo-type":[],"msr-podcast-series":[],"class_list":["post-997686","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-research-blog","msr-research-area-artificial-intelligence","msr-research-area-data-platform-analytics","msr-research-area-human-language-technologies","msr-locale-en_us","msr-post-option-blog-homepage-featured"],"msr_event_details":{"start":"","end":"","location":""},"podcast_url":"","podcast_episode":"","msr_research_lab":[199560],"msr_impact_theme":["Computing foundations"],"related-publications":[],"related-downloads":[],"related-videos":[],"related-academic-programs":[],"related-groups":[714577,793670],"related-projects":[],"related-events":[],"related-researchers":[{"type":"user_nicename","value":"Liqun Li","user_id":43104,"display_name":"Liqun Li","author_link":"<a href=\"https:\/\/www.microsoft.com\/en-us\/research\/people\/liqli\/\" aria-label=\"Visit the profile page for Liqun Li\">Liqun Li<\/a>","is_active":false,"last_first":"Li, Liqun","people_section":0,"alias":"liqli"},{"type":"user_nicename","value":"Bo Qiao","user_id":37848,"display_name":"Bo Qiao","author_link":"<a href=\"https:\/\/www.microsoft.com\/en-us\/research\/people\/boqiao\/\" aria-label=\"Visit the profile page for Bo Qiao\">Bo Qiao<\/a>","is_active":false,"last_first":"Qiao, Bo","people_section":0,"alias":"boqiao"},{"type":"user_nicename","value":"Yu Kang","user_id":39381,"display_name":"Yu Kang","author_link":"<a href=\"https:\/\/www.microsoft.com\/en-us\/research\/people\/kay\/\" aria-label=\"Visit the profile page for Yu Kang\">Yu Kang<\/a>","is_active":false,"last_first":"Kang, Yu","people_section":0,"alias":"kay"},{"type":"user_nicename","value":"Rujia Wang","user_id":42549,"display_name":"Rujia Wang","author_link":"<a href=\"https:\/\/www.microsoft.com\/en-us\/research\/people\/rujiawang\/\" aria-label=\"Visit the profile page for Rujia Wang\">Rujia Wang<\/a>","is_active":false,"last_first":"Wang, Rujia","people_section":0,"alias":"rujiawang"},{"type":"user_nicename","value":"Qingwei Lin \u6797\u5e86\u7ef4","user_id":33318,"display_name":"Qingwei Lin \u6797\u5e86\u7ef4","author_link":"<a href=\"https:\/\/www.microsoft.com\/en-us\/research\/people\/qlin\/\" aria-label=\"Visit the profile page for Qingwei Lin \u6797\u5e86\u7ef4\">Qingwei Lin \u6797\u5e86\u7ef4<\/a>","is_active":false,"last_first":"\u6797\u5e86\u7ef4, Qingwei Lin","people_section":0,"alias":"qlin"},{"type":"user_nicename","value":"Saravan Rajmohan","user_id":41039,"display_name":"Saravan Rajmohan","author_link":"<a href=\"https:\/\/www.microsoft.com\/en-us\/research\/people\/saravar\/\" aria-label=\"Visit the profile page for Saravan Rajmohan\">Saravan Rajmohan<\/a>","is_active":false,"last_first":"Rajmohan, Saravan","people_section":0,"alias":"saravar"},{"type":"user_nicename","value":"Dongmei Zhang","user_id":31665,"display_name":"Dongmei Zhang","author_link":"<a href=\"https:\/\/www.microsoft.com\/en-us\/research\/people\/dongmeiz\/\" aria-label=\"Visit the profile page for Dongmei Zhang\">Dongmei Zhang<\/a>","is_active":false,"last_first":"Zhang, Dongmei","people_section":0,"alias":"dongmeiz"}],"msr_type":"Post","featured_image_thumbnail":"<img width=\"960\" height=\"540\" src=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-960x540.png\" class=\"img-object-cover\" alt=\"TaskWeaver chat user interface\" decoding=\"async\" loading=\"lazy\" srcset=\"https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-960x540.png 960w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-300x169.png 300w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-1024x576.png 1024w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-768x432.png 768w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-1066x600.png 1066w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-655x368.png 655w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-343x193.png 343w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-240x135.png 240w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-640x360.png 640w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1-1280x720.png 1280w, https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2024\/01\/TaskWeaver-BlogHeroFeature-1400x788-1.png 1400w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/>","byline":"","formattedDate":"January 11, 2024","formattedExcerpt":"AI-backed virtual assistants face challenges in handling complex data structures. TaskWeaver helps users build assistants that understand diverse domain questions, follow examples, and efficiently execute customizable algorithms on complex data structures.","locale":{"slug":"en_us","name":"English","native":"","english":"English"},"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts\/997686","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/users\/42735"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/comments?post=997686"}],"version-history":[{"count":28,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts\/997686\/revisions"}],"predecessor-version":[{"id":998634,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/posts\/997686\/revisions\/998634"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media\/997701"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media?parent=997686"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/categories?post=997686"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/tags?post=997686"},{"taxonomy":"msr-research-area","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/research-area?post=997686"},{"taxonomy":"msr-region","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-region?post=997686"},{"taxonomy":"msr-event-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-event-type?post=997686"},{"taxonomy":"msr-locale","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-locale?post=997686"},{"taxonomy":"msr-post-option","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-post-option?post=997686"},{"taxonomy":"msr-impact-theme","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-impact-theme?post=997686"},{"taxonomy":"msr-promo-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-promo-type?post=997686"},{"taxonomy":"msr-podcast-series","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-podcast-series?post=997686"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}