```c++
from langchain_milvus import Milvus
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableParallel, RunnablePassthrough, RunnableLambda, Runnable
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
import os
llm = ChatOpenAI(
base_url=os.getenv("OPENAI_URL"),
model=os.getenv("QIANWEN_MODEL_NAME"),
api_key=os.getenv("OPENAI_API_KEY")
)
embeddings = OpenAIEmbeddings(
base_url = "https://ark.cn-beijing.volces.com/api/v3",
api_key = os.getenv("OPENAI_EMBEDDING_API_KEY"),
model = "doubao-embedding-large-text-240915"
)
collection = 'pdf_document'
try:
db = Milvus(
embedding_function = embeddings,
collection_name = collection,
text_field="content",
vector_field="embedding",
connection_args={
"host":"192.168.64.145",
"port":"19530",
"user":"root",
"password":"Milvus",
"db_name":"default"
}
)
except Exception as e:
print(f"连接milvus失败 {e}")
raise e
# 创建相似度检索器
retriever = db.as_retriever(
search_type="similarity",
search_kwargs={
"k": 3
}
)
# 构建提示词
prompt = ChatPromptTemplate.from_template(
"""
请根据上下文之间输出最终答案,不要包含任何推理过程,如果不知道答案,请输出不知道
上下文: {content}
问题: {question}
答案:
"""
)
# 构建请求链
setup_retriever = RunnableParallel({"content": retriever, "question" : RunnablePassthrough()})
chain = setup_retriever|prompt | llm | StrOutputParser()
async def get_answer(question):
async for chunk in chain.astream(question):
print(chunk,end = " ",flush= True)
if __name__ == '__main__':
response = chain.invoke("JAVA中为啥不推荐使用jdk自带的线程池")
print(response)
2025-06-15 20:40:50,262 [ERROR][_create_connection]: Failed to create new connection using: 127ff4dec7304acea7274ff113003ed1 (milvus_client.py:916)
Traceback (most recent call last):
File "D:\code\python-start-demo\ai\ollama_embedding.py", line 40, in <module>
raise e
File "D:\code\python-start-demo\ai\ollama_embedding.py", line 25, in <module>
db = Milvus(
^^^^^^^
File "D:\ProgramData\conda_envs\myenv\Lib\site-packages\langchain_milvus\vectorstores\milvus.py", line 374, in __init__
self._milvus_client = MilvusClient(
^^^^^^^^^^^^^
File "D:\ProgramData\conda_envs\myenv\Lib\site-packages\pymilvus\milvus_client\milvus_client.py", line 64, in __init__
self._using = self._create_connection(
^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ProgramData\conda_envs\myenv\Lib\site-packages\pymilvus\milvus_client\milvus_client.py", line 917, in _create_connection
raise ex from ex
File "D:\ProgramData\conda_envs\myenv\Lib\site-packages\pymilvus\milvus_client\milvus_client.py", line 914, in _create_connection
connections.connect(using, user, password, db_name, token, uri=uri, **kwargs)
File "D:\ProgramData\conda_envs\myenv\Lib\site-packages\pymilvus\orm\connections.py", line 465, in connect
connect_milvus(**kwargs, user=user, password=password, token=token, db_name=db_name)
File "D:\ProgramData\conda_envs\myenv\Lib\site-packages\pymilvus\orm\connections.py", line 415, in connect_milvus
gh._wait_for_channel_ready(timeout=timeout)
File "D:\ProgramData\conda_envs\myenv\Lib\site-packages\pymilvus\client\grpc_handler.py", line 159, in _wait_for_channel_ready
raise MilvusException(
pymilvus.exceptions.MilvusException: <MilvusException: (code=2, message=Fail connecting to server on localhost:19530, illegal connection params or server unavailable)>