Описание
Я создаю локальное приложение LLM, которое работает нормально, но при ответе останавливается на 170 словах, что соответствует 256 токенам.
На данный момент я пробовал следующие модели: Meta-Llama-3.1-8B-Instruct-Q8_0.gguf и mistral-7b-instruct-v0.2.Q8_0.gguf.
Я перепробовал все, что мог, и использовал Gemini и Chatgpt, чтобы показать решения, но, кажется, ничего не работает.
Ответ прекращается, а агент нет: агент думает...
Я не использую Python для работы с моделью, а вместо этого я использую using:
LLama;
using LLama.Common;
using LLamaSharp.SemanticKernel;
using LLamaSharp.SemanticKernel.ChatCompletion;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Identity.Client;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
Любая помощь приветствуется.
Вопрос
Как правильно настроить модель для генерации более длинных ответов?
Является ли это ограничением LLamaSharp?
Было бы лучше использовать Python? Если да, то как использовать Python вместо LLamaSharp?
Это мой файл appsettings.json:
"AI": {
"Local": {
"Url": "http://localhost:11434/v1",
"ModelName": "llama3",
"ModelPath": "D:/AI/Models/mistral-7b-instruct-v0.2.Q8_0.gguf",
"ContextSize": 8192, // > LOADING LOCAL GGUF MODEL: {Path}", modelPath);
try
{
var modelParams = new ModelParams(modelPath)
{
ContextSize = localConfig.GetValue("ContextSize", 4096),
GpuLayerCount = localConfig.GetValue("GpuLayerCount", 0),
};
var weights = LLamaWeights.LoadFromFile(modelParams);
var context = weights.CreateContext(modelParams);
var inferenceParams = new InferenceParams() { MaxTokens = 4096 };
logger.LogInformation("Applying session-level MaxTokens override of {MaxTokens} to local model executor.", inferenceParams.MaxTokens);
var executor = new InteractiveExecutor(context);
var chatService = new LLamaSharpChatCompletion(executor);
builder.Services.AddSingleton(chatService);
logger.LogInformation(">> GGUF MODEL LOADED SUCCESSFULLY.");
}
catch (Exception ex)
{
logger.LogCritical(ex, "FATAL ERROR INITIALIZING LLAMASHARP. The application cannot start without a valid local model configuration.");
throw;
}
}
else
{
logger.LogCritical("Local model file not found at path specified in AI:Local:ModelPath. Application cannot start.");
throw new FileNotFoundException("Local GGUF model file not found.", localConfig["ModelPath"]);
}
break;
case "Azure":
var azureConfig = config.GetSection("AI:Azure");
var azureDeploymentName = azureConfig["DeploymentName"];
var azureEndpoint = azureConfig["Endpoint"];
var azureApiKey = azureConfig["ApiKey"];
if (string.IsNullOrEmpty(azureDeploymentName) || string.IsNullOrEmpty(azureEndpoint) || string.IsNullOrEmpty(azureApiKey))
{
throw new InvalidOperationException("Azure OpenAI configuration is incomplete. 'DeploymentName', 'Endpoint', and 'ApiKey' are required in the 'AI:Azure' section of appsettings.json.");
}
logger.LogInformation("Configuring LLM with Azure OpenAI. Deployment: {Deployment}", azureDeploymentName);
builder.AddAzureOpenAIChatCompletion(azureDeploymentName, azureEndpoint, azureApiKey);
break;
case "OpenAI":
default:
var openAIConfig = config.GetSection("AI:OpenAI");
var openAIModelId = openAIConfig["ModelId"];
var openAIApiKey = openAIConfig["ApiKey"];
var openAIOrgId = openAIConfig["OrgId"]; // Optional
if (string.IsNullOrEmpty(openAIModelId) || string.IsNullOrEmpty(openAIApiKey))
{
throw new InvalidOperationException("OpenAI configuration is incomplete. 'ModelId' and 'ApiKey' are required in the 'AI:OpenAI' section of appsettings.json.");
}
logger.LogInformation("Configuring LLM with OpenAI. Model: {Model}", openAIModelId);
builder.AddOpenAIChatCompletion(openAIModelId, openAIApiKey, openAIOrgId);
break;
}
return builder;
}
private static string? ResolveModelPath(string? path)
{
if (string.IsNullOrEmpty(path)) return null;
if (File.Exists(path)) return path;
var relative = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, path);
if (File.Exists(relative)) return relative;
var projectRoot = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../../../"));
var rootPath = Path.Combine(projectRoot, path);
if (File.Exists(rootPath)) return rootPath;
return null;
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... app-on-net