
오류를 조사하고 해결책을 제안하는 C# AI 에이전트 구축하기
요약
C#과 Semantic Kernel을 사용하여 소프트웨어 오류를 조사하고 해결책을 제안하는 AI 에이전트 구축 방법을 소개합니다. 단순한 답변을 넘어 Tavily Search API와 함수 호출을 통해 외부 문서를 검증하고 디버깅 프로세스를 자동화하는 설계를 다룹니다.
핵심 포인트
- Semantic Kernel의 ChatCompletionAgent 활용
- Tavily Search API를 통한 실시간 외부 정보 조사
- 함수 호출 기반의 플러그인 아키텍처 설계
- 검증된 근거를 바탕으로 한 디버깅 프로세스 자동화
우리 모두 이런 경험이 있습니다.
- 예외(Exception)가 발생함
- 스택 트레이스(Stack trace)를 복사함
- Google을 켬
- StackOverflow를 읽음
- GitHub 이슈를 확인함
- Microsoft 문서를 확인함
- 무작위 블로그를 읽음
- 탭을 세 개 더 켬
30분이 지났지만 당신은 여전히 디버깅 중입니다.
현대의 AI 도구들이 도움을 주지만, 한 가지 문제가 있습니다. 이들은 종종 기억(Memory)에 의존하여 답변한다는 점입니다.
때때로 이들은 그럴듯하게 들리지만, 실제 개발자 토론, GitHub 이슈 또는 공식 문서(Official documentation)를 통해 검증되지 않은 해결책을 내놓기도 합니다.
저는 제 옆에 앉아 있는 시니어 엔지니어처럼 행동하는 AI 에이전트를 원했습니다:
- 예외(Exception)를 이해함
- 외부 소스를 조사함
- 커뮤니티의 발견 사항을 분석함
- 발생 가능한 원인의 순위를 매김
- 근거와 함께 해결책을 제안함
그래서 저는 다음과 같은 기술들을 사용하여 .NET 오류 조사 에이전트(Error Research Agent)를 구축했습니다:
- C#
- Semantic Kernel
- Azure OpenAI
- Tavily Search API
- 함수 호출 (Function Calling)
- 플러그인 기반 아키텍처 (Plugin-based architecture)
목표는 다음과 같은 것이 아니었습니다:
ChatGPT를 C#과 연결해보자
목표는 이것이었습니다:
AI에게 개발자들이 실제로 소프트웨어를 디버깅하는 방법을 가르치자.
에이전트 구축하기
저는 Semantic Kernel의 ChatCompletionAgent를 사용했습니다.
에이전트 자체에는 응답하기 전에 조사를 강제하는 명시적인 지침(Instructions)이 포함되어 있습니다.
ChatCompletionAgent agent = new()
{
Name = "DotNetErrorAgent",
...
csharp
...
"",
Kernel = kernel,
Arguments = new KernelArguments(settings)
};
여기서 흥미로운 부분은 프롬프트(Prompt)가 아닙니다.
그것은 프로세스 설계(Process design)입니다.
...
public class WebSearchPlugin
{
private readonly HttpClient _httpClient;
private readonly string _apiKey;
public WebSearchPlugin(HttpClient httpClient, IConfiguration configuration)
{
_httpClient = httpClient;
_apiKey = configuration["Tavily:ApiKey"]!;
}
[KernelFunction]
[Description("소프트웨어 오류, 수정 방법, GitHub 이슈 및 문제 해결 논의를 위해 웹을 검색합니다")]
public async Task<string> SearchErrorSolutions([Description("스택 트레이스(stack trace)를 포함한 전체 예외 메시지")] string error)
{
var body = new
{
query =
$"""
다음 문제에 대한 해결책을 찾으세요:
{error}
포함 사항: GitHub 이슈, StackOverflow, 공식 문서, 근본 원인
""",
max_results = 5,
include_answer = "advanced",
search_depth = "advanced"
};
var request = new HttpRequestMessage(HttpMethod.Post, "https://api.tavily.com/search");
request.Content = new StringContent(JsonSerializer.Serialize(body), Encoding.UTF8, "application/json");
request.Headers.Add("Authorization", $"Bearer {_apiKey}");
var response = await _httpClient.SendAsync(request);
return await response.Content.ReadAsStringAsync();
}
}
**에이전트 응답 구조 (The Agent Response Structure)**
저는 출력이 단순히 생성된 텍스트가 아니라, 시니어 엔지니어의 분석처럼 느껴지기를 원했습니다.
...
.NET 예외를 붙여넣으세요:
System.InvalidOperationException: Unable to resolve service for type IUserService while activating UserController
내부 동작 과정:
- Semantic Kernel이 예외를 수신합니다.
- AI가 플러그인 (plugin)을 호출합니다.
- Tavily가 외부 소스를 검색합니다.
- 결과가 반환됩니다.
- AI가 조사 내용을 분석합니다.
- 근본 원인 (root causes)의 순위가 매겨집니다.
- 해결책이 생성됩니다.
출력:
[](https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwetdc327yxt2pz98ggij.png)
**배운 점 (What I Learned)**
AI 에이전트는 단순히 텍스트를 생성하는 것이 아니라 운영 워크플로우 (operational workflows)를 따를 때 가치가 생깁니다.
AI 시스템의 품질은 모델의 지능보다는 프로세스 설계 (process design)에 더 크게 좌우됩니다.
제가 목격하기 시작한 변화는 바로 이것입니다:
프롬프트 엔지니어링 (Prompt engineering)도 중요합니다.
하지만 워크플로 엔지니어링 (workflow engineering)이 더 중요합니다.
궁금합니다:
여러분이라면 AI 디버깅 어시스턴트 (AI debugging assistant)를 어떻게 개선하시겠습니까?
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기