diff --git a/Yi.Abp.Net8/module/ai-stock/Yi.Framework.Stock.Domain/Managers/NewsManager.cs b/Yi.Abp.Net8/module/ai-stock/Yi.Framework.Stock.Domain/Managers/NewsManager.cs index c725a035..7e9ff774 100644 --- a/Yi.Abp.Net8/module/ai-stock/Yi.Framework.Stock.Domain/Managers/NewsManager.cs +++ b/Yi.Abp.Net8/module/ai-stock/Yi.Framework.Stock.Domain/Managers/NewsManager.cs @@ -4,6 +4,7 @@ using Yi.Framework.Stock.Domain.Entities; using Yi.Framework.Stock.Domain.Managers.SemanticKernel; using Yi.Framework.Stock.Domain.Managers.SemanticKernel.Plugins; using System.Text; +using System.IO; namespace Yi.Framework.Stock.Domain.Managers; @@ -64,23 +65,9 @@ public class NewsManager:DomainService newsContext.AppendLine("目前没有最近的新闻记录。"); } - var question = $$""" - 基于以下最近的新闻背景,生成一条新的股市相关新闻。 - - {{newsContext}} - - 请生成一条有关联性的新闻,包含以下要素: - 1. 新闻标题:吸引人且与股市、金融或经济相关 - 2. 新闻内容:详细且符合逻辑的报道,篇幅适中 - 3. 新闻简介:简明扼要的总结 - 4. 新闻来源:提供一个可信的媒体或机构名称 - - 注意: - - 新闻内容应当与前面的新闻有一定关联性 - - 内容应当暗示可能对股市产生某种影响(积极或消极) - - 行业焦点可以包括娱乐、科技、能源、金融等多个领域 - - 只需生成一次即可 - """; + var promptPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwwroot", "stock", "newsPrompt.txt"); + var question = await File.ReadAllTextAsync(promptPath); + question = question.Replace("{{newsContext}}", newsContext.ToString()); await _skClient.ChatCompletionAsync(question, ("NewsPlugins","save_news")); } diff --git a/Yi.Abp.Net8/module/ai-stock/Yi.Framework.Stock.Domain/Managers/StockMarketManager.cs b/Yi.Abp.Net8/module/ai-stock/Yi.Framework.Stock.Domain/Managers/StockMarketManager.cs index 44d0f96b..c5637966 100644 --- a/Yi.Abp.Net8/module/ai-stock/Yi.Framework.Stock.Domain/Managers/StockMarketManager.cs +++ b/Yi.Abp.Net8/module/ai-stock/Yi.Framework.Stock.Domain/Managers/StockMarketManager.cs @@ -12,6 +12,7 @@ using Yi.Framework.Stock.Domain.Managers.SemanticKernel; using Yi.Framework.Stock.Domain.Managers.SemanticKernel.Plugins; using Microsoft.Extensions.Hosting; using System.Text; +using System.IO; namespace Yi.Framework.Stock.Domain.Managers { @@ -422,35 +423,18 @@ namespace Yi.Framework.Stock.Domain.Managers { if (stockPrices.TryGetValue(stock.Id, out var price)) { - stocksContext.AppendLine($"{stock.MarketName}:id:{stock.Id} 最后一次价格:{price:F2}"); + stocksContext.AppendLine($"{stock.MarketName}:id:{stock.Id},简介:{stock.Description} 最后一次价格:{price:F2}"); } } - var question = $$""" - 根据最近的新闻和当前股票价格,预测多家股票未来24小时的价格走势 - - {{newsContext}} - - {{stocksContext}} - - 请分析上述新闻对各个股票可能产生的影响,并预测每支股票未来24小时的价格变动: - 1. 考虑新闻中提到的行业、公司或经济趋势 - 2. 分析这些因素对不同股票的积极或消极影响 - 3. 根据分析生成合理的价格波动 - - 对每支股票,请返回: - - 股票id - - 一个长度为24的价格数组,表示未来24小时(每小时整点)的预测价格 - - 价格变动应当符合以下规则: - - 相邻时间点的价格波动通常不超过前值的20% - - 考虑市场开盘和收盘时间可能带来的较大波动 - - 不同股票之间的相关性(如同行业股票可能有类似走势) - - 部分股票可能对某些新闻更敏感 - - 请确保数据格式正确,以便系统能够自动处理。 - """; - + // 从文件读取问题模板 + string promptTemplate = File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwwroot", "stock", "marketPrompt.txt")); + + // 替换变量 + string question = promptTemplate + .Replace("{{newsContext}}", newsContext.ToString()) + .Replace("{{stocksContext}}", stocksContext.ToString()); + await _skClient.ChatCompletionAsync(question, ("StockPlugins", "save_stocks")); } } diff --git a/Yi.Abp.Net8/src/Yi.Abp.Web/Yi.Abp.Web.csproj b/Yi.Abp.Net8/src/Yi.Abp.Web/Yi.Abp.Web.csproj index eb81b112..83941d49 100644 --- a/Yi.Abp.Net8/src/Yi.Abp.Web/Yi.Abp.Web.csproj +++ b/Yi.Abp.Net8/src/Yi.Abp.Web/Yi.Abp.Web.csproj @@ -53,6 +53,9 @@ Always + + Always + diff --git a/Yi.Abp.Net8/src/Yi.Abp.Web/wwwroot/stock/marketPrompt.txt b/Yi.Abp.Net8/src/Yi.Abp.Web/wwwroot/stock/marketPrompt.txt new file mode 100644 index 00000000..43bac9d3 --- /dev/null +++ b/Yi.Abp.Net8/src/Yi.Abp.Web/wwwroot/stock/marketPrompt.txt @@ -0,0 +1,23 @@ +根据最近的新闻和当前股票价格,预测多家股票未来24小时的价格走势 + +{{newsContext}} + +{{stocksContext}} + +请分析上述新闻对各个股票可能产生的影响,并预测每支股票未来24小时的价格变动: +1. 考虑新闻中提到的行业、公司或经济趋势 +2. 分析这些因素对不同股票的积极或消极影响 +3. 根据分析生成合理的价格波动 +4. 股票的简介是该股票行业、类型等信息准确的定位 + +对每支股票,请返回: +- 股票id +- 一个长度为24的价格数组,表示未来24小时(每小时整点)的预测价格 + +价格变动应当符合以下规则: +- 相邻时间点的价格波动通常不超过前值的20% +- 考虑市场开盘和收盘时间可能带来的较大波动 +- 不同股票之间的相关性(如同行业股票可能有类似走势) +- 部分股票可能对某些新闻更敏感 + +请确保数据格式正确,以便系统能够自动处理。 \ No newline at end of file diff --git a/Yi.Abp.Net8/src/Yi.Abp.Web/wwwroot/stock/newsPrompt.txt b/Yi.Abp.Net8/src/Yi.Abp.Web/wwwroot/stock/newsPrompt.txt new file mode 100644 index 00000000..a4cec731 --- /dev/null +++ b/Yi.Abp.Net8/src/Yi.Abp.Web/wwwroot/stock/newsPrompt.txt @@ -0,0 +1,15 @@ +基于以下最近的新闻背景,生成一条新的股市相关新闻。 + +{{newsContext}} + +请生成一条有关联性的新闻,包含以下要素: +1. 新闻标题:吸引人且与股市、金融或经济相关 +2. 新闻内容:详细且符合逻辑的报道,篇幅适中 +3. 新闻简介:简明扼要的总结 +4. 新闻来源:提供一个可信的媒体或机构名称 + +注意: +- 新闻内容应当与前面的新闻有一定关联性 +- 内容应当暗示可能对股市产生某种影响(积极或消极) +- 行业焦点可以包括娱乐、科技、能源、金融等多个领域 +- 只需生成一次即可 \ No newline at end of file