{"id":128,"date":"2025-02-10T08:30:00","date_gmt":"2025-02-10T00:30:00","guid":{"rendered":"https:\/\/blog.liu-qi.cn\/?p=128"},"modified":"2026-04-18T21:40:42","modified_gmt":"2026-04-18T13:40:42","slug":"deepseek%e9%a3%9e%e4%b9%a6%ef%bc%9a%e6%95%99%e4%bd%a0%e7%94%a8%e5%a4%9a%e7%bb%b4%e8%a1%a8%e6%a0%bc%e6%89%8b%e6%90%93%e4%b8%80%e4%b8%aaai%e5%ba%94%e7%94%a8%e7%bb%99%e4%ba%ba%e7%9c%8b%e5%a7%bb%e7%bc%98","status":"publish","type":"post","link":"https:\/\/en.blog.liu-qi.cn\/2025\/02\/10\/deepseek%e9%a3%9e%e4%b9%a6%ef%bc%9a%e6%95%99%e4%bd%a0%e7%94%a8%e5%a4%9a%e7%bb%b4%e8%a1%a8%e6%a0%bc%e6%89%8b%e6%90%93%e4%b8%80%e4%b8%aaai%e5%ba%94%e7%94%a8%e7%bb%99%e4%ba%ba%e7%9c%8b%e5%a7%bb%e7%bc%98\/","title":{"rendered":"DeepSeek + Feishu: Using Multi-Dimensional Tables to Build an AI Fortune-Telling App for Relationship Compatibility"},"content":{"rendered":"<p>Came across several posts in the fortune-telling circle, analyzing with great seriousness what DeepSeek can and cannot predict accurately\u2014it all feels a bit surreal. Although I knew that metaphysics had been quietly booming beneath the surface in recent years, and AI fortune-telling is nothing new, seeing it openly spread outside the circle while insiders solemnly analyze it seems like a first for DeepSeek.<\/p>\n<p>So, I decided to join in on the fun.<\/p>\n<p>Here\u2019s a slightly more elegant approach than just passing around prompts:<\/p>\n<p>DeepSeek API + Feishu Multidimensional Table.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/001-f67530f05a75-scaled.png\" \/><\/p>\n<p>Use the collection form in the multidimensional table to gather birth date and time information. After users submit, the system automatically calls the DeepSeek API to calculate the compatibility between two people. Users can then check the results by entering their names.<\/p>\n<p>This entire process can be completed using the collection form and automation features of Feishu Multidimensional Table.<\/p>\n<p>First, we need to set up a basic information table. It should include the names for querying results, the birth dates and times (BaZi) for both the man and woman for calculations, and a field for the final result.<\/p>\n<p>Also, an auxiliary field for gender and a thought process field to store the reasoning model&#8217;s &#8216;think&#8217; part. These fields are not currently used but can be added for future functionality or user analysis.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/002-6ac9fe13ccf7-scaled.png\" \/><\/p>\n<p>Next, simply use the form generation feature to create a collection form.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/003-9e414353e47f.png\" \/><\/p>\n<p>The system will automatically generate a form based on existing fields, with simple editing and customization options.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/004-b78f33160d54.png\" \/><\/p>\n<p>For the birth date and time section, I embedded an intelligent agent that converts Gregorian dates into BaZi.<\/p>\n<p>Although you could directly input Gregorian birth dates and still get results, the point here is the ritualistic feel. So I require the format to follow the traditional BaZi style and provide a converter. Also, to address the common issue of people not knowing their exact birth time, I offer a solution that defaults to noon (12:00 PM) to lower the barrier for users.<\/p>\n<p>This intelligent agent was built using ByteDance&#8217;s agent platform, Coze (https:\/\/www.coze.cn)\u2014it only takes about three minutes to set up. Here&#8217;s a quick overview:<\/p>\n<p>First, go to Coze and create an intelligent agent. Choose &#8216;AI Create,&#8217; enter &#8216;BaZi calculator,&#8217; and generate it.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/005-08c9fa3256dd.png\" \/><\/p>\n<p>The AI will automatically create an agent and write the prompt.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/006-f207ecc09d30.png\" \/><\/p>\n<p>Then, we add two rules on this basis to ensure users who cannot provide time information can still use it smoothly, while also specifying the output format to enhance the ritualistic feel.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/007-ccd48e774b00.png\" \/><\/p>\n<p>Now, write another opening statement.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/008-9a7ab421384a.png\" \/><\/p>\n<p>Test it out\u2014it works perfectly.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/009-64f94bb6fadd.png\" \/><\/p>\n<p>Then click &#8216;Publish&#8217; in the top-right corner to get the external link.<\/p>\n<p>(The agent in Coze can be published to Doubao, Feishu, Douyin, WeChat, and multi-dimensional tables, and also offers API services, which is highly customizable. If you&#8217;re interested, you can explore it further.)<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/010-1cee0602717b.png\" \/><\/p>\n<p>https:\/\/www.coze.cn\/s\/iP6SeUdN\/<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/011-889c68a659df.png\" \/><\/p>\n<p>However, Coze has a drawback: using the agent still requires registration, which slightly affects the smoothness of the user journey. It might be better to directly build a converter page and host it on a server, but for this demonstration, we&#8217;ll stick with this approach.<\/p>\n<p>Back to the main topic: next, click &#8216;View Query Page&#8217; in the top-right corner to create the results query page.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/012-48986c9c84cd.png\" \/><\/p>\n<p>Publish the collection form and query page, and configure permissions as needed.<\/p>\n<p>With this, the two main interaction interfaces\u2014user registration and test result querying\u2014are set up.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/013-83af6bdd90c8.png\" \/><\/p>\n<p>Next comes the automation part, which is also our core feature: letting DeepSeek automatically calculate the user&#8217;s romantic compatibility based on the entered information.<\/p>\n<p>Actually, Feishu recently built in a DeepSeek R1 field shortcut, which allows for quick invocation of DeepSeek R1 directly.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/014-dc94425b121a.png\" \/><\/p>\n<p>This feature is convenient but only supports calling the DeepSeek model through Volcano Engine.<\/p>\n<p>Volcano&#8217;s free quota is relatively low, and fees kick in once you exceed a certain number of tokens.<\/p>\n<p>So, we&#8217;ll use automation instead, enabling us to call any API for much greater flexibility. (This assumes your Feishu multi-dimensional table has automation features enabled.)<\/p>\n<p>Create a new automation workflow.<\/p>\n<p>For the first step, set the trigger condition to &#8216;When a new record is added.&#8217; If all required fields in the collection form are set to mandatory, none of them will be empty, so you can choose any field.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/015-69082609b514.png\" \/><\/p>\n<p>Next, for the second step operation, you need to prepare the corresponding AI model&#8217;s call name, API endpoint, and API KEY.<\/p>\n<p>If not, you can first refer to the first half of this article:<\/p>\n<p><a href=\"https:\/\/blog.liu-qi.cn\/2025\/02\/06\/deepseek%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%80%BB%E7%B9%81%E5%BF%99%E6%80%8E%E4%B9%88%E5%8A%9E%EF%BC%9F%E4%B8%8D%E6%84%BF%E7%A8%8D%E5%90%8E%EF%BC%8C%E4%B8%8D%E5%A6%82%E8%AF%95%E8%AF%95%E9%80%9A%E8%BF%87api\/\">What to do when the DeepSeek server is always busy? If you don&#8217;t want to wait, why not try using an API to extend the life of your chat session?<\/a><\/p>\n<p>I&#8217;ll demonstrate using the SiliconFlow API:<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/016-8eba6a5dbc26.png\" \/><\/p>\n<p>Use the POST request method;<\/p>\n<p>For the input parameters, the request URL is the API&#8217;s Base URL, for SiliconFlow it is:<\/p>\n<p>https:\/\/api.siliconflow.cn\/v1\/chat\/completions\uff1b<\/p>\n<p>No query parameters are needed; fill in two key-value pairs in the request headers:<\/p>\n<pre><code>Content-Type\uff1aapplication\/json\n<\/code><\/pre>\n<p>Next:<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/017-25126ff13361.png\" \/><\/p>\n<p>The request body is actually the content of the Body section in the API documentation.<\/p>\n<p>Using the SiliconFlow documentation as an example:<\/p>\n<p>https:\/\/docs.siliconflow.cn\/api-reference\/chat-completions\/chat-completions<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/018-d51d13a2bcf1.png\" \/><\/p>\n<p>What we need to fill in are the items under Body. After configuring all parameters, this becomes the data part of the curl request on the right.<\/p>\n<p>However, since we are only making a simple conversation request and return, and the automation in the multi-dimensional table does not support function calls (i.e., the tools section on the right), we can simplify it to keep only the necessary parts.<\/p>\n<p>Below is the actual request body to fill in, which you can understand by referring to the documentation:<\/p>\n<pre><code>{\n<\/code><\/pre>\n<p>Pay attention to two points:<\/p>\n<p>1. &#8216;model&#8217;: followed by the model call name, which must be filled in strictly according to the name specified in the API documentation, otherwise an error will occur. The API documentation will clearly state this, just copy and paste it, for example, here is the model name from SiliconFlow:<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/019-8fb09068dee1.png\" \/><\/p>\n<p>Corresponding to the request body, it is this part:<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/020-2a5321bf4d3d.png\" \/><\/p>\n<p>Because the request delay for R1 is too high, I will use the distilled Qwen-7B model from R1 for demonstration. This model can be called for free in SiliconFlow.<\/p>\n<p>2. The Prompt part needs to reference the birth charts of both the man and woman from the newly added record in the first step (i.e., the user-entered record). This information is then passed to the AI within the prompt\u2014see the image for the operation steps:<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/021-2971e77add46.png\" \/><\/p>\n<p>Next, for the response body in the output parameters, you can choose between Text and JSON.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/022-6c77037db639.png\" \/><\/p>\n<p>If you choose Text, all information will be returned in text form at once, similar to:<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/023-6ae6532c35d5.png\" \/><\/p>\n<p>We only need the main answer content and the reasoning process, so we choose JSON.<\/p>\n<p>Check the Response section of the API documentation.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/024-4e98fff0db49.png\" \/><\/p>\n<p>The main answer content is &#8216;content&#8217;, and the reasoning process is &#8216;reasoning_content&#8217;.<\/p>\n<p>Lark&#8217;s multidimensional table automation requires writing the response body in the original response format to select the corresponding response parameters.<\/p>\n<p>That is:<\/p>\n<pre><code>\u251c\u2500\u2500 choices\n<\/code><\/pre>\n<p>Since JSON format is required, write the return values like this:<\/p>\n<pre><code>{\n<\/code><\/pre>\n<p>Then, steps 3 and 4 involve filling in the main answer content and the reasoning process into the corresponding fields\u2014we can use &#8216;Update Record&#8217; for this.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/025-841ca8be7e57.png\" \/><\/p>\n<p>In database terms, described with table vocabulary, a row is called a record, and a column is called a field.<\/p>\n<p>Select the record set to the newly added record from the first step, which corresponds to the user-entered row; in other words, write the content to be inserted into that row.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/026-1c4b7afe923c-scaled.png\" \/><\/p>\n<p>Next, in &#8216;Set Record Content&#8217;, select the field &#8216;Your Marriage Compatibility&#8217;\u2014with both row and column identified, this means writing the main answer content (content) into the &#8216;cell&#8217; (value) at their intersection.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/027-e6bab414af7c.png\" \/><\/p>\n<p>If you&#8217;ve written the response body correctly earlier, you can now reference &#8216;content&#8217; here. Selecting &#8216;content&#8217; means writing it into that &#8216;cell&#8217;.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/028-2b0ce4d965d6.png\" \/><\/p>\n<p>Step 4 is a repeat of Step 3\u2014write the reasoning process (reasoning_content) into the corresponding location.<\/p>\n<p>At this point, the automation configuration is complete.<\/p>\n<p>Whenever a new user enters information, it automatically calls the AI and then writes the result into the table.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/029-81ee7cbcd0a4.png\" \/><\/p>\n<p>After entering the information, users can wait for a short period and then check their relationship compatibility results in the query interface.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/030-1008b70a4b6b-scaled.png\" \/><\/p>\n<p>Currently, DeepSeek&#8217;s third-party APIs generally have relatively high delays, so you can also add a manual operation button to handle timeouts. Simply duplicate the previous automation flow and change &#8216;when a new record is added&#8217; to &#8216;when the button is clicked&#8217;.<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/031-ae2312becf21.png\" \/><\/p>\n<p>You can also switch to other APIs, such as the Flash series from Zhipu, which I quite like\u2014it&#8217;s free, not slow, and has decent performance. Of course, if you believe DeepSeek calculates more accurately, then never mind what I said.<\/p>\n<p>The above introduction is just a small trick. There are many derivative applications of multidimensional tables combined with AI, such as challenging the Stupid Bar training set with the tone of irritable guys from Tieba:<\/p>\n<p><img decoding=\"async\" alt=\"\" loading=\"lazy\" src=\"https:\/\/blog.liu-qi.cn\/wp-content\/uploads\/2026\/04\/032-abce6e48aed2-scaled.jpg\" \/><\/p>\n<p>Naturally, there are many scenarios in production that can be explored. A single field value in a multidimensional table is entirely sufficient to store an entire article. So, could there be derivatives for workflows like batch analysis, batch writing, and so on?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Learn how to use Feishu&#8217;s multi-dimensional tables and DeepSeek API to create an automated relationship compatibility analysis app based on birth charts.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[],"class_list":["post-128","post","type-post","status-publish","format-standard","hentry","category-articles"],"_links":{"self":[{"href":"https:\/\/en.blog.liu-qi.cn\/index.php\/wp-json\/wp\/v2\/posts\/128","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/en.blog.liu-qi.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/en.blog.liu-qi.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/en.blog.liu-qi.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/en.blog.liu-qi.cn\/index.php\/wp-json\/wp\/v2\/comments?post=128"}],"version-history":[{"count":0,"href":"https:\/\/en.blog.liu-qi.cn\/index.php\/wp-json\/wp\/v2\/posts\/128\/revisions"}],"wp:attachment":[{"href":"https:\/\/en.blog.liu-qi.cn\/index.php\/wp-json\/wp\/v2\/media?parent=128"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/en.blog.liu-qi.cn\/index.php\/wp-json\/wp\/v2\/categories?post=128"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/en.blog.liu-qi.cn\/index.php\/wp-json\/wp\/v2\/tags?post=128"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}