Geçən il,Bir neçə dəfə baş vermişəmçevrilişQazaxıstan 4JBu, sürətlə artan bir projektdir və güncellemələrlə tanış olmaq istəyirdim.Mən də LangChain4J-də Model Context Protocol serveri necə daxil etmək istəyirdim.
Beta versiyası 1
Mən son mesajımı 2024-ci ildə yazdım və o zamanki ən son versiyasını v0.35-ci ilə istifadə etdim.
Date |
Release |
---|---|
September 25th, 2024 |
0.35.0 |
December 22th, 2024 |
1.0.0-alpha1 |
February 10th, 2025 |
1.0.0-beta1 |
March 13th, 2025 |
1.0.0-beta2 |
April 12th, 2025 |
1.0.0-beta3 |
25 dekabr 2024
0 0 0 0
22 dekabr 2024
Əməkdarlıq 1.0.1
10 fevral 2025
Əməkdarlıq 1 BETA1
13 mart 2025
Əməkdarlıq 1.0 beta2
12 aprel 2025
Əvvəlki İçerikBeta3
“LangChain4J” xəbərləriSəməd“Mənim problemim var ki, bu problemin həllini davam etdirmək istəyirəm, bu problemin həllini davam etdirmək istəyirəm.
v0.35 |
v1.0.0-beta3 |
---|---|
val s = Sinks.many() |
val s = Sinks.many() |
Əsas səhifə (
Birləşmiş Ştatlar (
Əsas səhifə > String>()
ChatBot.talk (m.sessionId və m.text)
Əsas səhifə (s::tryEmitNext)
Əsas səhifə(s::tryEmitError)
Əsas səhifə
Əsas səhifə (
Başlanğıc
Əsas səhifə / Mədəniyyət / Mədəniyyət / Mədəniyyət (
Əsas səhifə (.az)
)
Əsas səhifə (
Birləşmiş Ştatlar (
Əsas səhifə > String>()
ChatBot.talk (m.sessionId və m.text)
Əsas səhifə (s::tryEmitNext)
Əsas səhifə(s::tryEmitError)
Ətraflı cavablar
Əsas səhifə (
Başlanğıc
Əsas səhifə / Mədəniyyət / Mədəniyyət / Mədəniyyət (
Əsas səhifə (.az)
)
Reaktorun integrasiyası
“LangChain4J” “Project Reactor” (Project Reactor) integrasiyasını təqdim edir; Əvvəlki müsahibələrimdə bunu özüm də özüm də özüm də özüm də özüm də özüm də özüm də özüm də özüm də özüm də özüm də özüm də özümü də özüm də özüm də özüm də özüm də özüm də özüm də özüm də özüm də özüm də.a lot.
Mən istifadə edirəmAiServices
Əvvəlcə LangChain4J üçün Runtime-də implementiya etmək üçün bir interfeis definedim:
interface ChatBot {
fun talk(@MemoryId sessionId: String, @UserMessage message: String): TokenStream
}
Bundan başqa, aşağıdaki bağımlılıqları qeyd etmək lazımdır:
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-reactor</artifactId>
<version>1.0.0-beta3</version>
</dependency>
Artıq qayıtma tipini dəyişə bilərik.Flux<String>
İki aTokenStream
İşte güncellenmiş imzalar:
interface ChatBot {
fun talk(@MemoryId sessionId: String, @UserMessage message: String): Flux<String>
}
Ona görə də yaradıcılığınsink
Bundan başqa, kodunu aşağıda izah edə bilərik:
val flux = chatBot.talk(m.sessionId, m.text)
ServerResponse.ok().bodyAndAwait(flux.asFlow())
Unutmayın ki, iki gündür problemin düzəltməsi sizi dokumentasiya oxumağa iki saat qurtara bilər!
Kontekst protokolu serverinin qurulması
Bu hissədə, mən mənim LangChain4J aplikasiyasına bir <abbr title="Model Context Protocol">MCP</abbr> daxil etmək istəyirəm.
Xatırladaq ki, genişlənmiş
Bu səbəbdən, şirkətlər yeni modellərin versiyalarının öyrənilməsini kəskinləşdirir. bir modelin əsaslılığı zamanla bilgi toqquşub və dəyişir, LLM'nin bazası dəyişilməzdir, ancaq LLM-nin bazası dəyişilməzdir.
Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq ki, Xatırladaq.
Kontekst protokolları
LLM-lərin statik xüsusiyyətlərini işləmək üçün ən yeni yol MCP-dir.
VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu.
Model Context Protokolü ilə başlayın
VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu.
Model Context Protokolü ilə başlayın
MCP-nin RAG-a qarşı iki faydası vardır:
-
Data processed by a RAG is tailored for a model. If one wants to use a new model, one must re-execute the parsing phase. MCP standardizes the interactions between a client and a server, making them technology-independent.
-
RAG allows the reading of data. MCP allows any API call to either access data dynamically or execute actions!
MCP definisiyaİki alternativ avtobusClient-Server ilə əlaqələr üçün:
- Stdio: Client bir subprocess başlatır və kommunikasiya standart içərisində və standartdan çıxır.
- HTTP və Server-Sent Events
Solutions xəritədə
Artıq bir neçə ildir ki, bu problemin başlanğıcını MCP serveri seçmək lazımdır.BuradaYaxşı başlanğıcdır, amma mən seçmişəm.GitHub MCP serverləriBu barədə “LangChain4J” məlumat yayıb.
GitHub MCP serveriStadiyaVVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu.
Bir çox araşdırmalardan sonra, buMCP-dən istifadəProqram. Bu, stdio-dan HTTP-yə, ya da HTTP-dən stdio-ya keçirməyə imkan verir. Bu da bir Docker görüntüsü olaraq mövcuddur. Server və proxy-i aşağıdaki ilə birləşdirə bilərik:Dockerfile
:
FROM ghcr.io/sparfenyuk/mcp-proxy:latest
ENV VERSION=0.2.0
ENV ARCHIVE_NAME=github-mcp-server_Linux_x86_64.tar.gz
RUN wget https://github.com/github/github-mcp-server/releases/download/v$VERSION/$ARCHIVE_NAME -O /tmp/$ARCHIVE_NAME \ #1
&& tar -xzvf /tmp/$ARCHIVE_NAME -C /opt \ #2
&& rm /tmp/$ARCHIVE_NAME #3
RUN chmod +x /opt/github-mcp-server #4
- Arşivlər Download
- Bunu ekstraksiya
- Arşivləri silin
- Binary Executable xəritədə
Düşünürəm ki, definisiya edə bilmərik.CMD
Dubay polisinin idarə etdiyi superkarlar – bu, artıq çox adi bir hala çevrilib.docker-compose.yaml
:
services:
mcp-server:
build:
context: github-mcp-server
env_file:
- .env #1
command:
- --pass-environment #2
- --sse-port=8080 #3
- --sse-host=0.0.0.0 #4
- -- #5
- /opt/github-mcp-server #6
- --toolsets
- all
- stdio
- Biz GITHUB_PERSONAL_ACCESS_TOKEN çevrimiçi bir dəyişənə ehtiyacımız var ki, GitHub-da autentifikasiya oluna bilər
- Bütün çevrimiçi variabilləri subprocess-ə daxil edin
- Dinləmə portunu seçin
- Hər bir IP
- Proxy stdio MCP serverinə dashdan sonra bağlanır
- Bütün seçicilər aktivləşdirilmişdir.
Görüntüləri göstərəcək/sse
Xatırladaq ki, port 8080
Solutions xəritədə
“Qəbələ”nin qələbəsi daha da aşağı düşübMCP-də LangChain4J dokumentasiyasıƏsas səhifə » Əsas səhifə » Əsas səhifə » Əsas səhifə » Əsas səhifə
bean {
val transport = HttpMcpTransport.Builder()
.sseUrl(ref<ApplicationProperties>().mcp.url) //1
.logRequests(true) //2
.logResponses(true) //2
.build()
val mcpClient = DefaultMcpClient.Builder()
.transport(transport)
.build()
mcpClient.listTools().forEach { println(it) } //3
McpToolProvider.builder()
.mcpClients(listOf(mcpClient))
.build()
}
bean {
coRouter {
val chatBot = AiServices
.builder(ChatBot::class.java)
.streamingChatLanguageModel(ref<StreamingChatLanguageModel>())
.chatMemoryProvider { MessageWindowChatMemory.withMaxMessages(40) }
.contentRetriever(EmbeddingStoreContentRetriever.from(ref<EmbeddingStore<TextSegment>>()))
.toolProvider(ref<McpToolProvider>()) //4
.build()
POST("/")(PromptHandler(chatBot)::handle)
}
}
- SSE URL-ni parametrləşdirmək üçün ConfigurationProperty sınıfı ekledim
- MCP protokolu protokolları müştərilərə göndərmək üçün bir yol verir.
- Buna ehtiyac yoxdur, lakin müştərinin serverə bağlandığından və sağlanan alətləri listə verə biləcəyindən mənə kömək etdi.
- Əvvəlki məqaləMCP-nin yaradıcılığında problemlər var
Bu vaxt, model MCP-serverə kayıtlı hər hansı bir alətlə eşidən bir istefa göndərilməlidir.
curl -N -H 'Content-Type: application/json' localhost:8080 -d '{ "sessionId": "1", "text": "What are my top three most popular GitHub repos?" }'
Bir neçə dəfə danışdım və bu sorğuya cavab verdim:
Unfortunately, the provided text does not contain any information about your top three most popular GitHub repositories. The text appears to be a blog post or a personal website, and it mentions some of your projects and experiences with GitHub, but it does not provide any metrics or statistics on the popularity of your repositories.
If you want to know more about the popularity of your GitHub repositories, I would recommend checking out GitHub's own analytics tools, such as GitHub Insights or the Repository Insights API. These tools can provide information about the number of followers, stars, and forks for each repository, as well as other metrics like engagement and activity.
Modeli ancaq müsahibəyə görə yazdıqlarına baxmayaraq, alətləri ignor etdi.
Solutions xəritədə
Mən bir neçə dəfə LangChain4J dokumentasiyasını oxudum, lakin heç bir fayda olmadan. OpenAI və bir neçə digər AI alətlərini heç bir uğurla istifadə etməyə çalışdım. Çoğu cavab bu alətin işlədiyini təsdiq etmişdi. Bəziləri bu aləti doğrudan çağırıb, bu da məcburiyyətini məhv edir; biri Ollama'nın alətləri dəstəkləmədiyini qeyd etmişdi. Mən Ollama bloguna baxdım: 2024-cü ildə alətlərin dəstəkləndiyini bildirmişdi.
Xatırladaq ki, bir neçə ildir ki, bir neçə ildir ki, bu problemlər həll olunacaq.github-mcp-server
HTTP kodunu HTTP-dən stdio-ya dəyişdi.
Mən özümə qayıtmağı düşünürdüm, özüm də özümə qayıtmağı düşünürdüm.Dokumentacılığın nümunəsiBu da mənim “ha-ha” vaxtım idi.
Mən Ollama ilə çalışırdım.OpenAI, Mistral AI və Ollama ilə MCP-yə çalışdım.OpenAI modeli yalnız MCP-lə işləyir.
curl -N -H 'Content-Type: application/json' localhost:8080 -d '{ "sessionId": "1", "text": "What are my top three most popular GitHub repos?" }'
Artıq OpenAI istehlakı düzgün birləşdirir və istədiyim cavabı qaytarır:
Here are my findings regarding your top three most popular GitHub repositories:
1. **[opentelemetry-tracing](https://github.com/nfrankel/opentelemetry-tracing)**
- **Description**: Demo for end-to-end tracing via OpenTelemetry.
- **Stars**: 68
- **Forks**: 25
- **Open Issues**: 10
2. **[kaadin](https://github.com/nfrankel/kaadin)**
- **Description**: Kotlin DSL for Vaadin.
- **Stars**: 44
- **Forks**: 12
- **Open Issues**: 3
3. **[jvm-controller](https://github.com/nfrankel/jvm-controller)**
- **Description**: Example on how to write a Kubernetes controller in Java.
- **Stars**: 33
- **Forks**: 10
- **Open Issues**: 0
These repositories demonstrate a range of your interests and contributions in the areas of observability, Kotlin development, and Kubernetes.%
MCP serverinə autentikasiya tokenini göndərdiyimiz üçün, o, onu GitHub API-yə göndərir ki, bu, hansı istifadəçi çağırdığını bilsin.my reposÜstəlik, bu, bir çox istifadəçilərə qulaq asmaq üçün normal web proqramları üçün olağanüstü bir istifadə məsələsidir, lakin hər biri tek bir autentifikasiya tokenini istifadə edir.
Normal problemlər də var,TədbirlərGitHub-da ən popüler repositorylar, web aplikasiyaları ilə bağlıdır, çünki onların implicit kontekstləri yoxdur – istifadəçi.
Sonrakı
Bu postun əsas fokusı bir LangChain4J proqramına bir MCP serverin entegrasiyasıdır.
İlk olaraq, MCP serverin arkitekturaya necə daxil olacağını sizə qadirdir.mcp-proxy
“LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4J” “LangChain4
Mən MCP-dən real dünyada tanış oldum və bu, projekt fikirləri üçün çox sayda qapı açdı.
Bu yazının bütün kodları burada təqdim ediləcək.GitHub.
To go further:
- Model Kontext Protokolü ilə başlayın
- MCP serverləri və müştərilər
- LangChain4J - Model Kontekst Protokolu (MCP)
Orijinal olaraq “A Java Geek”də yayımlandı 27 aprel, 2025
“Java Geek”