已实现“设置里手动填写上下文保存长度(默认 10 万,最大 20 万)”:
新增设置项:Source/WulaFallenEmpire/WulaFallenEmpireSettings.cs 增加 maxContextTokens 并持久化。 设置界面:Source/WulaFallenEmpire/WulaFallenEmpireMod.cs 增加输入框(Widgets.TextFieldNumeric,范围 1000..200000)。 生效点:Source/WulaFallenEmpire/EventSystem/AI/UI/Dialog_AIConversation.cs 压缩历史时不再用常量 MaxHistoryTokens,改为读取 WulaFallenEmpireMod.settings.maxContextTokens。 文本:1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/WULA_Keyed.xml 添加 Wula_AISettings_MaxContextTokens / Wula_AISettings_MaxContextTokensDesc。 已编译输出:1.6/1.6/Assemblies/WulaFallenEmpire.dll
This commit is contained in:
Binary file not shown.
@@ -156,6 +156,8 @@
|
|||||||
<Wula_AISettings_ApiKey>API 密钥:</Wula_AISettings_ApiKey>
|
<Wula_AISettings_ApiKey>API 密钥:</Wula_AISettings_ApiKey>
|
||||||
<Wula_AISettings_BaseUrl>API 地址 (Base URL):</Wula_AISettings_BaseUrl>
|
<Wula_AISettings_BaseUrl>API 地址 (Base URL):</Wula_AISettings_BaseUrl>
|
||||||
<Wula_AISettings_Model>模型名称:</Wula_AISettings_Model>
|
<Wula_AISettings_Model>模型名称:</Wula_AISettings_Model>
|
||||||
|
<Wula_AISettings_MaxContextTokens>上下文保存长度 (Token 估算上限):</Wula_AISettings_MaxContextTokens>
|
||||||
|
<Wula_AISettings_MaxContextTokensDesc>控制 AI 对话历史在超过上限时自动压缩。数值越小越省成本,但 AI 更容易“忘记”。</Wula_AISettings_MaxContextTokensDesc>
|
||||||
<Wula_AISettings_UseStreaming>启用流式传输 (实验性)</Wula_AISettings_UseStreaming>
|
<Wula_AISettings_UseStreaming>启用流式传输 (实验性)</Wula_AISettings_UseStreaming>
|
||||||
<Wula_AISettings_UseStreamingDesc>启用实时打字机效果。如果遇到问题请禁用。</Wula_AISettings_UseStreamingDesc>
|
<Wula_AISettings_UseStreamingDesc>启用实时打字机效果。如果遇到问题请禁用。</Wula_AISettings_UseStreamingDesc>
|
||||||
|
|
||||||
|
|||||||
@@ -21,11 +21,17 @@ namespace WulaFallenEmpire.EventSystem.AI.UI
|
|||||||
private bool _scrollToBottom = false;
|
private bool _scrollToBottom = false;
|
||||||
private List<AITool> _tools = new List<AITool>();
|
private List<AITool> _tools = new List<AITool>();
|
||||||
private Dictionary<int, Texture2D> _portraits = new Dictionary<int, Texture2D>();
|
private Dictionary<int, Texture2D> _portraits = new Dictionary<int, Texture2D>();
|
||||||
private const int MaxHistoryTokens = 100000;
|
private const int DefaultMaxHistoryTokens = 100000;
|
||||||
private const int CharsPerToken = 4;
|
private const int CharsPerToken = 4;
|
||||||
private int _continuationDepth = 0;
|
private int _continuationDepth = 0;
|
||||||
private const int MaxContinuationDepth = 6;
|
private const int MaxContinuationDepth = 6;
|
||||||
|
|
||||||
|
private static int GetMaxHistoryTokens()
|
||||||
|
{
|
||||||
|
int configured = WulaFallenEmpire.WulaFallenEmpireMod.settings?.maxContextTokens ?? DefaultMaxHistoryTokens;
|
||||||
|
return Math.Max(1000, Math.Min(200000, configured));
|
||||||
|
}
|
||||||
|
|
||||||
// Static instance for tools to access
|
// Static instance for tools to access
|
||||||
public static Dialog_AIConversation Instance { get; private set; }
|
public static Dialog_AIConversation Instance { get; private set; }
|
||||||
|
|
||||||
@@ -467,7 +473,7 @@ When the player requests any form of resources, you MUST follow this multi-turn
|
|||||||
private void CompressHistoryIfNeeded()
|
private void CompressHistoryIfNeeded()
|
||||||
{
|
{
|
||||||
int estimatedTokens = _history.Sum(h => h.message?.Length ?? 0) / CharsPerToken;
|
int estimatedTokens = _history.Sum(h => h.message?.Length ?? 0) / CharsPerToken;
|
||||||
if (estimatedTokens > MaxHistoryTokens)
|
if (estimatedTokens > GetMaxHistoryTokens())
|
||||||
{
|
{
|
||||||
int removeCount = _history.Count / 2;
|
int removeCount = _history.Count / 2;
|
||||||
if (removeCount > 0)
|
if (removeCount > 0)
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ namespace WulaFallenEmpire
|
|||||||
public class WulaFallenEmpireMod : Mod
|
public class WulaFallenEmpireMod : Mod
|
||||||
{
|
{
|
||||||
public static WulaFallenEmpireSettings settings;
|
public static WulaFallenEmpireSettings settings;
|
||||||
|
private string _maxContextTokensBuffer;
|
||||||
|
|
||||||
public WulaFallenEmpireMod(ModContentPack content) : base(content)
|
public WulaFallenEmpireMod(ModContentPack content) : base(content)
|
||||||
{
|
{
|
||||||
@@ -38,6 +39,12 @@ namespace WulaFallenEmpire
|
|||||||
listingStandard.Label("Wula_AISettings_Model".Translate());
|
listingStandard.Label("Wula_AISettings_Model".Translate());
|
||||||
settings.model = listingStandard.TextEntry(settings.model);
|
settings.model = listingStandard.TextEntry(settings.model);
|
||||||
|
|
||||||
|
listingStandard.GapLine();
|
||||||
|
listingStandard.Label("Wula_AISettings_MaxContextTokens".Translate());
|
||||||
|
listingStandard.Label("Wula_AISettings_MaxContextTokensDesc".Translate());
|
||||||
|
Rect tokensRect = listingStandard.GetRect(Text.LineHeight);
|
||||||
|
Widgets.TextFieldNumeric(tokensRect, ref settings.maxContextTokens, ref _maxContextTokensBuffer, 1000, 200000);
|
||||||
|
|
||||||
listingStandard.End();
|
listingStandard.End();
|
||||||
base.DoSettingsWindowContents(inRect);
|
base.DoSettingsWindowContents(inRect);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,12 +7,14 @@ namespace WulaFallenEmpire
|
|||||||
public string apiKey = "sk-xxxxxxxx";
|
public string apiKey = "sk-xxxxxxxx";
|
||||||
public string baseUrl = "https://api.deepseek.com";
|
public string baseUrl = "https://api.deepseek.com";
|
||||||
public string model = "deepseek-chat";
|
public string model = "deepseek-chat";
|
||||||
|
public int maxContextTokens = 100000;
|
||||||
|
|
||||||
public override void ExposeData()
|
public override void ExposeData()
|
||||||
{
|
{
|
||||||
Scribe_Values.Look(ref apiKey, "apiKey", "sk-xxxxxxxx");
|
Scribe_Values.Look(ref apiKey, "apiKey", "sk-xxxxxxxx");
|
||||||
Scribe_Values.Look(ref baseUrl, "baseUrl", "https://api.deepseek.com");
|
Scribe_Values.Look(ref baseUrl, "baseUrl", "https://api.deepseek.com");
|
||||||
Scribe_Values.Look(ref model, "model", "deepseek-chat");
|
Scribe_Values.Look(ref model, "model", "deepseek-chat");
|
||||||
|
Scribe_Values.Look(ref maxContextTokens, "maxContextTokens", 100000);
|
||||||
base.ExposeData();
|
base.ExposeData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user